IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

C objet: pratique courante?


Sujet :

C

  1. #1
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut C objet: pratique courante?
    Bonjour à tous,

    Je viens de lire deux tutos très intéressants sur l'utilisation d'une approche orientée objet dans la programmation en langage C:

    http://chgi.developpez.com/c/objet/
    http://c.ftp-developpez.com/downloads/c/cobjet.pdf

    Je me pose la question suivante: Est-ce une pratique courante à l'heure actuelle de programmer en C avec une conception orienté objet ou cela reste-t'il une pratique relativement marginale? Je trouve que c'est une très bonne manière d'organiser son code. Dans ce contexte, quel est l'avantage de coder en C plutôt qu'en C++? Votre avis et votre expérience à ce sujet m'intéresse.

    Meilleures salutations

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  2. #2
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Ca depend de ce que tu entends par "objet". Les types de donnees abstraits sont assez utilises en C - mais ce n'est pas de la programmation orientee objet a proprement parler.
    Il y a quelques implementations de programmation orientee objet en C (cf. par exemple le site de Laurent Deniau), mais il me semble preferable d'utiliser le C++ qui a ete concu pour supporter ce paradigme (en plus de la programmation orientee fonction).

  3. #3
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Par programmation orientée objet en C, je pense à l'utilisation massive de structures et de pointeurs sur fonction afin de simuler un module réutilisable qui ressemble beaucoup à une classe du C++. C'est finalement pas trop compliqué à réaliser en C et très pratique pour encapsuler des types abstraits de données. En ce qui concerne l'héritage, c'est vrai que cela devient compliqué, et le polymorphisme...(!?!).

    Les articles mentionnés ci-dessus m'ont démontrer une manière intéressante d'organiser mon code avec le C "objet": je ne sais pas si cette approche (très gourmande en structures et en pointeurs) est utilisée pour des projets de grande envergure. Des grosses applications libres telles que X windows, ou GTK, semblent en faire un usage généralisé.

    Merci pour votre réponse. Salutations

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: C objet: pratique courante?
    Citation Envoyé par mujigka
    Est-ce une pratique courante à l'heure actuelle de programmer en C avec une conception orienté objet
    Chez moi, oui...

    http://emmanuel-delahaye.developpez.com/tad.htm
    http://emmanuel-delahaye.developpez.com/complog.htm
    http://emmanuel-delahaye.developpez.com/clib.htm

    Mais c'est limité aux concepts très basiques de la POO (encapsulation des données, évènements...)
    Je trouve que c'est une très bonne manière d'organiser son code.
    En effet.
    Dans ce contexte, quel est l'avantage de coder en C plutôt qu'en C++?
    C'est quoi C++ ?
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Merci pour vos réponses, Emmanuel!

    J'ai déjà eu l'occasion d'aller sur votre site et j'y ai appris beaucoup de chose. Je profite de cette occasion pour vous remercier d'avoir mis à disposition votre travail sur le web.

    Citation:

    Dans ce contexte, quel est l'avantage de coder en C plutôt qu'en C++?
    C'est quoi C++ ?
    C'est pas un peu une réplique de puriste?
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  6. #6
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Chez moi, oui...

    http://emmanuel-delahaye.developpez.com/tad.htm
    http://emmanuel-delahaye.developpez.com/complog.htm
    http://emmanuel-delahaye.developpez.com/clib.htm

    Mais c'est limité aux concepts très basiques de la POO (encapsulation des données, évènements...)
    Oui c'est d'ailleur une conception à recommander à pas mal de personnes, mais je ne sais pas si on peut appeler cela de la programmation orienté objet, pas de concept de polymorphisme, d'héritage, méthodes virtuelles, ...


    C'est pas un peu une réplique de puriste?
    Il fallait t'y attendre, tu es dans le forum C

  7. #7
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut Re: C objet: pratique courante?
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par mujigka
    Dans ce contexte, quel est l'avantage de coder en C plutôt qu'en C++?
    C'est quoi C++ ?
    Humm fait gaf', ils vont te qualifier de quelqu'un de sectaire comme ca deja ete le cas pour moua

    Nan ... plus sérieusement, un seul point que je n'applique dans la POO en C, c'est bien les pointeur sur fonctions dans les structure, ca ne sert a rien de la faire car tu doit tout de même passer en paramètre l'adresse de la structure donc voilà, ayant deja pratiqué cette méthode une fois, je peut te dire que s'en deviens vite lourd quand tu as je n'sais combien de fonctions
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: C objet: pratique courante?
    Citation Envoyé par CSoldier
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par mujigka
    Dans ce contexte, quel est l'avantage de coder en C plutôt qu'en C++?
    C'est quoi C++ ?
    Humm fait gaf', ils vont te qualifier de quelqu'un de sectaire comme ca deja ete le cas pour moua
    M'en fous !
    Nan ... plus sérieusement, un seul point que je n'applique dans la POO en C, c'est bien les pointeur sur fonctions dans les structure, ca ne sert a rien de la faire car tu doit tout de même passer en paramètre l'adresse de la structure donc voilà, ayant deja pratiqué cette méthode une fois, je peut te dire que s'en deviens vite lourd quand tu as je n'sais combien de fonctions
    Je suis d'accord, et je ne le fais pas non plus pour les fonctions d'entrée (malgré une tentaique qui m'a valu la même conclusion).

    Par contre, pour les sorties (évènements), c'est extrèmement pratique. Et ce n'est pas un spécialiste de GTK+ qui dira le contraire !
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par PRomu@ld
    Oui c'est d'ailleur une conception à recommander à pas mal de personnes, mais je ne sais pas si on peut appeler cela de la programmation orienté objet, pas de concept de polymorphisme, d'héritage, méthodes virtuelles, ...
    Certains appellent cela la programmation par objets pour faire la distinction. Ca vaut ce que ca vaut. Abstract Data Type est bien aussi, ça a le mérite d'être précis.

  10. #10
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Oui c'est d'ailleurs une conception à recommander à pas mal de personnes, mais je ne sais pas si on peut appeler cela de la programmation orienté objet, pas de concept de polymorphisme, d'héritage, méthodes virtuelles, ...
    Il semble que la structuration du code sous une forme objet en C (ou en type abstrait de données: c'est vrai que c'est peut-être abusif de parler de POO. Simuler le concept d'héritage en C est déjà bien assez complexe pour un débutant comme moi, et je ne vois pas comment utiliser le polymorphisme) est une pratique (très?) fréquente chez les programmeurs ayant répondu à ce post. En tous les cas, une bibliothèque comme GTK+ utilise abondemment ces concepts.

    Nan ... plus sérieusement, un seul point que je n'applique dans la POO en C, c'est bien les pointeur sur fonctions dans les structure, ca ne sert a rien de la faire car tu doit tout de même passer en paramètre l'adresse de la structure
    C'est vrai que l'usage massif des pointeurs de fonctions rend vite le code difficile à lire. Cela n'apporte pas grand chose sinon d'encapsuler données et méthodes dans une même structure. Moi, je trouve cela assez pratique au fond.

    Utilisez-vous cette manière de structurer votre code de manière systématique dans tous vos projets? Ce type d'approche "objet" est-il utilisé comme standard de programmation dans vos projets de développement en équipe? Merci encore pour vos témoignages.

    Meilleures salutations

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par mujigka
    Utilisez-vous cette manière de structurer votre code de manière systématique dans tous vos projets?
    En ce qui me concerne, oui, dès qu'un mécanisme comprend des entrées (appels de fonctions) des traitements (code interne) et des sorties (callbacks), ce qui est quand même très fréquent. J'ai même écrit un générateur de code (new.exe ou ./new, c'est portable) qui génère les fichiers nécessaires à l'implémentation d'un tel mécanisme avec un squelette de code. Pour info, quand je tape
    'new main', ça produit ceci :

    http://emmanuel-delahaye.developpez.com/new/main.c

    et quand je tapes 'new abc', ça produit celà :

    http://emmanuel-delahaye.developpez.com/new/abc.c
    http://emmanuel-delahaye.developpez.com/new/tabc.c
    http://emmanuel-delahaye.developpez.com/new/abc.h
    http://emmanuel-delahaye.developpez.com/new/abc_err.itm

    Ce type d'approche "objet" est-il utilisé comme standard de programmation dans vos projets de développement en équipe?
    Certains sont un peu dépassés par cette approche, d'autres la comprennent et y adhèrent (même parfois sans le savoir, en utilisant du code tiers construit sur ce principe qui est quand même très répandu). Je n'ai pas le pouvoir d'imposer quoique ce soit. Je ne suis qu'un programmeur parmi d'autres...
    Pas de Wi-Fi à la maison : CPL

  12. #12
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    et quand je tapes 'new abc', ça produit celà :
    Tiens, je croyais que tu utilisais 'self' au lieu de 'this'?

  13. #13
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par DaZumba
    Citation Envoyé par Emmanuel Delahaye
    et quand je tapes 'new abc', ça produit celà :
    Tiens, je croyais que tu utilisais 'self' au lieu de 'this'?
    Oups, vieille version du générateur (2.5). J'ai remis le code généré par la dernière version (2.8 )
    Pas de Wi-Fi à la maison : CPL

  14. #14
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    on peut appeler cela de la programmation orienté objet, pas de concept de polymorphisme, d'héritage, méthodes virtuelles, ...
    Selon le tutoriel publié par CGi sur developpez.com, il est également possible de programmer avec le concept d'héritage et de polymorphisme (bien que je n'ai pas encore vu d'exemple concret d'application du concept de polymorphisme en C). Merci DaZumba pour la référence du site de Laurent Deniau. Je ne connaissais pas, et il est plein d'infos très intéressantes.

    Merci à tous pour vos réponses. Pour conclure ce post, j'ai l'impression que l'approche objet en C est loin d'être un pratique marginale. C'est probablement une pratique d'initiés, car elle met en jeu des concepts avancés du langage et demande naturellement une bonne compréhension du modèle objet. C'est ensuite un guide formidable pour organiser son code de manière cohérente et réutilisable.

    Meilleures salutations

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 14/06/2006, 09h50
  2. Objet Courant This et appel à un opérateur
    Par TheOyoStyledMan dans le forum C++
    Réponses: 2
    Dernier message: 13/06/2006, 16h35
  3. méthode sur l'objet courant?
    Par mathher dans le forum C++
    Réponses: 3
    Dernier message: 31/03/2006, 17h27
  4. Méthodes privées: pratique courant en Python
    Par Thierry Chappuis dans le forum Général Python
    Réponses: 3
    Dernier message: 25/11/2005, 19h30
  5. Réponses: 5
    Dernier message: 24/04/2005, 04h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo