244 votes

POO vs programmation fonctionnelle vs programmation procédurale

Quelles sont les différences entre ces paradigmes de programmation, et sont-ils mieux adaptés à des problèmes particuliers ou certains cas d'utilisation en favorisent-ils un par rapport aux autres ?

Exemples d'architecture appréciés !

0 votes

Ce n'est pas une réponse complète, mais j'ai écrit un peu sur la façon dont le style "fonctionnel" affecte/contraste le style "OO" (dans le contexte de F#) ici : lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!511.entry

0 votes

Vous pourriez envisager de lire ça ! Il y a beaucoup d'exemples pour savoir quand utiliser quelle fourmi, quelles sont les principales différences, les avantages et les inconvénients, etc.

2voto

Svante Points 24355

Je pense qu'ils ne sont souvent pas "versus", mais que vous pouvez les combiner. Je pense également que, souvent, les mots que vous mentionnez ne sont que des mots à la mode. Peu de gens savent réellement ce que signifie "orienté objet", même s'ils en sont les plus fervents évangélistes.

1voto

sneg Points 666

Un de mes amis est en train d'écrire une application graphique utilisant NVIDIA CUDA . Les applications s'intègrent très bien au paradigme de la POO et le problème peut être décomposé en modules. Cependant, pour utiliser CUDA, vous devez utiliser le C, qui ne supporte pas héritage . C'est pourquoi vous devez faire preuve d'intelligence.

a) Vous concevez un système astucieux qui imite l'héritage dans une certaine mesure. C'est possible !

i) Vous pouvez utiliser un système de crochet qui s'attend à ce que chaque enfant C du parent P ait une certaine surcharge pour la fonction F. Vous pouvez faire en sorte que les enfants enregistrent leurs surcharges, qui seront stockées et appelées si nécessaire.

ii) Vous pouvez utiliser la structure alignement de la mémoire pour transformer les enfants en parents.

Cela peut être intéressant, mais il n'est pas facile de trouver une solution fiable et à l'épreuve du temps. Vous passerez beaucoup de temps à concevoir le système et il n'y a aucune garantie que vous ne rencontrerez pas de problèmes à mi-chemin du projet. Mise en œuvre de héritage multiple est encore plus difficile, voire presque impossible.

b) Vous pouvez utiliser une politique de dénomination cohérente et utiliser diviser et conquérir pour créer un programme. Il n'y aura pas d'héritage, mais comme vos fonctions sont petites, faciles à comprendre et formatées de manière cohérente, vous n'en avez pas besoin. La quantité de code que vous devez écrire augmente, il est très difficile de rester concentré et de ne pas succomber aux solutions faciles (hacks). Cependant, cette façon ninja de coder est la façon C de coder. Rester en équilibre entre la liberté de bas niveau et l'écriture d'un bon code. Un bon moyen d'y parvenir est d'écrire des prototypes en utilisant un langage fonctionnel. Par exemple, Haskell est très utile pour le prototypage d'algorithmes.

Je tends vers l'approche b. J'ai écrit une solution possible en utilisant l'approche a, et je vais être honnête, cela m'a semblé très peu naturel d'utiliser ce code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X