Иллюстрированный самоучитель по Java
Ответственность
В нашем примере рассматривается
только взаимодействие в процессе кормления, описываемое методом
eat()
. В этом методе животное обращается к хозяину, умоляя его применить
метод
getFood()
.
В англоязычной литературе подобное
обращение описывается словом message. Это понятие неудачно переведено на русский
язык ни к чему не обязывающим словом
"сообщение".
Лучше было
бы использовать слово "послание", "поручение" или даже "распоряжение".
Но термин "сообщение" устоялся и нам придется его применять. Почему
же не используется словосочетание "вызов метода", ведь говорят: "Вызов
процедуры"? Потому что между этими понятиями есть, по крайней мере, триЪтличия.
-
Сообщение идет к конкретному объекту,
знающему метод решения задачи, в примере этот объект — текущее значение переменной
person
. У каждого объекта свое текущее состояние, свои
значения полей класса, и это может повлиять на выполнение метода.
-
Способ выполнения поручения, содержащегося
в сообщении, зависит от объекта, которому оно послано. Один хозяин поставит
миску с "Chappi", другой бросит кость, третий выгонит собаку на
улицу. Это интересное свойство называется
полиморфизмом
(polymorphism)
и будет обсуждаться ниже.
-
Обращение к методу произойдет
только на этапе выполнения программы, компилятор ничего не знает про метод.
Это называется
"поздним связыванием" в
противовес
"раннему
связыванию",
при котором процедура присоединяется к программе на
этапе компоновки.
Итак, объект
sharik
,
выполняя свой метод
eat ()
, посылает сообщение объекту,
ссылка на который содержится в переменной person, с просьбой выдать ему определенное
количество еды и питья. Сообщение записано в строке
person.getFood(food,
drink)
.
Этим сообщением заключается
контракт
(contract) между объектами, суть которого в том, что объект
sharik
берет на себя
ответственность
(responsibility) задать правильные
параметры в сообщении, а объект — текущее значение
person
— возлагает на себя
ответственность
применить метод кормления
getFood()
, каким бы он ни был.
Для того чтобы правильно реализовать
принцип ответственности, применяется четвертый принцип объектно-ориентированного
программирования —
модульность
(modularity).