Полиморфизм инкапсуляция наследование

программирование — ООП — инкапсуляция, полиморфизм, наследование, абстракция? или еще и паттерны (MVC, Singleton…)В вакансии указано — знание ООП. Я хочу понять — подхожу ли я для вакансии. Знаю эти 4 свойства (инкапсуляция, полиморфизм, наследование, абстракция). Но паттерны не знаю. Так все же если я знаю инкапсуляция, полиморфизм, наследование, абстракция, означает ли это, что я знаю ООП? Могу ли я откликаться на вакансии, где это требуется.

Арсентий (не в сети), Лыткарино18 августа 2016, 18:49
Вопрос в категории: Прочие юридические вопросы

Ответы юристов (14)

Однако ничего не дается даром: сами идеи ООП довольно трудны для восприятия «с нуля», поэтому до сих пор очень большое количество программ (различные системы Unix, Apache, Perl, да и сам PHP ) все еще пишутся на старом добром «объектно-неориентированном» Си. Стратегию ООП лучше всего описать как смещение приоритетов в процессе программирования от функциональности приложения к структурам данных.

Надеюсь что это будет не очень сумбурно, и не собьет с толку новичков, а наоборот поможет им более быстро освоится в мире объектно-ориентированного программирования. Поясняющего текста в данном посте будет не так уж и много, потому что основную часть я вынес в комментарии к коду.

Инкапсуляция – возможность скрытия реализации каких либо частей модуля или объекта от внешнего мира (от клиента).

Такой подход является основой объектно-ориентированного программирования. Это позволяет работать с объектами, не вдаваясь в особенности их реализации. В каждом конкретном случае применяется тот или иной подход: инкапсуляция, полиморфизм или наследование. Например, при необходимости обратиться к скрытым данным объекта, следует воспользоваться инкапсуляцией, создав, так называемую, функцию доступа или свойство.

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

Точнее, объект может наследовать свойства другого объекта и добавлять к ним черты, характерные только для него.

Полиморфизм позволяет писать более абстрактные программы и повысить коэффициент повторного использования кода. Общие свойства объектов объединяются в систему, которую могут называть по-разному — интерфейс.

класс. Общность имеет внешнее и внутреннее выражение: внешняя общность проявляется как одинаковый набор методов с одинаковыми именами и сигнатурами (именами методов, типами аргументов и их количеством); внутренняя общность — одинаковая функциональность методов.

Это объединение аналогично тому как завод или фабрика объединяет под своей крышей расходные материалы, а также станки и оборудования для переработки этого сырья в готовый продукт. Этот пример показывает, что, как и в случае с фабрикой, данные (сырье) и функции (станки) могли бы располагаться совершенно раздельно, условно говоря в разных концах города.

Однако тогда не было бы речи об объекте (фабрике).

Недавно мы говорили об основах объектно-ориентированного программирования в python. теперь продолжим эту тему и поговорим о таких понятиях ООП, как инкапсуляция .

наследование и полиморфизм .

Инкапсуляция — ограничение доступа к составляющим объект компонентам (методам и переменным).

Когда коды и данные объединяются таким способом, создаётся объект (object). Другими словами, объект — это то, что поддерживает инкапсуляцию. Внутри объекта коды и данные могут быть закрытыми (private). Закрытые коды или данные доступны только для других частей этого объекта.

Таким образом, закрытые коды и данные недоступны для тех частей программы, которые существуют вне объекта. Если коды и данные являются открытыми, то, несмотря на то, что они заданы внутри объекта, они доступны и для других частей программы.

Другими словами, объект — это то, что поддерживает инкапсуляцию. Внутри объекта коды и данные могут быть закрытыми (private).

Закрытые коды или данные доступны только для других частей этого объекта. Таким образом, закрытые коды и данные недоступны для тех частей программы, которые существуют вне объекта. Если коды и данные являются открытыми, то, несмотря на то, что они заданы внутри объекта, они доступны и для других частей программы.

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

В результате замена или модификация алгоритмов и данных, инкапсулированных в объект, как правило, не влечет за собой плохо прослеживаемых последствий для программы в целом (в целях повышения защищенности программ в ООП почти не используются глобальные переменные).

Она существенно повышает надежность разрабатываемых программ, т.к. локализованные в объекте алгоритмы обмениваются с программой сравнительно небольшими объемами данных, причем количество и тип этих данных обычно тщательно контролируются.

В результате замена или модификация алгоритмов и данных, инкапсулированных в объект, как правило, не влечет за собой плохо прослеживаемых последствий для программы в целом (в целях повышения защищенности программ в ООП почти не используются глобальные переменные).

Такой подход является основой объектно-ориентированного программирования. Это позволяет работать с объектами, не вдаваясь в особенности их реализации. В каждом конкретном случае применяется тот или иной подход: инкапсуляция, полиморфизм или наследование. Например, при необходимости обратиться к скрытым данным объекта, следует воспользоваться инкапсуляцией, создав, так называемую, функцию доступа или свойство.

А в институте меня учили только трем терминам, абстракцию — не упоминали, как по мне это правильно. Давайте вспомним, что эти термины означают, (я лично забываю не определения, а сами термины, вот не могу запомнить слова инкапсуляция и полиморфизм и все, хотя знаю что они означают).

Начнем с наследования. Вполне нормальное определение дается на википедии: позволяющий описать новый класс на основе уже существующего (родительского), при этом свойства и функциональность родительского класса заимствуются новым классом.

Для наглядности я буду приводить короткие куски кода на PHP (на самом деле язык тут не важен, просто мне кажется это самый распространенный на сегодня синтаксис, хоть и более классическим для примеров ООП является java, мне кажется PHP будет более полезным), поясняющие идею, и давать короткие описания. Как видите здесь Корова (Cow) унаследовала функционал от Животного (Animal), изменив реализацию метода draw (конкретизируя как корова на самом деле выглядит), и оставив реализацию метода eat().