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