EXERCICE 1 :
- C'est quoi une classe ? Une classe est un modèle ou un plan qui définit les variables, les méthodes et les attributs qui seront utilisés pour créer des objets. Elle peut être considérée comme un schéma pour la création d'objets.
- C'est quoi un objet ? Un objet est une instance d'une classe. Il s'agit d'une entité autonome qui peut avoir des attributs (variables) et des comportements (méthodes).
- Quelle est la différence entre une classe et un objet? Une classe est un modèle ou un plan qui définit les variables, les méthodes et les attributs qui seront utilisés pour créer des objets. Un objet est une instance d'une classe, une entité autonome qui peut avoir des attributs (variables) et des comportements (méthodes). En d'autres termes, une classe est un schéma pour la création d'objets, tandis qu'un objet est une instance spécifique de cette classe.
- En quoi l’héritage est-il un outil puissant pour le développement d’applications? L'héritage est un concept fondamental de la programmation orientée objet qui permet de créer de nouvelles classes en utilisant les propriétés et les méthodes d'une classe existante. Cela permet d'éviter la redondance de code et de créer une hiérarchie de classes qui peut être facilement modifiée ou étendue. L'héritage est un outil puissant pour le développement d'applications car il permet une organisation logique et efficace du code.
- Quelle est la différence entre : Point p[][] = new Point[5][4]; Point p = new Point(5,4); La première ligne crée un tableau de 5 éléments de type Point, chacun des éléments étant un tableau de 4 éléments de type Point. La seconde ligne crée un objet de type Point avec les coordonnées (5,4) et le stocke dans la variable p.
EXERCICE 2 :
La classe A contient 3 attributs : "i" de visibilité public, "a" de visibilité private et "b" de visibilité protected. Elle a aussi une méthode "afficher()" qui affiche la somme de ces 3 attributs.
La classe B hérite de A et redéfinit la méthode "afficher()" pour afficher la somme de ces 3 attributs.
La classe D contient une instance de A nommée "a" de visibilité public et une méthode "afficher()" qui affiche la somme des 3 attributs de "a".
La classe E contient une instance de B nommée "b" de visibilité public et une méthode "afficher()" qui appelle la méthode "afficher()" de "b".
La classe F contient une instance de B nommée "b" de visibilité public et une méthode "afficher()" qui tente d'accéder aux attributs "i", "a" et "b" de "b" qui sont de visibilité protected, private et protected respectivement.
Les appels corrects sont :
Instanciation de A : A a = new A();
Instanciation de B : B b = new B();
Appel de la méthode "afficher()" de D : D d = new D(); d.afficher();
Appel de la méthode "afficher()" de E : E e = new E(); e.afficher();
Les appels incorrects sont :
La variable "Aa" de la classe D est de visibilité public mais la classe A n'a pas de constructeur sans paramètre. Il faut passer un paramètre lors de l'instanciation de "Aa".
La classe F tente d'accéder aux attributs "i", "a" et "b" de "b" qui sont de visibilité protected, private et protected respectivement.
EXERCICE 3:
Voici des exemples de code pour répondre aux différentes questions :
1) Entête de la classe polygone générique :
public class Polygone<T extends Point> { // code de la classe Polygone ici }
2) Déclaration de la liste chaînée :
private List<T> sommets;
3) Constructeur de la classe Polygone :
public Polygone(List<T> sommets) { this.sommets = sommets; }
4) Méthode getPoints() qui renvoie la liste de points :
public List<T> getPoints() { return sommets; }
------------------
Notez que la déclaration T extends Point dans l'entête de la classe Polygone signifie que le type générique T doit être une sous-classe de la classe Point. Cela permet de garantir que les sommets stockés dans la liste chaînée seront des objets de type Point ou de l'une de ses sous-classes, telles que PointNommé ou PointPondéré.
------------------
5)public class Polygone<T extends Point> {
private LinkedList<T> sommets;
public Polygone() {
sommets = new LinkedList<>();
}
public void ajouterSommet(T sommet) {
sommets.add(sommet);
}
public LinkedList<T> getPoints() {
return sommets;
}
}
Explications :
- La classe Polygone est déclarée générique avec le paramètre T extends Point, ce qui signifie que le paramètre générique T doit être une sous-classe de la classe Point.
- La liste chaînée sommets est déclarée en tant que membre de la classe Polygone.
- Le constructeur de la classe Polygone initialise la liste chaînée sommets.
- La méthode ajouterSommet permet d'ajouter un sommet de type T à la liste chaînée sommets.
- La méthode getPoints renvoie la liste chaînée sommets.
Remarque :
La classe Point doit être définie ailleurs dans le code pour que la classe Polygone puisse être utilisée.