Décès de la technologie OOP [fermé]

9

J'ai entendu de nombreuses fois parler de la programmation orientée vers l'aspect, surtout que c'est la technologie de "prochaine génération" dans la programmation et qu'elle va "tuer" la POO.

Est ce juste? La POO va-t-elle mourir ou quelle peut être la raison de cela?

Déshumaniseur
la source

Réponses:

40

Chaque fois que quelqu'un vous dit qu'une technologie logicielle en tuera une autre ou dominera l'ensemble du marché / de l'utilisation / du public, n'oubliez pas ceci:

Un écosystème sain (dynamique mais stable) est composé d'une variété d'espèces très différentes.

Cela signifie que toute nouvelle technologie hyped passera par la courbe de battage médiatique et trouvera finalement son objectif spécifique à travers le temps et l'expérience avec elle.

Courbe de battage

Cela signifie également qu'un concept aussi extrême que la programmation orientée aspect est utile s'il est nécessaire, ce qui signifie, pas toujours et pas très souvent, en raison des coûts implicites.

Mais il a déjà sa place, comme la programmation OOP, comme la programmation générique, comme la programmation fonctionnelle, comme la programmation procédurale, etc.

Avez-vous remarqué que les langues les plus utilisées (et controversées) et largement répandues dans la vie réelle ne sont "pas pures"? C'est parce que permettre plusieurs paradigmes les rend plus flexibles pour changer de contexte au fil du temps et ils remplissent plus de niches d'utilisation.

Klaim
la source
1
+1 pour «pas pur». Les langages OOP purs sont notoirement morts, sauf pour des utilisations / universitaires très spécifiques.
jv42
Que considérerions-nous comme un langage OO pur? Smalltalk?
Zhehao Mao
20

OOP ne va pas mourir à cause d'AOP. AOP ajoute de la valeur, mais il vit en parfaite coexistence avec OOP. Je ne pense pas non plus que la programmation fonctionnelle tue la POO. La POO convient trop bien à de nombreux types de domaines problématiques, il ne serait pas logique de la remplacer par le paradigme fonctionnel.

