SEDIT D'UN OBJET UTILE ET COMMODE UTILE, COMMODE: ROULEAU: OBJET DE FORME CYLINDRIQUE UTILE EN PEINTURE: TEE: EST UTILE AUX AMATEURS DE SWING OBJET POUR GOLFEUR UTILE AU GOLF UTILE POUR LE PREMIER COUP: ABOMINATION: OBJET DE DEGOUT: ABOUT: EXTREMITE D'UN OBJET: ACCESSOIRES: COMPLEMENTS D'OBJET: ACHAT: IL PEUT
je suis assez nouveau Ă la programmation mais j'ai lu quelques discussions intĂ©ressantes sur StackOverflow sur diverses approches de programmation. Je ne sais toujours pas trĂšs bien quelle est la diffĂ©rence entre la programmation procĂ©durale et la programmation orientĂ©e objet. On dirait que la programmation orientĂ©e objet utilise encore des procĂ©dures mĂ©thodes mais tout est organisĂ© diffĂ©remment parce que l'objet est la vedette du spectacle. Mais il me semble que les procĂ©dures de toujours vous permettent de faire tout de mĂȘme chose. Comme en c/" class="blnk">C, vous pouvez mettre toutes vos procĂ©dures similaires dans une bibliothĂšque. Alors ne pourriez-vous pas vraiment dire qu'une bibliothĂšque en C est similaire Ă un objet en C++? demandĂ© sur Serx 2009-02-10 040838 La diffĂ©rence entre les deux est subtile, mais importante. dans un programme procĂ©dural, les modules interagissent en lisant et en Ă©crivant un Ătat qui est stockĂ© dans des structures de donnĂ©es partagĂ©es. dans un programme orientĂ© objet, les modules sous forme d'objets interagissent en envoyant des messages Ă d'autres objets. rĂ©pondu Serx 2009-02-10 071204 dans un programme procĂ©dural, le code est roi et les donnĂ©es sont subordonnĂ©es. En d'autres termes, vous avez des programmes qui agissent sur les donnĂ©es et ils ne sont gĂ©nĂ©ralement pas Ă©troitement liĂ©s. dans le monde OO, les objets sont la chose principale d'intĂ©rĂȘt. Un objet de donnĂ©es et le code qui est autorisĂ© Ă agir sur ces donnĂ©es, et ils sont trĂšs Ă©troitement liĂ©s. C'est le concept d'encapsulation, la dissimulation de l'information. An exemple, disons que vous avez un numĂ©ro et que vous voulez le doubler. Une façon procĂ©durale de le faire est la suivante n = n * 2 le code ici multiplie tout Ă fait explicitement n par 2 et stocke le rĂ©sultat dans N. la façon de faire est D'envoyer un "message" Ă l'objet nombre lui disant de se doubler l'avantage de ceci est appelĂ© polymorphisme. Ce qui se passe quand vous dĂ©cidez que vous voulez ĂȘtre en mesure de doubler un une ficelle comme "bob". Dans le monde de la procĂ©dure, vous auriez Ă fournir plus de code pour faire le doublage, mais vous auriez aussi Ă appeler ce code diffĂ©remment. avec OO, vous crĂ©ez un objet string qui peut aussi prendre le message 'double'. Le code pour doubler une chaĂźne appartient Ă l'objet string donc il sait qu'il doit agir diffĂ©remment de l'objet number. S'il dĂ©cidait que " bob "* 2 Ă©tait "bobbob", le code ressemblerait Ă quelque chose comme class number class string int n char array s procedure double procedure double n = n * 2 s = string_joins,s puis vous on pourrait appeler X. double peu importe le type rĂ©el x Ă©tait nombre ou chaĂźne et il saurait quel code exĂ©cuter - cela simplifie grandement votre code. Vous pouvez doubler l'entier, les chaĂźnes, les matrices, les nombres complexes, les rĂ©als, les tailles de fenĂȘtre sur votre moniteur et toutes sortes de choses diffĂ©rentes. et vous avez raison, une bibliothĂšque C peut ĂȘtre faite pour ressembler un peu Ă des objets. L'exemple classique est - vous ne vous souciez jamais quoi a FILE* en fait indique, juste le fait qu'il se comportera d'une certaine maniĂšre. Les FILE* , fopen , fclose et d'autres fonctions sont une classe de sortes reprĂ©sentant les capacitĂ©s D'E/S DE C. rĂ©pondu paxdiablo 2009-09-23 014059 vous pouvez programmer de façon procĂ©durale dans la plupart des langues OO, mais le pouvoir de OO vient de la capacitĂ© d'hĂ©riter, d'encapsuler et d'abstraire cette logique procĂ©durale. Je pense que vous avez raison, une bibliothĂšque doit ressembler Ă une classe. Elle devrait avoir sa propre portĂ©e et englober la logique derriĂšre les fonctions avec des noms significatifs. vous avez raison dans votre observation que les programmes orientĂ©s objet sont basĂ©s de plusieurs façons sur le paradigme procĂ©dural. Vous avez Ă©galement raison dans ce que syntaxiquement tout ce qui se passe vraiment est que vous invoquez des fonctions. En fait, vous pourriez implĂ©menter de nombreuses fonctionnalitĂ©s de langages orientĂ©s objet en utilisant des mĂ©canismes procĂ©duraux par exemple, pointeurs de fonction en C++. Vous pouvez donc faire un design orientĂ© objet et l'implĂ©menter dans un langage procĂ©dural par exemple, comme l'ont fait les anciens compilateurs C++. l'importance du paradigme orientĂ© objet n'est pas tant dans le mĂ©canisme du langage que dans le processus de pensĂ©e et de conception . Dans la programmation procĂ©durale, la rĂ©flexion porte sur les opĂ©rations et la dĂ©composition de ces opĂ©rations en utilisant d'autres opĂ©rations, en les regroupant en modules, etc. Cela signifie que les donnĂ©es ou l'Ă©tat entrent dans une importance secondaire. C'est comme penser Ă des opĂ©rations mathĂ©matiques. l'objet le paradigme orientĂ©, d'un autre cĂŽtĂ©, dit que vous devez penser Ă l'Ă©tat et aux opĂ©rations ensemble comme une entitĂ©, puis concevoir votre programme comme des interactions entre des entitĂ©s qui Ă©changent l'Ă©tat et activent les opĂ©rations. rĂ©pondu Uri 2009-02-10 025326 Ă mon humble avis, la programmation orientĂ©e objet est un concept qui existe Ă un niveau d'abstraction plus Ă©levĂ© que la programmation procĂ©durale. Les deux ne sont pas mutuellement exclusifs en ce que les mĂ©thodes individuelles dans un programme OO ressemblent Ă peu prĂšs la mĂȘme chose que les fonctions individuelles dans un programme de procĂ©dure. Cela contraste avec, par exemple, la programmation fonctionnelle, qui exige un Ătat d'esprit complĂštement diffĂ©rent. De plus, vous pouvez Ă©crire de maniĂšre procĂ©durale dans un langage OO en rendant tout statique, etc. Vous pouvez ĂȘtre un compilateur humain et Ă©crire efficacement du code OO en C en utilisant beaucoup de pointeurs de fonction et de lancer de pointeur struct. OO, ensuite, est plus d'une conception de la philosophie et la vision du monde que quelque chose w/ une dĂ©finition rigoureuse. Il exige que l'hĂ©ritage, le polymorphisme, etc. ĂȘtre utilisĂ©s comme des modĂšles majeurs dans la structuration de votre code, et que la syntaxe soit fournie pour rendre ces expressifs sans recourir Ă des trucs de bas niveau. Il exige que vous pensez de code qui agit sur l'Ă©tat de une collecte de donnĂ©es en tant que propriĂ©tĂ© des donnĂ©es, et non une procĂ©dure qui existe par elle-mĂȘme. Il n'est pas noir et blanc. Votre code peut ĂȘtre "plus " ou" moins "oo selon l'importance que vous accordez Ă l'hĂ©ritage, au polymorphisme, aux classes et aux" mĂ©thodes en tant que propriĂ©tĂ© des donnĂ©es". vision du monde comme moyen de structurer et d'expliquer/comprendre votre code. rĂ©pondu dsimcha 2009-02-10 015100 OO est surtout un Ătat d'esprit. Vous pouvez programmer OO en C si vous voulez vraiment ... , et vous pouvez parfaitement avoir du code de procĂ©dure en C++/Java; ce que je veux dire, c'est que, mĂȘme si vous utilisez des classes Ă la surface, cela pourrait quand mĂȘme ĂȘtre procĂ©dural. L'idĂ©e derriĂšre OO est l'abstraction de l'etat. Au lieu de "penser" en termes de "groupes de donnĂ©es", vous "penser" en termes d ' "objets", oĂč un objet est une "interface" pour "regroupement de donnĂ©es et de moyens de manipuler ces donnĂ©es". tout cela sonne philosophique, parce que c'est . il y a beaucoup Ă dire ici, et il ne peut pas ĂȘtre tout dit dans un si petit poste, donc je vais le laisser ici. mise Ă JOUR Comme mentionnĂ© dans rĂ©ponse de Flanagan , les langues oo mettent en Ćuvre des constructions qui utilisent cette abstraction. je veux dire, vous pourriez techniquement "Hacker" des classes et polymorphisme en termes de structures, fonctions, et pointeurs de fonction. Voici un exemple de OO en C rĂ©pondu hasen 2017-05-23 120309 la diffĂ©rence est que les objets ont des procĂ©dures et des donnĂ©es connexes dans le mĂȘme endroit - les langues de procĂ©dure utilisent des 'structures' choses qui tiennent des donnĂ©es connexes ensemble qui maintient les donnĂ©es sĂ©parĂ©es des procĂ©dures. En effet, tout ce que vous faites dans une langue OO devrait ĂȘtre possible dans un langage procĂ©dural avec une combinaison de structures et de procĂ©dures. La principale diffĂ©rence est l'Ă©tat d'esprit qu'un OO langues met programmeurs. rĂ©pondu vanja. 2009-02-10 011219 [pardon de l'amorce de style, il est tard et je suis fatiguĂ©] procĂ©dures de traiter des donnĂ©es - donnĂ©es, appliquez un peu de traitement, d'obtenir les donnĂ©es parfois, certains des Ă©lĂ©ments de donnĂ©es sont liĂ©s Ă d'autres Ă©lĂ©ments de donnĂ©es, et il est commode de les regrouper dans une structure de donnĂ©es , qui peut ensuite ĂȘtre manipulĂ©e et traitĂ©e comme une seule unitĂ©. maintenant notre procĂ©dure peut prendre une structure comme entrĂ©e et le modifier et / ou produire une autre structure de donnĂ©es comme sortie nous remarquons parfois que certaines procĂ©dures ne concernent qu'un certain type de structure de donnĂ©es; il est commode de regrouper ces procĂ©dures avec leur structure de donnĂ©es, et de l'appeler un objet . un modĂšle pour crĂ©er des objets est appelĂ© classe ; un objet est dit ĂȘtre une instance d'une classe nous pouvons remarquer qu'une classe est trĂšs semblable Ă une autre, donc au lieu de copier et coller le code, nous laissons une classe hĂ©riter d'une autre la sous-classe hĂ©rite de la superclasse ou"classe de base". De cette maniĂšre, la sous-classe a accĂšs Ă toutes les structures de donnĂ©es et procĂ©dures de la superclasse et peut les augmenter ou les outrepasser de certaines maniĂšres si nous demandons poliment Ă un objet de faire quelque chose pour nous au lieu d'appeler brutalement ses procĂ©dures directement, cela s'appelle message passant , mĂȘme si aucun 'message' rĂ©el n'est transmis. La joie ici est que beaucoup de diffĂ©rents types d'objets peuvent comprendre le mĂȘme message, ce qui conduit Ă la notion de polymorphisme . Par exemple, nous pouvons demander Ă diffĂ©rents types de documents de S'imprimer, et ils rĂ©pondent chacun de maniĂšre appropriĂ©e. un langage qui supporte des objets via des classes ou non avec transmission de messages et hĂ©ritage est appelĂ© object-oriented . S'il n'y a pas d'hĂ©ritage, le langage est simplement basĂ© sur l'objet . bonne chance pour vos Ă©tudes! procĂ©dural fait partie de la distinction procĂ©durale/fonctionnelle/logique OU logique orientĂ©e comparez C, lisp, et prolog entre diffĂ©rentes façons de dĂ©crire ce qu'un programme devrait faire. L'orientation de L'objet est orthogonale Ă cette autre idĂ©e, et dĂ©crit un moyen de grouper des sous-programmes avec des donnĂ©es. C++ et java sont des langages procĂ©duraux avec des fonctionnalitĂ©s orientĂ©es objet; fortran77 est un langage procĂ©dural sans fonctionnalitĂ©s orientĂ©es objet. Soutiens communs du lisp orientation de l'objet; certains lisps plus anciens ne le font pas. Simple Vanilla prolog ne supporte pas les objets, et je ne peux pas nommer un langage orientĂ© logique qui le fait je ne fais pas la programmation orientĂ©e logique, il est sur ma liste de choses Ă faire quand je ont un temps libre copieux. J'ai Ă peine faire de la programmation fonctionnelle. comme d'autres l'ont notĂ©, cependant, une pensĂ©e orientĂ©e objet appropriĂ©e change la façon dont vous faites votre programmation autant qu'un passage de la procĂ©dure Ă la fonctionnelle. BTW- je vois que le terme "procĂ©dural"a beaucoup Ă©tĂ© utilisĂ© pour distinguer les langages procĂ©duraux non orientĂ©s objet de leurs frĂšres orientĂ©s objet, mais je pense que c'est un mauvais usage dĂ» Ă l'absence d'un adjectif propre pour "non orientĂ© objet". YMMV. rĂ©pondu dmckee 2009-02-10 012801 est plus facile Ă comprendre dans le contexte, Ă regarder les autres abstractions introduit entre les langues. une diffĂ©rence clĂ© entre le langage de l'assemblĂ©e et un langage procĂ©dural comme C ou Pascal est l'introduction de l'abstraction" procĂ©dure". Les gens Ă©crivant le code d'AssemblĂ©e crĂ©ent des procĂ©dures, mais son dur et sujet Ă des erreurs, un langage de procĂ©dure vous donne des outils pour le rendre plus facile. La diffĂ©rence entre un langage procĂ©dural et un langage OO comme C++ est l'abstraction "objet". Les personnes qui Ă©crivent " c "crĂ©ent souvent des objets conceptuels mais son difficile et tendance Ă l'erreur , un langage OO vous donne des outils pour le rendre plus facile. des Choses comme Chanter de Microsoft ou Erlang ajouter le Message/le Processus d'abstraction dans la langue. Bien sĂ»r, vous pouvez faire le passage de message et la crĂ©ation de processus en assembly, C ou C++ mais Sing le rend plus facile. tout vient jusqu'au mĂȘme code machine, ces abstractions sont purement pour le bĂ©nĂ©fice de nos cerveaux, pas de l'ordinateur. dans un programme de procĂ©dure, vous divisez un grand problĂšme en petits problĂšmes, et abstraites chacun de ces petits problĂšmes comme une procĂ©dure. Ceci est appelĂ© la procĂ©dure d'abstraction. dans les programmes orientĂ©s objet, vous analysez un problĂšme comme certains objets, et l'interaction entre les objets. Cela s'appelle de l'objet de l'abstraction. la diffĂ©rence est programmation axĂ©e sur la procĂ©dure - donne de l'importance Ă l'algorithme plutĂŽt qu'aux façon de programmer se concentre sur les procĂ©dures I. e mĂ©thodes permettant d'effectuer des tĂąches spĂ©cifiques et de partager leur structure de donnĂ©es. Il suit les structures descendantes. exemple Pascal et C programmation orientĂ©e Objet - Donne de l'importance Ă l'information plutĂŽt que de l'algorithme. Il suit les structures chose est considĂ©rĂ©e comme un objet. Chaque objet a sa propre structure et procĂ©dure de donnĂ©es. Il comprend des caractĂ©ristiques comme la dissimulation de donnĂ©es, le polymorphisme,l'encapsulation et la transmission de messages. Les utilisateurs n'ont Ă peine de quoi Ă l'intĂ©rieur de ces objets , tout en les utilisant dans leurs programmes. exemple C++ et Java rĂ©pondu myk. 2013-02-09 074239 il s'agit d'une rĂ©ponse simplifiĂ©e. dans un vrai langage OO, le seul codage procĂ©dural se fait Ă l'intĂ©rieur d'un objet. c n'a pas d'objets et C++ est un langage qui supporte les objets. Java d'un autre cĂŽtĂ© tout est un objetsauf les primitives. Tout ce qui est tapĂ©. progression linĂ©aire se produit Ă l'intĂ©rieur des objets mais les objets ce ne sont que des collections de code et de donnĂ©es. cela dĂ©pend de la façon dont vous dĂ©finissez OOP. En termes de Java-like OOP oĂč vous appelez les mĂ©thodes sur les objets, la programmation procĂ©durale est Ă peu prĂšs la mĂȘme. Autant que je peux dire, vous pouvez Ă©muler tous les principes OOP encapsulation, abstraction, polymorphisme, hĂ©ritage dans un langage procĂ©dural comme C. preuve de ceci est GObject , Ă certains Ă©tendre Objectif-C, et de nombreuses autres implĂ©mentations de langage OOP en utilisant C, comme cPython. Ceci est fait en utilisant des structures et en ces structures utilisant des fonctions typedef struct { Object *isa; String *name; Date *birthday; } Person; Person *Person_new; String *Person_namePerson *self; void Person_setNamePerson *self, String *newName; // ... l'interface est trĂšs OOP comme. Cela ne permet pas vraiment le polymorphisme, mais c'est aussi possible. Il est trĂšs similaire Ă une interface Python, sauf que les attributs sont sĂ©parĂ©s des "mĂ©thodes" class Personobject def __init__self = "" = property def nameself return property def ageself return j'ai choisi Python pour l'exemple, parce que "auto" est explicite, comme dans l'exemple C. Beaucoup de langues OOP, comme Java, abstraient ceci. il y a aussi le Smalltalk-comme la programmation orientĂ©e objet oĂč les messages sont envoyĂ©s Ă des objets, plutĂŽt que d'appeler des mĂ©thodes sur des objets. La diffĂ©rence est subtile Ă premiĂšre vue, mais elle offre beaucoup de puissance et de flexibilitĂ©. Cela peut Ă©galement ĂȘtre mis en Ćuvre dans les langues de procĂ©dure, comme le prouve L'objectif C. la programmation orientĂ©e Objet n'est pas nĂ©cessairement un type de langage, mais plutĂŽt un changement de paradigme. Les langages orientĂ©s objet tels que Java, Python, Ruby, etc. fournissent du sucre syntaxique pour manipuler facilement les objets, et c'est la principale diffĂ©rence entre les "langues procĂ©durales" et "langages orientĂ©s objet". en effet, une bibliothĂšque, ou plutĂŽt un ensemble de fonctions fonctionnant sur une structure, est le mĂȘme qu'un objet en C++. En fait, C++ est implĂ©mentĂ© de cette façon. rĂ©pondu sebnow 2009-02-10 050745 beaucoup de points intĂ©ressants dĂ©jĂ mentionnĂ©s ici. une façon de penser Ă ce sujet est que dans OO, vous avez l'idĂ©e d '"objets" qui sont des choses qui ont des caractĂ©ristiques et des comportements inhĂ©rents Ă eux. Ils ont gĂ©nĂ©ralement une sorte d '"interface" publique qui fournit un mĂ©canisme pour rĂ©cupĂ©rer certaines informations Ă leur sujet, mais l'objet lui-mĂȘme, ou plutĂŽt sa "classe", limite ce que l'information est publiquement disponible. Les entrailles de l'objet ne sont pas exposĂ©s Ă le public parce qu'il n'est gĂ©nĂ©ralement pas nĂ©cessaire de connaĂźtre les dĂ©tails sales "sous le capot" de l'objet. Donc orientĂ©e objet de programmes utilisent cette construction, ainsi que d'autres choses. la programmation procĂ©durale n'utilise gĂ©nĂ©ralement pas un tel couplage de donnĂ©es et de comportement dans un 'objet'. Je l'ai vu faire en C avant mais ce n'Ă©tait pas vraiment et impliquait beaucoup trop d'affaires de singe pour se rapprocher de ce que l'on pourrait faire avec, disons, C++. une des idĂ©es derriĂšre le dĂ©veloppement orientĂ© objet est que je ne devrais pas ĂȘtre en mesure de muck avec vos donnĂ©es par d'autres moyens que ceux que vous avez fournis. Si vous me fournissez seulement une interface bien pensĂ©e, vous pouvez me garder honnĂȘte. Maintenant, si vous utilisez une approche procĂ©durale et que vous m'envoyez une structure qui n'a pas de protection intĂ©grĂ©e, alors je peux faire ce que je veux et si je suis stupide ou Diabolique, je peux changer des choses que vous ne voudriez pas que je change. accordĂ©, vous pouvez contourner l'objet si vous ĂȘtes intelligent, mais vous devez sortir du chemin pour le faire. ce n'est pas complet, mais c'est un aspect. rĂ©pondu itsmatt 2009-02-10 014226 la façon dont C++ est implĂ©mentĂ© ne fait que faire ressembler la programmation OO Ă de la programmation procĂ©durale. Vous devez changer lĂ©gĂšrement votre façon de penser. dans les objets C++ ont des mĂ©thodes qui sont juste des procĂ©dures qui agissent sur l'objet. Mais dans un vrai oo paradiam vous devriez penser aux mĂ©thodes comme des messages potentiels que l'objet peut recevoir c'est-Ă -dire des lettres. L'objet reçoit un message les paramĂštres reprĂ©sentent la charge utile du message c'est Ă dire le contenu de la lettre et change son Ă©tat en fonction du message. pour un exemple assez concret de la diffĂ©rence entre procĂ©dure et OO, essayez D'apprendre Smalltalk. En Smalltalk, tout, et je veux dire tout est un objet. Il n'y a pas si-Ă©tats ou alors que des boucles. Vous atteindre cette fonctionnalitĂ© par l'envoi de messages invoquer des mĂ©thodes d'autres objets. Ăa te fait vraiment tourner la tĂȘte au dĂ©but, mais je pense que tu vas vite voir ce que OO est supposĂ© ĂȘtre. rĂ©pondu moffdub 2009-02-10 052035
. 444 539 200 66 495 467 603 490