GNU/Linux >> Tutoriels Linux >  >> Linux

Comment :Programmation orientée objet - Plus avec les classes et les objets

Tour bonus

Bienvenue dans notre introduction à la programmation orientée objet ! Peut-être serait-il plus approprié de dire :"Bienvenue dans la partie bonus de notre introduction à la programmation orientée objet !". Cet article et celui qui le suit s'adressent à ceux d'entre vous qui souhaitent en savoir un peu plus sur certains des fondements de l'orientation objet et qui apprécient certains contenus bonus !

Pour résumer, si vous avez suivi certains des cinq premiers articles de cette série, vous avez appris pas mal de choses :

  • Comment l'abstraction contribue à simplifier les tâches de programmation.
  • Les bases des classes, des méthodes et des propriétés de l'orientation objet.
  • Les bases de l'utilisation des variables et des types et de la manipulation de ces données
  • Comment gérer le contrôle de flux avec for et while boucles.
  • Comment assembler tout cela pour créer un programme simple.

Cet article et le suivant prendront ce que vous avez appris de cette introduction et vous montreront comment vous pouvez utiliser certains des principes de l'orientation objet (souvent abrégé OO) pour créer un code efficace et bien organisé. Nous allons commencer avec un nouveau programme qui nous permettra de revoir certains concepts de base et d'aborder de nouveaux concepts, tels que les constructeurs et l'héritage .

Encore une fois, nous programmerons en C # en utilisant Visual Studio de Microsoft. Si vous souhaitez suivre (et que vous ne l'avez pas encore fait), vous pouvez trouver la configuration ici.

Si vous suivez la configuration de cet article jusqu'à la section "Sous le capot", vous serez exactement là où nous allons commencer. La seule chose que je ferai différemment de cet article est que je n'utiliserai pas le nom de projet par défaut "ConsoleApplication1". Au lieu de cela, j'appellerai mon projet "PettingZoo" (en un mot) parce que nous allons construire un zoo pour enfants comme programme d'exemple.

Remarque :L'orientation objet est disponible dans de nombreux langages et plates-formes, et les concepts sont très similaires. J'ai choisi C# car il est facile de démarrer et toutes les ressources dont vous avez besoin sont gratuites. Vous pouvez avoir d'autres langues et plates-formes que vous souhaitez utiliser, et c'est très bien aussi. Nous sommes ici pour apprendre l'orientation objet, pas un langage ou une implémentation en particulier.

.

Configuration initiale

Avant de commencer, vérifiez que vous disposez d'une application console créée dans Visual Studio. Cela devrait ressembler à la figure 1.

Figure 1 :Configuration initiale du programme PettingZoo

Avec cette application console disponible dans Visual Studio, nous pouvons commencer à créer notre première classe. En C#, il existe plusieurs façons de créer une classe. Dans certains langages, tels que Java, vous devez créer des classes de manière spécifique en utilisant des modèles de nom de fichier et de dossier spécifiques, mais C# se soucie simplement que nous disions que quelque chose est une classe.

Notez que même dans l'application console par défaut, vous avez déjà une classe appelée Program . Utilisation du mot-clé class suivi du nom de la classe est la façon dont vous définissez une classe en C#.

Pour notre approche, nous allons créer un nouveau fichier de code pour contenir nos classes. Cliquez avec le bouton droit sur le nœud PettingZoo dans le volet Explorateur de solutions, puis cliquez sur Ajouter->Classe, comme illustré à la figure 2.

Figure 2 : ajout d'une classe avec l'explorateur de solutions

Dans la boîte de dialogue qui s'ouvre, recherchez l'élément Code en effectuant une recherche ou en naviguant, et appelez votre fichier de classe quelque chose comme Animals.cs, comme illustré à la figure 3.

Figure 3 :Boîte de dialogue d'ajout de fichier de classe

Vous devriez maintenant obtenir un nouveau fichier de classe créé par Visual Studio qui contient quelque chose comme ceci :

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace PettingZoo{ class Animals { }}

Notez que par défaut, Visual Studio crée à la fois un fichier de classe et une définition de classe en fonction du nom de fichier que vous avez choisi. Dans certains langages, comme Java, cette structure est une exigence, mais en C #, ce n'est pas si strict. Nous allons changer le nom de la classe dans un instant, mais laissez-le pour le moment.

