bonjour.
dans la vie de développeur il y a des moment ou avoir un outils qui analyse contraint cadre... le travail du développeur est quelque chose de bon.
et plus les outils ont une sémantique claire mieux c'est. la POO à base de classes est de cela c'est une approche à la sémantique bien définie et à outillage bien développé. elle permet de bien cadre son développement et de bénéficier d'outil d'aide au développent qui sont éprouvés. Mais cela à un cout. dans certain cas ou la situaion est très mouvante le contraintes de classes deviennent un frein. on met alors en oeuvre des techniques complexe qui en fait ne sont rien d'autre que défaire les cadres que nous apprécions habituellement tant.
aini voyons nous apparaitre de l'injection de byte code en java des mecanismes qui passent outre les protections des classes. genre introspection avec des methodes qui permettent d'invoquer une méthode ou d'accéder à un membre protégé. ou encre des méthodes de swizzling.
si les développeur de language de systemes de lib de compilateur de runtime etc on inventé ces moyens c'est pour répondre à un besoin.
je pense que nous sommes tous d'accord que si ce genre de chose existe dans les compilateurs et non dans les méthodes de polymorphisme, d'héritage etc c'est bien parce que le modèle de POO à base de classes en théorie ne le permets pas.
à l'opposé de cette approche existe des langages aui ont eux aussi leur outils et leur methode de dev qui mise sur l'aspect dynamique. dans cette approche de la programmation on de contraint pas à la avance un objet à rester dans un cadre rigide, on ne vérifie pas qu'une variable appartient à une classe on vérifie dynamiquement que l'objet est capable de faire ce qu'on lui demande. les problématiques de swizzling et de mutation ne sont plus d'actualité car intrinsectes au develeppement. en contre partite il appartien au developpeur de faire le necessaire pour garder la cohérence de sont dev.
Les deux approche n'ont pas à sopposer elle travaillent sur des terrains différents. ainsi il ne viendrait à personne l'idée d'avoir un shell qui ne peut être utilisé qu'apprès avoir compilé sont script.
La question qui se pose c'est dans les zones de recouvrement des deux approches. pour une application web l'aspect dynamique est-elle interressante ? Certain diront oui d'autre dirront que ça n'apporte rien.
ce qui semble être apprecié dans node.js c'est son approche asynchrone. pour tout ce qui pense que la POO à base de prototypes et trops dificile à maitriser et prefère la POO à base de classes ont peut très bien faire du des asynchrone en POO à base de classes. Node.JS à choisi JS. mais il semble claire que l'asynchrone dans CE contexte soit une solution à envisager. même si on ne la retient pas.
et laissons de la place à tout les paradigmes
en voici une petite liste. lorsqu'on mets en place une Appli MVC on a besoin de réagir aux modifications internevues dans la vue pour prendre en compte des action de l'utilisateur. pour ça on utilise le Design Pattern Observable. en programation réactive il n'est pas besoin de mettre n place un pattern cela fait partit du langage. de la même façons les langages à agent ou acteur permettent de mettre en place des techniques qui necessitent dans d'autre langage des patterns plus ou moins complexes.
Types de programmation impérative (et dérivés)
Programmation impérative, paradigme originel et le plus courant
Programmation structurée, visant à structurer les programmes impératifs pour en supprimer les instructions goto
Programmation procédurale, à comparer à la programmation fonctionnelle
Types de programmation orientée objet (et dérivés)
Programmation orientée objet, consistant en la définition et l’assemblage de briques logicielles appelées objets (comme en Smalltalk)
Programmation orientée prototype, qui simplifie et rend plus flexible la programmation orientée objet
Programmation orientée classe, à comparer à la Programmation orientée prototype (dans le contexte de la programmation orientée objet)
Programmation orientée composant (comme en OLE)
Types de programmation déclarative (et dérivés)
Programmation déclarative, consistant à déclarer les données du problème, puis à demander au programme de le résoudre
Programmation descriptive, à l'expressivité réduite, qui permet de décrire des structures de données (par exemple, HTML, XML ou LaTeX)
Programmation fonctionnelle, avec laquelle un programme est une fonction au sens mathématique du terme
Programmation logique, consistant à exprimer les problèmes et les algorithmes sous forme de prédicats (comme en Prolog)
Programmation par contraintes, à comparer à la programmation logique
Autres types
Programmation événementielle, consistant à répondre à des événements
Programmation séquentielle
Programmation interruptible, à comparer à la programmation événementielle
Programmation concurrente, où l’on tient compte de l’exécution en parallèle de plusieurs piles sémantiques
Programmation orientée aspect (comme en AspectJ)
Programmation par contrat, dans lequel le déroulement des traitements est régi par des règles (comme en Eiffel)
Programmation chimique, où les programmes sont vus comme des solutions chimiques abstraites. Les données sont des molécules dont les réactions chimiques représentent les opérations.
Programmation orientée agent, souvent basée sur la programmation orientée objet, qui simplifie le développement d’agents logiciels
Programmation orientée concept
Programmation orientée pile (comme en Forth)
Programmation orientée principes
Programmation orientée flux de données, souvent utilisée pour les solutions de communication client/serveur, elle permet d'abstraire les différents plateformes en se concentrant sur l'échange et le traitement des données. Elle est généralement représentée sous forme de diagrammes ou de graphes (voir Diagramme de flux de données) (comme dans un Tableur)
Programmation non-déterministe
Programmation orientée sujet
Programmation réactive
Programmation synchrone
Programmation par annotations (comme en langage Flare)
Programmation par attributs (comme avec les annotations Java, pré-traitées par la classe XDoclet, ou avec les attributs C#)
Programmation sur flux, à comparer à la Programmation sur événement
Programmation par messages, à comparer à la programmation impérative
Programmation orientée processus, pour la programmation parallèle
Programmation récursive, à comparer à la programmation itérative
Programmation réflexive
Programmation scalaire, à comparer à la programmation par tableaux
Programmation au niveau valeur, à comparer à la programmation au niveau fonction
A+JYT
Partager