Langages (général) Flashcards

1
Q

Quelles sont les caractéristiques des langages orienté-objet purs?

A
  • 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.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Définir ‘programmation orienté-objet’.

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Définir ‘programmation fonctionnelle’.

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Définir ‘programmation impérative’.

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Définir ‘programmation déclarative’.

A

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’.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Donner quelques formes de programmation déclarative.

A
  • Programmation descriptive (HTML, XML);
  • Programmation fonctionnelle (LISP, Haskell);
  • Programmation logique (Prolog, Mercury);
  • Programmation par contrainte.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Qu’entend-on par ‘objet variable’ (mutable object)?

A

Objet dont l’état peut être modifié après sa création, si nous avons une référence vers lui.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Qu’entend-on par ‘objet immuable’ (immutable object)?

A

Objet dont l’état ne peut être modifié après sa création, même si nous avons une référence vers lui.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Qu’entend-on par ‘fonction’, d’un point de vue mathématique?

A

Une fonction est une relation qui associe chaque valeur d’un domaine (entrée) à exactement une valeur d’un codomaine (sortie).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Quel est le principal bénéfice de ne pas avoir de mutabilité et d’effets de bord?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Quelles sont les principales caractéristiques des langages fonctionnels?

A
  • 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.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Définir ‘effets de bords’.

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Quel est l’élément principal permettant de dire qu’un langage est fonctionnel?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Quelles sont les caractéristiques des langages de programmation fonctionnels purs?

A
  • 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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

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?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Qu’est-ce qu’une closure?

A

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.)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Qu’est-ce que la JVM?

A

Java Virtual Machine.

Appareil informatique fictif (virtual computing device) qui exécute des programmes compilés sous forme de bytecode Java.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Qu’est-ce que le modèle d’acteur?

A

Le modèle d’acteur est un modèle mathématique qui considère des acteurs comme les seules fonctions primitives nécessaires pour la programmation concurrente. Les acteurs communiquent par échange de messages. En réponse à un message, un acteur peut effectuer un traitement local, créer d’autres acteurs, ou envoyer d’autres messages

19
Q

Quelles bonnes idées Java amena-t-il dans le monde de la programmation à son arrivée en 1995?

A
  • Environnement de programmation indépendant de la plateforme de déploiement;
  • Garbage collector automatisé;
  • POO plus facile que C/C++.
20
Q

Qu’est-ce le typage statique?

A

Le typage statique est un système de typage où les valeurs et les variables ont des types. Par exemple, une variable numérique ne peut tenir d’autres chose qu’un nombre. Les types sont déterminés et appliqués à la compilation ou à la déclaration.

21
Q

Qu’est-ce que le typage dynamique?

A

Le typage dynamique est un système de typage où les valeurs ont des types mais où les variables n’en ont pas. Il est possible d’assigner successivement un nombre et une chaîne à la même variable.

22
Q

Qu’est-ce que l’inférence de type?

A

L’inférence de type est une technique par laquelle le compilateur détermine le type d’une variable ou d’une fonction sana l’aide d’un programmeur. Elle assure l’absence d’erreur de type à l’exécution sans que le programmeur ait le fardeau de déclarer les types.

23
Q

Qu’est-ce que le principe d’accès universel?

A

Proposé par Bertrand Meyer, il stipule qu’il ne doit pas y avoir de différence entre travailler avec un attribut, une propriété ou une méthode.

24
Q

Qu’est-ce qu’un littéral?

A

En informatique, un littéral est une notation servant à représenter une valeur fixe dans le code source.

25
Q

Comment appelle-t-on le passage de fonctions comme paramètres?

A

Closure.

26
Q

Qu’est-ce qu’une fonction anonyme?

A

Une fonction sans nom prédéfini, que l’on utilise habituellement pour passer en paramètre à une autre fonction.

27
Q

Qu’est-ce qu’un mixin?

A

Un mixin est une classe qui contient une combinaison de méthodes issues d’autres classes. On peut aussi voir le mixin comme une interface ayant des méthodes implémentées. Chaque mixin représente un service qu’il est possible de greffer (ou plutôt ‘mixer’) aux classes héritières.

28
Q

Qu’est-ce qu’un trait?

A

Un trait est un concept utilisé en programmation orientée-objet. Il représente une collection de méthodes qui peuvent être utilisées pour étendre les fonctionnalités d’une classe.

Essentiellement, un trait est similaire à une classe faite uniquement de méthodes concrètes, et pouvant être utilisée pour étendre une autre classe d’une manière similaire à l’héritage multiple.

29
Q

Pourquoi dit-on qu’un trait est à mi-chemin entre l’interface et le mixin?

A

Une interface est seulement faite de signatures de méthodes, alors que le trait inclut aussi les définitions complètes des méthodes. Le mixin inclut les définitions des méthodes, mais il peut aussi transporter de l’état, ce que les traits ne font pas habituellement.

