Java для школьников. Занятие №7. Вникаем в ООП. Интерфейс объекта.

Предыдущее занятие Следущее занятие

С чем познакомимся:

  • интерфейс объекта;
  • модификаторы;
  • область видимости.

Часто в литературе, посвященной языкам, которые используют парадигму объектно-ориентированного программирования, поля класса ассоциируются со свойствами объекта. Соответственно, на методы возлагается задача эти свойства изменять. В данном случае применяется технический термин интерфейс - совокупность способов взаимодействия с объектом для изменения его свойств или, как еще говорят, состояния объекта (подробнее о термине интерфейс можно посмотреть в Википедии). Давайте рассмотрим интерфейс класса Box (см. прошлое занятие), описывающего параллелепипед (см. Таблицу 1).

Таблица 1. Интерфейс класса Box (Класс описывает параллелепипед. Его свойства - длина, ширина, высота).

Имя поля (метода) Модификатор Область видимости Описание
a private только внутри класса длина параллелепипеда
b private только внутри класса ширина параллелепипеда
c private только внутри класса высота параллелепипеда
Box() без модификатора "Конструктор по-умолчанию", создает экземпляр класса с "нулевыми" свойствами - длина, ширина, высота
getVolume(double x, double y, double z) public внутри класса, вне класса вычисляет объем параллелепипеда

Новые термины, которые встретились нам в таблице:
- модификатор (еще можно встретить другое название - спецификатор) в Java - ключевое слово, которое используется для описания некоторых свойств объекта, его полей и методов. В случае класса Box, используются модификаторы полей класса: private, public;
- область видимости. Понятие тесно связано с модификаторами. Если поле класса объявить private, то использовать имя поля можно только внутри тела класса. Модификатор public применяется для открытых частей интерфейса объекта и говорит о том что, например, наш метод getVolume(), может быть использован вне класса Box для доступа к вычислению его объема. Чем мы и воспользовались в Листинге 1 на Занятии №6.

Почему в практике ООП не принято изменять свойства объекта напрямую (например, как мы делали на Занятии №5 b1.a = 2.0;), а принято "прятать" свойства объекта внутри класса (используя модификатор private)?

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


Литература:
1. Орлов "Теория и практика языков программирования" стр. 443
2. Брюс Эккель "Философия Java", 4-е издание, стр.21 "Объект имеет интерфейс"
3. Т.А.Павловская, Ю.А.Щупак "С++ объекно-ориентированное программирование" стр.13-15