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

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

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

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

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

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

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

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

Абстракция

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

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

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

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

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

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

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

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

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

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

Полиморфизм

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

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

 

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

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

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

  1. Игорь:

    Скажите а что значит объект реального света?

    • Мария (admin):

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

  2. Михаил:

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

    • Мария (admin):

      «Программа состоит из классов, класс из объектов, объекты из атрибутов и методов.» Это у меня где-то так написано, или вы так поняли?Это не правильно. На самом деле так:
      Программа состоит из классов, классы содержат атрибуты и методы. А объекты это то, что потом создается на базе классов. Класс это как бы шаблон, по которому потом создается конкретный объект. Например, у нас есть класс, описывающий человека. В нем заложено описание того, как должен выглядеть человек, то есть описано, что у человека есть имя, рост, вес, цвет глаз итп (это атрибуты), описано что человек может делать и как — есть, спать (это методы). Такой шаблон. Потом на основании этого шаблона мы можем создать конкретного человека Васю с ростом 193 см, весом 90 и голубыми глазами. Этот конкретный человек будет уже объектом, он будет сохранен в памяти и на нем можно использовать методы из класса, на основании которого он был создан. Например отправить Васю спать или есть.
      Абстрактно это сложно понять. Начинайте программировать, потом станет понятнее.

http://ukr-vestnik.com/interesting/rezonans/kak-organizovat-srochnyiy-pereezd.html
Все материалы сайта study-java.ru являются результатом труда его авторов. Копирование материалов в некоммерческих целях без указания источника в виде прямой ссылки на сайт study-java.ru запрещено. Использование материалов в коммерческих целях разрешено только с письменного согласия автора. Нарушение авторских прав преследуется по закону.