POO : CM Flashcards
Paradigme
Ensemble de règle, de concept, de représentation, d’abstraction, de manière de refléchir dans un langage de programmation.
Ce qui nous donne des propriété / contrainte différentes
Impératif
Etat global qui est modifié par une suite séquentielle d’instruction avec effet de bord. C’est une machine à état (Turing)
Points positif de l’impératif
- Proche de la machine (Plus facile à comprendre mais dur de faire des systèmes complexe)
- Approche naturelle (Recette)
Points négatifs de l’impératif
- L’état dépends de l’historique (= dur à débug)
- Le comportement dépend de l’état et l’état dépend du comportement (= dur à débug)
Fonctionnel
- Pas d’état.
- Ensemble de fonction pure = expression (au sens mathématique et sans effet de bords)
- Pas d’ordre d’évaluation
- Composition de fonctions
- Lambda calcul
Points positifs du fonctionnel
- Très proche du raisonnement mathématique
- Facilité de prouvé que le programme est exact
- Comportement indépendant de l’état (= plus facile à débug)
Points négatif du fonctionnel
- Concept beaucoup plus abstrait
- Moins “naturel”
Orienté objet
- Différents objets qui ont chaqu’un leur comportement et état propre
- Ils collaborent en s’envoyant des messages.
L’état global est donc défini comme l’union des états des objets.
Pourquoi autant de langages ? Pourquoi le multi-paradigme?
Chaque langages à des caracteristiques et des propriétés différente (a cause de son paradigme entre autre).
Donc un langage peut être très adapté pour résoudre un problème et très indadapté pour en résoudre un autre.
Chacun à ses applications spécifiques :
C = Embarqué
Python = IA
PHP = Serveur
Javascript = Client web
Les platformes multi-langages compiles plusieurs langages ensemble pour avoir le langage le plus adapté sur chaque sous-problème.
Pourquoi différents paradigme ?
Chaque paradigmes à ses aventages et inconvéhniant. Cela nous permet de choisir le mieux adapté en fonction du problème.
Fonctionnel = Parallélisme
Objet = Interface homme machine
Les langages multi paradigmes prennent le “meilleur” de plusieurs paradigme
Caractéristiques de Java
- Libre
- Multiplatforme
- Très objet (Basé sur des classes)
- Très utilisé = Environnement riche
- Rigoureux
- Concept dans le langages simple
- Typage fort statique et explicite
- Héritage simple
- Gestion de la mémoire automatique avec le garbage collector et référence sans pointeurs
C’est quoi la JVM ? (+ Avantage et inconvénient)
Java Virtual Machine
Programme qui va simuler une machine réelle (Abstraction de l’OS et du CPU).
Interprete le code précompilé
Avantage :
Performant = Unique analyse et execution efficace
Portable = Fonctionne sur n’importe quel couple OS/CPU (Contrairement au C)
Désaventage :
Plus lent mais on utilise JIT pour compensé
Avantage et désavantage du C
Performant = Analyse une seule fois le code et le convertit en instruction native
Distribution compliqué en fonction de l’architecture du CPU et de l’OS
C’est quoi JIT ?
Just In Time
Optimisation dynamique effectué à l’execution utilisé par Java et Scala
C’est quoi un Objet ? ça permet d’obtenir quoi ?
Entité autonome qui dépend et est responsable de son propre état.
Son état est masqué pour les autres objets
Il a un comportement/traitement/manipulation de son propre état
Permet d’obtenir de l’isolation, de l’encapsulation et de la modularité
C’est quoi la Modularité ? ça permet de faire quoi ?
Décomposition d’un système complexe en modules indépendants et réutilisable.
Le programme global fonctionne par collaboration des différents modules
Permet de faire un DECOUPLAGE
C’est quoi l’Encapsulation ? ça implique quoi ?
Créer des boites noires contenant un état et des données (données et fonctions). Ce qu’elles contienne est masqué.
Implique la remplacabilité, on peut remplacer un objet par un autre si ils ont la même interface.
Tell don’t ask c’est quoi ? ça implique quoi ?
Toutes les décisions de traitement doivent être faites par l’objet car il en a la résponsabilité. = Encapsulation
viellir(1) et pas changeAge(recupAge()+1))
C’est quoi une interface ? C’est une alternative à quoi ?
Contrat abstrait que passe des objets sur la manière de communiquer.
C’est l’ensemble des messages qu’un objet est capable de recevoir et met à disposition. = méthode publique
Définit un type abstrait
Alternative de l’héritage pour faire de la réutilisabilité sans sous-typage
C’est quoi l’implémentation ?
Réalisation concrète d’une interface.
Il peut y avoir plusieurs implémentation pour une même interface
C’est quoi une classe ?
Définition d’un type concret.
Ensemble des objets qui ont des caractéristiques communes (Interface/propriétés) = modèle d’un objet
C’est quoi une instance ?
Occurence d’un objet définit par une classe
Valeur du type de la classe
C’est quoi un attribut ?
Variable locale propre à un objet qui défini son état
C’est quoi une méthode ?
Fonction locale propre à un objet qui effectue un traitement/manipulation de l’état de l’objet et/ou envoyer un message.
C’est quoi l’UML ?
Unified Modeling Language
Langage de modélisation graphique objet. Indépendant du langage et peut servir de manière très abstraite ou très proche de l’implémentation.
CQS (+Exemple)
Command Query Separation
Une opération doit être au choix :
- Une commande avec effet de bord qui ne retourne rien
- Une requête qui n’a pas d’effet de bord et retourne une valeur
Procédure VS Fonction
Return VS Output
Passage par valeur VS Passage par référence
C’est quoi un constructeur ? Que fait le constructeur par défaut ?
Méthode particulière qui créer/initialise/instancie un objet
Toutes les classes ont un constructeur par défaut qui ne prend pas de paramètre et qui affecte les valeurs par défaut aux attributs.
C’est quoi un destructeur ? (+Exemple)
Méthode particulière qui supprime l’objet
public void finalize() en java
- Suppression de fichier temporaire
- Fermeture d’une connexion SGBD
Cet appel est non déterminsite
C’est quoi un get/setter ? Pourquoi ? Permet d’avoir quoi ? Il faut faire attention à quoi ? Quel principe le limite ?
Méthode d’accès au attributs privés d’un objet
- Permet du controle d’accès
- D’ajouter des contraites pour ne pas mettre n’importe quoi
- Encapsulation
Tell don’t ask limite ça
C’est quoi l’OCP ? Pourquoi ?
Open-Closed Principe
Un objet doit être :
- Fermé à la modification (Encapsulation) > Risque d’introduire des bugs sinon
- Ouvert par extension (Polymorphisme)
C’est quoi le Polymorphisme ? Pourquoi ?
Fournir une interface unique à des entiés pouvant avoir différents types.
Pour une utilisation indépendante du type réel des élements manipulés.
Liste tous les types de polymorphisme
Ad hoc:
- Transtypage
- Surcharge
Universel: (Une seule implémentation pour tous les types à la fois)
- Générique / Paramétré
- Inclusion (Nominal et structurel)
C’est quoi le Transtypage ?
Convertion implicite/explicite du type d’une valeur (C’est un cast)
C’est quoi la Surcharge ?
Plusieurs fonctions/méthodes de même nom qui prennent des paramètres différents (type / nombre)
C’est quoi le Polymorhpisme d’inclusion ? Comment on le fait ? Permet de faire quoi ?
Hiérarchiser les types comme des ensembles partageant une même interface
Se fait grâce à l’héritage / rédéfinition / sous-typage
Code sur la super classe qui fonctionne aussi sur la sous classe >Réutilisabilité
C’est quoi le Polymorphisme générique ?
On écrit un traitement indépendant du type réels qui permet de définir des types générique/paramétré ainsi que des structures complexes.
Exemple : Liste chainée = Pas besoin de savoir le type stocké pour avoir la longueur
C’est quoi un sous type ? ça sert à quoi ?
Relation “est un” (ex un eniter est un réel)
C’est un sous ensemble de valeur
Permet d’avoir de la remplacabilité si les deux objets ont la même interface.
Liskov
Covariance des sorties de l’objet = Sortie en type plus restrictive
Contravariace des entrés = Entrée en type plus libre
Pas de relachement des postcondition
Pas de renforcement des précondition
Conservation des invariants
Conservation de la mutabilité et des états = On garde les même propriété
Quels sont les deux types de sous-typages ?
Nominal : Définition explicite de la relation entre deux objets
Structurel (Duck-typing) : Si un objet à la bonne interface, le système le considère automatiquement comment un sous type
C’est quoi l’Héritage ? ça respecte liskov ? ça fait quoi au niveau du couplage ?
Partage de propriété entre deux objets
On fait en sorte qu’automatiquement les méthodes visibles d’une classe se retrouve dans une autre
Cela respecte automatiquement liskov (Sauf si redéfinition)
Cela est un couplage fort
C’est quoi la redéfinition ? ça respecte liskov ? c’est quoi le mot clef en java ?
Il s’agit d’une implémentation alternative pour une méthode hérité.
Ne respecte pas automatiquement liskov
@override
A quoi sert final en java? Il brise quel principe ?
final Attribut > constante
final methode > pas de redéfinition
final classe > pas d’héritage
Contre l’open close principle
En java que fait le mot clef extends ?
L’objet hérite d’une classe et devient un sous type
C’est quoi le dispatch ?
C’est une séléction (d’une methode par exemple) en fonction du type de résolution
Quel type est considéré lors d’une redéfinition, quel est le dispatch ? Quand ?
Réel (indépendament du systeme de typage)
Le dispatch est Dynamique et se fait à l’Execution
= late binding
Forme fc = (Forme) (new Cercle()) fc.quiEstTu() >>> Cercle
Quel type est considéré lors d’une surcharge, quel est le dispatch ? Quand ?
Celui affiché/déclaré/du systeme de typage
Le dispatch est Statique et se fait à la compilation
= early binding
Forme fc = (Forme) (new Cercle())
fc.quoi()»_space;> Forme
C’est quoi une classe abstraite ? C’est comment en UML et en Java ?
C’est une classe non instantiable
En italique en UML, “abstract” en java
C’est quoi une méthode abstraite ? On peut en mettre quand quelle class ?
Méthode sans implémentation que tous les sous-classe devront implémenter.
Un méthode abstraite doit obligatoirement être dans une classe abstraite.
C’est quoi une interface (java) ? Cela définit quoi ? C’est quoi le mot clef ? C’est quoi la convention de nommage ?
Ensemble de signature de méthode sans implémentation
Les classe doivent founir une implémentation de toues les méthodes.
N’a pas d’attributs
Définit un type abstrait = classe purement abstraite
Interface pour créer et implements pour obtenir.
-ABLE
A quoi sert une interface ?
Sépération interface implémentation
On dépend de l’interface plutôt que le type concret
Découplage
Modularité
Structure le code
C’est quoi la délégation ? A quoi ça sert ?
Un objet qui contient un autre objet en lui UNIQUEMENT EN INTERNE (Donc à ne jamais retourner et à ne pas mettre en argument)
Réutilisation sans sous typage.
Alternative à l’héritage
Permet de faire de “l’héritage multiple” (alternative) en ayant accès aux méthodes d’un autre objet.
Dans quel cas on ne peut pas faire de la délégation ?
- Un objet ne peut pas s’auto délégué
- Les deux objets doivent avoir une interface en commun
- L’objet instancié doit être modifiable
Par principe on préfère :
Hiérarchie des types avec …
Réutilisation avec …
Interfaces
Compositition / Délégation
Quels sont les avantages de la délégation par rapport à l’héritage ? Un désaventage de la délégation ?
-Cela permet de faire du sous typage sans héritage EN JAVA
- Plus flexible
- Plus selectif (On ne récupère par toutes les méthodes direct)
- On peut déléger plusieurs objet sans problèmes
- Dynamique (On peut changer à l’execution)
- La délégation ne créer un couplage fort (Contrairement a l’héritage)
-Pas besoin de s’embêter avec la redéfinition complexe (Ex equal/compareTo qui doivent respecter des propriétés comme la commutativité/transitivité)
Délégation :c = Difficile de simuler la redéfinition (yoyo)
C’est quoi un type générique ? Exemple ?
C’est une structure (classe) dont le type des élements est inconnu à la définition.
Le type n’est défini que lors de l’instanciation ou du sous typage
Ex :
- Collection (Liste chainées)
- Classe comparable
C’est quoi le boxing ?
Transformation d’un type primitif en objet correspondant. L’unboxing est l’opération ivnerse.
C’est quoi un Itérateur ?
Objet que l’ont peut itérer = Récupèrer un élement après l’autre dans un ensemble
C’est quoi une Collection ?
Ajoute des fonctions utiles à un Iterateur Pour stoquer des élements non ordonée.
C’est quoi l’Aggrégation ?
C’est une collection d’objet indépendants dans un autre.
Si on modifie l’un de ces objets, la modification sera effective dans toues les autres instance qui l’ont aggrégé
C’est quoi la Composition ?
C’est un objet qui n’existe pas si le composeur n’existe pas.
Le composé à la garantie que le composant est uniquement à lui.
Collection<Drawable> c = new ArrayList<Square>()</Square></Drawable>
C’est valide ou pas ?
Non parce que si ça marchais on aurait le droit de faire c.add(new Rectangle()).
Collection<Square> squares = new ArrayList<Square>()</Square></Square>
C’est valide ?
Oui
Collection<Rectangle> rectangles = new Collection <Square></Square></Rectangle>
C’est valide ?
Non
On a pas de covariance des types génériques. Les types génériques ne RESPECTE PAS le SOUS TYPAGE.
printAllCellection(Collection<?> v)
ça fait quoi ?
Permet de prendre n’importe quel collection.
Par contre on les voit que comme des objets
printAllCellection(Collection<? extends Drawable> v)
ça fait quoi ?
N’importe quel sous type de Drawable
printAllCellection(Collection<? super T> v)
ça fait quoi ?
N’importe quel super-type de T
<T extends Comparable<? super T>> T e
ça fait quoi ?
e est de n’importe quel type comparable à un de ses super-type
En UML, que veut dire :
+
-
#
~
/
Public
Privé
Protégé
Paquet
Derivé / Calculé
https://imgur.com/FtAgb0t
Attribut/Méthode statique
https://imgur.com/4MRYctX
Sous type | Extention LA FLECHE POINTE SUR LE SUPER TYPE
https://imgur.com/Z6cGgmy
Classe abstraite
https://imgur.com/QUqXo9B
Interface | Avec un lien de réalisation (Implémentation) Pointe le parent
C’est quoi une méthode statique ?
C’est une méthode commune à toutes les instances d’un objet et appelable sans instancier la classe.
En UML une fleche tillé veut dire quoi ?
Une dépendance
Comment on représente la composition en UML ?
Un losange noir du coté opposé à la fleche.
La fleche pointe sur l’élement qui va être dépendant de l’autre
Comment on fait de la délégation en UML ?
Une fleche simple (en trait plein) qui pointe vers un objet
Que ve dire le triangle blanc en trait tillé ?
Implémantation de l’interface qui est ciblé par la flêche
Comment on fait de l’Aggregation en UML ?
Avec un losange blanc du coté opposé à la fleche.
La fleche pointe sur l’élement qui va être dans la collection de l’autre
Comment on fait un type parametré en UML ?
https://imgur.com/a/U6IukRx
Pourquoi quand on doit redéfinir hashCode si on change le equal d’un objet ?
Pour respecter que deux objet égaux ont le même hashcode. Si on a changé la relation d’égalité il faut s’assurer que leur hashcode soit le même.
Quand faut il choisir de l’aggrégation plutôt que de la délégation ?
Quand l’aggrégant EST UNE collection d’aggrégé. On délégue quand juste une sous partie de l’objet doit être traité autre part (et qu’il y en a pas trop)
A —–> 1,1 B en UML
Que veut dire la cardinalité ?
Dans chaque A il y a un unique B
En java, que fait le mot clef static :
Lors de l’import
Sur une méthode
Sur un attribut
Que casse-il sur les attribut ?
Import = Pour importer une méthode statique
Méthode = Méthode commune à toutes les instance d’un classe et utilisable sans que l’objet soit initialisé
Attribut = Variable globale entre objet d’une même classe
Il casse l’encapsulation
Comment on code une méthode générique de type T (en java) ?
private <T> boolean test(<T> argu)