Иллюстрированный самоучитель по Java

       

Ответственность


В нашем примере рассматривается только взаимодействие в процессе кормления, описываемое методом

eat()

. В этом методе животное обращается к хозяину, умоляя его применить метод

getFood()

.

В англоязычной литературе подобное обращение описывается словом message. Это понятие неудачно переведено на русский язык ни к чему не обязывающим словом

"сообщение".

Лучше было бы использовать слово "послание", "поручение" или даже "распоряжение". Но термин "сообщение" устоялся и нам придется его применять. Почему же не используется словосочетание "вызов метода", ведь говорят: "Вызов процедуры"? Потому что между этими понятиями есть, по крайней мере, триЪтличия.

Сообщение идет к конкретному объекту, знающему метод решения задачи, в примере этот объект — текущее значение переменной

person

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

Способ выполнения поручения, содержащегося в сообщении, зависит от объекта, которому оно послано. Один хозяин поставит миску с "Chappi", другой бросит кость, третий выгонит собаку на улицу. Это интересное свойство называется

полиморфизмом



(polymorphism) и будет обсуждаться ниже.

Обращение к методу произойдет только на этапе выполнения программы, компилятор ничего не знает про метод. Это называется

"поздним связыванием" в

противовес

"раннему связыванию",

при котором процедура присоединяется к программе на этапе компоновки.

Итак, объект

sharik

, выполняя свой метод

eat ()

, посылает сообщение объекту, ссылка на который содержится в переменной person, с просьбой выдать ему определенное количество еды и питья. Сообщение записано в строке

person.getFood(food, drink)

.

Этим сообщением заключается

контракт

(contract) между объектами, суть которого в том, что объект

sharik

берет на себя

ответственность

(responsibility) задать правильные параметры в сообщении, а объект — текущее значение

person

— возлагает на себя

ответственность

применить метод кормления

getFood()

, каким бы он ни был.

Для того чтобы правильно реализовать принцип ответственности, применяется четвертый принцип объектно-ориентированного программирования —

модульность

(modularity).



Содержание раздела