Множественное наследование было?
От: Andrbig  
Дата: 16.12.05 06:57
Оценка:
Как известно, в .net нет наследования класса от нескольких родительских классов. Это является темой бурных дискуссий, которые не являются темой данной ветки.

Не расскажет ли уважаемый all о примерах, когда было нужно множественное наследование? (только просьба приводить реальные примеры)

16.12.05 16:43: Перенесено модератором из '.NET' — TK
Re: Множественное наследование было?
От: снежок Россия  
Дата: 16.12.05 07:09
Оценка: -11
Здравствуйте, Andrbig, Вы писали:

A>Как известно, в .net нет наследования класса от нескольких родительских классов. Это является темой бурных дискуссий, которые не являются темой данной ветки.


A>Не расскажет ли уважаемый all о примерах, когда было нужно множественное наследование? (только просьба приводить реальные примеры)


Да никогда оно не было нужно. Все делается с помощью интерфейсов и думаю это более прозрачно и наглядно. Вот когда интерфейсов не было может и возникла эта полемика.
Re[2]: Множественное наследование было?
От: Andrbig  
Дата: 16.12.05 08:18
Оценка:
Здравствуйте, снежок, Вы писали:

С>Здравствуйте, Andrbig, Вы писали:


A>>Как известно, в .net нет наследования класса от нескольких родительских классов. Это является темой бурных дискуссий, которые не являются темой данной ветки.


A>>Не расскажет ли уважаемый all о примерах, когда было нужно множественное наследование? (только просьба приводить реальные примеры)


С>Да никогда оно не было нужно. Все делается с помощью интерфейсов и думаю это более прозрачно и наглядно. Вот когда интерфейсов не было может и возникла эта полемика.


Я повторно напомню, что подобные дискуссии не являются темой данной ветки. Прошу в данном направлении ее не развивать.
Re[2]: Множественное наследование было?
От: migel  
Дата: 16.12.05 08:38
Оценка:
Здравствуйте, снежок, Вы писали:

С>Здравствуйте, Andrbig, Вы писали:


A>>Как известно, в .net нет наследования класса от нескольких родительских классов. Это является темой бурных дискуссий, которые не являются темой данной ветки.


A>>Не расскажет ли уважаемый all о примерах, когда было нужно множественное наследование? (только просьба приводить реальные примеры)


С>Да никогда оно не было нужно. Все делается с помощью интерфейсов и думаю это более прозрачно и наглядно. Вот когда интерфейсов не было может и возникла эта полемика.

Даааа сильно задвинул — внушает
Очень сильно нужно именно при реализации интерфесов — миксинов когда нужна однообразная реализация для рахнотипных компонентов.
Например в нашем проекте обертки для контролов в дизайнерском режиме имеют сплошной CopyPaste
Re[3]: Множественное наследование было?
От: снежок Россия  
Дата: 16.12.05 12:23
Оценка: +1
>>Например в нашем проекте обертки для контролов в дизайнерском режиме имеют сплошной CopyPaste
для чего люди придумали различные паттерны? adapter, bridge... Для того что бы мы продолжали заниматься copy/past?
Да, GUI наиболее сложно формализуемая вещь, но это не значит что каждую форму лучше лепить copy/past-ом.
Вот мне тут наставили минусов, а никто так и не объяснил для чего им множественное наследование, где они его пользовали?

Хотя может меня неправильно поняли. Есть множественное наследование интерфейсов, в сях есть множественное наследование классов. Я так понял что топик для дискусии по последнему (множ. насл. классов)
Стоит сказать что в шарпе вообще сказка, интерфейсы поддерживают не только методы, но и свойства. Ну и зачем вам после этого множественное наследование классов

>>Я повторно напомню, что подобные дискуссии не являются темой данной ветки. Прошу в данном >>направлении ее не развивать.

тема прозвучала как для чего нужно множественное наследование.
мой ответ — множественное наследование классов нигде не нужно, его возможности полностью покрывае использование интерфейсов. И чем я выбился из темы?
Re[4]: Множественное наследование было?
От: migel  
Дата: 16.12.05 12:44
Оценка:
Здравствуйте, снежок, Вы писали:

>>>Например в нашем проекте обертки для контролов в дизайнерском режиме имеют сплошной CopyPaste

С>для чего люди придумали различные паттерны? adapter, bridge... Для того что бы мы продолжали заниматься copy/past?
С>Да, GUI наиболее сложно формализуемая вещь, но это не значит что каждую форму лучше лепить copy/past-ом.
С>Вот мне тут наставили минусов, а никто так и не объяснил для чего им множественное наследование, где они его пользовали?

Какая нафиг форма
Есть задача обеспечить в дизайнере заданное поведение элементов управления — и как ты реализацию будеш интерфесом расширять?
Можно решить конечно предоставлением дизайнеру своего TypeDescriptor для адаптера заворачивающего нужный контрол, только, увы и ах, начинаються такие пляски с бубном .


