Наследование vs Агрегация

grigori

( ͡° ͜ʖ ͡°)
Команда форума
хоть и поздно, но вчера мне пришел в голову интересный "наглядный пример" иерархии наследования, который не вписывается в логику HraKK и Alexandre

базовый класс Person {рост, вес, расса}//персонаж в игре

потомки:
* класс перс_женщина ext Person (размер груди, фигура_женская)
* класс перс_мужчина ext Person (борода, усы, фигура_мужская)
используются на экране выбора характеристик персонажа
частный случай, все хорошо

потомок 2го уровня
** перс_мужчина_действующий ext перс_мужчина {бриться(бритва){}}
** перс_женщина_действующий ext перс_женщина {краситься(краски){}}
частный случай? нет, просто расширение функционала для использования в игре.

Обязательно тут создавать новую сущность и писать
класс Действие_Мужчина(перс_мужчина){бриться(){this.мужчина.борода=0}}?
при том, что бриться() применим только к перс_мужчина?
 

Kallisto

Новичок
По поводу темы

Может конечно я и не понял но мне кажется маркер не должен быть связан с хранилищем через наследование.

Почему? Потому что по сути ему все равно куда сохранять данные и это не должно быть вшито в логику намертво.

Было бы удобнее обозначить интерфейс put/get/has/ и тд что у вас там, реализовать его на примере регистров и передавать маркеру.
Маркер зная интерфейс смог бы использовать как угодно.

Это удобно там, где может измениться условия хранения, то есть понадобиться (допустим) сохранять информацию о предыдущих маркерах..

А так мы просто:
$marker = new Marker(new Registry());
$marker->get('something');

может я не понял суть но в общем так.

:)
 
Сверху