Programmation Orientée Objet - Exercices

Exercice de POO avec Python
Author

Ludovic Deneuville

1 Mise en place

1.1 Lancer un service VSCode

1.2 Récupérer le code

Deux possibilités pour récupérer le code, soit :

  • vous clonez directement le dépôt de l’enseignant
    • git clone https://github.com/ludo2ne/ENSAI-2A-remise-a-niveau.git
  • vous créez un fork de ce dépôt, puis clonez ce fork

Si vous clonez directement le dépôt de l’enseignant, vous ne pourrez pas utiliser Git pour conserver votre travail. Il faudra par exemple télécharger les fichiers à la main.

Un fork est une copie d’un dépôt distant. Comme cette copie vous appartient, vous avez le droit d’en modifier le code.

Ensuite, positionnez-vous dans le dossier src/POO :

    • ou directement via le terminal : code-server /home/onyxia/work/ENSAI-2A-remise-a-niveau/src/Python-POO/

Vous pouvez ensuite coder dans les fichiers du dossier exercice. Si besoin, vous pouvez créer de nouveaux fichiers.

2 Exercice 1 - Points

Définissez une classe Point pour représenter un point du plan de coordonnées x et y.

Codez les méthodes suivantes :

Pour vérifier que vos méthodes sont correctes, vous pouvez ajouter à la fin de votre classe un bloc main. Lorsque vous exécuterez ce fichier, c’est ce code qui sera lancé.

point.py
class Point:

    # ...

if __name__ == "__main__":
    p1 = Point(1, 2)
    p2 = Point(1, 2)
    print(f"p1 : {p1}")
    print(f"Distance entre p1 et p2 : {p1.distance(p2)}")
    print(f"p1 est égal à p2 : {p1 == p2}")

3 Exercice 2 - Polygones

    • Nous supposerons par la suite que les segments ne se croisent pas
    • ces méthodes seront définies dans les classes filles
    • vérifiez à chaque fois le nombre de points

Voici le diagramme de classes généré avec Mermaid

classDiagram
    Point --o Polygone
    Polygone <|-- Segment : 2
    Polygone <|-- Triangle : 3
    Polygone <|-- Quadrilatere : 4
    Quadrilatere <|-- Rectangle
    class Point{
        +float x
        +float y
        +distance(autre_point)
    }
    class Polygone{
        +liste[Point] liste_points
        +aire()
        +perimetre()
    }
    class Quadrilatere{
        +aire()
        +perimetre()
    }
    class Segment{
        +aire()
        +perimetre()
    }
    class Triangle{
        +aire()
        +perimetre()
    }

4 Exercice 3 - Domino

4.1 Un Domino

Écrire une classe Domino avec :

4.2 Jeu

Maintenant nous allons essayer de coder un jeu de dominos.

Pour plus de facilité :

  • il n’y aura qu’un seul joueur
  • il n’est possible de poser que d’un seul côté, à la fin de la rangée de domino

Commençons par générer tous les dominos possibles, i.e. toutes les combinaisons de (0,0) à (6,6) sans doublon.

Écrivez une fonction jouer() qui :

classDiagram
    class Domino{
        +int extr_A
        +int extr_B
        +retourne()
        +accepte_apres(autre_domino)
    }

Correction

Exercices 1 et 2

Un exemple de tests unitaires sur la classe Point :

Exercice 3