[Résolu] Détruire un "objet de structure" ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Robrock55
Messages : 65
Inscription : lun. 01/févr./2010 17:04
Localisation : Meuse
Contact :

Re: [Résolu] Détruire un "objet de structure" ?

Message par Robrock55 »

Dobro a écrit :je pense qu'en procedurale, il y aura moins de lignes ..
Je suis pas persuadé de cela. Néanmoins, j'ai jamais réellement vu un code procédurale très bon.

Mais à mon sens et au tiens je pense (du moins j'espère), il n'y a pas que la longueur du code qui compte. Y'a aussi la structure du code, la clarté du code etc... Niveau performance je m'avancerais pas par contre. Je ne sais pas si un même code procédurale ou objet à une différence de perf.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: [Résolu] Détruire un "objet de structure" ?

Message par G-Rom »

je pense qu'en procedurale, il y aura moins de lignes ..
C'est faux :D , je code aussi régulièrement en c++ , et y a pas photo , la poo facilite pas mal les choses , rend un code beaucoup plus "humain"
après pb n'est pas fait pour la poo, c'est tout , on peut en faire , mais c'est crado :D

exemple en pseudo c++ :

une classe mère de dessin par exemple,
cette classe est générique , elle ne peut être utilisé directement à cause de sa méthode virtuelle de rendu, il faudra implémenté la fonction de dessin dans les classes filles, les classes filles auront accès aux membres public et protected.
class Dessin
{
public:

/*constructeur , on initialise ce que tu veut dedans*/
Dessin()
{
nom = "il sera redefini dans les classes filles";
}

float position_x;
float position_y;

virtual void rendu() = 0;

protected:
std::string nom;

};
Voici une classe fille :
class Triangle: public Dessin
{
public:

Triangle()
{
nom = "je suis un triangle";
}



void rendu()
{
std::cout << nom << std::endl;
}

};
Triangle hérite de toute sa classe mère , on à redéfini la fonction de rendu car la classe mère avait une méthode virtuelle
en voila deux autres :
class Rond: public Dessin
{
public:

Rond()
{
nom = "je suis un rond";
}



void rendu()
{
std::cout << nom << std::endl;
}

};

class Dobro: public Dessin
{
public:

Dobro()
{
nom = "je suis dobro !";
}



void rendu()
{
std::cout << nom << std::endl;
}

};

on à donc 3 objets différents un Rond , un Triangle , et un Dobro
chaque objet on leurs propres attribut ( ici le nom ) et chaque objet possède une méthode de rendu.

on va créer une liste qui va contenir nos objets , on va prendre un conteneur du type std::vector qui est une liste chainée :
std::vector<Dessin*> maListe;
on construit nos objets en appelant les constructeurs :
Rond * monRond = new Rond();
Triangle * monTriangle = new Triangle();
Dobro * monDobro = new Dobro();
une des forces de la poo , c'est que nos objets sont différents , mais il tiendrons tous dans le vector :
maListe.push_back(monRond);
maListe.push_back(monTriangle);
maListe.push_back(monDobro);
et on parcour la liste pour le rendu :
std::vector<Dessin*>::iterator it;

for(it = maListe.begin(); it < maListe.end(); ++it)
{
Dessin * element = *it;
element->rendu();
}
évidement c'est bateau comme exemple , met toi au c++ , et regarde comment est fait par exemple la sfml 2.0 , reagarde pour un sprite sfml 2.0 :
Image

sf::Drawable est une classe qui gère tout ce qui s'affiche , un sprite , un texte , une forme ( sf::Shape sous sfml ) , sf::Sprite hérite aussi de sf::Transformable
qui gère lui tout ce qui concerne les transformations , pour le gars qui utilise le sprite , il n'a pas à ce soucié de comment est affiché le sprite , comment la transformation est faite, etc... il en fait abstraction ! il n'utilise que le sprite , point barre.

sinon voila le code source de mon exemple du haut :

Code : Tout sélectionner

#include <iostream> // pour cout
#include <vector>   // pour la LL

class Dessin
{
	public:
		
		/*constructeur , on initialise ce que tu veut dedans*/
		Dessin()
		{
			nom = "il sera redefini dans les classes filles";
		}
		
		float position_x;
		float position_y;
	
		virtual void rendu() = 0;
		
	protected:
		std::string	nom;
		
};


class Triangle: public Dessin
{
	public:
	
		Triangle()
		{
			nom = "je suis un triangle";
		}

	
	
		void rendu()
		{
			std::cout << nom << std::endl;
		}

};

class Rond: public Dessin
{
	public:
	
		Rond()
		{
			nom = "je suis un rond";
		}

	
	
		void rendu()
		{
			std::cout << nom << std::endl;
		}

};

class Dobro: public Dessin
{
	public:
	
		Dobro()
		{
			nom = "je suis dobro !";
		}

	
	
		void rendu()
		{
			std::cout << nom << std::endl;
		}

};

int main()
{


	std::vector<Dessin*> maListe;


	Rond 	 * monRond 		= new Rond();
	Triangle * monTriangle  = new Triangle();
	Dobro    * monDobro     = new Dobro();

	maListe.push_back(monRond);
	maListe.push_back(monTriangle);
	maListe.push_back(monDobro);

	std::vector<Dessin*>::iterator it;
	
	for(it = maListe.begin(); it < maListe.end(); ++it)
	{
		Dessin * element = *it;
		element->rendu();
	}



}
pour compilé :
g++ main.cpp -o main.exe
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: [Résolu] Détruire un "objet de structure" ?

Message par Backup »

bah , en PB tu utilise une structure par "objet" , ou une structure pour plusieurs "objets"

tu met chaque "objet" dans une proceduredll , que tu stock en librairie

et tu fait pareil . :)
tu appel juste ta fonction...
enfin je ne pense pas que ce soit inaccessible au procedurale