Dans le fichier que Visual Studio vient de créer, vous remarquerez un certain nombre de using ainsi qu'un namespace bloc de code. Ces lignes ne sont pas importantes pour notre classe, mais, au cas où vous seriez curieux, un espace de noms en C # est un moyen d'organiser les noms dans votre projet. Vous pouvez avoir plusieurs classes avec le même nom, par exemple, organisées sous différents espaces de noms.

Tant que vous travaillez dans un seul espace de noms, l'adressage des classes est assez simple. Mais si vous devez organiser votre projet en divisions plus complexes, vous devrez peut-être utiliser différents espaces de noms, auquel cas le using vous permettent de créer des raccourcis vers ces espaces de noms.

.

Classes et objets

Le fichier que vous avez maintenant contient une classe prédéfinie avec un nom basé sur le nom de fichier que vous avez choisi. Nous n'aurons pas de Animals classe, cependant, alors changeons cela en quelque chose d'autre. Dans un zoo pour enfants, nous avons besoin de chiens, bien sûr, alors changez le nom de la classe de Animals à Dog :

classe Chien{}

Notez le changement de Animals (pluriel) à Dog (singulier). Nous créerons une autre classe plus tard appelée Animal , alors soyez prudent lorsque vous lisez le code que vous remarquez sur des nuances comme celle-là.

Avant de commencer à ajouter du contenu à la classe, examinons la différence entre les classes et les objets. N'oubliez pas qu'une classe est le modèle de la façon dont les objets doivent être. Une analogie simpliste et pas très précise est celle d'une recette et d'un gâteau.

(Cette section est une revue des classes et des objets adaptée de l'explication présentée dans l'article lié ci-dessus. Si vous voulez ignorer ce rappel et passer directement à la programmation, passez directement à la section suivante ! Sinon, dégustez du gâteau !)

La recette vous explique comment faire un gâteau et est donc - en termes OO - une classe . Un gâteau est le résultat de l'exécution de la recette et, encore une fois, en termes OO, est un objet . Un autre terme fréquemment utilisé est instance , pour indiquer que le gâteau est une instance de l'exécution d'une recette.

Comme pour les gâteaux et les recettes, chaque gâteau est un gâteau unique. Ce que vous faites à un gâteau n'affecte pas les autres gâteaux. Mettre du glaçage sur un cupcake ne signifie pas que tous les cupcakes ont maintenant du glaçage. De même, si vous mangez un cupcake, il vous reste encore tous les autres.

Cependant, avoir une recette et savoir qu'elle produit un gâteau ne suffit pas. Vous avez également besoin d'une cuisine dans laquelle faire cuire le gâteau. En termes OO, c'est le programme où vous créez l'objet, et dans notre cas, ce serait le fichier principal Program.cs.

.

Retour au zoo pour enfants

Utilisons notre nouvelle classe pour créer un Dog objet, ouvrez donc le fichier Program.cs et ajoutez la ligne suivante dans le static void main bloc de code :

Chien monChien =new Chien();

Cette ligne créera un nouveau Dog objet du Dog class et stockez-le dans la myDog variable. Permettez-moi de diviser cette ligne en trois parties afin que je puisse expliquer ce qui se passe.

[1]Chien [2]monChien =[3]nouveau Chien();

Le premier élément [1], Dog , est le type de variable que nous voulons créer. Dans les langages à typage statique comme C# et Java, nous devons déclarer le type d'une variable avant de pouvoir lui attribuer des valeurs. Les langages typés dynamiquement, comme JavaScript ou Perl, ne l'exigent pas et placent la responsabilité du suivi du type de données qu'une variable contient sur le développeur.

Le deuxième élément [2], myDog , est le nom de la variable que nous utilisons pour accéder à l'objet. Ce n'est pas nécessairement le nom du chien que nous créons mais plutôt ce que nous utilisons pour référencer cette instance particulière d'un Dog classe.

Remarque :Pour en savoir plus sur les variables et les types de données comme les chaînes, consultez notre article d'introduction à la programmation sur les variables et les types.

