И еще раз о наследовании квадратов
От: Wolverrum Ниоткуда  
Дата: 07.04.13 14:08
Оценка: :)))
Ввиду того, что предыдущая тема
Автор: Serginio1
Дата: 26.03.13
(равно как и более ранняя
Автор:
Дата: 02.07.11
) утонула в неизвестно чём, решил высказать свои соображения в новой теме.

Напомню вопрос: "Интересно а как ты квадрат то наследовать будешь? Это вырожденный прямоугольник у которого все стороны равны". Сам вопрос, к слову, есть ни что иное, как "проблема круга и эллипса", и даже есть какие-то потуги разрешения:
— через введение обобщения (Square -> Figure <- Rect);
— через требование неизменности объектов;
— через информационную составляющую (как Rect <- Square так и Square <- Rect (!)_)
— через слияние понятий "Square / Rect";
— и т.д.
Но, что самое интересное, от слова "топология" никто (в смысле: "я не нашёл" ) особо не отталкивается при попытках выдать-объяснить решение. Что, если взглянуть на проблему под "топологическим" углом? Быстро выясняется, что любой простой многоугольник (и даже более того — любая замкнутая кривая без самопересечений) топологически эквивалентен окружности. Интересная наклёвывается иерархия, не находите? Вместо специализации поведения — специализация состояния. На вершине иерархии, в базовом классе — интегральные, вычисляемые, качества фигур (площадь, периметр и т.п.), в потомках — лишь специфичные характеристики (радиус, фокусы, углы и т.п.).
Re: И еще раз о наследовании квадратов
От: deniok Россия  
Дата: 07.04.13 15:04
Оценка:
Здравствуйте, Wolverrum, Вы писали:

W>Но, что самое интересное, от слова "топология" никто (в смысле: "я не нашёл" ) особо не отталкивается при попытках выдать-объяснить решение. Что, если взглянуть на проблему под "топологическим" углом? Быстро выясняется, что любой простой многоугольник (и даже более того — любая замкнутая кривая без самопересечений) топологически эквивалентен окружности. Интересная наклёвывается иерархия, не находите? Вместо специализации поведения — специализация состояния. На вершине иерархии, в базовом классе — интегральные, вычисляемые, качества фигур (площадь, периметр и т.п.), в потомках — лишь специфичные характеристики (радиус, фокусы, углы и т.п.).


Нет, если уж воспарять до топологии, то нужно ставить вопрос ребром: что от чего следует наследовать: изотопию от гомотопии или же гомотопию от изотопии?
Re: И еще раз о наследовании квадратов
От: Stanislav V. Zudin Россия  
Дата: 07.04.13 16:28
Оценка:
Здравствуйте, Wolverrum, Вы писали:

W>Ввиду того, что предыдущая тема
Автор: Serginio1
Дата: 26.03.13
(равно как и более ранняя
Автор:
Дата: 02.07.11
) утонула в неизвестно чём, решил высказать свои соображения в новой теме.


W>Напомню вопрос: "Интересно а как ты квадрат то наследовать будешь? Это вырожденный прямоугольник у которого все стороны равны". Сам вопрос, к слову, есть ни что иное, как "проблема круга и эллипса", и даже есть какие-то потуги разрешения:

W>- через введение обобщения (Square -> Figure <- Rect);
W>- через требование неизменности объектов;
W>- через информационную составляющую (как Rect <- Square так и Square <- Rect (!)_)
W>- через слияние понятий "Square / Rect";

Ошибкой является сама попытка наследовать форму.
В примере с графическими примитивами можно наследовать поведение.
Попробую объяснить, что я имею в виду.
Площадь можно вычислить у замкнутых фигур, но нельзя у полилинии.
Тогда все, кроме полилинии, будут реализовывать интерфейс iHasArea, который может быть описан так:

class iHasArea
{
public:
   virtual double getArea() const = 0;
};


Затем, все объекты могут перемещаться, поэтому все они наследуют IMovable, который можно реализовать так:

class IMovable
{
public:
   virtual void move(int dx, int dy) = 0;
}


А если надо иметь дело с вершинами, то нужно вводить отдельный интерфейс iHasVertexes:

class iHasVertexes
{
public:
   virtual size_t getVertexCount() const = 0;
   virtual POINT  getVertex(size_t i) const = 0;
}

