C orienté objet

freemaul Message lu Posté le 05 Fév 2009 à 14:07 Bulle
Avatar de freemaul
Explorateur

Messages : 174
GCPoints : 50213
Bonjour, j'aurais aimer avoir votre avis sur l'utilité de coder en C orienté objet.
Je dit bien C orienté objet, et non C++, car j'ai, il y a peu, commencé à écrire une bibliothèque en C permettant de géré le protocole HTTP.
Et ayant lu quelque explication sur comment coder en orienté objet en C j'ai écrit mon source de cette manière car je me suis dit que c'était plus compréhensible pour la personne qui devra utiliser cette biblio.
Ors au fur et à mesure je me suis rendu compte de deux chose essentiel :
1- c'est beaucoup plus chiant a coder le source de cette manière, il faut suivre des règles certes simple, mais c'est quand meme une perte de temps. Alors je me dit, je perd du temps pour en faire gagner au futur utilisateur de cette biblio et la :
2- pour des objet en contenant d'autre cela devient vite une usine à gaz , exemple :
Code :
client->httprecever->content_length->print(client->httprecever->content_length);

juste pour écrire à l'écran le contenu de "content-length" recu en HTTP.

Certain me diront : tu n'avais cas coder en C++, c'est fait pour et cela aurait été plus simple à utiliser :
Code :
client->httprecever->content_length->print();


Oui mais je veut que ma biblio soit en C pour être utilisable en C, donc la vrai question ai :
si je code en C, est-ce utile de coder en orienté objet ?

merci, parce que moi je ne sais pas vraiment quoi choisir.
"La vie n'a pas de prix, mais elle coûte chère"
Mod Message lu Posté le 05 Fév 2009 à 14:29 Bulle
Avatar de Mod
Webmaster

Messages : 4954
GCPoints : 2100823
Si tu compte programmer en C, alors oublie l'orienté objet. Le langage n'est pas du tout prévu pour cela, c'est une vraie plaie en pratique. Cette façon de faire à coup de pointeurs de fonction est plus une excuse pour le C qu'autre chose. Lorsque le C++ a été développé, c'était à la base un "C with classes". Tout simplement pour dire que ça n'a pas été fait juste pour le plaisir, mais bien parce que le C n'était pas adapté.

Un programmeur C saura de toute manière aisément se débrouiller avec des fonctions.
SEB Message lu Posté le 05 Fév 2009 à 14:35 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313
Personnellement je ne pense pas que tu sois obligé de coder en objet. L'objet pour moi est simplement une facon de concevoir la structure d'un programme.

Donc à mon avis tant que tu conserve une syntaxe utilisateur simple et claire tu peux coder comme bon te semble.
Par exemple pour ce qui est du :

Code :
client->httprecever->content_length->print(client->httprecever->content_length);


Je pense que je proposerais plutot quelquechose du genre :

Code :
content_print(client->httprecever->content_length);


ou ce genre d'approche impérative. meme si derrière la structure hierarchique est arborescente et donc en quelque sorte objet.

edit : grillé par Mod :p
Dernière édition le 05 Fév 2009 à 14:36
NextGine : 3D games engine
Nombre de lignes actuel : 77683
akd Message lu Posté le 06 Fév 2009 à 11:31 Bulle
Avatar de akd
Membre Confirmé

Messages : 319
GCPoints : 75439
Je me rapelais bien avoir entendu un truc sur le C orienté objet y a longtemps

ll s'agit de l'objective C : http://fr.wikipedia.org/wiki/Objective_C

(Faut voir si ca reste compatible avec du C pur mais je crois que oui).

Après c'est une question de gout, je pense qu'on doit pouvoir se rapprocher structurellement d'un code orienté objet tout en conservant l'aspect non objet de C et sans se prendre la tête.

Suffit de conserver un découpage de fichiers proches de ce que tu ferais en orienté objet...

(chais pas trop si mon message aide des masses...)
Dernière édition le 06 Fév 2009 à 11:39
Mod Message lu Posté le 06 Fév 2009 à 12:40 Bulle
Avatar de Mod
Webmaster

Messages : 4954
GCPoints : 2100823
Alors, pour savoir programmer en Objective-C... Rien à voir avec du C. Absolument pas. Ca reste le langage le plus laid et peu pratique que j'ai eu l'occasion d'utiliser jusqu'à présent (en numéro deux vient le script BASH...).

Par exemple, pour instancier un objet :

[listArray addObjectFromArray:[NSArray arrayWithObjects:@"music1",@"music2,@"music3,@"music4",nil]]

Objet listArray. Méthode addObjectFromArray. Paramètre NSArray. Méthode arrayWithObjects en tant que constructeur, suivi de chaîne de caractères comme items).

