static void Main(string[] args) { /* * Classe simple : Personne * * Nous allons commencer par une classe simple, c'est à dire une "personne" quelconque * Ce sera la base de nos héros. Il est crucial de comprendre comment chaque paramètres * et chaque méthode s'imbrique pour comprendre la suite. * Soyez sur d'avoir le fichier "Personne.cs" ouvert dans un onglet, et de le lire * en même temps que le code ci-dessous */ Console.WriteLine("- - - Personne - - -"); // Déclaration avec le constructeur complet (N°1) // Contrairement aux variables, il faut allouer de la mémoire pour une classe, et // la synthaxe pour ce faire est "Classe Nom = new Classe(paramètres)" Personne Paul = new Personne(23, "Paul", "43 rue de la République"); // Déclaration avec le constructeur simplifié (N°2) Personne Jean = new Personne(62, "Jean"); // Ici pas d'adresse! // Declaration avec le constructeur vide (N°3) Personne Alex = new Personne(); // Notez Que ces deux lignes ont le même résultat, la présentation d'une personne Paul.Presentation(); // Présentation complette de Paul Jean.Presentation(); // Présentation de Jean, notez qu'une "adresse" est fournie // Ici et contrairement aux lignes précédentes, le même appel de fonction // à un résultat différent! Ce comportement est lié à une variable interne à la // classe! Voir Personne.cs pour plus d'info. Paul.DireAge(); // Paul donne son age car il a moins de 50 ans Jean.DireAge(); // Jean ne donne pas son age, car il a plus de 50 ans // Il est possible de modifier les variables dans une classe de la même // manière qu'on modifiais les variables précédement! Alex.Age = 40; Alex.DireAge(); // A noter : Alex n'as pas tout ces attributs déclarés. // Le résultat de certaines méthodes est alors parfois étrange... Alex.Presentation(); /* * Classe héritée : Héro * * La classe "Hero" HERITE de la classe "Personne". En effet, un héro est une personne. * Un héro possède donc tout les attributs d'un personne, mais possède ces propres attributs. * Un héro peut aussi faire tout ce que fait une personne, mais pas forcément de la même manière. * * Les notions abordés ici sont PRIMORDIALES. A la fin de ce cours, vous devez savoir: * - Ce qu'est l'hériatge * - Ce qu'est la surcharge * - Et surtout POURQUOI ON UTILISE DES CLASSES * * Les objets sont au coeur de la Programmation Orientée Objet (POO), les classes étant * le pillier de tout programme écrit en C#. J'en profite pour attirer votre attention sur * le fait que chacun de ces programmes (et ce depuis le premier exercice) EST UNE CLASSE! */ Console.WriteLine('\n' + "- - - Hero - - -"); // Deux déclarations identiques pour créer deux héros Hero SuperBaleze = new Hero(35, "Jean-Marie", "14 rue des gens gentils", "SuperBaleze", "Super Force"); Hero LeBinoclard = new Hero(21, "Jean-Guy", "122 impasse de chez Mamie", "LeBinoclard", "Mega Vision"); // La classe Héro ne possède pas de fonction "DireAge()" ni même d'attribut "Age" (Allez voir!) // Il est possible d'appeler cette fonction sans erreur car SuperBaleze est un héro, et // qu'un héro est une personne. La classe "Hero" hérite de "Personne", et donc ces attributs et méthodes // sont elles aussi hérités. SuperBaleze.DireAge(); // Cette méthode est propre aux héros, elle n'existe que dans la classe "Hero" // "Jean" ou "Paul" n'y ont pas accès... SuperBaleze.UtiliseSonPouvoir(); LeBinoclard.UtiliseSonPouvoir(); // Erreur à la ligne suivante //Jean.UtiliseSonPouvoir(); // Première complication. Lors de sa présentation, "LeBinoclard" ne donne ni son nom ni son adresse! // Pourtant cette fonction est la même que celle appelée par "Paul" ou "Jean"! // Ce phénomène est possible car la fonction "Présentation()" à été surchargé // Pour plus de détails, allez voir "Personne.cs" LeBinoclard.Presentation(); // Comme pour une fonction traditionelle, les méthodes peuvent prendre des paramètres... SuperBaleze.FrappeLeRobotGeant(100); // ...et de la même manière, ces méthodes peuvent avoir un retour! if (SuperBaleze.AUnEnnemiJure()) { Console.WriteLine("C'est surement l'oeuvre de mon ennemi juré!"); } else { Console.WriteLine("D'où sort ce robot géant?"); } if (LeBinoclard.AUnEnnemiJure()) { Console.WriteLine("C'est surement l'oeuvre de mon ennemi juré!"); } else { Console.WriteLine("D'où sort ce robot géant?"); } // Une classe peut être manipulée comme une variable, et être passée en paramètre // (une classe peut même être un type de retour!!!) SuperBaleze.Alliance(LeBinoclard); // Enfin, une partie de classe peut être passé en paramètre LeBinoclard.OuEsTaBaseSecrete(SuperBaleze.Adresse); }