С>Хотя может меня неправильно поняли. Есть множественное наследование интерфейсов, в сях есть множественное наследование классов. Я так понял что топик для дискусии по последнему (множ. насл. классов)

Не классов а реализации.
С>Стоит сказать что в шарпе вообще сказка, интерфейсы поддерживают не только методы, но и свойства. Ну и зачем вам после этого множественное наследование классов
А затем чтобы миксин один раз написать и не парится.
например

class Base
{
    public void Do() {}
}

class Mixin : IMixin
{
 void IMixin.DoMixin(){;}
}

// вот тут впихиваем функционал
class C : Base, Mixin
{
}

без миксина получили бы вот такое
class C : Base, IMixin
{
    void IMixin.DoMixin(){...;}
}

и теперь на уже существующию иерархии попробуй натянуть доп функционал без Copy Paste :-)




>>>Я повторно напомню, что подобные дискуссии не являются темой данной ветки. Прошу в данном >>направлении ее не развивать.

С>тема прозвучала как для чего нужно множественное наследование.
С>мой ответ — множественное наследование классов нигде не нужно, его возможности полностью покрывае использование интерфейсов. И чем я выбился из темы?
Приведенный выше пример показывает что это, несколько говоря, слишком сильное утверждение.
Re[4]: Множественное наследование было?
От: Andrbig  
Дата: 16.12.05 13:06
Оценка:
Здравствуйте, снежок, Вы писали:

С>тема прозвучала как для чего нужно множественное наследование.

С>мой ответ — множественное наследование классов нигде не нужно, его возможности полностью покрывае использование интерфейсов. И чем я выбился из темы?

Я хотел узнать о примерах, а не о мнениях, хорошо это или плохо. Собсно это мнение начало дискуссию, взглянув на которую многим тему захотелось переместить в философию программирования.

А мне нафиг не нужна философия, я хотел узнать о примерах того, где множественное наследование классов помогло бы решить задачу.
Re[5]: Множественное наследование было?
От: снежок Россия  
Дата: 16.12.05 13:47
Оценка:
>>>и теперь на уже существующию иерархии попробуй натянуть доп функционал без Copy Paste
для этого и были в C# 2.0 введены generics, как раз такого "алгоритмического наследования".
Re: Множественное наследование было?
От: King Oleg Украина http://kingoleg.livejournal.com
Дата: 16.12.05 13:59
Оценка:
Здравствуйте, Andrbig, Вы писали:

A>Как известно, в .net нет наследования класса от нескольких родительских классов. Это является темой бурных дискуссий, которые не являются темой данной ветки.


A>Не расскажет ли уважаемый all о примерах, когда было нужно множественное наследование? (только просьба приводить реальные примеры)

Без множественного наследования, как и без ООП вообще, можно обойтись. Множественное наследование может упростить код, а может запутать.
abstract class Archived {
    private boolean archived = false;
    public void setArchived(boolean archived) {
        this.archived = archived;
    }
    public boolean isArchived() {
        return archived;
    }
}
abstract class Managered {
    private Manager manager = null;
    public void setManager(Manager manager) {
        this.manager = manager;
    }
    public Manager getManager() {
        return manager;
    }
}
abstract class PersistentWithLongId() {
    private Long id = null;
    public void setId(Long id) {
        this.id = id;
    }
    public Long getId() {
        return id;
    }
}
class ArchivedManageredPersistentWithLongId extends Archived, Managered, PersistentWithLongId {
}

В случае с интерфейсами (без множественного наследования) прийдется наследоваться от одного класса, два других делать интерфейсами и копировать реализацию сеттеров и геттеров в ArchivedManageredPersistentWithLongId.
King Oleg
*Читайте DOC'и, они rules*
Re[6]: Множественное наследование было?
От: migel  
Дата: 16.12.05 14:04
Оценка:
Здравствуйте, снежок, Вы писали:

>>>>и теперь на уже существующию иерархии попробуй натянуть доп функционал без Copy Paste

С>для этого и были в C# 2.0 введены generics, как раз такого "алгоритмического наследования".
то есть ты хочеш сказать что приведеный выше пример можно записать на дженериках так?
class Base
{
    public void Do() {}
}

// вот тут впихиваем функционал
class C<T> : T, IMixin
{
 void IMixin.DoMixin(){;}
}


так ?
Re: Множественное наследование было?
От: Miroff Россия  
Дата: 16.12.05 14:08
Оценка: 6 (1)
Здравствуйте, Andrbig, Вы писали:

A>Не расскажет ли уважаемый all о примерах, когда было нужно множественное наследование? (только просьба приводить реальные примеры)


Пару раз, возникало в разработке GUI. Деталей уже не помню, давно это было. Проблема заключалась в том, что был нужен компонент, ведущий себя одновременно как два стандартных примитива. Решилась инкапсуляцией обоих классов в класс-обертку.
Re[5]: Множественное наследование было?
От: vitaly_spb Россия  
Дата: 16.12.05 14:18
Оценка:
А почему так не сделать:

class Base
{
   protected _mixin as IMixin;

   public Base(IMixin mixin)
   { 
     _mixin = mixin;
   }

