TGTGInsightаналитика telegramLIVE / telegram public index
← Программирование для гуманитариев
Программирование для гуманитариев avatar

TGINSIGHT POST

Post #364

@it_human

Программирование для гуманитариев

Просмотры2,870Количество просмотров
Опубликован24 дек.24.12.2020, 16:06
Содержимое поста

Содержимое

ООП. Абстракция. Инкапсуляция Продолжаем серию постов о введении в ООП. В предыдущих сериях: 1. Что такое классы 2. Что такое объекты классов и как их создавать. Конструкторы 3. Что такое ООП Сегодня на пальцах разберём такие принципы ООП как абстракция и инкапсуляция. Абстракция С абстракицей всё достаточно просто. Вспомним класс User из предыдущих постов: class User { string name; int age; string phone; function say_hello() { print(«Hello! My name is {name}»); } } В реальном мире юзер - это человек, очень сложный объект, который не опишешь двумя строчками. А в нашей программе объект User - это всего лишь набор данных: имя, возраст и телефон. Ничего более сложного для нашей программы и не нужно знать. Принцип абстракции в том и заключается, чтобы используемые в программировании объекты содержали только необходимые для программы элементы, а всё остальное можно просто отбросить. Инкапсуляция Чтобы разобраться с тем, что такое инкапсуляция, возьмём такой пример как телевизор. Внутри телевизора есть много разных деталей, он устроен сложно. Но простым пользователям вскрывать корпус телевизора и смотреть, что там внутри нельзя (так пишут в инструкции, иначе телевизор не примут на гарантийное обслуживание). Что там внутри пользователь знать и не должен - и это и есть принцип сокрытия информации (он же - инкапсуляция), характерный для ООП. Специально для пользователя придуман пульт - с кнопками вкл и выкл, регуляторами громкости и возможностью переключать каналы. Только этот набор действий доступен пользователю телевизора. Набор операция, предназначенный для внешнего использования называется публичный интерфейс, и пульт - это внешний интерфейс телевизора. Принцип инкапсуляции в ООП выглядит обычно так: когда мы определяем класс, в нём тоже есть публичный интерфейс - те методы, которые можно использовать за пределами класса. И есть скрытая часть - те «внутренности», к которым нельзя обращаться извне. В некоторых языках программирования для этой цели придуманы модификаторы доступа - например, public и private - они как раз и показывают, является ли данный метод публичным и открытым для всех, или же это скрытые внутренние детали. Раз уж у нас такая метафора, определим класс Телевизор c его публичным интерфейсом, и приватными методами: class TVSet { public turnOn(); public turnOff(); public nextChannel(); private changeSecretParameter(); } Приватный метод обычным пользователям недоступен, его могут использовать только «разработчики телевизора» для каких-то встроенных функций. Зачем придуман метод сокрытия информации? Например, для того, чтобы пользователь не сломал телевизор. Чтобы ему было легко пользоваться телевизором, не зная, как он устроен. Чтобы инженеры могли отремонтировать телевизор внутри - заменить там часть деталей, поменять что-то в его механизме - при этом для пользователя ничего не изменится, так как не изменится публичный интерфейс телевизора. То есть пульт и все кнопки на нём будут работать, как и прежде, несмотря на то, что в телевизоре многое изменилось. Таким же образом мы можем поменять код внутри нашего класса, класс будет использовать другую логику и другие алгоритмы, но если при этом не изменится публичный интерфейс - все публичные методы будут давать такой же результат, как и раньше - нам не придётся менять код, работающий с этим классом. Это позволяет проще и быстрее менять код и избегать лишних ошибок при внесении изменений.