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