Отношения «А» и «Вроде А», что означают каждый из них и чем они отличаются?
Сначала пример для обсуждения:
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;
};
У меня была дискуссия - с моим учителем - о "это"а"это какотношения и чем они отличаются.
Мое мнение (что я читаю где-то, я не могу вспомнить) это то, что "это«связь между родительским классом и дочерним классом, который наследуется от него, и не зависит от добавления новых методов или атрибутов, поэтому любой экземпляр из дочернего класса»это«Родительский класс, в приведенном выше примере, каждыйExactDuplicate
, ExtraMethods
, или жеExtraAttributes
"это" Foo
, В то время как "это как"связь между двумя дочерними классами, унаследованными от одного и того же родительского класса, в приведенном выше примере каждыйExactDuplicate
"как"каждыйExtraMethods
или жеExtraAttributes
и наоборот.
Мнение моего учителя это былоэто«связь между Родительским классом и только дочерними классами, которые не добавляют никаких дополнительных методов или атрибутов, поэтому в приведенном выше примере есть только один»это" отношения междуFoo
а такжеExactDuplicate
, В то время как"Это как A" связь между Родительским классом и Дочерними классами, которые добавляют дополнительные методы или атрибуты, поэтому в приведенном выше примере есть "это как" отношения междуFoo
и каждый изExtraMethods
а такжеExtraAttributes
.
Я думаю, что "это«отношения, как определено моим учителем, не очень полезны, потому что в большинстве случаев нет причин менять реализацию, если ничего не добавлено. Это точка.Car
"НЕ как" Vehicle
, это на самом делеэто" Vehicle
в то время какVan
"это как" Car
, поскольку оба ассоциируют некоторые характеристики.
Так что правильно и почему?Я был бы очень признателен, объясняя.
Кроме того, если мнение моего учителя является верным, делает ли добавление только атрибутов отношения "это как"отношения, или это требует добавления новых методов, чтобы стать"это как«отношения» и что (если существует) отношения между дочерними классами.
Надеюсь, мой квест является ясным и понятным.
Любая помощь будет высоко ценится :)