Session - 2e moitié Flashcards

1
Q

Qu’est-ce qu’une collection?

A

Une classe dont l’objectif est de contenir plusieurs éléments d’un même type.

Elle a des fonctionnalités avancées. (taille dynamique, gestion simplifiée des ajouts/retraits, toString, contains, etc.)

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

Qu’elle est la collection que nous utilisons dans le cours?

A

ArrayList

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

Quelles sont les autres collections que nous avons rapidement mentionnées en classe?

A

LinkedList (liste chainée, un élément contient une référence vers le suivant)

File (First-in, first-out. Comme à la caisse)

Pile (Last-in, first-out. Comme les assiettes dans l’armoire)

Set, Map, …

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

Que faut-il utiliser pour modifier une collection?

A

Un iterator.

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

Comment s’utilise un iterator?

A

ArrayList<String> recipe = new ArrayList<>();</String>

Iterator<String> ite = recipe.iterator();
while(ite.hasNext())
{
String s = ite.next();
if(s.startsWith("c"))
{
ite.remove();
}
}
System.out.println(recipe);</String>

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

Qu’est-ce qu’une wrapper class?

A

Une classe qui permet d’envelopper un type primitif Java.
(int, char, boolean -> Integer, Character, Boolean)

Les collections n’acceptent que des objets.

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

Comment tester une exception dans les tests?

A

assertThrows(IllegalArgumentException.class,()->{fred.changeAge(-5);});

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

À quoi sert une exception?

A

À afficher une alerte, lorsque le programme ne suit pas le HappyPath

Permet de s’assurer de l’exactitude et la robustesse du programme

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

Comment créer une classe exception maison?

A

public class NomBidon extends RuntimeException
{
private static final long serialVersionUID = - 154879651354879645L;

NomBidon(int a, String b)
{
super(“”);
}
}

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

Quels sont les deux types d’exceptions en Java?

A

Unchecked (non-vérifiées, non-signées)
Checked (vérifiées, signées)

Dans notre cours, on utilise seulement les Unchecked (Runtime)

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

Pourquoi les tests unitaires sont-ils importants?

A

Ils permettent de faire du code de qualité :
- Correct (sans bug)
- Robuste
- (Plus) facile à maintenir
- (Plus) facile à comprendre
- Mieux architecturé/mieux conçu

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

En POO, comment testons-nous les méthodes et fonctions privées?

A

On les teste au travers des méthodes publiques.

(IMPORTANT : Ne pas rendre des méthodes publiques simplement pour les tester.)

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

Il existe différents types de test, lesquels utilisons-nous en classe?

A

Tests fonctionnels (exactitude -> Ce qu’on fait déjà)
Tests de fiabilité (robustesse -> Exceptions)

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

Qu’est-ce que le test coverage?

A

S’assurer que nos tests testent toutes nos classes et toutes les fonctions/méthodes de nos classes.

Une couverture de 100% est visée, mais les tests doivent être de bonne qualité.

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

Qu’est-ce que le TDD (Test-Driven Development)?

A

Technique Agile qui consiste à :
- Écrire un test avant d’écrire le code.
- N’écrire que le code minimal nécessaire pour faire passer notre test
- Faire un refactor du code
- On itère de cette façon jusqu’au développement de notre fonctionnalité.

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

Pourquoi est-ce pertinent d’écrire les tests avant?

A

Cela permet de réfléchir au problème et de bien le comprendre avant de coder.
Car pour écrire les tests, on doit bien comprendre.
(Il faut être capable de résoudre le problème manuellement)

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

À quoi servent les packages?

A

Ils servent à organiser les répertoires de code de façon universelle.

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

Quelle est la nomenclature de package suggérée?

A
  • Le nom de domaine de l’organisation inversé : ca.csfoy
  • L’unité dans l’organisation : h2024.poo1.gr3.fg
  • Le projet : exercice99

En tout : ca.csfoy.h2024.poo1.grp3.fg.exercice99

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

Où indique-t-on le package dans une classe?

A

Au début.
(Ex: package csf.poo.gagnon;
Public class Patate…)

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

Comment faire la javadoc d’une classe?

A

Il faut écrire (en commentaire) une description de la classe (ex : le concept qu’elle représente) avec possiblement un tag @author et @version.

Ex :
/**
* Représente un légume
* @author FBeaulieu
* @version 2.0
*/

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

Comment écrire de la javadoc pour les méthodes/fonctions?

A

Une description de la méthode (quel problème elle résout) en plus des tags suivants lorsque nécessaire. (Seulement pour les méthodes publiques)
- @param : Pour chaque paramètre, son nom et son rôle dans le problème.
- @return : ce que la valeur retourne
- @throws : pour chaque exception qui peut être lancée par la méthode, le type de l’exception et une description de pourquoi cette exception survient (dans quelle situation)

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

