Найти тему
Self Study

Ответы на собеседовании: Основные принципы ООП

Рис. 1. Основные принципы ООП
Рис. 1. Основные принципы ООП

Введение

В данной статье рассматривается один из общих вопросов, который вам могут задать на собеседовании на должность Software Engineer.

Сам вопрос звучит так: "Назовите основные принципы ООП и дайте их краткое определение".

Основные принципы ООП

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

  1. Наследование
  2. Инкапсуляция
  3. Абстракция
  4. Полиморфизм
  5. Композиция*
  6. Агрегирование*

1. Наследование

Наследование – это многократное использование кода, как правило, реализуемое с помощью подклассов. Благодаря наследованию, один класс может унаследовать функциональность другого класса. Наследование реализует отношение is-a (является). Например, класс Employee может быть унаследован от Person, т.е. Employee является Person.

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

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

3. Абстракция

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

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

Например, можно составить упрощенный класс самолёта, который умеет летать, ездить по взлетно-посадочной полосе, взлетать и садиться, а от всего остального мы абстрагируемся (в данным случае несущественно то, что самолет имеет множество элементов управления, различные датчики для измерения температуры или давления, вертикальной скорости и т.п.)

4. Полиморфизм

Все то, что во время компиляции или исполнения программы может содержать или обрабатывать значения различных типов — является полиморфным, например:

  1. переменные, меняющие свое значение на значение другого типа;
  2. объекты, обладающие свойствами, которые могут менять значение текущего типа на значение другого типа;
  3. функции, принимающие аргументы различных типов.
Термин "полиморфизм" обозначает семейство различных механизмов, позволяющих использовать один и тот же участок программы с различными типами в различных контекстах. Author: Бенджамин Пирс "Типы в языках программирования"

Полиморфизм в программировании — это возможность использования одного и того же кода с разными типами аргументов и переменных.

Существует две основные категории полиморфизма:

  1. Универсальный полиморфизм
  2. Параметрический полиморфизм

Универсально полиморфные функции работают на неограниченном количестве типов, причем функция будет выполняться для любого типа аргументов.
Специально полиморфные функции работают с конечным набором конкретных типов, не связанных между собой, где для каждого типа аргументов реализуется свой способ вычислений.

Универсальный полиморфизм делится на

  1. параметрический (parametric) полиморфизм и
  2. полиморфизм включений (inclusion).

Специальный полиморфизм делится на

  1. перегрузку (overloading) и
  2. приведение типов (coercion)

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

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

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

Полиморфизм включений — в этом виде полиморфизма функции или операторы могут содержать один или множество аргументов, типы которых имеют подтипы.

5. Композиция

Композиция — это то, из чего состоит объект. К примеру, автомобиль состоит из разных частей, таких как четыре колеса, несколько сидений, двигатель и т. д.

Композиция — это более строгий вариант агрегирования, когда включаемый объект может существовать только как часть контейнера. Если контейнер будет уничтожен, то и включённый объект тоже будет уничтожен.

6. Агрегирование

Агрегирование касается всего, что может быть объединено с объектом. Например, человек, не будучи частью автомобиля, может сидеть на водительском сиденье, а затем стать водителем. Два отдельных объекта объединены, чтобы сформировать новый компонент.

В объектно-ориентированном программировании под агрегированием подразумевают методику создания нового класса из уже существующих классов путём их включения.

Агрегация (агрегирование по ссылке) — отношение «часть-целое» между двумя равноправными объектами, когда один объект (контейнер) имеет ссылку на другой объект. Оба объекта могут существовать независимо: если контейнер будет уничтожен, то его содержимое — нет.