Selon vous, quelle est la caractéristique qui a fait le succès de la programmation orientée objet?
- Passage de message
- Héritage
- Polymorphisme
- Encapsulation
Ou une autre fonctionnalité que vous aimeriez introduire.
J'aimerais aussi savoir quel est le lien entre le type de données abstrait et la programmation orientée objet?
object-oriented
Tony
la source
la source
Réponses:
Je dirais que la caractéristique la plus importante de la programmation orientée objet est celle de la gestion de la complexité .
Le cerveau humain ne peut contenir que de nombreux concepts à la fois - la limite souvent citée de se souvenir de 7 +/- 2 éléments indépendants vient à l'esprit.
Lorsque je travaille sur un système 600kloc au travail, je ne peux pas tout garder en tête à la fois. Si je devais le faire, je serais limité à travailler sur des systèmes beaucoup plus petits.
Heureusement, je n'ai pas à le faire. Les différents modèles de conception et autres structures que nous avons utilisés sur ce projet signifient que je n'ai pas à traiter l'ensemble du système à la fois - je peux ramasser des pièces individuelles et les travailler, sachant qu'elles s'intègrent dans l'application plus large de manière bien définie.
Tous les concepts OO importants permettent de gérer la complexité.
Encapsulation - permettez-moi de traiter avec une API externe qui me fournit divers services, sans se soucier de la façon dont ces services sont mis en œuvre.
Abstraction - permettez-moi de me concentrer sur les caractéristiques essentielles et d'ignorer ce qui n'est pas pertinent.
Composition - permettez-moi de réutiliser des composants qui ont déjà été construits dans de nouvelles combinaisons
Polymorphisme - permettez-moi de demander un service sans vous soucier de la façon dont différents objets peuvent le fournir de différentes manières.
Héritage - permettez-moi de réutiliser une interface ou une implémentation, fournissant uniquement les éléments qui sont différents de ce qui était auparavant.
Principe de responsabilité unique - permet de garder l'objectif de chaque objet clair et concis, il est donc facile de raisonner
Liskov Substitution Prinicple - ne posons pas de pièges les uns aux autres en introduisant des dépendances étranges
Principe ouvert / fermé - autorisons l'extension et la modification d'une manière qui ne nous oblige pas à risquer de casser le code existant
Injection de dépendance - prenons la composition au niveau supérieur et assemblons les composants ensemble beaucoup plus tard.
Développement orienté interface - prenons l'abstraction au niveau supérieur et ne dépendons que de l'abstraction, jamais d'une implémentation concrète.
la source
Interfaces utilisateur graphiques. À la fin des années 80, au début des années 90, lorsque Mac, Amigas, Atari ST, Windows et GEM ont commencé à remplacer les interfaces utilisateur basées sur les caractères, il est devenu évident que des langages comme C ne sont pas bien adaptés pour écrire des programmes GUI. Alors que le traitement de données traditionnel est considéré comme un schéma "données d'entrée -> traitement -> données de sortie", ce qui pourrait également être fait dans un langage procédural, les fonctionnalités OO sont tout simplement utiles pour gérer la complexité inhérente d'une interface graphique.
la source
Le masquage des données fourni par l'encapsulation.
la source
Une fonctionnalité qui n'a encore été mentionnée par aucune des autres réponses: la modélisation de domaine . Parce que les gens ont tendance à penser à faire des choses avec ou avec des objets et à des objets ayant des propriétés intrinsèques, il est très facile de modéliser un problème ou un flux de travail à l'aide d'un logiciel orienté objet. Essentiellement, cela nous permet d'utiliser notre capacité existante pour traiter les noms, les verbes et les adjectifs dans le code.
la source
Je pense que l'héritage est le point le plus important de la POO.
[du développement de jeux] Vous pouvez créer quelque chose comme une classe Drawable, avec des méthodes et des attributs de rendu, et créer une classe Spaceship and Planet, qui hérite de Drawable. Prenez tous les objets de ceux-ci [et d'autres enfants Sprite], ajoutez un drawableObjArray et appelez simplement la méthode draw pour chaque objet. Vous avez juste besoin de savoir que c'est un Drawable.
la source
Abstraction
Fournir les services nécessaires en cachant les choses inutiles. Voir mon explication ici - Qu'est-ce que l'abstraction?
la source
Il est quelque peu réussi car il encourage l'utilisation de l'organisation des choses par l'esprit humain en objets. Les gens sont généralement bons à voir les relations entre les choses - des choses comme les différences, les similitudes et le comportement. OO encourage le développement de logiciels pour imiter la conceptualisation humaine du monde.
Rendre le développement de logiciels similaire à notre façon de voir le monde facilite la gestion de la complexité par nos esprits.
la source
" ADT vs objects " a été demandé à plusieurs reprises ici. La réponse sur une ligne est "les ADT et les objets sont l'inverse l'un de l'autre - ce que l'un résume parfaitement, l'autre ne le peut pas; chacun permet une flexibilité de différentes manières."
Pour une réponse plus longue, voir William Cook's On Understanding Data Abstraction, Revisited . En bref, les objets vous permettent d'utiliser facilement plusieurs implémentations / représentations de certaines données (quelque chose qui ressemble à une liste pourrait être un tableau, ou un arbre d'auto-équilibrage, ou ...), mais il est difficile d'ajouter de nouvelles opérations (parce que vous devez ajouter cette nouvelle opération à chacune de vos représentations), tandis que les ADT facilitent l'ajout de nouvelles opérations sur votre type de données, mais rendent difficile la multiplication des implémentations.
Edit: j'avais dit que la transmission des messages était ce qui faisait le succès d'OO. D'après le commentaire de Jonas, ce n'est pas vrai, car la plupart des langues que les gens considèrent comme OO n'utilisent pas la transmission de messages. Comme ce n'est pas bien, je l'ai retiré de ma réponse.
la source
Mes trois principales fonctionnalités. Composition d'objets - permettant aux objets de collaborer. Polymorphisme - prend en charge les comportements dynamiques lors de l'exécution. Héritage - en réutilisant le code et en modifiant le comportement grâce à la substitution de méthodes.
ADT - vous pouvez l'avoir même dans des langages non orientés objet comme Pascal. Une pile ou une file d'attente sont des exemples d'ADT.
la source
en termes simples, la POO est la clé de la réutilisation et de l'encapsulation qui se traduit par la production de grands frameworks qui facilitent la vie des programmeurs à cette époque, car ils peuvent simplement appeler les API et faire le jour le plus souvent.
comme votre question concerne les 4 fonctionnalités de la POO, vous pouvez donc dire
donc 1. Passage de message et 3. Le polymorphisme supporte en fait 2. Héritage et 4. Encapsulation.
la source
À mon avis, les trois dernières fonctionnalités sont les plus importantes qui ont eu un impact sur la large utilisation de la POO:
Edit: Un autre point serait les environnements de développement d'interfaces graphiques et IDE comme Visual studio et Eclipse. Comme ils embrassent les langages OOP, de plus en plus de designs tendent vers OOP.
Et bien sûr, les principes SOLID sont ceux qui rendent les produits logiciels ROCK solides et livrables :)
la source