Я относительный новичок, думающий в терминах ООП, и еще не нашел свой "инстинкт кишки" относительно правильного способа сделать это. В качестве упражнения я пытаюсь выяснить, где вы создаете линию между различными типами объектов, используя напитки на моем столе в качестве примера.
Предполагая, что я создаю объект Drink
, который имеет такие атрибуты, как volume
и temperature
, а также методы, подобные pour()
и drink()
, я изо всех сил пытаюсь понять, где именно появляются типы напитков.
Скажем, что у меня есть типы напитков Tea
, Coffee
или Juice
, мой первый инстинкт относится к подклассу Drink
, поскольку они имеют общие атрибуты и методы.
Затем проблема становится как Tea
, так и Coffee
иметь такие атрибуты, как sugars
и milk
, но Juice
нет, тогда как все три имеют variant
(Earl Grey, decaff и orange соответственно).
Аналогично, Tea
и Coffee
имеют метод addSugar()
, тогда как это не имеет смысла для объекта Juice
.
Значит ли это, что суперкласс должен иметь эти атрибуты и методы, даже если все подклассы им не нужны, или я определяю их в подклассах, особенно для таких атрибутов, как variant
, где каждый подкласс имеет собственный список допустимых значений?
Но затем я получаю два метода addSugar()
в подклассах Tea
и Coffee
.
Или, учитывая, что я в конечном итоге помещаю все атрибуты и методы в суперкласс, так как большинство разделяет по крайней мере пару типов напитков, интересно, какой смысл в суб-классификации вообще?
Я боюсь, что просто пытаюсь отвлечься слишком много, но не хочу возвращаться в угол, если я хочу добавить новый тип, например Water
-with variant
еще или сверкающий вниз дорога.