Абстракция

  • Рубрика записи:ООП

Что должно быть в классе, а чего не должно быть? На этот вопрос отвечает абстракция. Кстати, на мой взгляд, она является самым простым для понимания принципом ООП.

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

Что такое абстракция

Абстракция – её ещё называют абстрагированием – способ выделить важные свойства объекта, исключая неважные. Абстрагирование предполагает упрощение понимания предметной области. Это один из 4 китов ООП.

В ООП мы пишем классы. Всё строится на классах. Но что включать в эти классы? Как понять, какой класс соответствует ООП?

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

Так вот, представьте, что вы создаёте сайт с фильмами. Вам нужно создать классы фильмов. Фильм – вполне себе сущность. Можно назвать такой класс Movie. У фильма, в свою очередь, может быть множество всяких характеристик: продолжительность съёмок, день рождения главного героя, рост режиссёра… И вряд ли вы будете включать эти переменные в объект Movie. Напротив, вы выделите самые важные для вашей задачи – сайта с фильмами – характеристики. Это могут быть:

  • Название фильма
  • Описание фильма
  • Год выпуска
  • Жанр
  • Режиссёр
  • Актёрский состав
  • Рейтинг

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

Абстракция относится не только к полям классов. Относится она и к методам. Ведь каждое понятие может много чего уметь. Но отражать в коде нужно, опять же, лишь то, что важно для задачи, которую вы решаете.

Примеры кода

Поговорили-обсудили, а код где? Давайте с примерами сразу, чего далеко ходить.

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

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

Давайте рассмотрим ещё один пример. Книга Book. Что нам покажется бесполезным при создании мобильного приложения для книжного клуба? Например, количество символов в книге. Или шрифт текста. Или поля в сантиметрах. Ну или количество часов, которое автор потратил на эту книгу. Все эти данные можно было бы включить, да вот не нужны они нам для этой задачи. От слова совсем. А вот то, что мы с большей вероятностью включим в класс Book:

Здесь нам пригодились название книги, её автор, год публикации, цена, а также картинка. Куда без картинки в приложении? Покупатели любят, когда всё с картинками. А то непонятно, что покупаешь.

Абстракция словно стратегия. Если стратегия неудачна, то даже самая гениальная тактика не сможет исправить положение.

Добавить комментарий