Langages (général) Flashcards
Quelles sont les caractéristiques des langages orienté-objet purs?
- Encapsulation / masquage des détails d’implémentation;
- Héritage;
- Polymorphisme;
- Tous les types prédéfinis sont des objets;
- Toutes les opérations sont exécutées par l’envoi de messages aux objets;
- Tous les types définis par l’utilisateur sont des objets.
Définir ‘programmation orienté-objet’.
Paradigme de programmation informatique consistant en la définition et l’interaction de briques logicielles appelées objets.
Un objet représente un concept, une idée ou toute entité du monde physique, comme une voiture ou une personne. Il possède une structure interne et un comportement, et il sait interagir avec ses pairs.
Définir ‘programmation fonctionnelle’.
Paradigme de programmation qui considère le calcul en tant qu’évaluation de fonctions mathématiques et rejette le changement d’état et la mutation des données.
Elle souligne l’application des fonctions, contrairement au modèle de programmation impérative qui met en avant les changements d’état.
Définir ‘programmation impérative’.
Paradigme de programmation qui décrit les opérations en séquences d’instructions exécutées par l’ordinateur pour modifier l’état du programme.
Ce type de programmation est le plus répandu parmi l’ensemble des langages de programmation existants, et se différencie de la programmation déclarative.
Définir ‘programmation déclarative’.
Paradigme de programmation. Il consiste à créer des applications sur la base de composants logiciels indépendants du contexte et ne comportant aucun état interne. Autrement dit, l’appel d’un de ces composants avec les mêmes arguments produit exactement le même résultat, quel que soit le moment et le contexte de l’appel.
On y exprime le calcul sans en décrire les étapes (contraire de ‘impérative’.
Donner quelques formes de programmation déclarative.
- Programmation descriptive (HTML, XML);
- Programmation fonctionnelle (LISP, Haskell);
- Programmation logique (Prolog, Mercury);
- Programmation par contrainte.
Qu’entend-on par ‘objet variable’ (mutable object)?
Objet dont l’état peut être modifié après sa création, si nous avons une référence vers lui.
Qu’entend-on par ‘objet immuable’ (immutable object)?
Objet dont l’état ne peut être modifié après sa création, même si nous avons une référence vers lui.
Qu’entend-on par ‘fonction’, d’un point de vue mathématique?
Une fonction est une relation qui associe chaque valeur d’un domaine (entrée) à exactement une valeur d’un codomaine (sortie).
Quel est le principal bénéfice de ne pas avoir de mutabilité et d’effets de bord?
Les programmes sont plus faciles à comprendre et à tester parce que l’activité de la fonction est complètement locale et n’a pas d’effets externes.
Quelles sont les principales caractéristiques des langages fonctionnels?
- Fonctions d’ordre supérieur (higher-order functions);
- Closures lexicales;
- Appariement de formes (pattern matching);
- Assignation unique (single assignment);
- Evaluation à la demande (lazy evaluation);
- Inférence de type;
- Optimisation de la récursion terminale (tail call optimisation);
- Effets monadiques.
Définir ‘effets de bords’.
Nous disons d’une fonction ou d’une expression qu’elle produit des effets de bord si elle modifie un état autre que sa valeur de retour.
Ex.: - modifier une variable globale ou statique;
- écrire des données dans un fichier ou un affichage; - appeler des fonctions qui ont des effets de bord.
En présence d’effets de bord, le comportement d’un programme dépend de son historique d’exécution.
Quel est l’élément principal permettant de dire qu’un langage est fonctionnel?
Les fonctions y sont des valeurs de première classe. Chaque fonction est une valeur qui peut être passée comme paramètre à une autre fonction.
Quelles sont les caractéristiques des langages de programmation fonctionnels purs?
- Les modifications y sont exclues;
- Les variables y sont utilisées dans un sens mathématique, avec des identifiants référant à des valeurs immuables.
Scala n’empêche pas l’utilisation de variables mutables, et ne peut donc être qualifié de fonctionnel pur.
Quelles sont les forces respectives de la programmation fonctionnelle et de la programmation orienté-objet? Quels types de problèmes sont mieux résolus par l’un et par l’autre?
La programmation fonctionnelle permet de bâtir facilement des choses intéressantes à partir de pièces simples (fonctions) tandis que la POO rend facile l’adoption et l’extensibilité de systèmes complexes par l’utilisation de l’héritage, les classes, et ainsi de suite.
Qu’est-ce qu’une closure?
Une closure est une fonction liée à l’environnement dans lequel elle a été définie. Elle conserve l’accès aux variables qui étaient dans sa portée au moment où elle fut crée, mais qui pourrait être hors portée quand la closure est appelée.
Une closure est donc créée, entre autres, lorsqu’une fonction est définie dans le corps d’une autre fonction et fait référence à des arguments ou des variables locales à la fonction dans laquelle elle est définie.
Autre définition: passage de fonction en tant que paramètre.
(a closure is any function which closes over the environment in which it is defined. For example, closure will keep track of any variable changes outside the function that are being referred inside the function.)
Qu’est-ce que la JVM?
Java Virtual Machine.
Appareil informatique fictif (virtual computing device) qui exécute des programmes compilés sous forme de bytecode Java.