Une interface est utilisée par une classe en implémentant ses méthodes. Un mixin est utilisé par une classe lorsque cette dernière mélange en elle-même les fonctionnalités du mixin, i.e. ses attributs et ses méthodes. Un trait est utilisé par une classe en fusionnant la collection de méthodes supplémentaires fournies, avec un mécanisme pour résoudre les conflits de nommage.

30
Q

Qu’est-ce que le paramétrage de type (type parameterization)?

A

Le paramétrage de type permet de créer des types qui acceptent d’autres types en paramètre. Il permet donc de définir des méthodes ou des classes en termes de types à définir plus tard.

31
Q

Qu’est-ce que la covariance de type?

A

La covariance permet de surcharger un paramètre avec une spécialisation de son type.

32
Q

Qu’est-ce que la contravariance de type?

A

La contravariance permet de surcharger un paramètre avec une spécialisation de son type.

33
Q

Qu’est-ce qu’une fonction d’ordre supérieur?

A

Une fonction est dite d’ordre supérieur si elle attend une autre fonction en paramètre ou si elle retourne une fonction comme résultat.

34
Q

Décrire le patron de l’objet nul (Null Object pattern).

A

Au lieu d’utiliser une référence nulle pour signifier l’absence d’objet (ex.: client inexistant), nous utilisons un objet qui implémente l’interface attendue, mais dont les méthodes ne font rien. L’avantage de cette approche est que l’objet nul est prévisible et n’a pas d’effets secondaires.

35
Q

Qu’est-ce qu’une fonction partielle?

A

Une fonction partielle est une fonction définie seulement pour un sous-ensemble des valeurs possibles pour ses arguments.

36
Q

Quels sont les bénéfices de la transparence référentielle?

A

La transparence référentielle nous permet d’analyser le code beaucoup plus facilement. Nous pouvons prouver que le programme fonctionne correctement en remplaçant les fonctions pures par leurs valeurs et réduire une expression complexe en une expression plus simple. Parfois, nous pouvons même calculer le résultat d’un programme dans notre tête.

La facilité à comprendre le code amenée par la transparence référentielle nous permet de débogguer et résoudre des problèmes complexes plus facilement.

37
Q

Quels sont les deux types de récursion, et quels sont leurs caractéristiques?

A
  • La récursion mutuelle (head recursion), où on fait d’abord l’appel récursif, puis nous récupérons sa valeur de retour ensuite prendre la valeur de retour pour calculer le résultat final. Ce type de récursion peut mener à des erreurs de dépassement de pile si l’imbrication des appels est trop profond;
  • La récursion terminale (tail recursion), où le calcul est effectué en premier, puis nous faisons l’appel récursif en passant le résultat intermédiaire en paramètre. Ce type de récursion fonctionne un peu à la manière d’une boucle.
38
Q

Qu’est-ce qu’un type de donnée algébrique?

A

Un type de donnée algébrique où toutes les valeurs du jeu possible pour le type sont énumérées. Nous pouvons aussi le voir comme un type composite, c’est-à-dire formé par la combinaison d’autres types.

39
Q

Qu’est-ce qu’une fonction totale?

A

Une fonction totale est une fonction qui sait traiter toutes les valeurs d’un type de donnée algébrique.

40
Q

Comment la programmation fonctionnelle nous aide-t-elle à mieux gérer la complexité?

A

La programmation fonctionnelle nous encourage à écrire des composantes simples qui ne font qu’une chose (mais qui la font bien) et qui travaillent bien avec les autres composantes. Cette ‘composabilité’ nous permet de créer et de maintenir des programmes à l’aide de petits morceaux faciles à comprendre et à agencer.

41
Q

Qu’est-ce que le principe de la responsabilité unique (Single Responsibility Principle)?

A

Le principe de la responsabilité unique stipule que chaque classe ou fonction ne devrait avoir qu’une seule responsabilité, et que cette responsabilité devrait y être entièrement encapsulée.

En respectant ce principe, les classes et les fonctions demeurent petites et pures, ce qui nous aide automatiquement à les composer avec d’autres classes et fonctions.

42
Q

Donner quelques exemples d’effets de bord que l’on peut obtenir en appelant une fonction.

A
  • Modification de variable;
  • Modification de structure de donnée;
  • Renseigner un champ d’un objet;
  • Lancer une exception ou arrêter l’exécution avec une erreur;
  • Imprimer à la console ou lire la saisie de l’utilisateur;
  • Lire ou écrire dans un fichier;
  • Dessiner dans un écran.
43
Q

Qu’entend-t-on par ‘fonction pure’?

A

Une fonction est pure si elle ne produit pas d’effets observables sur l’exécution d’un programme autre que le calcul d’un résultat à partir de paramètres. Nous disons alors qu’elle ne produit pas d’effets de bord.