Урок J-4. Основные понятия объектно-ориентированного программирования

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

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

Класс Robot может состоять из таких атрибутов как:

  • ID
  • имя
  • тип
  • цвет
  • вес
  • скорость передвижения

можно придумать много других атрибутов.

Также класс Robot будет содержать методы, отвечающие за его поведение. К примеру, на начальном этапе робот умеет:

  • Спрашивать имя
  • Приветствовать по имени
  • Выполнять какую-либо работу

Абстракция

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

Далее рассмотрим 3 главных принципа, на которых строится объектно-ориентированное программирование:

  • Инкапсуляция;
  • Наследование;
  • Полиморфизм.

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

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

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

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

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

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

Например, на основе  уже существующего объекта Robot мы можем создать новый объект CoffeRobot, который будет варить кофе. Новый робот будет иметь все атрибуты и методы что и предыдущий, плюс содержать дополнительный метод «Варить кофе».

Полиморфизм

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

Например, если мы при помощи наследования создадим серию роботов разных типов (робот, который варит кофе; робот, который моет пол; робот, который поливает цветы), а потом каждому роботу дадим команду «работай», то каждый робот в ответ на ту же самую команду будет делать различные действия, в соответствии с его типом. То есть, единым интерфейсом здесь является объект Robot с методом «работать», а то, как именно он будет работать, зависит от его реализации.

 

В данной статье понятия ООП были рассмотрены с ознакомительной целью, в дальнейшем они будут рассмотрены более подробно.

Комментарии и пинги к записи запрещены.

Комментариев к записи: 23

  1. Олег:

    Первый раз я усомнился в выражении «женская логика» — уроки гораздо содержательнее и более понятные, чем аналоги, сделанные мужским полом 🙂

  2. Игорь:

    Да, уважаемая девушка под ником «admin», я соглашусь с комменентарием Олега.
    Очень все доходчиво и лаконично

  3. Здравствуйте, скажите пожалуйста, что значит: объекты ‘реального света’?

    • Мария (admin):

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

  4. Дмитрий:

    Не могу удержаться, примите и мои похвалу и благодарность за Вашу роботу!

  5. Алексей:

    Все четко и понятно «разложено по полочкам», что тут сказать-великолепно объяснено, я начинающий программист, и более, чем в вашей форме повествования, я таких подробных, кратких, и понятных уроков не встречал,
    Великолепно, продолжайте в том же духе!:)

Все материалы сайта study-java.ru являются результатом труда его авторов. Копирование материалов в некоммерческих целях без указания источника в виде прямой ссылки на сайт study-java.ru запрещено. Использование материалов в коммерческих целях разрешено только с письменного согласия автора. Нарушение авторских прав преследуется по закону.