IT-кот 10. Скрытность на 100
Человеки при всей их обычности обладают сильным колдунством - иначе как объяснить почему лоток снова опустел? IT кот готов передать власть над материей в руки простых котов. Вот это, конечно, да....
Для ЛЛ или тех кто не боится заклинаний на древней латыни (ну почти латыни) пример кода, использующийся в посте теперь буду выкладывать в верхней его части, выделив в рамочку (иначе его никто больше не выделит в рамочку). Пример колдунства лежит здесь.
Как в любом хорошем фокусе, материя никуда не девается - ее лишь убирают из виду. IT-кот называет это заклинание инкапсуляцией.
Что можно инкапсулировать помимо характерной субстанции лотка? Инкапсуляцию можно использовать для защиты чувствительной информации (которую кто-то может "украсть" и применить не так, как задумывалось изначально), либо сокрытия нюансов реализации конкретного действия (когда мы просим это дать еды, нам не важно, как это еды нам достанет).
Если говорить о программировании, то инкапсуляция позволяет разделить весь код на личный и публичный. К личному относится та часть кода, которая содержит в себе чувствительную информацию, либо нюансы реализации, которые не должны быть доступны публике.
Кто такая публика? Это либо другие разработчики, которые пытаются использовать ваш класс в своей работе, либо вы сами через пару месяцев, забыв что в вашем коде от чего зависит.
Первым шагом к инкапсуляции является выделение вышеобозначенных ролей. Для этого каждый элемент класса помечается модификаторами: public (для всех) и private (для частного использования). Также распространен модификатор protected, который позволяет использовать элемент класса самому этому классу, а также всем его потомкам. Если модификатор не указывать, то по умолчанию выставляется самый высокий модификатор (ограничивающий область использования больше всех) - private.
Итак, первая цель - защита чувствительных данных в классе.
Очевидно, что в случае с котом чувствительными данными будет имя - ведь ты не хочешь быть барсиком, когда ты сэр. Возьмем примеры из предыдущих постов (а именно из IT-кот 7. Классовое неравенство и IT-кот 9. "Му" говорит виртуальный кот) можно модифицировать, указав, что имя кота можно менять только в классе кот:
private string _name;
Теперь любая попытка обратиться к коту будет запрещена компьютером и ничего работать не будет. Хотя ладно, пусть обращаются, только с должным почтением, поэтому позволим получать наше имя в отдельном методе:
public string GetName()
{
return "его Величество, " + _name;
}
В отличие от прочих методов этот возвращает тип строку (для указания что конкретно необходимо возвратить используется ключевое слово return).Ну и перепишем перечисление проживающих в доме котов:
Cat cat = animal as Cat;
Console.Write(cat.GetName());
Console.Write(", ");
Итого, мы смогли упростить метод перечисления (на одну строку), вынести способ обращения внутрь класса Cat и позволить тем самым котам самим определять то, как к ним обращаются.Ну ладно, это все удобно, но IT-кот власть за счет сокрытия всего сущего. Как же этого добиться? С помощью личных методов. Очевидно, что личным методом котов является тыгыдык, опишем его так: private void DoTygydyk(). Теперь тыгыдык как бы есть, но его как бы нет совсем. Даже в методе Show (который знает, где кот, а где животное) не получиться кота попросить сделать тыгыдык.
Когда происходит тыгыдык? Всегда, но разве что не в момент создания кота. Поэтому перед каждым действием в классе Cat надо вызвать случайный тыгыдык.
Четыре кита ООП простыми словами
Это будет полезно тем, кто только начинает свой объектно-ориентированный путь.
Собственно, представим себе рядом стакан, кружку, чайник, кофемашину, велосипед и скейт. Что между ними всеми общего? Ну как минимум то, что они есть. То есть это - объекты, которые были созданы. Но как они были созданы? Скорее всего на заводе производителя по чертежам. Ок, чертежём назовём конструктор. Ну а класс? А что это такое? А его нет в нашей вселенной - эта сущность есть абстракция, что живёт лишь в наших мыслях. В реальном мире её нет и никогда не будет, такова уж физика - ей по барабану, что птицы и млекопитающие имеют дальних родственников - она лишь обеспечивает возможность естесственного отбора. А уж родственников друг другу находим мы, люди.
С объектами и классами разобрались, а что же там с нашими стаканами и велосипедами. Мы уже поняли, что всё это объект, то есть грубо можно все объекты наследовать от какого-нибудь суперпредка, суперкласса, что и реализовано в некоторых языках. Но что другого общего между скейтом и стаканом, например? Конечно, можно углубляться и считать, что они все из молекул, и они все из твёрдых веществ. Однако это всё бред и СПГС, так что ответ прост - да ничего. То есть это совершенно разные объекты с совершенно разным функционалом. Более того - естесственно компьютерные модели и иерархии будут сильно отличатся от физик и химий. И это нормально, вопрос об адекватностях моделей ставиться лишь когда модель неадекватна, а до тех пор пилить можно что угодно, лишь бы работало.
Вот. У нас есть супер-предок Object, от которого дефолтно наследуются все объекты. Допустим, то что объекты состоят из атомов и есть то, что наследуют все объекты. Но все дополнения и правки - полиморфизм. Так, из атомов мы слепили колёса и приделали на доску - ок, это скейт. На него можно встать и катиться, а сильно извернувшись и полетать в трёх метрах над землёй, прямо таки излучая своё яркое эго. В то время как стакан - это мы слепили из атомов плотную ёмкость, из которой вода не выливается под действием силы тяжести. И прямое применение стакана - налив воды опрокинуть его над ртом, чтобы вода вытекла прямо в желудок. Так делают настоящие пацаны, не заботясь об икоте или страхе утонуть, так что вот - полиморфизм.
Однако что с остальным? У нас ещё абстракция, инкапсуляция и наследование. Ок, начнём с наследования, так оно наиболее близко. Вот что у нас общего между стаканом и кружкой? Ну в оба можно налить воду, но у кружки есть ручка чтобы держаться. То есть можно придумать некий общий класс - ёмкость. Однако что это за класс? Можно например за этот класс взять стакан, тогда все ёмкости по дефолту стаканы, а всё остальное - видоизменённые стаканы. Но кому-то больше нравяться кувшины, например некоторые чики насят их на голове, считая что это удобно. Ну и пусть носят, но как-то же решить надо, что главнее и идеальнее. Так вот - недостяжимый идеал и есть главный - это называется абстрактный класс. То есть ёмкость, что невозможно создать, для которого нет полного чертежа. А все чертежи, что дополнили до полного - есть наследованные классы от класса ёмкость.
Тут мы подошли к абстракции. Вот такое иерархическое наследование приводит нас к, возможно главной, идее ООП. Вот мы взяли и выделили всё, куда можно налить воду в отдельный класс, нарисовали общий чертёж, но специально не доделали его, оставив зазор для будущих творцов, и назвали чертёж - ёмкость. Тысячи лет изобретатили всех миров создают свои ёмкости, одна лучше другой. Для разных людей - по разному, конечно. Но каждый раз группировать молекулы стекла определённым образом - непростая задача. Поэтому ремесленники пошли на хитрость, они создали тайный совет ремесленников мира и решили делиться друг с другом своими наработками. То есть создавать мелкие чертежи и объявлять классом, например, извлистой ручки в форме ленты Мёбиуса, например. Возможно такая ручка удобно только инопланетным существам, но чертёж создан и к нему можно ссылаться при создании своего чертежа. Таким образом мы абстрагируемся от низкоуровневой задачи "формирования ёмкостей посредством перемещения молекул" к "конструированию ёмкости посредством совмещения деталей, элементов". Это и есть абстракция.
Но мы подошли к последнему пункту - инкапсуляция. Она неразрывна с абстракцией, и по сути благодаря ей она и работает. Инкапсуляция - это своеборазный клей (или синяя изолента), которым склеивают разные чертежи в один. То есть совмещение деталей для создания своей - это и есть инкапсуляция. Причём при совмещении мы можем не описывать детали этого совмещения (то есть члены класса могут быть приватными), таким образом помогая абстрагироваться тем, кто этот чертёж использует. Вот посмотрим на чайник - что это такое? Это стакан (или кружка) к которому снизу (а может внутри по середине?) приклеен нагревательный элемент. Пустив по нему ток, согласно инкапсулированному в нагревательный элемент закону Ома, будет выделяться тепло и нагреваться вода. А кофемашина? Это куда более сложное устройство, с множеством насосов, ёмкостей, шлюзов, измельчителей и чайников. И всё склееное клеем. А может синей изолентой. Это снова инкапсуляция.
Таким образом, абстракция невозможна без инкапсуляции и наследовании, как невозможен полиморфизм без, собственно, наследования. Ну а полиморфизм невозможен ещё и без инкапсуляции, которая банально бесполезна без наследования и полиморфизма. Вот такие тут треугольники с пирогами. Жаль только про пирог наврали. И про день рожденье.
Ссылка на комментарий: https://toster.ru/answer?answer_id=353361
В Питере шаверма и мосты, в Казани эчпочмаки и казан. А что в других городах?
Мы постарались сделать каждый город, с которого начинается еженедельный заед в нашей новой игре, по-настоящему уникальным. Оценить можно на странице совместной игры Torero и Пикабу.
Реклама АО «Кордиант», ИНН 7601001509
Инкапсуляция
Мобильному шиномонтажу тоже нужен шиномонтаж