Объектно-ориентированное программирование в Java

Статьи -> Программирование -> Java

Объектно-ориентированное программирование в Java

Статья написана на основе официальной документации фирмы Sun Microsystems, Inc

v:1.0 2008.05.11

Что такое объект?

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

Объекты реального мира наделены двумя характеристиками: состояние и поведение. Собака имеет "состояние" (кличка, масть, шерсть, аппетит) и поведение (лай, виляние хвостом). Велосипед тоже имеет состояние (текущая передача, текущая скорость) и поведение (изменение передачи, изменение скорости). Чтобы начинать думать в терминах объектно-ориентированного программирования, надо выделить состояние и поведение объекта. Прямо сейчас уделите пару минут рассмотрению объектов реального мира, которые располагаются вокруг Вас. Для каждого объекта, которые Вы видите, ответьте на вопросы: "Какие возможные состояния может принимать этот объект?", "Какие действия может выполнять этот объект?". Запишите Ваши наблюдения. Вы, наверняка, заметили, что объекты различны по сложности; Ваша настольная лампа имеет два возможных состояния (включена и выключена) и два возможных действия (включить, выключить), однако настольное радио может иметь такой набор состояний: включено, выключено, текущая громкость, текущая станция; и возможные действия: включить, выключить, увеличить громкость, уменьшить громкость, искать, станцию и т.д. Кроме того, Вы можете заметить, что некоторые объекты содержат другие объекты. Все эти объекты реального мира могут быть переведены в объекты объектно-ориентированного программирования.

Программный объект

Принципиально программные объекты не отличаются от объектов реального мира: они все описываются состоянием и поведением. Объект хранит свое состояние в полях (переменные в некоторых языках программирования) и реализует свое поведение через методы (функции в некоторых языках программирования). Методы оперируют с внутренним состоянием объекта и рассматриваются как главный механизм объектно-ориентированной коммуникации. Сокрытие внутреннего состояния и требование работать с ним исключительно через методы называется инкапсуляцией. Инкапсуляция - это фундаментальный принцип объектно-ориентированного программирования.
Возьмем для примера велосипед.

Моделирование велосипеда как программного объекта

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

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

Что такое класс?

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

Ниже приведен пример класса, одна из возможных реализаций.

Синтаксис языка программирования Java покажется вам новым, однако логика класса основана на предыдущем обсуждении объектов велосипед. Поля cadence, speed и gear - это состояние объекта, а методы (changeCadence, changeGear, speedUp и т.д.) определяют взаимодействие с внешним миром.

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

Ниже представлен пример класса BicycleDemo, класс создает два отдельных объекта Велосипед и вызывает их методы.


Вот вывод текущих состояний объектов:
cadence:50 speed:10 gear:2
cadence:40 speed:20 gear:3

Что такое наследование?

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

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

Иерархия класса велосипед

Синтаксис создания класса потомка аналогичен типовому классу. Вначале объявления класса, используя ключевое слово extends, укажите имя класса, от которого надо наследовать.



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

Что такое интерфейс?

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



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



Реализация интерфейса позволяет создавать более стандартизированные классы, с более предсказуемым поведением. Интерфейс - это контракт взаимодействия между классом и внешним миром, и этот контракт проверяется компилятором во время компиляции класса. Чтобы файл успешно скомпилировать, необходимо написать тела для всех методов, объявленных в интерфейсе.
Примечание: Чтобы скомпилировать класс ACMEBicycle, Вам надо добавить ключевое слово public в начало интерфейсных методов.

Что такое пакет?

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

Платформа Java предлагает огромную библиотеку классов (набор пакетов), готовых для использования в Ваших приложениях. Эта библиотека известна как Интерфейс Программирования Приложений ("Application Programming Interface") или API. Эти пакеты выполняют наиболее часто встречающиеся задачи программирования. Например, объект String содержит состояние и поведение символьных строк; объект File позволяет программисту легко совершать операции (создавать, удалять, переименовывать и т.д.) с файлами операционной системы; объект Socket позволяет создавать и использовать сетевые сокеты; различные GUI (графический интерфейс пользователя) объекты: кнопки, chekbox'ы и т.д. могут быть использованы для создания графического интефейса. Вы можете выбирать буквально из тысяч классов. Это позволят разработчику сфокусироваться на создании логики приложения и не отвлекаться на технические детали реализации.
Java Platform API Specification (http://java.sun.com/javase/6/docs/api/index.html) содержит полный список всех пакетов, интерфейсов, классов, полей и методов, которые предоставляет Java Platform 6, Standard Edition. Трудно переоценить важность этой страницы для программиста, сделайте на нее закладку в Вашем браузере.

Петрелевич Сергей
petrelevich@yandex.ru

Метки: Java  

Комментарии.

Внимание.
Комментировать могут только зарегистрированные пользователи.
Возможно использование следующих HTML тегов: <a>, <b>, <i>, <br>.

Яндекс цитирования Ðåéòèíã@Mail.ru Rambler's Top100