tu prends une structure personnage

Code : Tout sélectionner

structure personnage
taille.l ; taille du personnage
vie.b ; vie du perso
x.l ; position x du perso
y.l ; position y du perso
nom.s
; etc...
endstructure
que tu peux utiliser pour d'autre "pseudo objets" ... ( ici perso et Triangle )

Code : Tout sélectionner

structure personnage
taille.l ; taille du personnage
vie.b ; vie du perso
	x.l ; position x du perso
y.l ; position y du perso
nom.s
; etc...
endstructure
dim perso.personnage(1)
dim triangle.personnage(1) ; utilise la meme structure que perso

perso(1)\taille=120 ; attribution pour test
perso(1)\nom.s="je suis un perso"
triangle(1)\x=100
triangle(1)\y=250
triangle(1)\nom.s="je suis un triangle"

debug perso(1)\taille ; on a 2 "objets " qui utilisent la meme structure !  (dans ce cas, je dirai que la structure est un objet en quelques sortes)
debug perso(1)\nom
debug triangle(1)\x
debug triangle(1)\y
debug triangle(1)\nom


ici on peut meme dire que l'objet triangle "hérite" des caracteristiques de perso , puisqu'il partage la meme structure ! ;)

le tout pourrai tres bien etre inclus dans une procedureDLL , qui elle même intégré a une librairie...

franchement, ça ne me montre pas en quoi la POO est mieux que le procedurale (Vieux Débat d'ailleurs ) :)

mais comme je le répète, je n'entends rien en POO (et suis hermétique ! :lol: )
j'ai déja eu du mal a me mettre au structure, faut pas pousser non plus :lol: ... a mon age
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: [Résolu] Détruire un "objet de structure" ?

Message par G-Rom »

franchement, ça ne me montre pas en quoi la POO est mieux que le procedurale
je n'ai pas dit que c'était mieux, connaissant bien les deux , je te confirme que le poo est plus "pratique"
que le procédural , y a pas photo , chaque classe est spécialisé dans une tache bien précise , la souplesse est plus grande , regarde :

j'ai créer une liste de pointeur de Dessin
std::vector<Dessin*> maListe;
en pb cela donnerais :
newlist *maListe.Dessin()
ensuite j'ai passer un Rond* un Triangle* & un Dobro* à cette liste :
maListe.push_back(monRond);
maListe.push_back(monTriangle);
maListe.push_back(monDobro);
c'est trois type différent , mais il vont dans la même liste ! impossible en pb sans jouer d'astuces, les types ne se "mélange pas"
la poo n'a qu'un avantage dans de grosse application , la procédurale quand à elle est plus pratique pour de petits programme.
la poo est plus chiante à écrire , mais elle permet d'avoir un code réutilisable quand l'objet est bien réalisé.
tu met chaque "objet" dans une proceduredll , que tu stock en librairie
Brouillon quoi :mrgreen:
enfin je ne pense pas que ce soit inaccessible au procedurale
bien sur que non , un code poo avant d'être compilé est aplati au même titre que la procédural , llvm transforme la poo en procedural avant de compilé
c'est une autre facon de faire , c'est vrai que si pb supportait la poo en natif , ce serait le top.
car , y a pas photo , la poo est plus propre.
de toute facon , y a qu'a regardé la plupart des codes ici pour voir que la plupart ne connaissent rien à la poo , toute les tâches se mélange , pour un jeu , certain mélange l'affichage du jeu avec le code du gameplay , etc...
en poo , tout serais rangé proprement. ;)
la poo , c'est proope :D
j'ai déja eu du mal a me mettre au structure
Alors laisse tombé la poo :mrgreen:
y a le jardinage , je crois que jb est parti planté quelques patates ,
il est peu être temps de le rejoindre ? :mrgreen:

