Catégorie : Programmation JV

  • Bases de la POO : Encapsulation

    Encapsulation : Masquage de l’état interne et des fonctionnalités d’un objet et autorise uniquement l’accès via un ensemble public de fonctions. (source)

    Mots clés: public, private, protected, get;, set;

    Version 1 de l’accessibilité et protection des membres:

    public class Program
    {
        static void Main()
        {
            Character character = new Character();
            character.Stats();
        }
        
    }
    
    public class Character
    {
        private string name = "Gordon";
        private int healthPoints = 100;
    
        // méthode décomposée du get; set;
        public void SetName(string newName)
        {
            name = newName;
        }
    
        public string GetName()
        {
            return name;
        }
    
        public void SetHealthPoints(int newHp)
        {
            if (newHp < 0)
            {
                newHp = 0;
            }
            if (newHp > 100)
            {
                newHp = 100;
            }
    
            healthPoints = newHp;
        }
    
        public void Stats()
        {
            Console.WriteLine($"Name: {name} | HP: {healthPoints}");
            Console.Read();
        }
    }

    Version 2 « optimisée » :

    public class Program
    {
        static void Main()
        {
            Character character = new Character("Gordon", 100);
            character.Stats();
        }
        
    }
    
    public class Character
    {
        public string name { get; private set; } // Il faut mettre ce champ en "public" pour proteger le set
        private int healthPoints = 100;
    
        public Character(string newName, int newHp)
        {
            name = newName;
    
            if (newHp < 0)
            {
                newHp = 0;
            }
            if (newHp > 100)
            {
                newHp = 100;
            }
    
            healthPoints = newHp;
        }
    
        public void Stats()
        {
            Console.WriteLine($"Name: {name} | HP: {healthPoints}");
            Console.Read();
        }
    }
  • Bases de la POO : Héritage

    Apprentissage des principes de la programmation orientée objet.

    Encapsulation, héritage, abstraction et polymorphisme.

    Exemple d’héritage:

    namespace Heritage
    {
        class Program
        {
            static void Main(string[] args)
            {
                CharacterClass newCharacter = new CharacterClass();
                
            }
        }
    }
    
    namespace Heritage
    {
        public abstract class Entity
        {
            protected int strength;
            protected int dexterity;
            protected int willpower;
            protected int healthPoints;
            protected string name;
            protected string classType;
        }
    }
    
    namespace Heritage
    {
        public class Character : Entity
        {
            private int level;
            private int experience;
    
            public Character()
            {
                classType = ClassName();
                level = 1;
                experience = 0;
                name = CharacterName();
                strength = CharacterStrength();
                dexterity = CharacterDexterity();
                willpower = CharacterWillpower();
                healthPoints = 5;
                //Console.WriteLine(Stats());
            }
    
            public static string CharacterName()
            {
                var random = new Random();
    
                var firstName = new List<string> { "Gordon", "John", "Kaneda", "François"};
                var lastName = new List<string> { "Freeman", "Carter", "Shotaro", "Deschamps"};
    
                int index1 = random.Next(firstName.Count);
                int index2 = random.Next(lastName.Count);
    
                string name = firstName[index1] + " " + lastName[index2];
                return name;
            }
    
            public static int CharacterStrength()
            {
                var random = new Random();
                int strength = random.Next(1, 4);
                return strength;
            }
    
            public static int CharacterDexterity()
            {
                var random = new Random();
                int dexterity = random.Next(1, 4);
                return dexterity;
            }
    
            public static int CharacterWillpower()
            {
                var random = new Random();
                int willpower = random.Next(1, 4);
                return willpower;
            }
    
            private string ClassName()
            {
                var random = new Random();
                var classes = new List<string> { "Wizard", "Thief", "Fighter" };
                int index = random.Next(classes.Count);
                string classType = classes[index];
                return classType;
            }
    
            public string Stats()
            {
                return $"Name: {name}\n" +
                       $"Class: {classType}\n" +
                       $"Level: {level}\n" +
                       $"XP: {experience}\n" +
                       $"STR: {strength}\n" +
                       $"DEX: {dexterity}\n" +
                       $"WIL: {willpower}\n" +
                       $"HP: {healthPoints}\n";
            }
        }
    }
    
    namespace Heritage
    {
        public class CharacterClass : Character
        {
            public CharacterClass()
            {
                switch (classType)
                {
                    case "Wizard":
                        willpower += 5;
                        break;
                    case "Thief":
                        dexterity += 4;
                        healthPoints += 1;
                        break;
                    case "Fighter":
                        strength += 3;
                        healthPoints += 3;
                        break;
                }
                Console.WriteLine(Stats());
            }
        }
    }