Этот интерфейс будет естественным для полигонов и полилиний, а если его реализовать для окружностей или дуг, то можно будет получать их апроксимированное представление. Однако в этот интерфейс нельзя вносить методы setVertexPos(), addVertex() и прочие модифицирующие, ибо они допустимы не для всех фигур.


А попытка наследовать Square от Rectangle приводит к нарушению LSP.

Есть ситуации похуже — во многих системах в качестве графического примитива может выступать текстовая строка. Вот и попробуй увязать полилинию, дугу, окружность, прямоугольник, полигон и текст в одном интерфейсе.
_____________________
С уважением,
Stanislav V. Zudin
Re[2]: Это как раз очевидно
От: Wolverrum Ниоткуда  
Дата: 07.04.13 22:28
Оценка:
Здравствуйте, deniok, Вы писали:

D>что от чего следует наследовать: изотопию от гомотопии или же гомотопию от изотопии?


По определению: "Изотопия — это гомотопия ... для которой ..."; значит, есличо, гомотопия — более широкое понятие.
Re[2]: И еще раз о наследовании квадратов
От: Wolverrum Ниоткуда  
Дата: 07.04.13 22:44
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>Ошибкой является сама попытка наследовать форму.

Прекрасно, что объявился единомышленник. Моя идея как раз и состоит в том, что форма — результат специализации, а не исходное свойство "предка".

SVZ>Затем, все объекты могут перемещаться, поэтому все они наследуют IMovable, который можно реализовать так:

Ну, это предположение больше похоже на косяк вашего мысленного дизайна, особенно учитывая следующее:
SVZ>Есть ситуации похуже — во многих системах в качестве графического примитива может выступать текстовая строка. Вот и попробуй увязать полилинию, дугу, окружность, прямоугольник, полигон и текст в одном интерфейсе.
Re: И еще раз о наследовании квадратов
От: Sinclair Россия https://github.com/evilguest/
Дата: 08.04.13 04:24
Оценка: 12 (2) +6
Здравствуйте, Wolverrum, Вы писали:
W>Но, что самое интересное, от слова "топология" никто (в смысле: "я не нашёл" ) особо не отталкивается при попытках выдать-объяснить решение. Что, если взглянуть на проблему под "топологическим" углом?
Для начала надо сформулировать проблему. Все сложности у людей — ровно с тем, что они пытаются придумать решение, не имея задачи.
Вот ваш "топологический угол" — он для чего нужен? Какую программу вы хотите написать?
Пока вы не определились с задачей, бессмысленно обсуждать её решения.

Поймите, что все эти споры — это как "что обязательно надо брать в отпуск". И вот одни до хрипоты кричат "загранпаспорт", другие "фонарик", третьи "сноуборд", четвёртые "консервы и спирт".
Вам не кажется, что есть фундаментальные отличия между отпусками на собственной даче, в Анталии, и в горах Тянь-шаня?

А мои оппоненты вот всё это обсуждают на полном серъёзе. И почему-то считают отказ выбирать экипировку
Автор: Serginio1
Дата: 02.04.13
без знания задачи отказом от сноуборда вообще.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: И еще раз о наследовании квадратов
От: Stanislav V. Zudin Россия  
Дата: 08.04.13 04:43
Оценка:
Здравствуйте, Wolverrum, Вы писали:

SVZ>>Затем, все объекты могут перемещаться, поэтому все они наследуют IMovable, который можно реализовать так:

W>Ну, это предположение больше похоже на косяк вашего мысленного дизайна, особенно учитывая следующее:

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

Если есть решение лучше — делись.

SVZ>>Есть ситуации похуже — во многих системах в качестве графического примитива может выступать текстовая строка. Вот и попробуй увязать полилинию, дугу, окружность, прямоугольник, полигон и текст в одном интерфейсе.
_____________________
С уважением,
Stanislav V. Zudin
Re[2]: И еще раз о наследовании квадратов
От: Wolverrum Ниоткуда  
Дата: 08.04.13 07:38
Оценка:
Здравствуйте, Sinclair, Вы писали:

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

Напомню вопрос
W>Напомню вопрос: "Интересно а как ты квадрат то наследовать будешь?

>Поймите, что все эти споры — это как "что обязательно надо брать в отпуск". Вам не кажется, что есть фундаментальные отличия между отпусками на собственной даче, в Анталии, и в горах Тянь-шаня?

Определенно, различия есть. Но ведь есть и сходства? Я, например, попробовал не чистить селёдку с хвоста, и оттолкнуться в рассуждениях от топологических инвариантов (фундаментальных сходств) — и пока что получается то, что не совсем понятно как натягивать на существующие реализации ООП.
Re[3]: И еще раз о наследовании квадратов
От: Sinclair Россия https://github.com/evilguest/
Дата: 08.04.13 09:09
Оценка: +4 :))
Здравствуйте, Wolverrum, Вы писали:
W>Напомню вопрос
W>>Напомню вопрос: "Интересно а как ты квадрат то наследовать будешь?
Вопрос я помню. А задача-то где? Задачи "отнаследовать квадрат" у вменяемых программистов не бывает.
Вот рассматривалась, к примеру, "задача раскроя". Правда, пропонент ООП как-то затруднился привести обоснование применения наследования фигур в этой задаче, всё время скатываясь на то, что Евклид зачем-то изобрел треугольник, значит и нам надо непременно рожать класс Triangle.
Это — по-прежнему оттого, что мысль постоянно перескакивает с идеи "как провести лето" на сноуборд, несмотря на то, что рассматривается круиз по Атлантике.

W>Определенно, различия есть. Но ведь есть и сходства?

Например, какие?

W>Я, например, попробовал не чистить селёдку с хвоста, и оттолкнуться в рассуждениях от топологических инвариантов (фундаментальных сходств) — и пока что получается то, что не совсем понятно как натягивать на существующие реализации ООП.

Вы со своей селёдкой пока что дошли до буквы К в названии "за передовую магию". Это само по себе ничего не доказывает и не опровергает. Как и у других участников.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: И еще раз о наследовании квадратов
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 08.04.13 10:30
Оценка: +2
Здравствуйте, Wolverrum, Вы писали:

W>Но, что самое интересное, от слова "топология" никто (в смысле: "я не нашёл" ) особо не отталкивается при попытках выдать-объяснить решение. Что, если взглянуть на проблему под "топологическим" углом? Быстро выясняется, что любой простой многоугольник (и даже более того — любая замкнутая кривая без самопересечений) топологически эквивалентен окружности. Интересная наклёвывается иерархия, не находите? Вместо специализации поведения — специализация состояния. На вершине иерархии, в базовом классе — интегральные, вычисляемые, качества фигур (площадь, периметр и т.п.), в потомках — лишь специфичные характеристики (радиус, фокусы, углы и т.п.).


И ни слова про функциональные требования
Re[2]: Е-е-есть! Есть, таки, истинная ценность! ;)
От: Erop Россия  
Дата: 08.04.13 16:13
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Поймите, что все эти споры — это как "что обязательно надо брать в отпуск". И вот одни до хрипоты кричат "загранпаспорт", другие "фонарик", третьи "сноуборд", четвёртые "консервы и спирт".

S>Вам не кажется, что есть фундаментальные отличия между отпусками на собственной даче, в Анталии, и в горах Тянь-шаня?

Так, спокойно. Спирт везде будет уместен! В отличии от загранпаспорта, например. Что таки наводит на всякие философские рассуждения об истинности ценностей
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: Например?
От: Wolverrum Ниоткуда  
Дата: 08.04.13 19:08
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>И ни слова про функциональные требования

Я понимаю, куда хотелось бы скатиться в обсуждении: к критике общего решения в условиях конкретных требований. Удобно, не спорю. Сам хочу
Re[3]: Е-е-есть! Есть, таки, истинная ценность! ;)
От: Wolverrum Ниоткуда  
Дата: 08.04.13 19:13
Оценка:
Здравствуйте, Erop, Вы писали:

E>Так, спокойно. Спирт везде будет уместен! В отличии от загранпаспорта, например. Что таки наводит на всякие философские рассуждения об истинности ценностей

Во-от! Одежда, кстати, тоже будет везде уместна
Re[4]: Е-е-есть! Есть, таки, истинная ценность! ;)
От: Erop Россия  
Дата: 08.04.13 19:28
Оценка:
Здравствуйте, Wolverrum, Вы писали:

W>Во-от! Одежда, кстати, тоже будет везде уместна

Ну немного разная таки...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[5]: Е-е-есть! Есть, таки, истинная ценность! ;)
От: Wolverrum Ниоткуда  
Дата: 08.04.13 19:36
Оценка: :)
Здравствуйте, Erop, Вы писали:

