Question

    

Cette question a déjà une réponse ici:

         

Je travaille en tant que développeur pour les 4 dernières années, avec les 4 années précédentes pour que l'étude du développement de logiciels au collège. Au cours de mes 4 ans dans l'industrie, je l'ai fait quelques travaux dans VB6 (qui était une blague), mais la majeure partie a été en C # / ASP.NET. Pendant ce temps, je suis passé d'un paradigme procédural « conscient objet » à un paradigme orienté objet.

Dernièrement, je suis curieux de connaître d'autres paradigmes de programmation là-bas, donc je pensais que je vais demander à d'autres développeurs leurs opinions sur les similitudes et les différences entre ces paradigmes, en particulier à POO? En POO, je trouve qu'il ya un fort accent sur les relations et les interactions logiques entre les concepts. Quels sont les cadres esprit que vous devez être pour les autres paradigmes?

Était-ce utile?

La solution

De loin les meilleures explications des paradigmes de programmation se trouvent dans les œuvres de Peter van Roy. Surtout dans le livre Concepts, techniques et modèles de programmation informatique par Peter Van Roy et Seif Haridi . ( est ici le wiki compagnon .) CTM utilise multi-paradigme distribué langage de programmation Oz pour présenter tous les grands paradigmes de programmation.

Peter van Roy a également fait cette affiche étonnante qui montre les 34 grands paradigmes et leurs relations et des positions sur les différents axes . L'affiche est essentiellement une version très compressée de marque communautaire. Une explication plus approfondie de cette affiche est contenue dans l'article qui est apparu comme un chapitre dans le livre New Computational paradigmes pour Computer Music , édité par G. Assayag et A. Gerzso.

Un autre grand livre qui démontre plusieurs paradigmes majeurs de programmation est Structure et interprétation des programmes informatiques par Harold Abelson et Gerald Jay Sussman . Ce livre a été la base de CS101 du MIT depuis plusieurs décennies. Un cours enseigné par Abelson et Sussman eux-mêmes a été enregistré à une formation en entreprise pour Hewlett -PACKARD en 1986 .

La principale différence entre la marque communautaire et SICP est que marque communautaire démontre des paradigmes les plus grandes en utilisant un langage qui les prend en charge (la plupart du temps distribué Oz, mais aussi quelques autres). SICP OTOH les démontre par la mise en œuvre dans une langue qui fait pas les nativement (un sous-ensemble du schéma). Voyant orienté objet mis en œuvre dans une douzaine de lignes de code est foutue impressionnant.

Vous pouvez trouver enregistrements vidéo et du matériel didactique du cours du printemps 2005 sur le site du MIT OpenCourseWare . Un autre enregistrement du cours de courte durée Université projet ArsDigita du MIT. SICP a également été enseigné dans d'autres universités, en fait, il est enseigné à Berkley droit maintenant.

Sur le plan personnel, ma propre expérience a été que vraiment comprendre un paradigme de programmation est uniquement possible

  • un paradigme à la fois et
  • dans les langues qui la force dans le paradigme

Idéalement, vous pouvez utiliser une langue qui prend le paradigme à l'extrême. Dans les langues multi-paradigme, il est beaucoup trop facile de « tricher » et à l'arrière tomber sur un paradigme que vous êtes plus à l'aise. Et en utilisant un paradigme comme une bibliothèque n'est vraiment possible dans des langues comme Scheme qui sont spécialement conçus pour ce type de programmation. Apprendre la programmation fonctionnelle paresseuse en Java, par exemple, n'est pas une bonne idée, bien qu'il existe des bibliothèques pour cela.

Voici quelques de mes favoris:

  • orientation objet en général : auto
    • orientation objet à base de prototype : Auto
    • basée sur la classe objet orientation : novlangue
      • orienté objet à base de classe statique : Eiffel
    • envoi multiple basé OO : Dylan
    • objet orientation fonctionnel + : Scala
  • programmation fonctionnelle : Haskell
    • pur programmation fonctionnelle : Haskell
      • paresseux pur programmation fonctionnelle : Haskell
    • programmation fonctionnelle statique : Haskell
    • programmation fonctionnelle dynamique : Clojure
  • programmation impérative : Lua
  • programmation concurrente : Clojure
    • programmation concurrente passage de messages : Erlang
  • metaprogramming : Scheme
  • programmation orientée langage : de domaine Intentional Workbench

Autres conseils

Voici mon:

  • Programmation fonctionnelle signifie fonctions d'écriture qui prennent des données et opèrent là-dessus. Vous construisez de grandes applications par assemblage des fonctions.
  • données encapsulées programmation orientée objet et ses opérateurs ensemble en un seul composant qui mappe sur des modèles mentaux bien. Vous construisez de grandes applications sur des objets collaborateurs.
  • La programmation déclarative (par exemple, SQL) sépare ce qui est fait de la façon dont il est fait. Vous dites une base de données relationnelle ce que vous voulez qu'il fasse et laisser la conduite au moteur de recherche.

Eh bien ce lien tente d'expliquer quelque chose que je l'ai utilisé au cours des deux dernières décennies. Je le mentionne parce qu'il est prouvable utile et je pense qu'il compte comme un paradigme, vous devez penser que de l'utiliser d'une manière particulière.

La façon différente, vous devez penser est que lors de l'analyse d'un problème, plutôt que de demander quels objets il y a et quelles actions ont lieu, vous commencez avec les exigences générales et demandez Qu'est-ce qui doit être dit?

De là, vous choisissez ou concevoir un langage spécifique de domaine (DSL), et l'état de votre problème dans cette langue.

Ce lien explique une langue particulière pour décrire l'évolution dynamique des interfaces utilisateur de dialogue. Sa mise en œuvre dépend d'une structure de contrôle particulier, exécution différentielle. Ce qu'il accomplit est un ordre de réduction de l'ampleur dans le code source, avec moins de chances d'erreurs de codage. Ces économies peuvent être dépensés pour faire l'interface utilisateur plus sophistiqué.

Pour les autres types de problèmes, d'autres structures de contrôle sont appropriées, mais le concept de travail par le biais d'un DSL bien choisi, ce qui rend le code source beaucoup plus petit, plus facilement modifié, et moins sujette aux erreurs, est l'approche commune.

Je pense que les paradigmes de la programmation fonctionnelle et POO sont mieux évaluées en identifiant les types de problèmes dont ils sont la meilleure expression. Souvent, ces paradigmes deviennent simplement bandwagons et sont présentées comme panacées, plutôt que de les classer par les espaces problématiques qu'ils abordent.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top