ООП. Инкапсуляция

      Комментарии к записи ООП. Инкапсуляция отключены

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 3 нед., 6 дн. назад.

  • Автор
    Сообщения
  • #4022

    Инкапсуляция — это определение всех членов типа внутри самого типа с возможностью дальнейшего контроля доступа к ним.

    Другими словами, мы размещаем всё, что относится к типу данных (поля, функции, свойства и т. д.), внутри самого типа, с целью защиты и чёткого разграничения. Почему так?

    Любой объект является владельцем собственных характеристик, включая поведенческие. Рассмотрим класс Человек (Person). У него есть целый ряд неотъемлемых характеристик, как например, имя, цвет глаз, группа крови, возраст. А также поведенческие характеристики, например, любой человек дышит, говорит, слышит, ходит…
    Любой конкретный экземпляр типа Человек включает все эти данные (индивидуальный набор) и методы. Но у каждого они имеют своё значение.
    Например, опишем класс Person:

    class Person
    {
       public string Name { get; protected set; }
       public string EyesColor { get; protected set; }
       public string BloodGroup { get; protected set; }
       public int Age { get; protected set; }
       public Person(string name, string eyesCol, string bloodGr, int age)
       {
          Name = name;
          EyesColor = eyesCol;
          BloodGroup = bloodGr;
          Age = age;
       }
       public void Walk()
       {
         //walking algorithm
       }
       public void Talk()
       {
         //talking algorithm
       }
       public void Breathe()
       {
         //breathing algorithm
       }
       public void Speak()
       {
         //speaking algorithm
       }
    }

    При тестировании мы создаём 2 экземпляра класса Person, каждый из которых владеет полным набором данных, определённых внутри класса, и аналогичным поведением.

    class Program
    {
       static void Main()
       {
          //creating 2 instances of a class
          Person p1 = new Person("John", "Blue", "1A", 47);
          Person p2 = new Person("Ian", "Gray", "2B", 32);
          //testing data
          Console.WriteLine("Name - {0}, Age - {1}, Eyes color - {2}, BloodGroup - {3}", p1.Name, p1.Age, p1.EyesColor, p1.BloodGroup);
          Console.WriteLine("Name - {0}, Age - {1}, Eyes color - {2}, BloodGroup - {3}", p2.Name, p2.Age, p2.EyesColor, p2.BloodGroup);
          //calling methods
         p1.Breathe();
         p2.Breathe();
         p1.Speak();
         p2.Speak();
         p1.Walk();
         p2.Walk();
       }
    }

    Инкапсуляция позволяет не только разграничивать данные и функциональность объектов, но ещё и контролировать доступ к ним.

    Зачем контролировать доступ? Чтобы данные класса не были испорчены.

    Например, все характеристики, которые мы задавали объектам при их создании, являются постоянными. Доступ на чтение открыт, но менять их нельзя, что, в принципе, логично в данном случае. Ведь ни группу крови, ни цвет глаз, ни имя мы по своей прихоти изменять не можем после того как они уже были установлены. Значения этих характеристик назначаются объекту при “рождении”, при помощи конструктора. А в дальнейшем используем разные модификаторы доступа на чтение и запись. В результате – прочитать значения полей можем, а изменить – нет.

    Можем подытожить, сказав, что класс Person ИНКАПСУЛИРУЕТ свои данные и поведенческие характеристики

Для ответа в этой теме необходимо авторизоваться.