[MUSIQUE] [MUSIQUE] Nous allons maintenant étudier les notions de classes et la notion d'objet. Ces deux notions sont rattachées à un paradigme de programmation qui s'appelle la programmation orientée objet, qu'on abrège POO. Dans cette approche, on va représenter un système pour lequel on voudra programmer un certain nombre d'activités ou un certain nombre de tâches sous forme de ce qu'on appelle des classes, qui sont en fait des ensembles qu'on identifie dans le système qu'on veut informatiser, des ensembles d'informations qui ont des caractéristiques et des comportements communs. On va donc ensuite les identifier, les décrire sous forme de classes. Et une fois qu'on les aura décrits sous forme de classes, on pourra créer des éléments de cet ensemble qui sont des objets ou des instances, et les faire interagir les uns avec les autres de façon à créer l'activité qui va réaliser le programme qu'on aura construit en programmation orientée objet. Prenons un exemple. On imagine qu'on veut réaliser un système de gestion pour une bibliothèque. Quels sont les grands ensembles, les grandes catégories d'informations qu'on va pouvoir identifier dans un système de bibliothèque? Il y aura bien entendu les livres, il y aura bien entendu les lecteurs qui vont emprunter des livres, et il y aura des prêts, puisque les lecteurs vont emprunter des livres. On voit qu'on a des ensembles de ce type. Tous les livres ont les mêmes propriétés, tous les livres ont les mêmes comportements, idem pour les lecteurs, item pour les prêts. Donc on va identifier ces catégories et on va en faire une description, évidemment une description abstraite, informatique, qui va consister à identifier pour chaque classe du système quelles sont ses caractéristiques communes. Par exemple pour un livre, tous les livres ont un titre ; pour les lecteurs, tous les lecteurs ont un nom ; pour un prêt, tous les prêts ont une date de retour. On va identifier comme ça l'ensemble des données qui vont permettre de décrire, de faire une description globale de l'ensemble des éléments de la classe. Cette description, la classe va donc représenter un ensemble de données qui ont les mêmes caractéristiques, et la classe va consister à faire une description de ces caractéristiques. D'une part les propriétés. [AUDIO_VIDE] On voit que si on veut représenter un livre ou un lecteur, ça ne sera pas possible simplement avec une donnée simple, avec une simple valeur numérique ou même avec une simple valeur textuelle. On voit qu'on va avoir besoin de plus d'informations. Pour un lecteur il faudra son nom, son prénom et éventuellement son âge. On va avoir un ensemble de propriétés, et puis on va aussi avoir un ensemble de ce qu'on pourra appeler des comportements. Ces comportements, ce sont des actions que les ensembles vont être en mesure de réaliser. Là aussi, ils vont être en mesure de réaliser tous les mêmes actions. Par exemple, un lecteur va pouvoir emprunter un livre. Tous les lecteurs vont pouvoir emprunter un livre. L'action d'emprunter va être un comportement commun à tous les éléments de la classe lecteur. Comment est-ce qu'on va décrire ces propriétés en Scala? Tout simplement sous forme de variables. Et comment est-ce qu'on va décrire ces comportements en Scala? Tout simplement sous forme de méthodes. Chaque variable va décrire une propriété, on appelle ça un attribut en orienté objet, et chaque méthode va décrire une action que tous les éléments de l'ensemble vont être capables de réaliser, par exemple le prêt que pourra réaliser un lecteur. Tous les éléments d'une classe seront décrits par les mêmes variables, les mêmes attributs, et par les mêmes méthodes. Une fois que la classe va être décrite à partir de ces variables et à partir de ces méthodes, on va pouvoir créer des éléments de cet ensemble, ce qu'on appelle des objets. Un objet est tout simplement un élément d'une classe. À partir de la classe livre, qui fait une description générique de la classe de l'ensemble des livres, on va pouvoir créer un livre particulier, et donc ce livre sera un objet de la classe, une instance de la classe. On va pouvoir, une fois que la classe est décrite, créer des objets, et ces objets vont être créés tout simplement sous forme de variables qu'on va pouvoir utiliser à l'intérieur d'un programme, et utiliser comme on utilise les variables de types prédéfinis qu'on a vues jusqu'à maintenant. On va construire un objet. Cette construction va consister principalement à initialiser ce qu'on appelle son état, c'est-à -dire à attribuer, à associer des valeurs aux différentes variables au moment où l'objet va être construit. On va commencer par construire un objet pour pouvoir l'utiliser. Cette construction va principalement consister en une initialisation. Par exemple, quand on va inscrire un nouveau lecteur, on va lui attribuer une valeur pour son nom, qui va correspondre au nom de famille du lecteur qui vient de s'inscrire. Donc on initialise les attributs, les propriétés de l'objet pour l'instancier. Si on considère deux objets créés à partir d'une même classe, ces deux objets auront les mêmes attributs puisqu'ils font partie de la même classe, ils auront les mêmes méthodes, donc les mêmes attributs, les mêmes méthodes, mais les valeurs qui vont être associées aux attributs vont être, elles, différentes. On retrouve le comportement commun à tous les objets de la classe au travers de la notion d'attributs et de méthodes, et ce qui va différencier principalement deux objets c'est ce qu'on appelle leur état, c'est-à -dire les valeurs qui vont être associées aux attributs. Les méthodes, elles, leurs actions vont principalement consister à justement consulter les valeurs des attributs ou modifier les valeurs de ces attributs. Elles vont permettre de consulter ou de modifier l'état de chaque objet. Maintenant, si on imagine plus concrètement deux objets, un objet qu'on va noter O1, un objet qu'on va noter O2, ces deux objets vont avoir les mêmes attributs A1 et A2, mais au cours de l'exécution du programme, les valeurs qui vont être associées, elles, vont être différentes. A1 va avoir la valeur par exemple V11, et A2 va avoir par exemple la valeur V12, alors que le A1 de l'objet 2, lui, aura une valeur différente, V21, idem pour A2. Les deux objets auront les mêmes méthodes, une méthode M1 par exemple. Pour l'objet O1, l'application de la méthode sur l'objet O1 va intervenir sur les variables, sur les attributs ou les valeurs des attributs de l'objet 1 ; alors que l'application de la méthode M1 sur l'objet O2 va, elle, entraîner la modification des attributs et des valeurs des attributs de l'objet O2. Même comportement de méthode, simplement chacune s'applique sur les valeurs des attributs de l'objet sur lequel on va les appliquer. Nous avons vu la notion générale de classes, la notion générale d'objets. La notion générale de classes qui permet de représenter des ensembles d'informations qui ont des caractéristiques et des comportements communs. Ces ensembles sont décrits sous forme de classes à partir de variables qui vont représenter les propriétés, à partir de méthodes qui vont représenter les comportements. Et à partir de la description de cette classe, on va pouvoir ensuite instancier, créer des objets dans un programme, qui vont se comporter comme des variables. Ces variables, on va devoir les construire en les initialisant. Et puis ensuite, on pourra les utiliser simplement en attribuant des valeurs à leurs attributs et en utilisant l'ensemble des méthodes de la classe pour faire évoluer leur état, c'est-à -dire modifier progressivement les valeurs des attributs. C'est ainsi qu'en combinant plusieurs classes ensemble, en faisant interagir les objets de ces différentes classes, on va pouvoir réaliser l'activité d'un programme. [MUSIQUE] [MUSIQUE]