.
Enfin, le troisième élément [3], new Dog() , nous dit que nous voulons créer ou instancier –un nouvel objet basé sur le Dog classer. Notez qu'il y a des parenthèses après le nom de la classe, ce qui signifie qu'il s'agit en fait d'une méthode . Nous reviendrons sur cette méthode, qui est une méthode spéciale appelée constructeur (nous approfondirons les constructeurs dans le prochain article lié ci-dessous).

Avec notre programme créant maintenant un nouvel objet à partir du Dog classe qu'il stocke dans la myDog variable, nous pouvons commencer à accéder aux propriétés et à la méthode de notre objet. Sauf, bien sûr, que notre classe est complètement vide et dépourvue de contenu ! Réglons cela.
.

Propriétés et méthodes

Revenons à notre fichier Animals.cs, où notre Dog la classe a un nom mais rien d'autre. Cependant, tout ce que nous mettons à l'intérieur de ce bloc de code fera partie de la définition de la classe. N'oubliez pas que les classes ont des propriétés et des méthodes qui définissent, respectivement, ce qu'est un objet et ce qu'il peut faire.

Créons à la fois une propriété et une méthode, puis nous discuterons de ce que chacune fait. À l'intérieur des accolades de votre bloc de code, {} , ajoutez les deux lignes suivantes :

string Name;void Speak() { Console.WriteLine("Woof"); } 

La première ligne (string Name; ) est une propriété ou champ . Dans l'orientation objet, les propriétés définissent ce qu'est quelque chose. Dans notre cas, nous voulons que notre chien ait un nom, nous avons donc créé une propriété de chaîne pour contenir le nom du chien.

Rappelez-vous que l'orientation objet cherche à créer des représentations programmatiques d'objets réels. Bien sûr, un nom seul ne fait pas un chien, mais OO ne cherche pas à dupliquer toutes les propriétés de chaque objet, juste celles dont nous avons besoin. Nous ajouterons plus de propriétés plus tard.

La deuxième ligne est une méthode définition (ou signature de méthode ) et est un peu plus complexe, donc, comme avant, permettez-moi de le décomposer un peu et de vous montrer ce que fait chaque élément.

[1]void [2]Speak() [3]{ Console.WriteLine("Woof"); } 

Élément [1], void , est le retour type de la méthode, ou le type de sortie que la méthode produira lorsqu'elle sera exécutée. Dans les langages à typage statique comme C# et Java, en plus de déclarer les types de variables, nous devons toujours déclarer le type de données que nous renvoyons à partir des méthodes. Les langages typés dynamiquement laissent la responsabilité de déterminer ce qui sort d'une méthode au développeur.

Dans notre cas, au moins au début, nous voulons juste que le chien dise "Woof" lorsque nous lui demandons de parler, nous n'avons donc pas besoin de retourner quoi que ce soit. Cela changera plus tard, lorsque nous couvrirons l'héritage dans le prochain article.

Cependant, même si nous ne voulons pas renvoyer de valeur spécifique, nous devons toujours être explicites à ce sujet dans le programme. Pour ce faire, nous pouvons déclarer que la méthode retourne un void valeur, ce qui en C# et langages similaires signifie que nous ne renvoyons rien.

Élément [2], Speak() , est le nom de la méthode, et c'est ce que nous utilisons pour appeler ou exécuter la méthode. Notez que les méthodes, comme les propriétés, appartiennent à l'objet.

Élément [3], le bloc de code , est le code que le programme exécutera lorsque nous appellerons la méthode. Vous pouvez également voir ce type de bloc de code également appelé corps de la méthode . Pour l'instant, dans ce bloc de code, nous allons simplement dire à la console d'écrire une ligne contenant "Woof".
.

Rendre votre méthode publique

Maintenant que nous avons une méthode, nous pouvons l'appeler ou l'exécuter depuis notre programme et faire aboyer le chien. Il y a cependant un problème qui me donne une excellente occasion de revoir un autre des concepts clés de l'orientation objet.

Normalement, pour accéder aux propriétés et aux méthodes d'un objet, vous devez d'abord écrire le nom de la variable contenant votre objet, puis le nom de votre propriété ou méthode. Par exemple, pour obtenir la valeur du Name propriété string, vous pourriez écrire :

string dogName =myDog.Name;

Pour exécuter la méthode Speak(), vous pourriez alors écrire :

monChien.Speak();

Cependant, si vous faites cela dans Program.cs, vous obtiendrez un message d'erreur comme illustré à la figure 4.

