Отношения «это A» VS «похоже на A», что означает каждый из них и чем они отличаются?

Сначала пример для обсуждения:

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 "отношения? и что (если существует) является отношением между дочерними классами.

Надеюсь, мой кестоин ясен и понятен.

Любая помощь будет принята с благодарностью :)

6
задан Tamer Shlash 4 October 2011 в 20:57
поделиться