[ООП] правильный подход к организации классов

Landstreicher

Вот нашел интересную статью: http://www.softcraft.ru/coding/sm/sm01.shtml
Прошу прощения, если уже было.

Marinavo_0507

Автор рюхает. А про наследование он ничего не пишет?

Landstreicher

Пишет, например, ftp://lorien.local/pub/docs/ebooks/C++/effective%20c++/EC/EI35_FR.HTM
Вообще, про наследование хорошо пишет Herb Sutter, например http://www.gotw.ca/publications/mill07.htm

Dasar

Идея правильно, но реализация в текущих языках хромает, т.к. становится совсем неочевидной связь между классом и вспомогательными методами.
да, и компактная запись "правильно" (слева-направо) ориентированная, вида:

current.SomeMethod.SomeOtherMethod.SomeAnotherMethod

превращается в громоздкого монстра ориентированного справа-налево:

SomeAnotherLongNamespace.SomeAnotherClass.SomeAnotherMethod(AnotherLongNamespace.AnotherClass.AnotherMethod(
SomeLongNamespace.SomeClass.SomeMethod(current;

Причем, при написании кода - все эти SomeLongNamespace - очень и очень не "интуитивны".

Dasar

т.е. пока я считаю, что код должен задаваться компилятору, в виде, предложенным Мейерс-ом, а синтаксис вызова должен быть через точку
т.е. что-то такое:

interface IRectangle
{
double Height {get;}
double Width {get;}
}
[Friend for IRectangle]
public double Square(IRectangle rectangle)
{
return rectangle.Height * rectangle.Width;
}

void Main
{
IRectangle rect = GetRectangleFigure;
Console.WriteLine(rect.Square);
}

Marinavo_0507

У меня мозилла книгу не открывает. Там какие-то скрипты и редиректы в бесконечном цикле.

Marinavo_0507

Можно и проще.
Сказать, что основным синтаксисом для вызова и методов, и функций будет f(x, y, ...) и в качестве синтаксического сахара - эквивалентная запись x.f(y, ...)

Dasar

а интерфейсы куда девать? т.е. как быть с комплексными соглашениями, когда нечто обязано поддерживать некий набор методов? обязано обладать определенным поведением(например, Start, Pause, Resume, Stop)?
ps
и еще вот такое тоже хочется:

interface IFemale
{
}
interface IMale
{
}
[friend for IFemale, IMale]
void Потрахаться (IFemale female, IMale male)
{
//...
}
void Main
{
IFemale female = GetFemale;
IMale male = GetMale;
female.Потрахаться (male);
male.Потрахаться (female);
}

okunek

> female.Потрахаться (male);
> male.Потрахаться (female);
не пойму, кто кого ебет?

enochka1145

// не пойму, кто кого ебет?
Зависит от ТЗ

Marinavo_0507

> а интерфейсы куда девать?
там же, где и были, оставить
> и еще вот такое тоже хочется
это уже другая фича
наверное, нужен синтаксис с мечеными операндами и multiple dispatch?

tokuchu

Идея правильно, но реализация в текущих языках хромает, т.к. становится совсем неочевидной связь между классом и вспомогательными методами.
....
Про синтаксические проблемы там тоже написано.

Dasar

Может быть, не помню - давно читал, в детстве.
Оставить комментарий
Имя или ник:
Комментарий: