it-swarm-fr.com

Pour quels problèmes la programmation orientée objet n'est-elle pas un bon choix?

Un peu inspiré par cette question: Pour quels problèmes courants la programmation fonctionnelle n'est pas un bon ajustement? - Mais néanmoins une question que j'ai toujours voulue, mais aussi peur de demander.

Je suis dans ... Eh bien, appelons-le Développement de logiciels d'ingénierie Pratiquement toute ma vie, et dans tout ce moment-là, bien que OO J'avais toujours été là (bien, la plupart de cette époque) Je n'ai jamais eu la nécessité d'utiliser "ses manières", ni d'apprendre ce paradigme. Nous avons toujours utilisé des structures de programme, des routines/fonctions/modules plutôt simples et bien que cela se trouve à l'opposé des meilleures pratiques d'aujourd'hui gérant ces programmes (programmes jusqu'à environ 300k LOC, rien de trop grand) ne s'est jamais révélé difficile , encore moins impossible.

Je voulais donc vous demander, quel serait le problème de la sorte pour lequel le paradigme orienté objet ne serait pas un bon choix? Par rapport à la programmation procédurale?

19
Rook

Programmation orientée objet est Programmation procédurale. La chose qui fait OO _ orienté objet est, comme Robert Harvey mentionne dans un commentaire, que OO abstrait des données de manière particulière (à savoir: regrouper les fonctions qui fonctionnent sur une structure avec cette structure).

William Cook explique la différence entre les objets et les types de données abstraits gentiment.

Donc, au risque de sonner le visage, je dirais que les objets ne sont pas satisfaits lorsque vous devez prolonger facilement les opérations (Nombre d'opérations effectuées sur vos données, et vous n'avez pas besoin d'avoir des implémentations variables de votre Les données. Cela dit, il y a choses que vous pouvez faire pour rapprocher les deux plus près.

8
Frank Shearar

La valeur principale de OO est-elle qu'il fournit un découplage entre les composants de votre système, ce qui facilite l'écriture DRY code et adaptez-vous à des types spécifiques de changement que vous avez Planifiez dans votre conception. Le coût est qu'il ajoute des couches d'indirection, ce qui peut rendre le code plus difficile à raisonner, moins efficace et plus difficile à modifier par des moyens imprévus (les moyens qui ne sont pas facilités par le découplage de votre conception) . C'est donc une perte de temps pour tout subproblème où vous n'avez pas besoin du découplage qu'il fournit. Spécifiquement, il s'agit d'une perte de temps si vous pouvez facilement écrire DRY code sans elle et don 'T anticiper les modifications spécifiques spécifiques les modifications bénéficieraient du bon découplage que OO fournit.

5
dsimcha

concurrence: le mécanisme de verrouillage semble un peu problématique; Seuls certains très bons développeurs sont mis au travail sur la partie enfermée des projets

s'étendant: ne sais pas à quel point le courant ==OO Langues est. Seulement savoir que Java est mauvais. Certaines DSLS (langages spécifiques à un domaine) doivent être mis en œuvre comme des cadres. Clojure d'autre part (cela est fonctionnel), a des macros.

3
Belun

La plupart des programmeurs, OO Savvy ou non, utilise des concepts tels que l'abstraction, la masquage d'informations et les interfaces dans leur code. OO Langues simplifie simplement que ces concepts sont déjà intégré. Vous n'avez pas à les inventer vous-même.

Un algorithme de base comme qsort() utilise des abstractions pour comparaison d'objets arbitraires. fread() utilise une interface pour résumer les détails du flux, etc.

De ce point de vue, je trouve qu'il est difficile de trouver un problème particulier qui sont mieux résolus avec une approche non OO.

0
Martin Wickman

Object programmation Orientée peut être utilisé pour modéliser votre domaine. Les classes peuvent être utilisées pour représenter l'état et le comportement des entités, des agrégats, des collaborations, des services au sein de votre modèle de domaine. De plus, les invocations de méthodes et des protocoles entre les objets peuvent modéliser les relations dynamiques entre les entités.

Je l'ai trouvé à être un moyen utile de produire un DRY modèle qui peut proprement représenter les règles et le comportement de votre application de manière découplée des questions techniques (comme l'utilisation d'un base de données ou une file d'attente de messages, ou le fait qu'il est une application Web). un bon livre sur le sujet est Domain Driven design

Une chose importante à noter ici est que les " entités " je mentionnées ci-dessus ne sont pas à la carte sur des objets du monde réel! Ils peuvent représenter des parties abstraites du domaine de votre application.

Donc, si tel est l'objet de programmation Orienté est bon à; ce qui est pas bon? Eh bien, quoi que ce soit où le modèle de domaine ne peut être exprimé ainsi que des objets. Par exemple, certains mathématiques, (statistique, logique, etc.) ou technique (par exemple un compilateur) programmes sont mieux exprimable dans des styles différents. J'ai trouvé que pour les affaires flux de travail des applications, une combinaison de OO et techniques sur mesure DSL ont été très efficaces pour ce qui nous permet de modéliser les types de relations et d'événements qui se produisent dans le processus d'affaires. Pour la vérification de programmes la preuve automatisée la vérification d'une approche fonctionnelle est souvent utilisé, parce que ses fonctions pures permettent un raisonnement mathématique plus direct.

0
flamingpenguin

Je pense que lorsque lorsque des systèmes de construction combinant d'autres systèmes via Web API (repos, XMLPRC, CURL/WGET/WGET), vous pouvez écrire OO wrappers, mais il est clairement juste une commodité. Si le service Web est clairement utilisé est simple et il s'agit simplement d'une ou deux lignes, alors OO est trop. Si d'autre part, vous devez avoir à envelopper une API Web complexe (comme Amazon Aws pour Exemple) Ensuite, il est agréable d'avoir une bibliothèque d'emballage (comme Boto In python pour AWS).

Les pensées?

0
Christopher Mahan

Les langues pure orientées objet ne conviennent pas pour de nombreux cas. Parce qu'il y a des critères à remplir pour être une langue pure orientée objet. Voir-
[.____] https://stackoverflow.com/questions/250062/what-is-meant-by-the-term-true-Object-Orientation/250098#250098

Mais les langages de programmation les plus largement utilisés sont multi-paradigmes. Ils incorporent de nombreuses fonctionnalités non OO pour rencontrer divers types de problèmes de programmation et de développement. C++, C #, Java ou Ruby Tous ont des fonctionnalités non oo. Donc, ils peuvent faire face à des problèmes que Pure-OO n'est pas bon.

0
Gulshan