Notre javadoc est écrite.
Comment la générer en HTML?

A

Commande : javadoc -d doc src*
À partir de l’IDE

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

Contrairement à la composition (has a), quelle relation représente l’héritage?

A

Est un (is a)
Ex : Un chat EST UN félin.

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

La relation «est un» est utilisée pour ___________ la définition d’un concept.

A

Étendre.

(Par exemple, les chats et des tigres sont des félins car ils ont des caractéristiques communes, donc les griffes rétractables, les moustaches et une queue. Mais le tigre a aussi des caractéristiques ou comportements qui lui sont propre. Comme des rayures et des couleurs limitées.)

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

Comment se nomme la classe «parent» et la classe «enfant»?

A

Super classe (Félin)
Sous classe (Tigre, chat, lion, etc.)

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

Que permet le mot clé super?

A
  • D’appeler le constructeur de la super classe (super())
  • Appeler la méthode toString() de la super classe (super.toString())
  • Accéder à un attribut défini dans la super classe (super.patate)
25
Q

Quels sont les différents types de visibilité que nous avons vus?

A

Public
Protected
Package
Private

26
Q

Que voit la visibilité Package et quel mot clé est utilisé?

A

Les ressources sont accessibles par la classe elle-même, ainsi que par les autres classes qui se trouvent dans le même package.

Aucun mot clé.

27
Q

Que voit la visibilité Protected et quel mot clé est utilisé?

A

Les ressources sont accessibles par la classe elle-même, par ses sous-classes, et par les autres classes du même package.

Mot clé : Protected

28
Q

Qu’est-ce que l’overriding?

A

C’est la redéfinition d’une méthode.
On peut donc redéfinir le comportement de la méthode.

29
Q

Rappel : Qu’est-ce que l’overloading? (Surchage de méthode)

A

C’est lorsqu’on écrit une méthode avec le même nom, mais des paramètres différents. Les méthodes sont donc considérées comme étant différentes et le programme va choisir laquelle appeler selon les paramètres entrés.

30
Q

Quelle pratique est demandée dans le cours et est favorable lorsque l’on fait de la redéfinition de méthode?

A

D’inscrire @Override au dessus de notre méthode dans la sous classe.
Cela va générer une erreur de compilation si notre méthode ne redéfinit pas vraiment une méthode de notre super classe (ex : erreur dans la signature).

31
Q

En Java, toutes les classes héritent (directement ou non) de la classe ______.

A

Object

32
Q

Expliquez le upcasting.

A

Puisque notre sous classe est est-un objet de notre super classe, on peut mettre un type de notre sous classe dans une variable du type de la super classe.

Par exemple, puisque Tank est-un Unit, on peut mettre un Tank dans un Unit.
(Unit unit = new Tank)
Tant que le Tank est considéré comme un simple Unit, on n’a accès qu’aux méthodes et attributs publiques de Unit.

33
Q

Le upcasting est ________________________.

A

Transparent/implicite

34
Q

Expliquez le downcasting.

A

Lorsqu’on a une instance de la sous-classe qui est cachée dans une variable du type de la super classe et qu’on souhaite la ramener au type de la sous classe, on doit faire du downcasting. (Ex : Ramener le Unit tank à un Tank tank.)

Attention, pas nécessairement tous les Unit sont des Tank.
Il faut donc effectuer une vérification.

if(tank instanceof Tank)
{
Tank tank = (Tank) u;
}

35
Q

Vrai ou Faux:

L’utilisation de instanceof et du downcasting sont parfois signe d’un mauvais design.
Sans l’interdire, il faut les utiliser très rarement.

A

VRAI.

36
Q

En Java, s’agit-il de l’héritage simple ou multiple?

A

Héritage simple : Une classe ne peut hériter directement que d’une seule classe (A extends B)

37
Q

Que fait le mot clé “final” sur les attributs, les méthodes et les classes?

A

Attribut : Ne peut plus changer de valeur.
Méthode : Ne peut plus être redéfinie
Classe : Ne peut plus être étendue

38
Q

Que fait le mot clé “abstract” sur les classes et les méthodes (JAMAIS aux attributs)?

A

Classe : Ne peut pas être instanciée directement
Méthode : N’a pas de définition, simplement une déclaration (signature, visibilité, retour). Ceci force toutes les sous-classes à (re)définir le comportement de la méthode.

39
Q

Une classe abstraite peut-elle avoir un constucteur?

A

Oui.
Cependant, on ne peut instancier directement la classe abstaite.
On peut appeler le constructeur (super) à partir du constructeur d’une sous-classe.

40
Q

VRAI OU FAUX?
On peut mettre des méthodes abstraites dans une classe qui n’est pas abstraite?

A

FAUX.
Pour avoir des méthode abstraites, il faut une classe abstaite.

41
Q

Qu’est-ce que le binding?