user281377
la source
1
C'est très subjectif. Je ne pense pas que la POO soit un bon ajustement pour un domaine de problème spécifique, c'est un bon ajustement à la façon dont un développeur spécifique fait une solution. La POO ne va pas mourir parce que les développeurs ne peuvent pas changer de paradigme.
Raynos
6
L'exemple classique où la POO est un bon ajustement sont les interfaces graphiques. Il est difficile d'imaginer une API pour une boîte à outils GUI qui n'est pas OO, même si la langue ne l'est pas. (Certes, ce n'est pas ainsi que le terme domaine à problèmes est généralement utilisé). La modélisation des véhicules de stockage et de récupération et de leurs activités est là où OOP se sent comme un ajustement naturel.
user281377
2
@ammoQ, les interfaces graphiques sont horribles lorsqu'elles sont exprimées en OO. C'est la raison pour laquelle toutes les API dérivent vers les DSL (WPF et similaires). Il n'est pas difficile d'imaginer, disons, Tk - aucune trace de POO là-bas, mais c'est quand même génial (pour la programmation, pas pour son apparence), bien mieux que n'importe lequel des kits d'outils Java OO surdimensionnés. La POO s'intègre très bien dans toutes les simulations basées sur des agents (comme celles que vous avez répertoriées), mais il s'agit d'une infime proportion des problèmes existants.
SK-logic
6
En regardant les premiers exemples de tk que j'ai pu trouver, comment n'est-ce pas OO? Extrait du didacticiel: "Les widgets sont des objets, des instances de classes qui représentent des boutons, des cadres, etc." tkdocs.com/tutorial/concepts.html De plus, les DSL eux-mêmes dépendent beaucoup de la programmation OO. Je ne comprends donc pas vraiment ce que vous essayez de dire?
Inca
3
@ Sk-logic, @ammoQ, @Raynos, @jkocking, je l'ai promu en une question à part entière: programmers.stackexchange.com/questions/88385/… Je serais très intéressé d'avoir plus d'explications à ce sujet, je suis très intéressé à apprendre.
Inca
12

Les paradigmes vont et viennent, mais le code hérité est éternel. Il y aura toujours du code C ++ à maintenir, donc la POO ne disparaîtra jamais complètement.

John Bode
la source
6
+1 pour une phrase vraiment brillante: "Les paradigmes vont et viennent, mais le code hérité est éternel"
NoChance
8

Réponse courte: Non, je ne pense pas.

Réponse plus longue: D'après ce que je comprends d'AOP, ce n'est pas un paradigme de programmation en soi (comme dans, il ne remplace pas la POO), mais plutôt un ajout, une boîte à outils qui vous aide à écrire des méthodes plus courtes, des classes plus simples et à responsabilité unique , etc. Mais cela ne remplace pas la POO.

La chose qui remplace (ou au moins en partie) la POO est la programmation fonctionnelle, qui est en réalité un paradigme de programmation différent (bien qu'il puisse être mélangé avec la POO, par exemple dans le langage de programmation Scala ). Il préfère les infrastructures de données immuables et toutes sortes de fonctionnalités sophistiquées qui ont tendance à frustrer les développeurs OOP, en particulier en ce qui concerne la concurrence.

Cthulhu
la source
Fonctionnel <-> L'impératif est la ligne. La POO y est parallèle. Je pense que la procédure est à l'autre bout de la POO, mais je ne suis pas sûr. Bien sûr, il est amusant que le paradigme fonctionnel soit plus ancien que le paradigme OOP :)
Raynos
2
@Raynos, il n'y a pas de ligne droite. La POO n'est qu'une minuscule abstraction métalinguistique à l'intérieur d'un énorme ensemble (infini) de langages abstraits possibles. Et bien sûr, il est extrêmement stupide de se limiter à l'un d'eux.
SK-logic
6

On parle moins de POO ces jours-ci, car il est supposé être l'approche de facto dans de nombreuses situations. L'AOP n'a jamais démarré comme n'importe quel type de mouvement de masse.

http://imgur.com/9VmKC


la source
5

Je me souviens d'avoir entendu parler de la programmation orientée aspect pour la première fois dans un tutoriel OOPSLA '97. Ils ont dit que cela allait tuer OO à l'époque. Depuis lors, OO n'a fait que croître au-delà des attentes les plus folles. L'AOP est encore à peine connu et n'a pratiquement aucun impact sur l'industrie informatique. Je pense que la réponse est évidente: AOP n'est pas un tueur d'OO.

Tremper
la source
1

Regardez certains systèmes AOP existants. Ils dépendent du fait que vous ayez du code écrit sous une forme quelconque - par exemple, Spring AOP dépend de la définition de vos méthodes sur une classe. Castle Windsor le prend en charge en C #, qui est un langage orienté objet.

Vous pourriez théoriquement passer de la programmation orientée objet à la programmation structurée tout en conservant la programmation AOP, mais en pratique, ce serait difficile. Il est facile de sous-classer quelque chose, de remplacer la méthode appropriée pour appeler les filtres avant / après appropriés et de le transmettre dans le processus d'injection de dépendance.

Il est extrêmement difficile de réécrire des appels de méthode statique pour acheminer vers une méthode de trampoline conçue pour appeler les filtres définis par l'utilisateur.

Donc, d'un point de vue d'implémentation commun, AOP nécessite OOP.

dhasenan
la source
0

Bien que la POO ne soit certainement pas une solution miracle, la même chose peut être dite pour la POA. Il prend en charge la conception basée sur les composants, mais dans le schéma plus large, vos composants sont les nouveaux objets et les interfaces des composants sont fondamentalement une liste transactionnelle de méthodes, ce qui n'est PAS vrai POO.

De plus, l'AOP et la conception basée sur les composants prennent en charge un modèle de données anémiques, dont les gens plus intelligents que moi-même sont critiqués.

http://martinfowler.com/bliki/AnemicDomainModel.html

(Je sais que l'article ci-dessus est ancien, mais étonnamment pertinent)

L'essentiel est que les systèmes AOP sont là pour rester mais ils sont loin d'être parfaits également. Aucun système n'est parfait.

maple_shaft
la source