Сначала пример для обсуждения:
class Foo
{
// Attributes:
int attribute1, attribute2;
// Methods:
virtual void Foo1()
{ /* With or without Implementation */ }
virtual void Foo2()
{ /* Also with or without Implementation */ }
};
class ExactDuplicate: Foo // No New Attributes or Methods
{
virtual void Foo1()
{ /* A new Implementation */ }
// Also there might be new Implementations to other methods
};
class ExtraMethods: Foo // Having New Methods
{
virtual void Foo3()
{ /* Implementation */ }
};
class ExtraAttributes: Foo // Having New Attributes
{
int attribute3;
};
Я обсуждал с моим учителем " - это A "и отношения" is Like A "и чем они отличаются.
Мое мнение (которое я где-то читал, я не могу вспомнить) состоит в том, что связь « является A » между родительским классом и дочерним классом, который унаследован от него, и это не затрагиваются добавлением новых методов или атрибутов, поэтому любой экземпляр из дочернего класса « является A » родительского класса, в приведенном выше примере каждый ExactDuplicate
, ExtraMethods
или ExtraAttributes
« - это A » Foo
. Хотя связь « подобен A » существует между двумя дочерними классами, унаследованными от одного и того же родительского класса, в приведенном выше примере каждый ExactDuplicate
« подобен » каждый ExtraMethods
или ExtraAttributes
и наоборот.
Мнение моего учителя заключалось в том, что связь « is A » существует между родительским классом и только дочерними классами, которые не добавляют никаких дополнительных методов или атрибутов, поэтому в приведенном выше примере только одно отношение « является A » между Foo
и ExactDuplicate
. В то время как отношение «Подобно A» существует между родительским классом и дочерними классами, которые добавляют дополнительные методы или атрибуты, поэтому в приведенном выше примере есть « похоже на A » взаимосвязь между Foo
и каждым из ExtraMethods
и ExtraAttributes
.
Я думаю, что отношение « is A », как определено моим учителем, не очень полезно, потому что в большинстве случаев нет причин изменять реализацию, если ничего не добавлено. Это точка. Другой, Автомобиль
« НЕ похож на » Транспортное средство
, на самом деле это « это A » Транспортное средство
, в то время как Ван
« подобен A » Автомобиль
, поскольку оба связаны некоторыми характеристиками.
Итак, что является правильным и почему? , я был бы очень признателен за объяснение.
Также, если мнение моего учителя истинно, добавление только Атрибутов делает отношения отношениями « подобен A », или требуется добавление новых методов, чтобы стать « подобными A "отношения? и что (если существует) является отношением между дочерними классами.
Надеюсь, мой кестоин ясен и понятен.
Любая помощь будет принята с благодарностью :)