programmation Flashcards
classe
Une classe est un fichier texte qui regroupe des propriétés et des méthodes communes à
un ensemble d’objets.
La classe déclare :
- des propriétés représentant l’état des objets.
- des méthodes représentant leur comportement (savoir faire).
En d’autre termes, une classe correspond à une fabrique à objets.
objet
Un objet est un conteneur symbolique et autonome qui contient :
- des propriétés
- des comportement
concernant un sujet.
constructeur
méthode particulière dont le rôle est d’allouer la mémoire
nécessaire à l’objet et d’initialiser toutes ses propriétés.
Où se trouve(nt) le(s) constructeur(s) ?
dans une classe.
Voiture uneVoiture = new Voiture(); Que signifie Voiture
Voiture correspond au type de la variable uneVoiture
Voiture uneVoiture = new Voiture(); Que signifie new Voiture();
new Voiture(); correspond à l’appel du constructeur Voiture() qui va créer l’objet
A quoi correspond une propriété d’un objet ?
Une propriété est un élément de description d’un objet.
Ex : La cylindrée, la couleur, le poids sont des propriétés d’une voiture
Pourquoi est-il recommandé de protéger une propriété avec le mot réservé private ?
Pour empêcher l’accès à cette propriété depuis l’extérieur de l’objet.
Comment accéder à la valeur d’une propriété d’un objet qui a été protégée à l’aide du mot
réservé private ?
A l’aide d’une méthode (getter) de l’objet.
Comment modifier la valeur d’une propriété d’un objet qui a été protégée à l’aide du mot
réservé private ?
A l’aide d’une méthode (setter) de l’objet.
Qu’est ce qu’une méthode ?
nom donné à une fonction d’un objet.
Une méthode correspond à un comportement (savoir-faire) d’un objet.
Peut-on avoir plusieurs constructeurs dans une classe ? Si oui à quelles conditions ? Sinon
pourquoi ?
Oui, on peut avoir autant de constructeurs que nécessaire.
Cela permet de “construire” différemment des objets.
La condition nécessaire est que la signature de chaque constructeur soit différente.
La signature comprend, le nom du constructeur et les types des paramètres.
Exemples :
Cartouche()
Cartouche(double)
Ballon()
Ballon(int)
Ballon(int, String)
Ballon(int, String, double)
Que signifie le mot réservé this ?
this correspond à l’objet que l’on est entrain de manipuler. (L’objet courant)
public class Joueur { private Ballon ballon; public Joueur() { this.ballon = null; } }
Que signifie l’instruction : this.ballon = null; ?
Cela signifie que le joueur ne possède pas de ballon
public class Joueur { private Ballon ballon; public Joueur() { this.ballon; } public void attrappe(Ballon ballon) { this.ballon = ballon; } public ... perdBallon(...) { ... } }
Veuillez compléter la méthode … perdBallon(…) pour que celle-ci rende l’accès au
ballon que le joueur perd.
//... public Ballon perdBallon() { Ballon ballonARendre = this.ballon; this.ballon = null; return ballonARendre; } //...
public class Imprimante { private Feuille[] bacAFeuilles; public Imprimante() { this.bacAFeuilles = new Feuille[100]; } //...
Combien y a-t-il de feuilles dans l’imprimante après la création d’une nouvelle imprimante ?
Aucune !
new Feuille[100] ne crée pas 100 feuilles mais un tableau de 100 cases pouvant pointer
sur 100 feuilles.
Pour l’instant le tableau contient 100 cases contenant null
A quoi doit-on faire attention lorsque l’on manipule une variable de type objet ?
Il faut s’assurer que celui-ci existe !
//... Feuille uneFeuille = imprimante.rendFeuilleImprimee(); if (uneFeuille != null) { // permet d'éviter une potentielle erreur. // au cas où l'imprimante n'a pas pu rendre de feuille ;-) System.out.println(uneFeuille.rendContenu()); }
Sans ce test, une exception de type NullPointerException pourrait survenir !
Que signifie le mot réservé static devant une propriété d’une classe ?
Cela signifie que la propriété est une propriété de classe et non pas une propriété d’un objet
(propriété d’instance). Il n’y aura donc qu’un exemplaire de cette variable !
Une propriété non-static est une propriété qui appartient aux objets. Il y aura donc autant
d’exemplaire de la propriété non-static qu’il y a d’objets.
Que signifie le mot réservé static devant une méthode d’une classe ?
Cela signifie que c’est le savoir-faire (méthode) d’une classe. Pour appeler la méthode, il faut
passer par la classe et non par un objet.
Peut-on accéder à une propriétés d’un objet depuis une méthode de classe ?
Clairement NON !
Car la classe ne peut pas accéder aux objets. (Elle ne dispose pas des adresses des objets
créés)
Peut-on accéder à une propriété de classe depuis une méthode d’un objet ?
Clairement OUI !
Tous les objets ont accès à la classe.
Qu’est ce qu’une ArrayList ?
Une ArrayList est un tableau dynamique (dont la taille peut varier) dans lequel on peut
ajouter/supprimer des éléments
Qu’est ce qu’un type enveloppe ( wrapper type ) ?
Les classes enveloppes permettent d’utiliser des types de données primitifs en tant
qu’objets.
Pour chaque type primitif il existe un type enveloppe correspondant
(boolean - Boolean, byte - Byte, int - Integer, char - Character..)
Peut-on utiliser des types primitifs dans les ArrayList ?
Oui, MAIS il faut utiliser un type enveloppe lors de la déclaration de l’ ArrayList .
import java.util.ArrayList; ... ArrayList listeDeChar = new ArrayList<>(); char char1 = 'b'; listeDeChar.add('a'); listeDeChar.add(char1); for (char unChar : listeDeChar) { System.out.println(unChar); } ... ArrayList listeDeDouble = new ArrayList<>(); double double1 = 123.456; listeDeDouble.add(987.654); listeDeDouble.add(double1); for (double unDouble : listeDeDouble) { System.out.println(unDouble); }
Peut-on mettre une valeur de type primitif dans un type enveloppe (et réciproquement) ?
Oui absolument, c’est le but !
Que se passe-t’il si on oublie de mettre un type à une ArrayList ?
On pourra mettre n’importe quoi dans la liste. Du coup, il faudra faire très attention aux
types lors de la manipulation de la liste.
Quelle est l’instruction qui permet de connaître le nombre d’éléments d’une liste ?
La méthode size() de la classe ArrayList permet de connaître le nombre d’élément d’une liste
System.out.println(uneListe.size());
Comment supprime-t’on un élément d’une liste ? (
Pour supprimer un élément d’une liste il faut utiliser une des deux méthodes remove(…)
Effectivement, on peut supprimer un élément soit en utilisant un index, soit en passant l’élément à supprimer
Qu’est ce que l’héritage en POO (en quoi cela consiste ?)
L’héritage en POO consiste à récupérer l’intégralité d’une classe (propriétés et méthodes).
En vue de :
- modifier (annuler) une ou plusieurs méthode(s) héritée(s).
- ajouter des propriétés
- ajouter des méthodes
Quelle différence y a-t-il entre l’héritage implicite et l’héritage explicite ?
L'héritage implicite est le fait d'hériter, sans que l'on ait rien faire, de la class Object . Toute classe hérite de la classe Object . L'héritage explicite est le fait d'hériter d'une classe en particulier. C'est nous qui choisissons de quelle classe on hérite. On ne peut (en java) hériter que d'une seule classe.
Peut-on hériter de plusieurs classes en java ?
Non, cela n’est pas possible.
Par contre l’héritage peut se faire en cascade.
Ex : La classe Point3Dim hérite de la classe Point2Dim qui hérite de la classe Object
La classe Chat hérite de la classe Félin qui hérite de la classe Animal qui hérite de la classe Object
Quelle est la syntaxe en java qui permet d’indiquer que la Classe2 hérite de la Classe1 ?
C’est l’utilisation du mot réservé extends
public Classe2 extends Classe1 {
…
}
Quel est le moyen mnémotechnique permettant de contrôler que le lien d’héritage entre une
classe et une autre a du sens ?
Il suffit de remplacer le mot réservé extends par :
- est un
ou
- est une
Exemples :
Est-ce qu’un chat est un félin ?
La réponse est oui, donc le fait que la classe Chat hérite de la classe Felin a du sens.
Est-ce que Arianne 6 est une fusée ?
La réponse est oui, donc le fait que la classe Arianne6 hérite de la classe Fusee a du sens.
Que doit-on absolument faire dans le(s) constructeur(s) de la classe qui hérite d’une autre
classe ?
Remarque : Si vous vous souvenez du moyen mnémotechnique de la question précédente, il est facile de répondre à cette question.
Il faut faire appel à un de(s) constructeur(s) de la classe que l’on hérite avant de faire quoi que ce soit d’autre !
Comme un Chat est un Felin , la création d’un chat nécessite la création d’un félin.
Comme un Point3Dim est un Point2Dim avec quelque chose en plus (z). La création d’un
Point3Dim nécessite la création d’un Point2Dim (x,y)
La création d’un objet de la classe que l’on hérite (classe mère) se fait (en java) à l’aide de l’instruction :
super(…)
L’appel à un des constructeurs de la classe mère DOIT SE FAIRE sur la première ligne.
public class Point3Dim extends Point2Dim { public final double Z; public Point3Dim(double x, double y, double z) { super(x,y); //
Soit la classe suivante : package ch.comem; public class Bidon {}
et le programme suivant : public class Programme { public static void main(String[] args) { Bidon bidon = new Bidon(); System.out.println(bidon); } }
L’exécution du programme affichera:
ch.comem.Bidon@3b07d329
Quelle méthode de quelle classe s’est occupée de construire cette chaîne de caractères ?
C’est la méthode toString() de la classe Object qui a fait le travail.
La méthode println(…) de l’objet (qui est une propriété publique et statique) out de la classe System appelle automatiquement la méthode toString() de l’objet passé en paramètre.
Mais il n’y a pas de méthode toString() dans la classe Bidon non ?
Eh bien en fait il y en a bien une; c’est celle que l’on a hérité implicitement (sans que l’on ait rien à dire) de la classe Object.
Que doit-on faire dans la classe Bidon : package ch.comem; public class Bidon {}
Pour que l'exécution du programme suivant : public class Programme { public static void main(String[] args) { Bidon bidon = new Bidon(); System.out.println(bidon); } }
affiche:
Je suis un bidon
Il faut ajouter une méthode toString() dans la classe Bidon qui redéfinisse le comportement de la méthode toString() que l’on a hérité de la classe Object
package ch.comem; public class Bidon { public String toString() { return "Je suis un bidon"; } }
Si la classe Chat hérite de la classe Felin peut-on mettre un objet de type Chat dans une variable de type Felin ?
Chat unChat = new Chat("Tigrou"); Felin unFelin = unChat; // A-t-on le droit ???
Oui, on peut ! Car un chat est un félin
Si la classe Chat hérite de la classe Felin peut-on mettre un objet de type Felin dans une variable de type Chat ?
unChat = unFelin; // A-t-on le droit ???
Non, on ne peut pas ! Car un félin n’est pas forcément un chat
Chat unChat = new Chat(“Tigrou”);
Felin unFelin = unChat; // On a le droit car un chat est un félin
unFelin = new Tigre(“Sheer Khan”); // On a aussi le droit, car un tigre est
aussi un félin
unChat = unFelin; // ON NE PEUT PAS, car un félin n’est pas forcément un
chat !
Qu’est ce qu’une classe abstraite ?
Une classe abstraite est une classe dont on ne peut pas créer d’objet “directement”
Qu’est ce qu’une méthode abstraite ?
Une méthode abstraite est une méthode qui n’a pas de corps.
A quoi sert une méthode abstraite ?
Elle permet d’indiquer que cette méthode est importante et qu’elle doit être définie dans les
classes filles.
Animal unAnimal = new Tigre();
On distingue deux types : Animal Tigre Lequel des deux est le type statique ? Lequel des deux est le type dynamique ?
Animal est le type statique.
Le type statique est celui qui ne peut pas changer.
Tigre est le type dynamique.
Le type dynamique peut changer !
Que détermine le type statique ?
Le type statique détermine ce que l’on peut faire avec l’objet.
unAnimal.mange();
On a le droit d’appeler la méthode mange() , car la classe Animal dispose d’une méthode mange() qui est publique. (même si elle est abstraite ;-)
Que détermine le type dynamique ?
Le type dynamique détermine ce qui va être fait.