US

Héritage

Question 1

Soit la classe abstraite suivante qui représente une pièce d'un jeu d'échec.

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
public abstract class ChessPiece
{
    public static final int BLACK = 0;
    public static final int WHITE = 1;
 
    protected int color, row, col;
 
    public ChessPiece (int color, int row, int col)
    {
        this.color = color;
        this.row = row;
        this.col = col;
    }
 
    public abstract int[][] getMoves();
}

Écrire une sous-classe concrète Pawn qui représente un pion. Il faudra donc fournir une implémentation pour la méthode abstraite getMoves() qui donne les mouvements possibles sans tenir compte des autres pièces.

Pour rappel un pion ne peut se déplacer que d'une case vers l'avant. Les pions noirs peuvent donc descendre d'une case et les blancs monter. On suppose l'échiquer représenté par un tableau de int à deux dimensions, la case en haut à gauche (tour noire) est la case (0, 0) et la case en bas à droite est la case (7, 7).

échiquier

Solution

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
public class Pawn extends ChessPiece
{
    public Pawn (int color, int row, int col)
    {
        super (color, row, col);
    }
 
    public int[][] getMoves()
    {
        if (color == BLACK && row != 7)
            return new int[][] {{row + 1, col}};
        else if (row != 0)
            return new int[][] {{row - 1, col}};
        else
            return new int[][] {};
    }
}

On marque l'héritage grâce au mot réservé extends. Il faut ensuite définir un constructeur puisque la superclasse ne possède pas de constructeur par défaut. On se contente d'appeler le constructeur de la superclasse avec le mot réservé super.

Vient ensuite l'implémentation de la méthode getMoves() que l'on doit fournir puisqu'on écrit une classe concrète. Elle renvoie les mouvements valides selon la couleur du pion.

Une autre solution aurait été de faire deux classes BlackPawn et WhitePawn, on se passerait alors de la variable d'instance color de la superclasse.

Question 2

Soit la classe suivante qui représente un employé d'une société.

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
public class Employee
{
    private int salary;
    private String name;
 
    public Employee (String name, int basesalary)
    {
        this.name = name;
        salary = basesalary;
    }
 
    public int getSalary()
    {
        return salary;
    }
}

Un employé est donc caractérisé par un nom et par un salaire. Dans la société, il y a aussi des managers qui percoivent en plus de leur salaire de base un bonus. On va donc les modéliser avec une nouvelle classe Manager que vous devez écrire.

Voici un exemple d'utilisation des ces classes.

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
public static void main (String[] args)
{
    Employee[] employees = new Employee[2];
    employees[0] = new Employee ("John Doe", 1200);
    employees[1] = new Manager ("Jack Malone", 1700, 500);
    for (Employee e : employees)
    {
        System.out.println (e.getSalary());
    }
}

Le programme crée donc un employé « normal » et un manager. Ensuite, il affiche les salaires des deux et on peut voir sur la sortie standard :

1200
2200

Solution

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
public class Manager extends Employee
{
    private int bonus;
 
    public Manager (String name, int basesalary, int bonus)
    {
        super (name, basesalary);
        this.bonus = bonus;
    }
 
    public int getSalary()
    {
        return super.getSalary() + bonus;
    }
}

Il faut une nouvelle variable d'instance qui contient le bonus du manager et il faut également un constructeur qui va appeler le constructeur de la superclasse et en plus stocker la valeur du bonus.

Ensuite, la méthode getSalary() doit tenir compte du bonus pour les managers, il faut donc la redéfinir. On utilise la méthode getSalary() de la superclasse grâce au mot réservé super et on ajoute le bonus.

Question 3

Soit la classe suivante qui représente un polygone dans le plan.

1 
2 
3 
4 
5 
6 
7 
8 
9 
public class Polygon
{
    private Point[] coords;
 
    public Polygon (Point[] coords)
    {
        this.coords = coords;
    }
}

Vous devez simplement écrire une classe Square qui représente un carré en sachant qu'un carré est un polygone.

La classe Point fait partie du package java.awt et représente une coordonnée d'entiers (x, y).

Le constructeur de la classe Square doit prendre deux paramètres, le premier est un objet de type Point et représente le coin inférieur gauche du carré, le second est de type int et représente la longueur du côté du carré. Le carré représenté est un carré horizontal.

Solution

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
public class Square extends Polygon
{
    public Square (Point llc, int side)
    {
        super (new Point[] {new Point (llc.x, llc.y),
                            new Point (llc.x + side, llc.y),
                            new Point (llc.x, llc.y + side),
                            new Point (llc.x + side, llc.y + side)});
    }
}

Il n'y a vraiment pas grand chose à faire, il suffit d'implémenter le constructeur. Il faut juste bien se rappeler que l'appel au constructeur de la superclasse doit obligatoirement être la première instruction, on ne peut donc pas construire le tableau avant l'appel au constructeur de la superclasse.

Une autre solution aurait été d'ajouter une méthode statique privée à la classe qui construit le tableau de coordonnées et l'appel au constructeur de la superclasse aurait été :

super (getCoords (llc, side));

Vous pouvez télécharger la liste des questions. Si vous avez des problèmes ou que vous ne comprenez pas bien une question, rendez-vous sur le forum consacré aux exercices.

  • Espace membre
  • Learning Center
  • Les forums
  • Livre d'or
  • Imprimer
  • Boutique
  • Info
  • Règlement
  • Erreur
  • Newsletter

MyPagerank.Net

Firefox 3.6

Browse Happy logo

Open Clip Art Library

Join our Facebook Group

Twitter

Copyright © 2000-2018 UKO. Toute reproduction strictement interdite sans autorisation du webmaster

Valid XHTML 1.1 !
Valid CSS2 !
Level Triple-A conformance icon, W3C-WAI Web Content Accessibility Guidelines 1.0
ICRA Internet Content Rating Association
Creative Commons License
Site optimisé pour Firefox avec une résolution 1024x768 --- Page chargée en 0.0761418 secondes --- This site uses Thumbshots previews