en tout cas , faire de la poo en pb est une perte de temps , le code deviens illisible, si tu veut faire de la poo
change de langage. ;)

==>[]
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: [Résolu] Détruire un "objet de structure" ?

Message par Backup »

bah , merci pour ces infos :)

du reste le jardin, je pratique deja, mais là c'est trop tot pour moi
ça descends a -15 en ce moment, et sous la neige ...
je sais meme pas si mes poireaux et mes choux ont supportés le froids...
(en principe si, ...mais) :)

je mange encore mes patates de septembre dernier , (ce soir ça a été purée en croquette+steak hachés :lol: )
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: [Résolu] Détruire un "objet de structure" ?

Message par Fig »

Dobro a écrit : mais comme je le répète, je n'entends rien en POO (et suis hermétique ! :lol: )
j'ai déja eu du mal a me mettre au structure, faut pas pousser non plus :lol: ... a mon age
Oui, tout pareil...
Et en plus j'ai aussi des patates dans le jardin. Je pense qu'il va falloir prendre au sérieux cette histoire de patate ! 8O :?

La Poo me parait très complexe parce que je n'arrive pas à me la représenter avec autant de clarté que le procédural. Du reste je n'arrive pas à imaginer un programme où j'aurai besoin d'autre chose que de procédural, donc pas d'interêt à la chose en ce qui me concerne, pour le moment du moins.
Je ne dénigre pas car avant de comprendre l’intérêt des structures, je ne le voyais pas non plus... (Il m'arrive encore de les haïr quand je vois les lignes horribles auquelles j'arrive parfois à cause des : sprite()\perso()\*element()... Me demande si un retour à la gestion manuelle de simples zones de mémoire interconnectés ne serait pas mieux Asm rulezz...)
Adresse+24 => point de vie
adresse+36=> adresse de la zone mémoire pour la gestion des sprites
... (maso quoi)
Je suis un peu réac.

Bon, Je vais voir si mes patates sont encore bonnes... :oops:
Dernière modification par Fig le dim. 12/févr./2012 9:37, modifié 1 fois.
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: [Résolu] Détruire un "objet de structure" ?

Message par comtois »

un exemple de jeu dans le style POO , écrit avec PureBasic.
http://purebasic.developpez.com/sources ... go#morpion
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
kwandjeen
Messages : 204
Inscription : dim. 16/juil./2006 21:44

Re: [Résolu] Détruire un "objet de structure" ?

Message par kwandjeen »

Moi je vois pas trop de différence entre -> et le \ donc je dirai que c'est plus ou moins similaire.

Après on aime ou on aime pas. J'ai codé des trucs en POO parce que tu as toujours un collègue pour te dire que c'est naze si tu fais pas POO tu programmes pas, et puis au final, j'ai plus l'impression que c'est un effet de mode (non pas la tête :mrgreen: ).

Si tu es ordonné je vois pas de différence majeure entre le procédural et la POO.

Je voulais retirer mes poireaux mais le sol est trop gelé :wink:
Robrock55
Messages : 65
Inscription : lun. 01/févr./2010 17:04
Localisation : Meuse
Contact :

Re: [Résolu] Détruire un "objet de structure" ?

Message par Robrock55 »

Dobro a écrit :je n'entends rien en POO (et suis hermétique ! :lol: )

Ah bon ? :mrgreen:

Plus sérieusement, j'entends bien que certains ne comprennent pas ou ne veulent pas comprendre la POO par habitude. Mon père codait un peu en BASIC (l'authentique, le vrai !) et il a fait des choses assez correct (sur dos à l'époque). Il avait fait un jeu pour moi et ma soeur pour apprendre les couleurs. J'ai vu son code après des années, et c'est un peu le bordel. Surtout que la grosse contrainte de l'époque, c'est que tu numérotais toi-même les lignes de codes, fallait prévoir à l'avance 20 ou 5 lignes de rab au cas où ! Et si jamais tu te plantais dans ton estimation ou que tu oubliais simplement, et bien hop ! Goto !! Et dans son code, y'a du goto en masse 8O

Mais je m'égare. Je disais que j'ai essayé de parler un peu de POO avec mon père et c'était incroyable incompréhension qu'il y avait entre nous. Cet éternel débat restera probablement sans réponse. A moins de comparer quelques programmes différents sur les 2 méthodes et comparer.
lepiaf31
Messages : 510
Inscription : dim. 25/mars/2007 13:44
Localisation : Toulouse, France
Contact :

Re: [Résolu] Détruire un "objet de structure" ?

Message par lepiaf31 »

Bon je n'ai pas tout suivi mais je me permets quand même de donner mon avis (et ouep :P )

Personnellement, je suis en 3eme année d'étude en informatique et j'ai par conséquent eu l'occasion de programmer avec les principaux paradigmes de programmation (programmation impérative (C), programmation fonctionnelle (Caml), programmation logique (prolog), programmation objet (JAVA), assembleur (ARM), ...). Bref, et selon moi, la différence fondamentale entre la programmation objet et impérative c'est la gestion de la mémoire. En théorie, dans les langages orientés objet on ne s'occupe pas de gérer la mémoire (pas de pointeur, pas d'allocation "à la main" et compagnie). Et c'est pour cela qu'ils sont très appréciés, ils permettent d'éviter les erreurs de type "segmentation fold" (en C) ou "Invalid Memory Acces" (en PureBasic) ainsi que les fuites de mémoire.
En ce qui concerne PureBasic, pour programmer avec le "style" objet, on est quand même obligé de passer par des pointeurs, donc je ne vois pas l’intérêt ... si on veut programmer en objet alors autant utiliser un langage qui a été fait pour ça. D'autant plus que l'interet de l'objet c'est surtout les concepts qu'il y a derrière: héritage, redéfinition, polymorphisme, surcharge, ... et que tous ces concepts sont absents en PureBasic.

