Инкапсуляция — это способность объектов скрывать часть своего состояния и поведения от других объектов, предоставляя внешнему миру только определённый интерфейс взаимодействия с собой.
Например, вы можете инкапсулировать что-то внутри класса, сделав его приватным (private) и скрыв доступ к этому полю или методу для объектов других классов. Более открытый режим видимости protected сделает это поле или метод доступным в подклассах.
На идеях абстракции и инкапсуляции построены механизмы интерфейсов и абстрактных классов/методов большинства объектных языков программирования.
Многих путает, что словом «интерфейс» называют и публичную часть объекта, и конструкцию interface из большинства языков программирования.
В объектном языке программирования, с помощью интерфейсов (обычно объявляемых через ключевое слово interface) можно явно описывать «контракты» взаимодействия объектов.
Например, вы создали интерфейс ЛетающийТранспорт с методом лететь(откуда, куда, пассажиры), а затем описали методы класса Аэропорта так, чтобы они принимали любые объекты с этим интерфейсом. Теперь вы можете быть уверены, что любой объект, реализующий интерфейс — будь то Самолёт, Вертолёт или ДрессированныйГрифон, сможет работать с Аэропортом.
UML-диаграмма реализации и использования интерфейса.
Вы можете как угодно менять код классов, реализующих интерфейс, не беспокоясь о том, что Аэропорт перестанет быть с ними совместимым.
НаследованиеНаследование — это возможность создание новых классов на основе существующих. Главная польза от наследования — повторное использование существующего кода. Расплата за наследование проявляется в том, что подклассы всегда следуют интерфейсу родительского класса. Вы не можете исключить из подкласса метод, объявленный в его родителе.
UML-диаграмма единичного наследования против реализации множества интерфейсов.
В большинстве объектных языков программирования, класс может иметь только одного родителя. Но с другой стороны, класс может реализовывать несколько интерфейсов одновременно.
ПолиморфизмВернёмся к примерам с животными. Практически все животные умеют издавать звуки, поэтому мы можем объявить абстрактный метод издания звука в их базовом классе. Все подклассы должны будут реализовать этот метод по-своему.
UML-диаграмма единичного наследования против реализации множества интерфейсов.
Комментарии к книге «Погружение в паттерны проектирования», Александр Швец
Всего 0 комментариев