Re[2]: Нужно ли нам наследование реализаций? :)
От: AlexRK  
Дата: 24.02.13 08:05
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>Наследование применяется там, где экземпляры типа-наследника являются экземплярами типа-предка (по крайней мере должно применяться). Более того, наиболее правильно наследование применять, если имеет место уточнение реализации.


Верно, и в этом случае уточняющие методы по сути превращаются в события.

Ф>1)

Ф>abstract class Base {protected void BaseMethod(){}; protected abstract void Do();}
Ф>abstract class A : Base { protected void MethodA() { BaseMethod() };}
Ф>class B : A { protected void MethodB() { MethodA() }; override void Do {MethodB();} }

trait Base { void BaseMethod(){}; void Do(); } // В данном случае Do вообще не нужен, т.к. речь о наследовании реализации, а не полиморфизме
trait A includes Base { void MethodA() { Base.BaseMethod() }; }
class B includes A { void MethodB() { A.MethodA() }; void Do { MethodB(); } }

Ф>2)

Ф>class Control {protected virtual void WndProc(); protected virtual void DefWndProc(); }
Ф>class ScrollableControl :Control {protected override void WndProc() { base.WndProc(); } }
Ф>class ContainerControl :ScrollableControl {protected override void WndProc() { base.WndProc(); } }
Ф>class Form :ContainerControl {protected override void WndProc() { base.WndProc(); } }
Ф>class MyForm :Form {protected override void WndProc() { base.WndProc(); DefWndProc()} }

class Control { void WndProc(); void DefWndProc(); }
class ScrollableControl { void WndProc() { control.WndProc(); } }
class ContainerControl { void WndProc() { scrollableControl.WndProc(); } }
class Form { void WndProc() { containerControl.WndProc(); } }
class MyForm { void WndProc() { form.WndProc(); control.DefWndProc(); } }


Получилось даже как-то... ПРОЩЕ???

Ф>Ровно настолько же, насколько не нужно и ООП — без него вполне можно жить.

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

А в ряде других случаев может усложнить. Вопрос — каких рядов больше.
Re[2]: Нужно ли нам наследование реализаций? :)
От: Tom Россия http://www.RSDN.ru
Дата: 24.02.13 11:18
Оценка:
Ф>не вижу никакой проблемы.
Вы тесты пишете?
Народная мудрось
всем все никому ничего(с).
Re[3]: Нужно ли нам наследование реализаций? :)
От: dimgel Россия https://github.com/dimgel
Дата: 24.02.13 11:40
Оценка:
Здравствуйте, Tom, Вы писали:

Ф>>не вижу никакой проблемы.

Tom>Вы тесты пишете?

Я пишу. И тоже не вижу проблемы. Потому что я тестирую "снизу вверх", и моки мне в принципе не нужны. Ну, кроме как для подмены внешней среды типа CurrentTime, но таких с гулькин хвост (тут было бы более актуально спросить "а нужны ли нам интерфейсы?" и ответить: "ну вот для парочки таких вот случаев, пожалуй, пригодятся" ).
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.