dans la séquence vidéo précédente nous avions vu les concepts généraux de la programmation orientée objet dans cette séquence vidéoci nous allons voir comment écrire tout ceci concrètement en Java nous avions donc vu que la programmation orientée objet définit la notion de classe qui est le résultat des processus d'abstraction et d'encapsulation comme par exemple la définition d'une classe rectangle qui aurait des attributs largeur et hauteur et qui aurait une méthode sur face la classe au sens des langages de programmation définit un nouveau type qui nous permet de créer différentes variables comme par exemple trois variables rect 1 rect 2 rect 3 qui sont donc en langage orienté objet des instances ou des objets mais comment tout ceci s'écrit-il concrètement en Java pour déclarer une nouvelle classe on va simplement utiliser le mot réservver classe donc par exemple ici classe rectangle pour déclarer une classe que l'on a décidé d'appeler rectangle suivi ensuite donc de la définition qui sera détaillée par la suite cette écriture classe rectangle définit un nouveau type que l'on peut utiliser maintenant comme n'importe quel autre type pour déclarer par exemple des variables donc on utilisera le nom du type c'est-à-dire le nom de la classe suivi du nom de la variable c'est-à-dire du nom de l'instance donc par exemple pour déclarer une instance que l'on décide nommer recte 1 de la classe rectangle on écrirera simplement rectangle rect 1 virule en terminologie orientée objet une une variable correspond à une instance en Java concrètement non instance c'est-à-dire recttin dans cet exemple précis est en fait une référence sur un objet concret en mémoire tout ceci sera expliqué plus en détails plus tard dans le cours mais où concrètement écrire toutes ces lignes vous avez pour cela deux solutions soit vous pouvez déclarer toutes vos classe dans un même fichier soit vous pouvez mettre une classe par fichier regardons le premier cas où on déclare toutes les classes dans le même fichier donc par exemple supposons et pour l'instant peu importe les détails mais retenons les idées que l'on veuille avoir une classe dessin et qui utilise par exemple donc une classe rectangle tout ceci on va donc les déclarer dans un seul et même fichier qu'on a décidé d'appeler donc dessin. jva on a donc ici l'intégralité du fichier dessin. jva et donc on peut tout à fait comme ça déclarer ici une classe rectangle une autre classe dessin concrètement pour le compiler on utilisera donc simplement la compilation javac dessin.
jva que vous tapiez directement cette commande sur le terminal ou que ce soit votre environnement de développement éclipse ou autre qui le fasse pour vous et cette compilation va par contre produire deux fichiers un fichier dessin. classe et un fichier rectangle. classe et ensuite pour exécuter tout ceci la méthode Main étant dans la classe dessin on écrirait donc simplement Java dessin sur le termin fin ou alors on lancerait directement l'exécution de ce dessin point classe depuis éclipse par exemple voilà donc la première solution pour déclarer les classes une autre solution consiste à déclarer une classe par fichier donc chaque fois que vous avez une classe vous avez un fichier à part donc vous déclareriez la classe rectangle dans par exemple le fichier rectangle.
java la classe dessin dans le fichier dessin. java et dans ce cas si vous compilez depuis le terminal il faudrait compiler séparément chacun des fichiers bien sûr dans un environnement de développement intégré ces deux fichiers seraient intégrés dans le même projet et on les compilerait les deux séparément mais en appelant une seule fois donc la commande build c'est éclipse qui se chargerait donc de compiler ces deux fichiers et qui donc produirait comme dans le cas précédent de fichiers point class si on l'exécutait depuis le terminal on tapprerait donc ici Java dessin puisque c'est la classe dessin qui a la fonction main et c'est également ce que fera pour vous éclipse si vous lancez l'exécution depuis là et si par hasard vous aviez envie de faire Java sur rectangle. classe rectangle qui ne contient pas de main va vous donner donc à ce moment-là une exception qui vous dit qu'il n'existe pas de main dans no such méthode il n'existe pas de méthode Main dans la classe rectangle voyons maintenant comment remplir cette partie c'est-à-dire comment mettre des attributs et des méthodes à notre classe commençons par les attributs les attributs de la classe rectangle sont donc sa largeur et sa hauteur pour ça pour déclarer des attributs il suffit simplement de déclarer les différents attributs en mettant le type et le nom de l'attribut donc on déclare ici pour chacun des attributs son type son nom d'attribut suivi d'un point virgule donc pour notre exemple de classe rectangle ceci donnerait simplement double hauteur double largeur c'est aussi simple que ça de même pour l'utilisation des attributs d'une instance pour cela on aura donc le nom de l'instance suivi d'un point suivi donc du nom de l'attribut que l'on veut désigner donc par exemple pour désigner la hauteur du rectangle rect 1 on écrirait rect 1.
hauteur illustrons tout ceci sur un exemple concret donné ici dans un seul et même fichier qui contiendrait donc une première classe exemple pour avoir la méthode Main et puis qui utilise une classe rectangle donc dans laquelle on déclare une hauteur deux attributs une hauteur de type dou et puis une largeur de type double et donc la classe exemple ici va créer une instance utiliser une instance de la classe rectangle et pour ceci donc il faut utiliser la syntaxe suivante la déclaration initialisation d'une instance se fait en utilisant le nom de classe suivi donc du nom d'instance et puis égal new avec le nom de classe suivi entre de parenthèse comme ceci donc par exemple on a vu dans l'exemple précédent pour créer une instance recte de la classe rectangle on est on écrirait égal new euh rectangle ce qui va donc créer et initialiser tous les attributs avec les valeurs suivantes si on a des attribut de type in ça sera la valeur 0 int si on a des attributs de type double ça sera la valeur 0 double pour les boulean ça sera false et pour les objets ce sera donc la valeur spéciale nulle sur laquelle nous reviendrons par la suite et donc dans notre exemple précédent ici à ce stade rect 1 a une largeur et une hauteur nulle avant donc qu'on les modifie passons maintenant à la déclaration des méthodes les méthodes sont simplement des fonctions que l'on va mettre au sein de la classe donc dans le cas de notre classe rectangle on va s'intéresser ici à lui ajouter la méthode surface donc une méthode ça se déclare simplement comme d'habitude avec le type de retour le nom de la méthode puis ensuite entre parenthèses rondes la liste des éventuels paramètres tout ceci donc qui est l'entête de la méthode étant suivie par la définition de la méthode donc le corps de cette mé méthode entre acolade la seule différence simplement c'est que les méthodes sont mises dans la classe elle-même dans le cas de notre exemple de la classe rectangle la méthode surface s'ajouterait donc dans la classe rectangle ici avec donc sa valeur de retour double une surface retourne un double son nom et puis ici elle a pas besoin de de prendre de paramètres et elle retournerait donc la hauteur fois la largeur la question qu'on pourrait se poser c'est mais où sont donc passés les paramètres en effet si l'on avait à écrire une méthode comme nous le faisions auparavant en dehors de toute classe alors on aurait eu besoin de passer la hauteur et de passer la largeur comme argument à la fonction de sorte que hauteur et largeur soi connu pour effectuer ce calcul comment se fait-il qu'ici dans la méthode de la classe euh rectangle on n rien eu besoin de passer parce que tout simplement cette hauteur et cette largeur sont des attributs de la classe la méthode surface faisant partie de la classe rectangle elle a accès aux attributs hauteur et largeur de la classe rectangle c'est ce que l'on appelle techniquement une portée de classe c'est-à-dire que tous les attributs d'une classes sont connus de l'entièreté de cette classe et en particulier de chacune de ces méthodes donc par exemple toutes les méthodes de la classe rectangle ont accès à la hauteur et à la largeur il n'est donc pas nécessaire de passer les attributs comme argument aux méthodes donc pour résumer une méthode c'est simplement une fonction qui est propre à une classe on donc la mettre dans les classes mais qui en plus de ce fait a accès aux différents attributs de la classe et donc il est très important c'est une erreur de débutant des premiersres écritures de méthode il est très important de ne pas passer les attributs euh à une méthode de clin donc pour revenir encore une fois sur l'exemple l'exemple est tout à fait correct ici on a bien une méthode surfce qui ne prend pas du tout ici de de paramètres et qui peut accéder à la hauteur et à la largeur de rectangles qui ont été déclarés comme précédemment dans la classe ceci dit ce n'est pas parce que l'on n pas besoin de passer les attribut d'une classe comme argument à ces méthodes que les méthodes n'ont jamais de paramètres bien sûr si une méthode a besoin de recevoir des paramètre de l'extérieur de la classe pour pouvoir fonctionner alors il faudra bien sûr déclarer les paramètres à la méthode donc par exemple ici supposons qu'on imagine qu'on a une classe de figures colorées et dans cette classe on aurait différ grands attributs et en particulier aussi une méthode qui permet de colorier la figure laquelle méthode pourrait donc recevoir typiquement une couleur et elle modifierait donc les instances de la classe figure colorée pour les colorier dans cette couleur couleur étant lui-même un autre type qu'on aurait défini par ailleurs on pourrait donc par exemple déclarer une instance une figure de la classe figure colorée une instance rouge de la classe couleur et puis un tout petit peu plus tard en anticipant sur une syntaxe qui va vous être présenté colorier la figure avec la couleur rouge ce qui m'intéresse ici c'est de vous montrer que la couleur rouge donc elle vient de l'extérieur de la classe figure colorée elle ne fait pas partie de la classe figure colorée et donc c'est pour ceci que on a besoin de la passer ce n'est pas un attribut de figure colorée on a besoin de la passer comme paramètre à la méthode colori voilà vous savez donc maintenant déclarer et définir les méthodes d'une classe mais comment les utiliser c'est-à-dire comment faire appel nous allons pour cela utiliser une syntaxe très similaire à celle des attributs et aussi similaire à ce que vous avez déjà fait dans d'autres cadres par exemple lorsque vous appeliez la méthode size d'un tableau vous écriviez tableau. size c'est bien en fait un appel de la méthode size ici d'un d'un tableau dynamique donc le schéma général c'est le nom de l'instance point le nom de la méthode puis ensuite entre parenthèses rondes la liste des arguments que vous souhaitez passer à cet appel donc par exemple exemple si on veut appeler la méthode surface pour une instance rect 1 de la classe rectangle ce que l'on va écrire c'est rect 1 point surface et puis ici comme la méthode surface n'a pas besoin de recevoir des arguments on met simplement comme ça les deux parenthèses sans rien au milieu Sion revient donc à notre exemple complet nous avons donc comme précédemment la classe exemple ici qui va utiliser donc la dans un mod made une instance recttin de la classe rectangle dans la classe rectangle on aura donc ajouté ici une méthode surface et puis donc pour appeler cette méthode surface sur l'instance rect 1 de cette classe rectangle on écrira simplement ici rect 1 point surface lequel rect 1 point surface retourne un double que l'on peut donc ici afficher avec le message par exemple surface de point donc dans ce cas-là ça écrira surface de point et puis 12 qui est le résultat de 3 x 4 il faut bien comprendre que chaque instance a ses propres attributs donc si par exemple je déclare trois instances recte 1 recte 2 recte 3 de la classe rectangle et que j'ai donné la valeur 3 à la hauteur de recte 1 la valeur 4 à la largeur de recte 1 on aura des valeurs différentes 11,5 par exemple et 3. 8 pour recte 2 et on aura dans un autre endroit de la mémoire donc les valeurs par par exemple 34.