(Utilisation Cocoa). Pas forcément un bon exemple de code, mais un bon exemple de difficulté de lecture avec des @ des [] des : des +, des - dans tous les sens.
freemaul Message lu Posté le 06 Fév 2009 à 17:39 Bulle
Avatar de freemaul
Explorateur

Messages : 174
GCPoints : 50213
Objective-C --> jamais entendu parler lol


Citation :


Je pense que je proposerais plutot quelquechose du genre :
Code :

content_print(client->httprecever->content_length);


Oui c'est ce que je vais faire finalement.


Citation :

Si tu compte programmer en C, alors oublie l'orienté objet


au moin c'est clair ^^

Donc je pense que proposer une vision pseudo-objet par le biais d'une structure sur laquelle on applique des fonctions, est plutot une bonne idée. Par contre, effectivement, utiliser des pointeurs de fonction ne fait qu'alourdir le code.
"La vie n'a pas de prix, mais elle coûte chère"
le_teigneux Message lu Posté le 24 Avr 2009 à 19:01 Bulle
Membre Novice

Messages : 26
GCPoints : 4507

Citation :

[Oui mais je veut que ma biblio soit en C pour être utilisable en C, donc la vrai question ai :
si je code en C, est-ce utile de coder en orienté objet ?


Alors il y a des tas de personnes qui font des débats inutiles C contre C++, POO ou non .
Je te répondrais que cela dépend de la pertinence de ce que tu as à faire.
Si tu veux faire de la programmation réseau faire cela en objets cela risque d'alourdir le code pour pas grand chose parce que la programmation réseau c'est plutot système.
Je ne vois pas l'intérêt de faire des entités d'objets pour ouvrir des sockets et les refermer....
en C tu peux simplement utiliser des structures et des pointeurs de fonctions.


Citation :


juste pour écrire à l'écran le contenu de "content-length" recu en HTTP.
Certain me diront : tu n'avais cas coder en C++, c'est fait pour et cela aurait été plus simple à utiliser :
Code :


Je n'en vois vraiment aucun intérêt ; tout le monde veut mettre de l'objet à toutes les sauces alors que ce n'est pas toujours pertinent....
je te conseillerais de consulter des livres de POO généraux.
Fais de la POO quand c'est vraiment utile et pertinent pour faire du code structuré et modulaire.
Si tu veux des entités et blocs de code réutilisables alors fais de l'objet.
Dernière édition le 24 Avr 2009 à 19:03
akd Message lu Posté le 26 Avr 2009 à 16:54 Bulle
Avatar de akd
Membre Confirmé

Messages : 319
GCPoints : 75439
En règle général à moins de faire un projet de 300 lignes de code, la POO est de plus en plus justifiée et apporte quand même des bonus indéniables de nos jours.

Je veux même pas savoir à quel point mon projet serait difficile à débugger si je le faisais en programmation linéaire :pathetic:
freemaul Message lu Posté le 26 Avr 2009 à 18:35 Bulle
Avatar de freemaul
Explorateur

Messages : 174
GCPoints : 50213

Citation :

Si tu veux faire de la programmation réseau faire cela en objets cela risque d'alourdir le code pour pas grand chose parce que la programmation réseau c'est plutot système.
Je ne vois pas l'intérêt de faire des entités d'objets pour ouvrir des sockets et les refermer....



Faire une entité Client et une Serveur par exemple...

Ensuite la question abordée ici (il y a un petit moment) n'était pas C ou C++, ni même Objet ou pas Objet , mais sur la pertinence du C orienté objet, et la réponse à été la suivante :
Le C orienté objet ca ne sert à rien, autant faire du C++ ca a été (entre autre) créer pour cela !
"La vie n'a pas de prix, mais elle coûte chère"
Lolilolight Message lu Posté le 19 Mai 2009 à 18:29 Bulle
Avatar de Lolilolight
Membre Avancé

Messages : 301
GCPoints : 45457
Oui je suis aussi d'accord, bien qu'il y aie moyen de simuler de l'orienté objet en C cela reste limité car le lanage n'est pas du tout adapté pour cela, j'ai déjà essayer en faisant tout simplement des fichiers avec toutes sorte de structures et liste, mais il y a des concept comme l'héritage qui ne sont pas adaptable en C ou alors il faut être super calé, autant utilisé le c++, faire de l'orienté objets en C c'est comme faire de la confiture avec un moule.
Même si on est peu entouré, et de ce qu'en pense les autres, soyons fier de ce que nous créons!
Je n'existe que avec ce que je créé.
Répondre
GameCorp - Site d'apprentissage et d'entraide à la création de jeux vidéo.
XHTML Valid 1.1 - Page générée en 0.0473 secondes