<jupyter_start><jupyter_text>Cours - Programmation orientée objet Département de Génie Informatique et Génie Logiciel, Polytechnique Montréal Auteur: <NAME>, Ph.D.Ce notebook présente un exemple d'une classe Velo et de la manipulation d'un objet. Dans cet exemple, prêtez attention aux principes d'encapsulation et d'abstraction. La classe `Velo` est définie dans le fichier `Velo.hpp`. Le code suivant permet d'importer la classe `Velo` dans le noyau.La classe `Velo` est constitué de plusieurs attributs (couleur, position, vitesse, etc.) et méthodes (avance, recule, accelere, etc.).<jupyter_code>from velo import Velo<jupyter_output><empty_output><jupyter_text>Une fois importée, nous pouvons instancier un objet de type Velo, afin de pouvoir le manipuler. La ligne suivante crée un objet `Velo` avec l'un des constructeurs de la classe, nous permettant de lui assigner une couleur spécifique lors de sa création.<jupyter_code>monVelo = Velo()<jupyter_output><empty_output><jupyter_text>De par le principe d'encapsulation, accéder aux attributs privés d'un objet n'est pas permis. La ligne suivante ne peut donc fonctionner.<jupyter_code>print("La position et la vitesse de mon velo sont: {} et {}".format(monVelo.__position, monVelo.__vitesse))<jupyter_output><empty_output><jupyter_text>Accéder à la valeur des attributs privés d'un objet doit se faire grâce à des méthodes publiques, comme `Velo::getPosition()` et `Velo::getVitesse()`. Cet exemple illustre le principe d'**encapsulation**.<jupyter_code>print("La position et la vitesse de mon velo sont: {} et {}".format(monVelo.getPosition(), monVelo.getVitesse()))<jupyter_output><empty_output><jupyter_text>Les méthodes définies par une classe permettent d'en manipuler les objets. Dans l'exemple suivant, nous utilisons les méthodes `Velo::accelere()`, `Velo::avance()` et `Velo::freine()` pour déplacer le vélo.**Exercice:** Essayez de modifier le comportement du vélo, par exemple en le faisant reculer et en l'accélérant un peu plus.Afin de manipuler un objet de la classe `Velo`, vous n'avez pas besoin de comprendre le fonctionnement de ses méthodes. Cet exemple illustre le principe d'**abstraction**.<jupyter_code>from time import sleep

monVelo.accelere()

for i in range(10):
    monVelo.avance()
    sleep(0.5)

monVelo.freine()

print("La position et la vitesse de mon velo sont: {} et {}".format(monVelo.getPosition(), monVelo.getVitesse()))<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.09447852760736196, 'fraction_numerical': 0.0016359918200408998, 'mean_word_length': 6.345345345345345, 'pattern_counts': {'":': 0, '<': 22, '<?xml version=': 0, '>': 22, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '243929', 'license': 'MIT', 'n_tokens_mistral': 828, 'n_tokens_neox': 841, 'n_words': 281, 'path': 'exemple_1.1/example_1.1_python.ipynb', 'repo_name': 'benjamindeleener/ProgrammationOrienteeObjet', 'size': '2457'}