Session - 1ère moitié Flashcards

1
Q

Quels sont les différents types de assert utilisés en cours pour les tests unitaires?

A

assertEquals/assertNotEquals, assertTrue/assertFalse, assertArrayEquals, assertThrows/assertDoesNotThrow

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

Quelles sont les trois “sections” d’un test unitaire (AAA)?

A

Arrange, Act, Assert

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

Comment écrire une fonction de test?

A

@Test
public void test_nomFonction_ceQueLeTestFait()

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

Pour les types de base, comment sont passés les paramètres aux fonctions et qu’est-ce que cela veut dire?

A

Par valeur.
Les modifications que la fonction fait sur le paramètre n’ont pas d’effet en dehors de la fonction.

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

Comment écrire un foreach en Java?

Selon ce tableau : int[] data = {1,2,3,4,5,6,7}

A

for (int elem : data)
{
}

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

Comment écrire un do…while?

A

do
{
// Something…
} while (condition); <— Point virgule important.

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

Différemment du C#, comment s’écrivent les types booléens et les chaînes de caractère.

A

Boolean, String

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

Java est un langage de type…

A

Interprété. Il nécessite une JVM pour s’exécuter

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

Quels sont les principes de programmations vus jusqu’à présent?

A

DRY, KISS, Tell don’t ask, Encapsulation, Command-Query Separation, Single Responsibility Principe

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

Qu’est-ce que le principe DRY?

A

Ne pas se répéter. Si on a deux bouts de code qui font la même chose, c’est une fonction.

Créer une fonction et l’appeler deux fois.

S’il y a un bug, cela fait une seule place à modifier.

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

Qu’est-ce que le KISS?
Et quelles sont les bonnes pratiques?

A

Garder ça court et simple.
(Le plus court et le plus élégant possible)

Simple ne veut pas dire facile.
Un problème est facile ou difficile, une solution est simple ou complexe.

Complexe : Trop d’éléments, trop d’interconnexions entre les éléments, trop long inutilement avant de conclure.

  • Limiter le nombre de variables dans une fonction
  • Garder les fonctions “petites”
  • Garder un niveau d’imbrication d’instructions raisonnable
  • Éviter une explosion du nombre de fonctions.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Comment instancier un nouveau tableau 2D de 5 x 5?

A

int[][] elements = new int[5][5];

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

Comment parcourir un tableau 2D?

A

Avec des boucles.
Il faut commencer par parcourir les rows et ensuite les cols.

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

Comment connaître le nombre de lignes et de colonnes dans un tableau 2D?

A

Lignes = elements.length (retourne le nombre de rows)
Colonnes = elements[row].length
(Nombre de colonne de la row)

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

Comment écrire un tableau 2D en paramètre ou en retour?

A

Paramètre: …(int[][] elements)
Retour: public satic int[][] fonctionName(int a)

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

Qu’est-ce qu’un Enum?

A

C’est un type émunéré.

Cela permet de créer un nouveau type de données et d’en énumérer les valeurs possibles.

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

Quels sont des bons exemples d’Enum?

A
  • Les mois de l’année
  • Les jours de la semaine
  • Les sortes d’une carte
  • Les points cardinaux
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Comment déclarer une Enum?

A

public enum Month {JANUARY, FEBRUARY, …, DECEMBER;}

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

Comment utiliser une valeur d’Enum?

A

Ex : Month enum = Month.APRIL;

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

Quel est le principe de la programmation orientée objet?

A

Regrouper les données et les traitements liés à un concept dans un même endroit (une classe).

On programme donc plusieurs petits “modules” que l’on combine ensemble pour faire un programme.

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

Qu’est-ce qu’une classe?

A

La définition/représentation d’un concept.

Elle comporte des données (attributs) et des fonctions (méthodes).

Il s’agit donc d’un moule pour faire des objets de même nature.

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

Qu’est-ce qu’un objet?

A

Il s’agit de l’instanciation d’une classe.

Ex : Bookshelf shelf1 = new Bookshelf();

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

Comment écrire une classe Tigre avec des attributs nom et âge et son constructeur qui prend en paramètre son nom et son âge?

A

public class Tiger
{
private String name;
private int age;
public Tiger(String name, int age)
{
this.name = name;
this.age = age;
}
}

24
Q

Pour l’instant, les attributs ont toujours quelle visibilité?

A

Private

25
Q

Comment appeler la méthode eatFood() de la classe Tiger sur l’objet roger de type Tiger?

A

roger.eatFood();

26
Q

En POO on ne teste que les méthodes et fonctions _______ . Parce que _______.

A

Publiques.
Parce que les méthodes et fonctions privées se testent au travers des autres.

27
Q

Qu’est-ce que le Command-Query Separation?

A

En POO, une méthode devrait soit modifier l’état du système OU demander de l’information sur l’état, mais PAS les deux en même temps.

28
Q

Quelle est la portée des variables?

