POO en C !!?????
Répondre à la discussion
Affichage des résultats 1 à 19 sur 19

POO en C !!?????



  1. #1
    Lumiere11

    POO en C !!?????


    ------

    Bonjour a tous ,

    j'ai un question concernant la programmation orientée objet, bien son interet semble indsipensable, mais je voudrais savoir la difference entre les structures en C et par exemple la Poo en Java ,
    en Java , on ecrit

    private class PDE{
    int x;
    float vecteur[N][N];
    ................
    }; puis on utilise cette classe dans le main programme

    mais aussi en Langage C , on peut mettre

    struct vect{
    int x; int y ; int z} a ;
    et on utilise cette sturcture
    a.x
    a.y
    a.z

    quelle la difference alors entre ces deux méthodes ?
    merci

    -----

  2. #2
    Jack
    Modérateur

    Re : POO en C !!?????

    Aucune sur le fond, mais où est le rapport avec la POO? On ne peut pas essayer de comparer 2 langages ou 2 modèles de programmation en comparant une simple structure de données.

    Par exemple on peut faire int a; et C et en C++. Et pourtant on peut faire de la programmation objet en C++ et pas en C.

    A+

  3. #3
    invite4492c379

    Re : POO en C !!?????

    Le sujet est long à développer. Je vais essayer d'être succint. S itu me trouves trop verbeux passe au dernier paragraphe ...

    C est un langage fonctionnel avec lequel on peut faire de la programmation structurée. Il y a les données d'un côté et les fonctions de l'autre. On peut rapidement développer un programme en C. Suivant son habileté on fera un code portable, aisé à lire, clairement structuré ... ou pas. Donc, pour que le cycle de vie des applications développées soit le moins chaotique possible (débuggage aisé, maintenance curative et évolutive aisée, etc) certaines bonnes pratiques ont été développées. On retrouve par exemple des consils simples comme documenter le code, la manière de le présenter, mais aussi la manière de structurer un programme. Il s'est avéré qu'une bonne pratique est de créer une structure de donnée et de l'accompagner de tout un florilège de fonctions adaptées. Malheureusement comme en C tout passe par des pointeurs (en presque ) on peut être amené à pouvoir utiliser n'importe quelle structure avec n'importe quelle fonction. De plus, et c'est limitant, une fois une structure crée on ne peut l'étendre facilement à ses besoins.
    C'est pour cela qu'à la fin du XXe siècle est apparu le paradigme objet. Au début c'était surtout des «ce serait mieux si on pouvait» suivi de par exemple «ne pas pouvoir utiliser n'importe quelle pointeur n'importe où juste en faisant un cast», ou «pas avoir besoin de réinventer la roue en encapsulant ces données».
    Ces remarques ont donnée naissance à certaines extensions :
    - rajouter des déclaration de fonctions dans les déclarations de struct afin de ne pouvoir utiliser que ces fonction avec cette struc, ce qui donne la notion de classe, devoir initialiser les struct (le constructeur), etc ...
    - étendre les struct en rajoutant des champs ou des fonctionalités (=méthodes), ce qui donne la notion d'héritage ...

    On a donc étendu les langages connus et éprouvés comme C pour donner C++, ou Pascal et même COBOL ...
    Tu as le choix, rester fonctionnel ou aller vers l'approche objet ou même mélanger les deux.
    Puis sont apparus les langages objets (on entend un waaaa dans la salle), comme Java ou C# par exemple (oui je sais il y avait les pionniers, paix à leurs âmes). Donc dans ces langages tu es obligé (ou presque) de passer par l'objet (un exécutable est une classe dont une méthode statiques est définie comme point principal d'entrée). Donc en C tu ne peux pas avoir de méthodes à la Java ...

    On est passé de la programmation fonctionnelle à la programmation objet. Sauf que ... ne lis la suite que si tu as le courage de te dire que tout peut s'embrouiller
    Sauf que des fous (?) ont décidé de créer un truc qui fait que tu fais de l'objet en C sans passer par C++. Je te donne le mot clé à googler si ça t'intéresse : GObject. Une fois que tu as compris ce qu'est la programmation objet et que tu regardes ça, tu te dis ... mazette.


    Bon le dernier paragraphe. Donc juste pour dire que ce qui est très facile à écrire en Java comme les interface, l'héritage, les fonctions virtuelles, le GC = gestion mémoire (que personne ne voit mais que tout le monde aime) n'est pas disponible en C. Une struct en C n'aura jamais de fonctions (que les puristes me pardonnent).

  4. #4
    Lumiere11

    Reponse à photon 57

    slt photon 57


    merci bien pour le développment détailé de la POO, donc ON est obligé d'apprendre la Poo

    d'ccords, en tout cas cette question été immergé lors d'une simulation en physique , on disait que C est rapide et encore utilisé à ce temps , et que java peut etre lourd si il y a beaucoup d'iterations ( N>20000) .

    Une autre question: et si on apprend un langage puis vers 2013 ou 2015 par exe, une nouveauté sera crée ,!! et voila le Langage "Machin" est le plus fort.
    alors on remet le contour à zéro et on laisse tout derrière, c'est malheureux ; ou est par exemple Pascal ................?

    merci

  5. A voir en vidéo sur Futura
  6. #5
    invitea0ecda6e

    Re : Reponse à photon 57

    Citation Envoyé par Lumiere11 Voir le message
    Une autre question: et si on apprend un langage puis vers 2013 ou 2015 par exe, une nouveauté sera crée ,!! et voila le Langage "Machin" est le plus fort.
    Je ne comprend pas ta question...

    Si un nouveau langage plait plus, quelles que soient les raisons (performances, fiabilité, simplicité d'utilisation...), il sera plus utilisé au dépit des anciens langages.
    C'est bien normal et je ne vois pas le problème (à part pour les développeurs qui vont devoir se mettre à jour).

  7. #6
    invite62588872

    Re : Reponse à photon 57

    Citation Envoyé par Lumiere11 Voir le message
    slt photon 57
    d'ccords, en tout cas cette question été immergé lors d'une simulation en physique , on disait que C est rapide et encore utilisé à ce temps , et que java peut etre lourd si il y a beaucoup d'iterations ( N>20000) .

    Une autre question: et si on apprend un langage puis vers 2013 ou 2015 par exe, une nouveauté sera crée ,!! et voila le Langage "Machin" est le plus fort.
    alors on remet le contour à zéro et on laisse tout derrière, c'est malheureux ; ou est par exemple Pascal ................?

    merci
    Hello,

    2 points : 1) la rapidité du language et 2) que se passera-t-il si un super-génial-nouveau-language débarque

    1) Contrairement au C, Java est un language interprété et non compilé (ou pas tout à fait, pas compilé en langage machine en tout cas). Lors de l'exécution, la JVM permet de faire le pont entre les .class du Java et le language de la machine sur laquelle il est exécuté, ce qui prend un peu de temps/ressources. Le Java est donc plus lent que le C, qui lui est compilé pour une plateforme particulière et donc beaucoup plus rapide. Par contre le Java est extrêmement portable : un programme Java peut tourner sous Windows, Mac et Linux sans devoir se soucier de la portabilité (vu qu'il est interprété par la JVM qui, elle, est propre à chaque plateforme), ce qui n'est pas le cas du C.
    Donc pour aller dans l'espace ou pour analyser des collisions de particules, il vaut mieux faire ça en C car ça va très vite et qu'on ne veut pas porter le programme en question sur d'autres OS ou autre (les programmes qui tournent dans les fusées Apollo n'ont rien à faire sur nos machines à nous par exemple, ils tournent là où ils sont et nulle part ailleurs). Mais pour faire un programme de gestion financière ça peut être bien de le faire en Java pour garder la portabilité, étant donné que les opérations à éxécuter sont peu gourmandes et donc rapides.

    2) Si un nouveau language "Machin" débarque et est "le plus fort" (ça n'arrivera pas dans tous les domaines confondus mais admettons par exemple qu'il est supérieur au Java dans ses domaines d'application), les développeurs vont faire la transition vers le nouveau language et le tour sera réglé. On ne remet pas de compteur à zéro et on ne laisse rien derrière, l'expérience acquise au fil du temps reste là et sera toujours utile. D'ailleurs si un tel language devait naître, il aurait très très très probablement énormément de similitudes avec son prédécesseur (pas uniquement au niveau de la syntaxe. Les patterns par exemple ne sont pas forcément liés à un language en particulier).

    Bonne journée,

    Nils

  8. #7
    lou_ibmix_xi

    Re : Reponse à photon 57

    Mon grain de sel...

    On peut tout à fait faire de la POO en C, et sans tomber dans l'excès de la glib... regarder ici par exemple, ou les pilotes de périphérique dans le noyau linux... Je suis personellement un fan de cette technique pour les raisons suivantes:
    -le C est nettement plus simple que le C++, donc plus facile à maîtriser, donc moins de bug potentiel (les opérateurs de recopie par défaut et autres choses obscures qui te permette de te tirer une balle dans le pieds sans t'en rendre compte etc...)
    -l'héritage en C est (un peu) moins simple à mettre en place, donc on a nettement moins tendance à faire des conceptions avec de l'héritage à tiroir pour la beauté de la hierarchie, on l'utilise avec parsimonie
    -j'ai toujours trouvé très drôle qu'on nous dise que C++ = encapsulation, alors que pour faire de l'opacité en C++ il faut magouiller, en C c'est très simple.

    Ceci étant dis, un langage de programmation reste avant tout un outils. Il faut donc choisir l'outils adapté à la tâche. Parmis les avantages du C en tant qu'outils: toute plateforme possède un compilateur C (du pic16F au super-calculateur BlueGene), il me semble être le meilleur compris entre bas et haut niveau, je répète qu'il est simple (lire Les Hatton pour comprendre pourquoi j'insiste là dessus) et il ne fait que très peu de chose dans ton dos...

  9. #8
    invite4492c379

    Re : Reponse à photon 57

    Citation Envoyé par Lumiere11 Voir le message
    slt photon 57


    merci bien pour le développment détailé de la POO, donc ON est obligé d'apprendre la Poo
    Non, mais ON est obligé d'apprendre les concepts de la programmation. Apprendre à programmer c'est avant tout apprendre des méthodes et les appliquer là où elles s'appliquent le mieux.

    Citation Envoyé par Lumiere11 Voir le message
    d'ccords, en tout cas cette question été immergé lors d'une simulation en physique , on disait que C est rapide et encore utilisé à ce temps , et que java peut etre lourd si il y a beaucoup d'iterations ( N>20000) .
    OK, il y a toujours eu des guerres de religion de ce genre ... Mac/PC, C/Pascal, C#/Java, J2EE/.NET, ...
    C est un langage ancien, plusieurs fois rénové. On fait de tout en C, du Hello World à Linux. C'est sa force, car quelle que soit ta machine tu auras toujours un compilateur C à dispo. C'est aussi sa faiblesse car tu peux faire et surtout n'importe quoi. Oui le C compilé est plus rapide que le Java interprété. Mais comme je te le disais il n'y a pas que la vitesse qui compte.

    Citation Envoyé par Lumiere11 Voir le message
    Une autre question: et si on apprend un langage puis vers 2013 ou 2015 par exe, une nouveauté sera crée ,!! et voila le Langage "Machin" est le plus fort.
    alors on remet le contour à zéro et on laisse tout derrière, c'est malheureux ; ou est par exemple Pascal ................?

    merci
    Imagine C qui rencontre Java, il lui dira sans doute "Je suis ton père Java". Apprendre un langage de programmation n'est pas compliqué en soi, ce qui est important n'est pas le langage mais les concepts. On ne se met pas devant un ordinateur en se disant «Bon je vais programmer» ... Pascal et C ont les mêmes concept, on peut quasiment traduire une source C en Pascal et inversement et après ... le marché décide lequel est le plus utilisé. Des langages défunts ou presque éteints sont légion. Les concept eux sont plus durables.
    Tu sais il y a encore une tonne de programmes écrit en COBOL ou en FORTRAN ...

  10. #9
    invite4492c379

    Re : Reponse à photon 57

    Citation Envoyé par Tlaloc Voir le message
    Je ne comprend pas ta question...

    Si un nouveau langage plait plus, quelles que soient les raisons (performances, fiabilité, simplicité d'utilisation...), il sera plus utilisé au dépit des anciens langages.
    C'est bien normal et je ne vois pas le problème (à part pour les développeurs qui vont devoir se mettre à jour).
    Oui il y a une sorte de loi du marché là dedans ... Pourqu'un «nouveau langage» perce il lui faut une artillerie lourde derrière (Sun pour Java, Microsoft pour C#) c'est l'industrie qui fait les langages. Sinon il y a une tonne de langages Caml, Prolog, Eiffel, ... Il suffit que Microsoft trouve que le lambda-calcul lui permet un progression et hop il nous sort F# comme s'il révolutionnait le monde de l'informatique.

  11. #10
    invite4492c379

    Re : Reponse à photon 57

    Citation Envoyé par vae- Voir le message
    Hello,

    2 points : 1) la rapidité du language et 2) que se passera-t-il si un super-génial-nouveau-language débarque

    1) Contrairement au C, Java est un language interprété et non compilé (...)
    Tout à fait.

    Citation Envoyé par vae- Voir le message
    2) Si un nouveau language "Machin" débarque et est "le plus fort" (ça n'arrivera pas dans tous les domaines confondus mais admettons par exemple qu'il est supérieur au Java dans ses domaines d'application), les développeurs vont faire la transition vers le nouveau language et le tour sera réglé. On ne remet pas de compteur à zéro et on ne laisse rien derrière, l'expérience acquise au fil du temps reste là et sera toujours utile. D'ailleurs si un tel language devait naître, il aurait très très très probablement énormément de similitudes avec son prédécesseur (pas uniquement au niveau de la syntaxe. Les patterns par exemple ne sont pas forcément liés à un language en particulier).

    Bonne journée,

    Nils
    LA partie programmation dans un langage n'est qu'une partie de la conception de logiciel.A priori le choix du langage devrait se faire après la conceptualisationen choisissant la plateforme la mieux adaptée, etc. Dans la pratique c'est plutôt : j'ai une équipe qui fait du Java alors on le fera en Java.

  12. #11
    JPL
    Responsable des forums

    Re : POO en C !!?????

    Puisqu'on est dans les considérations générales sur les langages, qu'est devenu Ada qui était censé être le super-langage universel ?
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  13. #12
    invite4492c379

    Re : POO en C !!?????

    Je sais qu'ADA est encore utilisé dans certains domaines spécifiques comme l'aéronautique (EADS) et l'industrie (Alstom). Un langage pionnier qui manquait de sponsors «informatiques» ...

  14. #13
    Dlzlogic

    Re : POO en C !!?????

    Bonsoir,
    Je vais ajouter mon grain de sel. Je fais du C depuis une vingtaine d'années. Je me suis mis au C++ de base, c'est à dire que j'utilise le possibilités du C++ pas rapport au C (classes pour simplifier) mais PAS les bibliothèques, string, io et Cie.
    J'ai naturellement fait des essais, ça n'a pas été concluent.
    Il a été dit que le C est un langage ancien, c'est vrai, mais ça ne veut pas dire qu'il est vieux.
    Par ailleurs, quand j'ai appris le PHP, je n'ai vraiment pas eu d'effort à faire, et comme je suis paresseux, c'était parfait.
    Par contre, j'ai jeté un œil sur Java, et là, j'ai vite refermé. Mes programmes ne sont pas multi- plateforme, tant-pis.

  15. #14
    Jack
    Modérateur

    Re : POO en C !!?????

    Citation Envoyé par JPL Voir le message
    Puisqu'on est dans les considérations générales sur les langages, qu'est devenu Ada qui était censé être le super-langage universel ?
    Un ordre de grandeur ici
    Descends plus bas dans le document et tu verras sa position en 1986. Ca m'étonne un peu mais bon.

    A+
    Dernière modification par Jack ; 20/09/2011 à 21h36.

  16. #15
    invite4492c379

    Re : POO en C !!?????

    M'étonne pas ... Java est le plus populaire, et C second ...

  17. #16
    invite4492c379

    Re : POO en C !!?????

    Citation Envoyé par Jack Voir le message
    Un ordre de grandeur ici
    Descends plus bas dans le document et tu verras sa position en 1986. Ca m'étonne un peu mais bon.

    A+
    Excellent ton site :

    From a supportability point of view, it is strongly advised to stick to mainstream languages for industrial, mission-critical software systems.
    It is important to note that this is only one of many criteria to be used before taking a decision to adopt a language. Other criteria are: suitability for the application domain, reliability of compilers, expression power, performance, and scalability. Hence, Ada can still be used for mission-critical systems although one should consider alternatives. This is what you also see in daily practice: Ada is hardly used for new mission-critical systems anymore. The other way around is also true. Everybody will agree that it is not wise to program missile software in JavaScript.

  18. #17
    Jack
    Modérateur

    Re : POO en C !!?????

    Citation Envoyé par photon57 Voir le message
    M'étonne pas ... Java est le plus populaire, et C second ...
    Mais la tendance n'est pas favorable à java alors que le C est redoutablement stable.

    Enfin bon, il faut voir dans quelles conditions ces mesures sont faites. Mais ça donne quand même une idée.

    A+
    Dernière modification par Jack ; 20/09/2011 à 23h13.

  19. #18
    JPL
    Responsable des forums

    Re : POO en C !!?????

    La position d'ADA en 86 s'explique par l'énorme battage (et sa présentation dithyrambique) qu'il y a eu à l'époque autour de ce langage qui était un choix (qui se voulait stratégique) du département de la Défense des États-Unis après mise en concurrence de plusieurs projets sur la base d'un cahier des charges.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  20. #19
    invitea0ecda6e

    Re : POO en C !!?????

    Citation Envoyé par Jack Voir le message
    Enfin bon, il faut voir dans quelles conditions ces mesures sont faites.
    Effectivement, on dirait que ça mesure plus l'activité de la communauté que l'utilisation même des langages... Je me permet de douter
    D'autant que la recherche "<language> programming" est moyenne pour distinguer le C, C++ et C#...

Discussions similaires

  1. POO avantages?
    Par flyingman dans le forum Programmation et langages, Algorithmique
    Réponses: 10
    Dernier message: 28/05/2012, 00h17
  2. python POO - dictionnaire
    Par invite2ace8786 dans le forum Électronique
    Réponses: 1
    Dernier message: 16/06/2009, 12h12
  3. Réponses: 42
    Dernier message: 19/11/2007, 21h08
  4. POO: Recuit_Simule
    Par invitecef73ce6 dans le forum Logiciel - Software - Open Source
    Réponses: 7
    Dernier message: 31/08/2005, 21h41
  5. POO : programmation orientée objet
    Par invite1ff1de77 dans le forum Logiciel - Software - Open Source
    Réponses: 8
    Dernier message: 04/07/2005, 12h37