A

Cela fait référence au moment auquel le type est attaché (bind) à une variable.

42
Q

Qu’est-ce que le early binding?

A

Avec le early binding, le type est déterminé au moment de la compilation.
Il n’est pas possible de déterminer le type réel de la variable, on obtient son type syntaxique (déclaré)

Utilisé dans la signature d’une méthode ou d’une fonction.

Exemple :
Unit u = new Tank();
someOtherMethod(u);

On passe un unit, mais on sait pas que c’est un Tank

43
Q

Qu’est-ce que le late binding?

A

Avec le late binding, le type est évalué au moment de l’exécution de l’instruction.
Nous obtenons donc comme type, le type réel de la variable.

Exemple :

Unit u = new Tank();
u.someMethod();

44
Q

Le polymorphisme exploite en même temps (choix multiple):
1. Downcasting
2. Upcasting
3. Early binding
4. Late binding

A

2 et 4.
Upcasting et late binding.

45
Q

VRAI OU FAUX
Le polymorphisme est la possibilité de manipuler un objet de type Tank dans une variable de type Unit?

A

VRAI

46
Q

Nommez d’autres exemples de polymorphisme vu en classe.

A
  • Les buildings dans le SimCity
  • Les block et tools dans Minecraft
  • Les ChessPiece dans le TP3
47
Q

Qu’est-ce que le diagramme de classe et quel est son langage neutre et standardisé?

A

Il s’agit d’une manière de représenter les classes et sa modélisation de manière standardisée. Cela indique la modélisation et la hiérarchie/les interactions entre les classes.

Le UML est le langage utilisé (Unified Modeling Language)

48
Q

Comment est représentée une classe selon un diagramme UML?

A

«Abstract» ou «Interface» si applicable.
Le nom de la classe comme nom de table.
Les attributs (+ ou - selon public ou privé)
Une ligne pleine pour séparer.
Les méthodes avec paramètre et ou retour. (Habituellement seulement les méthodes publiques)

Une flèche pour désigner l’héritage
Une ligne avec un losange à gauche pour désigner la composition

Ex :

Product
- price : float
______________
+ product(price : float)
+ getPriceWithTaxes() : float

49
Q

En POO, qu’est-ce qu’une Interface?

A

Il s’agit de la spécification d’un “comportement” attendu pour une classe.
C’est comme un contrat, un engagement.

Ex : La liste des méthodes publiques de cette classe

50
Q

Contrairement à “extends”, pour une interface, une classe __________

A

“Implements”

51
Q

Une interface n’est pas une classe. Elle n’a donc pas :

A
  1. D’attributs (donc de constructeur)
  2. d’implémentation de méthodes

Elle ne contient qu’une liste de méthodes (forcéments abstraites) à être implémentées par les classes qui veulent respecter le standard/contrat.

52
Q

Même si une interface n’est pas une classe c’est quand même un type.
Cela signifie donc…

A
  • C’est un type abstrait (il n’y aura jamais d’instance directement de ce type)
  • Mais on peut manipuler et recevoir des objets d’un sous-type (polymorphisme)
53
Q

Quel type de relation est matérialisé par les interfaces

A

“Est-capable-de”

54
Q

Quelles sont les différences entre Interface vs Héritage?

A

Si ce ne sont que des comportements : Interface
Si c’est la définition du concept (attributs) avec ou sans comportements : Héritage

Une classe peut implémenter plusieurs interfaces sans problème.

55
Q

Quels sont des exemples de concepts qu’on a vus en classe pour représenter une interface (standardisation de qqch)?

A

Les pompes à esssence, le bout de l’ampoule (E26).

56
Q

Quelle est la convention de nommage vu dans le cours pour les interfaces.
(Lorsque possible)

A

Xable.
Car l’interface fait X.

Ex : Iterable, Serializable, etc.

57
Q

À quoi servent les Test (Mock Fake)?

A

Avec les interfaces, ça coupe les dépendances et nous permet d’injecter des implémentations fake afin de mieux tester.

Cela permet de faciliter la création d’une situation complexe afin de tester le comportement d’un composant.

58
Q

Quels sont les deux nouveaux principes de programmation vus avec les interfaces?

A
  • Encapsulation through interfaces
  • Program to an interface, not an implementation
59
Q

Qu’est-ce que l’encapsulation par les interfaces?

A

Parfois on a besoin de passer notre objet à une autre classe, car elle a besoin de l’état de notre objet. Mais on ne veut pas que l’autre classe modifie notre objet directement.

60
Q

Qu’est-ce que “programmez en manipulant une interface et non une implémentation”.

A
  • Il est préférable de manipuler des interfaces et non des classes directement
  • En manipulant une interface, on permet de changer l’implémentation facilement plus tard.

(Ex : List vs ArrayList)

61
Q

Free

A

Free