Bref l'objet c'est bien, mais si vous voulez vraiment en faire, PureBasic n'est pas une bonne solution (selon moi).


PS:
Alors bien sûr, je dis qu'il n'y a pas de pointeurs en objet et on va me dire : " Mais en C++, patati patata .." . Je dirais que c'est parce que c'est un langage étendu du C et je ne m’étendrai pas.
Robrock55
Messages : 65
Inscription : lun. 01/févr./2010 17:04
Localisation : Meuse
Contact :

Re: [Résolu] Détruire un "objet de structure" ?

Message par Robrock55 »

lepiaf31 a écrit :En ce qui concerne PureBasic, pour programmer avec le "style" objet, on est quand même obligé de passer par des pointeurs, donc je ne vois pas l’intérêt
Moi je vais te le dire :)

Purebasic est un langage qui présente un nombre de qualités assez incroyable, le rendant plus intéressant que le JAVA et le C++. Pour ma part, je ne fais pas de C++ car je trouve plus que barbant de devoir faire des includes de bibliothèques alors qu'en PB, tu as déjà tout ! Quant au Java, je me suis pas réellement penché sur la question, mais y'a quand même un mythe qui dit que le Java, c'est lent x)

J'ai appris avec PureBasic, pourquoi ne pas continuer avec après tout ?
lepiaf31
Messages : 510
Inscription : dim. 25/mars/2007 13:44
Localisation : Toulouse, France
Contact :

Re: [Résolu] Détruire un "objet de structure" ?

Message par lepiaf31 »

Robrock55 a écrit : Purebasic est un langage qui présente un nombre de qualités assez incroyable, le rendant plus intéressant que le JAVA et le C++.
Non je ne crois pas que PB soit plus intéressant que JAVA ou C++ ^^
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: [Résolu] Détruire un "objet de structure" ?

Message par G-Rom »

Pour ma part, je ne fais pas de C++ car je trouve plus que barbant de devoir faire des includes de bibliothèques alors qu'en PB, tu as déjà tout !
en c++ aussi...
#include <SFML/Graphics.hpp>
hop , ta la sfml de dispo dans ton programme !
#include <GL/gl.h>
hop , tu fait de l'opengl

en pb :
Import "-lgl"
Prototype GlBegin(const.i)
...
...
...
EndImport

global GlBegin.GlBegin = getFunction(...
...
...
ouf , ta enfin accès a opengl , place à la chasse à la segfault maintenant :D

Faut pas dire de conneries non plus :D
PB est très bien , sinon je ne serais pas là, et je ne participerais pas à son développement , mais il ne faut pas tout mélanger. ;)
Robrock55
Messages : 65
Inscription : lun. 01/févr./2010 17:04
Localisation : Meuse
Contact :

Re: [Résolu] Détruire un "objet de structure" ?

Message par Robrock55 »

En C++ tu as tout ? Alors pourquoi

Code : Tout sélectionner

#include <iostream>
#include <string>
#include <vector>
C'est quasi rien mais à longue c'est barbant, qu'en PB tu n'as pas ce problème là. Pour des libs externes je dis pas.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: [Résolu] Détruire un "objet de structure" ?

Message par G-Rom »

#include <iostream>
#include <string>
#include <vector>
tu inclus se dont tu as besoin , le c++ ne sais rien faire à la base , juste de la compilation basique avec des opérations basique et des mots clé basique aussi, il ne sais même pas écrire dans un fichier ! PB est un langage clé en main , c'est avant tout un basic... , et si trois lignes c'est barbant , faut changé de hoobies ;)
Répondre