W>>Во-от! Одежда, кстати, тоже будет везде уместна

E>Ну немного разная таки...
Наследники отпуска будут более конкретными
Re[4]: И еще раз о наследовании квадратов
От: Wolverrum Ниоткуда  
Дата: 08.04.13 20:10
Оценка:
Здравствуйте, Sinclair, Вы писали:

S> А задача-то где?

Вот присмотрелся я к .NET типам — а там System.Object и отнаследованный от него System.IntPtr.
S> Задачи "отнаследовать квадрат" у вменяемых программистов не бывает.
И вот думаю: на задачу ли "отнаследовать квадрат" решали (вменяемые?) разработчики дотнета отнаследовав IntPtr от Object?

Вот, например...
Дано: Замкнутая плоская фигура.
Задача: Рассчитать площадь фигуры.
Требование: Использовать ООП-подход. Расчет не делегировать.
Чем не задача? Выглядит искусственно? Ничуть не более искуственно, чем наследование чего-нибудь от Object (TObject, Any и т.п. — на выбор) при реализации системы типов языка программирования.

W>>Определенно, различия есть. Но ведь есть и сходства?

S>Например, какие?
См. ветвь
Автор: Erop
Дата: 08.04.13
от Егора
Re[5]: И еще раз о наследовании квадратов
От: Wolverrum Ниоткуда  
Дата: 08.04.13 20:33
Оценка: +1
Здравствуйте, Wolverrum, Вы писали:

W>Дано: Замкнутая плоская фигура.

W>Задача: Рассчитать площадь фигуры.
W>Требование: Использовать ООП-подход. Расчет не делегировать.

Прошу отметить — Sinclair хотел задачу где возникала бы проблема "круг-овал" и её требовалось бы как-то решать.
Как эта задача соотносилась бы с темой обсуджения — вопрос пока что десятый.
Re: И еще раз о наследовании квадратов
От: Wolverrum Ниоткуда  
Дата: 08.04.13 21:24
Оценка: +1
W>Интересная наклёвывается иерархия,
Немного порисовав, пока что выходит что и она не особо решает.

Введение в контекст проблемы "квадрат-прямоугольник" третьей сущности "ромб" наглядно показывает всю глубину глубин
Re[6]: Е-е-есть! Есть, таки, истинная ценность! ;)
От: Sinclair Россия https://github.com/evilguest/
Дата: 09.04.13 05:00
Оценка: +1
Здравствуйте, Wolverrum, Вы писали:
W>Наследники отпуска будут более конкретными
Ну вот видите. Внезапно оказывается, что у нас есть семейство алгоритмов "собраться в отпуск". Конкретные представители этого семейства вполне себе могут наследоваться друг от друга. А вот то, с чем они работают, никакому наследованию не подлежит. Закрытый купальник вовсе не является потомком бикини, как и наоборот.
Программист-идиот может весь на пену изойти, обсуждая вопрос, какой купальник от какого наследовать. Вменяемый программист сначала уточнит задачу: ведь задача кройки ткани для купальника и задача сбора в отпуск ничего общего между собой не имеют.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[5]: И еще раз о наследовании квадратов
От: Sinclair Россия https://github.com/evilguest/
Дата: 09.04.13 05:01
Оценка: +1
Здравствуйте, Wolverrum, Вы писали:
W>И вот думаю: на задачу ли "отнаследовать квадрат" решали (вменяемые?) разработчики дотнета отнаследовав IntPtr от Object?
Нет. У них был набор сценариев.

W>Вот, например...

W>Дано: Замкнутая плоская фигура.
W>Задача: Рассчитать площадь фигуры.
W>Требование: Использовать ООП-подход. Расчет не делегировать.
Нет такого требования.
W>Чем не задача? Выглядит искусственно? Ничуть не более искуственно, чем наследование чего-нибудь от Object (TObject, Any и т.п. — на выбор) при реализации системы типов языка программирования.
Язык программирования живёт не в вакууме. Невозможно спроектировать язык программирования, не оглядываясь на библиотеки, которые захочется на нём написать. Прекратите упорствовать в заблуждениях

S>>Например, какие?

W>См. ветвь
Автор: Erop
Дата: 08.04.13
от Егора

Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.