A
  • Une variable déclarée dans une classe existe pour toute la classe.
  • Une variable déclarée dans un bloc existe à partir du moment où elle est déclarée jusqu’à la fin du bloc. (Le nom ne peut pas être réutilisé dans un sous-bloc, mais peut l’être dans un bloc de même niveau ou dans un sur-bloc (après le bloc courant)
29
Q

Que représente null?

A

Null représente l’absence de quelque chose, donc l’absence d’objet.

30
Q

Qu’est-ce que la surcharge de méthodes/fonctions?

A

Plusieurs méthodes peuvent porter le même nom, mais elles ne doivent pas avoir la même signature.

31
Q

Est-ce que le type de retour d’une méthode fait partie de sa signature?

A

NON.

32
Q

Donnez un exemple de surcharge de signature avec le nom add().

A

add(int nb1, int nb2)
add(int nb1, int nb2, int nb3)

33
Q

Quelle est la différence entre == et equals pour une String?

A

== : Deux objets sont égaux s’ils résident au même endroit en mémoire.

equals: Avec une String, change le comportement du equals pour comparer les strings caractère par caractère.
Les strings sont donc égales si :
- Elles ont le même nombre de caractères
- Elles ont les mêmes caractères dans le même ordre.

34
Q

Que fait le mot clé “final” devant un attribut?

A

L’élément auquel il se rapporte ne peut plus être modifié.

35
Q

Comment initialiser un attribut final?

A
  • À la déclaration
  • Dans le constructeur
36
Q

Que fait le mot clé “static” ?

A

Indique que l’élément auquel il se rapporte est défini au niveau de la classe et non pas des instances de cette classe (pas au niveau des objets).

37
Q

Une fonction/méthode add() qui calcule la somme de deux nombres devrait-elle être static ou non?

A

Oui, car l’addition n’est pas propre à un objet.

38
Q

Comment écrire une constante?

A

public/private static final int number = 30;

39
Q

Qu’est-ce que la composition et quelle type de relation modélise-t-elle?

A

Consiste à définir une classe en référençant un ou plusieurs objets d’une autre classe dans ses attributs.

Elle modélise une relation de type “has-a” (possède-un).

40
Q

Quelles sont les trois variantes de la composition?

A

Composition forte
Agrégation (composition faible)
Association

41
Q

Décrivez/Expliquez la composition forte

A

C1 contient un attribut C2
C1 a le contrôle total sur C2
- C1 construit C2
- C2 n’existe que si C1 existe aussi
- La destruction de C1 implique la destruction de C2

(Exemple, Aile G et ses locaux)

42
Q

Décrivez/Expliquez la composition faible (agrégation)

A

C1 contient un attribut C2
C1 n’a pas le contrôle sur C2
- C2 peut exister en dehors de C1
- La destruction de C1 n’entraîne pas celle de C2
- C1 n’est pas en charge de créer C2, il le reçoit.

(Ex : L’aile G est composée de plusieurs cours, mais si l’aile est détruite, le cours existe par lui-même)

43
Q

Décrivez/expliquez une composition d’association.

A

C1 ne contient pas un attribut C2
Mais C1 utilise quand même C2
C1 recevra l’instance de C2 à utiliser lorsque nécessaire (en paramètres)

44
Q

Quel est le type de Switch vu en classe?

A

Switch Expression
(Cela évalue quelque chose qui doit être assigné à une variable)

45
Q

Pour le switch expression, il faut couvrir tous les cas ou ajouter une option _______.

A

default

46
Q

Comment s’écrirait un switch expression avec plusieurs lignes de “code” qui contient un yield?

A

public static String msg(Day d)
{
String activityMsg = switch(d)
{
case SATURDAY, SUNDAY ->
{
int i = 0;
i++;
if(i > 0)
{
i–;
}
yield “sleep”;
}
case MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY -> “school”;
}; (ne pas oublier le point virgule)
return activityMsg;
}

47
Q

Qu’est-ce que l’injection de dépendances?

A

Lorsque A dépend de B, on préfère injecter la dépendance dans A plutôt que de laisser A s’organiser pour obtenir sa dépendance.

48
Q

Qu’est-ce que le principe de responsabilité unique?

A

Une classe ne devrait s’occuper que d’une seule chose.

Ex : Une facture devrait juste calculer une facture. Pas aussi arrondir des nombres.

49
Q

Quels sont les trois espaces de mémoires distincts utilisés?

A

Data (données), stack (pile), heap (tas)

50
Q

Qu’est-ce que le data en mémoire?

A

C’est la section qui contient principalement le code du programme.

C’est aussi là que se retrouvent les variables globales (satic) qui ne sont pas attachées à aucun objet.

51
Q

Qu’est-ce que le stack (la pile)?

A

Partie mémoire la plus complexe, c’est là que se retrouve toute la logique des appels de fonctions et méthodes.

Chaque fois qu’on appelle une fonction, on ajoute sur la pile. Chaque fois qu’on fait un return, on retire.

Principe de last-in, first-out.

Elle contient aussi les variables définies à l’intérieur de notre fonction et l’adresse de retour.

52
Q

Qu’est-ce que le heap (tas)?

A

Espace mémoire d’un programme dont les morceaux sont alloués dynamiquement.

Le programme détermine quand et combien il en a de besoin.

Tous les objets créés se retrouvent en mémoire sur le heap.

53
Q

Dans le heap, quelle est la différence entre les types primitifs et les objets au niveau des données?

A

Les types primitifs contiennent directement les données.

Les types objet sont des références. Elles contiennent donc l’adresse mémoire de l’objet dans le heap.

54
Q

Comment la mémoire est-elle récupérée sur le heap et par quoi?

A

Elle est récupérée lorsque le programme se termine et lorsque l’objet n’est plus référencé par personne.

C’est le GC (Garbage Collector) de la JVM qui s’en charge.

55
Q

Passage de paramètres : Java passe toujours les paramètres aux fonctions par référence ou par valeur?

A

Valeur.

56
Q

Quelle est la différence entre un type primitif et un Objet lors de l’appel d’une fonction (si on les passe en paramètres)?

A

Java fait une copie.
Pour les types de base, ça veut dire que les modifications que la fonction fait sur le paramètre n’ont pas d’effet en dehors.

Pour l’objet, une copie de la référence à l’objet est passée.
La fonction a donc accès au même objet.
Les modifications que la fonction applique sur l’objet ont donc un effet (effet de bord), même si on ne le retourne pas. (À éviter, pas clean)