   public void Do() {}
}

class Mixin : IMixin
{
   void IMixin.DoMixin(){;}
}

class C : Base, IMixin
{
   public C(IMixin mixin) : base(mixin)
   {}

   void IMixin.DoMixin(){ _mixin.DoMixin;}
}
...Ei incumbit probatio, qui dicit, non qui negat...
Re[6]: Множественное наследование было?
От: migel  
Дата: 16.12.05 14:30
Оценка:
Здравствуйте, vitaly_spb, Вы писали:

_>А почему так не сделать:


_>[c#]

_>class Base
_>{
_> protected _mixin as IMixin;

_> public Base(IMixin mixin)

_> {
_> _mixin = mixin;
_> }

_> public void Do() {}

_>}

_>class Mixin : IMixin

_>{
_> void IMixin.DoMixin(){;}
_>}

_>class C : Base, IMixin

_>{
_> public C(IMixin mixin) : base(mixin)
_> {}

_> void IMixin.DoMixin(){ _mixin.DoMixin;}

_>}

Аха и копи паситить то все равно придеться
Re: Множественное наследование было?
От: srggal Украина  
Дата: 16.12.05 14:31
Оценка:
Здравствуйте, Andrbig, Вы писали:

A>Как известно, в .net нет наследования класса от нескольких родительских классов. Это является темой бурных дискуссий, которые не являются темой данной ветки.


A>Не расскажет ли уважаемый all о примерах, когда было нужно множественное наследование? (только просьба приводить реальные примеры)


При использовании стратегий, они подмешиваются mixin.
Для облегчения реализации Паттерна Декоратор.
... << RSDN@Home 1.1.4 stable rev. 510>>
Re: Множественное наследование было?
От: last_hardcoder  
Дата: 16.12.05 14:56
Оценка:
Здравствуйте, Andrbig, Вы писали:

A>Как известно, в .net нет наследования класса от нескольких родительских классов. Это является темой бурных дискуссий, которые не являются темой данной ветки.


A>Не расскажет ли уважаемый all о примерах, когда было нужно множественное наследование? (только просьба приводить реальные примеры)


Есть вот такая техника программирования. Используется в ATL. Тут наследование на агрегирование не заменишь.

template<class T> class A{
public:
  void do1(){
    ...
    static_cast<T*>(this)->action1();
    ...
  }
};

template<class T> class B{
public:
  void do2(){
    ...
    static_cast<T*>(this)->action2();
    ...
  }
};

class MyClass : public A<MyClass>, public B<MyClass>{
public:
  void action1(){
    ...
  }

  void action2(){
    ...
  }
};
Re[7]: Множественное наследование было?
От: vitaly_spb Россия  
Дата: 16.12.05 16:36
Оценка:
M>Аха и копи паситить то все равно придеться

что именно?
...Ei incumbit probatio, qui dicit, non qui negat...
Re[2]: Множественное наследование было?
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.12.05 04:53
Оценка: +1 :))
Здравствуйте, снежок, Вы писали:

С>Да никогда оно не было нужно. Все делается с помощью интерфейсов и думаю это более прозрачно и наглядно. Вот когда интерфейсов не было может и возникла эта полемика.


Ага. И ООП тоже в общем то никогда небыло нужно. Ведь все, в общем-то, делается простым вызовм процедур. Хотя... и процедуры в общем-то не нужны. Ведь хватает просто переходов (суловных и безусловных).

В общем ни один танкист не может понять зачем нужны дороги.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Множественное наследование было?
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.12.05 04:53
Оценка:
Здравствуйте, srggal, Вы писали:

S>Для облегчения реализации Паттерна Декоратор.


... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Множественное наследование было?
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.12.05 04:53
Оценка:
Здравствуйте, last_hardcoder, Вы писали:

_>Есть вот такая техника программирования. Используется в ATL. Тут наследование на агрегирование не заменишь.


_>
_>    static_cast<T*>(this)->action1();
_>


О! Вот это изумительный пример, эмуляции ООП не ОО-средствами.

Лет 7 тому назад когда я только увидел это дело в АТЛ я тоже был в восторке. Это же почти как с примененеием интерфейсов или виртуальных методов но без оверхэда на виртуальный вызов!

Потом понял, что дурь все это. Экономия от этого стремится к нулю, а вот дизайн получается кривой.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Множественное наследование было?
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.12.05 05:06
Оценка: +1
Здравствуйте, Andrbig, Вы писали:

A>Не расскажет ли уважаемый all о примерах, когда было нужно множественное наследование? (только просьба приводить реальные примеры)


Есть одна задача — подключение реализаций к классам.

Однако у МН куча своих проблем. Вместо МН предлагаются Mix-in-ы и Traits.
Погляди вот эти ссылки

http://www.iam.unibe.ch/~scg/Research/Rotor/
http://fsl.cs.uiuc.edu/~mhills/Traits-UIUC-SIGPLAN.ppt
http://research.microsoft.com/workshops/SSCLI2005/presentations/Reichhart.pdf
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.