Programmation Orientée Objet - Exercices

Exercice de POO avec Python
Author

Ludovic Deneuville

Mise en place

Lancer un service VSCode

Créer votre arborescence

    • 💡 évitez d’utiliser des accents dans votre code, en informatique on n’aime pas trop
Important

À chaque fois que l’on vous demandera de créer un classe, vous commencerez par créez un fichier du même nom.

Aide

Tip

Vous trouverez des éléments de réponse sur la page de cours d’introduction à la POO.

Voici quelques exemples simples de code si vous avez besoin d’inspiration :

  • deux_roues.py : classe mère abstraite représentant un véhicule à deux roues
  • trottinette.py : classe représentant une trottinette (hérite de DeuxRoues)
  • velo.py : classe représentant un velo (hérite de DeuxRoues)
  • main.py : un fichier bac à sable pour tester

1 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 :

Tip

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}")

2 Exercice 2 - Polygones

Vous allez maintenant utiliser des objets de la classe Point pour créer des objets plus complexe.

Vous allez également utiliser l’héritage, i.e. les comportements mutualisables seront dans les classes mères et les comportements spécifiques dans les classes filles.

    • 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()
    }

3 Exercice 3 - Domino

3.1 Un Domino

Écrire une classe Domino avec :

3.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