Figure 4 :Erreur de niveau de protection

L'erreur indiquant "'PettingZoo.Dog.Speak()' est inaccessible en raison de son niveau de protection" se produit à cause d'un concept clé dans OO appelé abstraction .

En bref, l'abstraction enlève les détails de la façon dont quelque chose fonctionne lorsque nous n'avons pas besoin de connaître ces détails. Dans notre programme, nous avons seulement besoin de savoir que le chien peut parler, mais nous ne nous soucions pas vraiment de la façon dont il le fait.

L'abstraction permet à la place au concepteur de classe de proposer des points d'accès à la classe à travers lesquels ils peuvent travailler avec les objets. De nombreuses langues permettent cet accès via des modificateurs d'accès .

C#, par défaut, masque les propriétés et les méthodes à l'extérieur de la classe. Cependant, la politique relative à ce type de séparation diffère dans d'autres langages, et certains langages comme JavaScript n'offrent même pas ce niveau de protection.

Cependant, le principe reste que vous rendez public ce que vous voulez que tout le monde utilise et cachez le reste. La partie rendre public, en C# au moins, consiste simplement à ajouter le mot-clé public devant les propriétés et les méthodes auxquelles vous voulez que quelqu'un accède. Donc, si vous mettez à jour le Dog classe pour ajouter public devant le void Speak() ligne dans Animals.cs, les gribouillis rouges disparaissent dans Program.cs, comme illustré à la figure 5.

Figure 5 : Déclaration de méthode publique

En prime, lorsque vous rendez votre méthode publique, Visual Studio ajoute la méthode aux options disponibles via le système de saisie semi-automatique IntelliSense. Lorsque vous tapez myDog et appuyez sur le point, vous obtenez une liste de toutes les propriétés et méthodes publiques de cet objet, comme illustré à la figure 6.

Figure 6 :Visual Studio Intellisense Auto-Complete avec notre nouvelle méthode publique

D'autres éditeurs de code ont des systèmes d'auto-complétion similaires. Ces saisies semi-automatiques sont l'un des principaux avantages de ces éditeurs pour les programmeurs :vous apprendrez à aimer ces fonctionnalités au fur et à mesure que vous évoluerez en tant que programmeur !

.
Maintenant que nous avons corrigé toutes les erreurs, nous devrions pouvoir exécuter notre programme et voir que le chien aboie. Vous pouvez placer un point d'arrêt dans votre Program.cs en cliquant dans la marge de gauche ou en plaçant votre curseur sur le crochet après myDog.Speak() et en appuyant sur F9. Ensuite, appuyez sur F5 pour exécuter le programme. Vous devriez voir la console apparaître et la sortie de votre chien qui aboie devrait apparaître, comme illustré à la figure 7.

Figure 7 :Notre chien parle !

Bien sûr, nous pouvons maintenant créer une portée de chiens en créant plusieurs variables et en instanciant des objets dans celles-ci. Vous pouvez essayer quelque chose comme la figure 8, par exemple :

Figure 8 :Deux chiens qui parlent

Vous avez un résultat similaire ? Super, félicitez-vous, mais une seule fois, car nous avons encore du travail à faire. Après tout, nous avons promis que l'orientation objet nous permettait de créer des objets uniques, et tout ce que nous avons fait est de créer deux "chiens" identiques. Ensuite, nous vous montrerons comment utiliser des constructeurs pour créer des objets séparés et uniques.
.
.


Linux
  1. Comment programmer avec Bash :syntaxe et outils

  2. Flatpak sur Linux :qu'est-ce que c'est et comment installer des applications avec ?

  3. Comment configurer LogAnalyzer avec Rsyslog et MySQL

  4. requête arp et réponse à l'aide de la programmation par socket c

  5. Suppression de fichiers avec rm en utilisant find et xargs

Tuto :Programmation Orientée Objet – Constructeurs et Héritage

Comment déployer une application PHP avec Nginx et MySQL à l'aide de Docker et Docker Compose

Utilisation de Tailscale sur Windows pour réseauter plus facilement avec WSL2 et Visual Studio Code

Comment installer et configurer WordPress avec Ansible

Comment gérer les LinkageErrors en Java ?

Création de classes et d'objets à l'aide de scripts bash