| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Классы геометрических фигур |
| Автор: zzkoderzzzx 16.10.2013, 11:12 | ||
В учебниках часто приводят иерархию классов
Правильна ли она с точки зрения ООП? Вроде как сторона не является точкой, а треугольник стороной, почему тогда они наследуются друг от друга? |
| Автор: baldina 16.10.2013, 11:14 |
нет плиз ссылку на такой учебник |
| Автор: vinter 16.10.2013, 11:15 |
| Впервые вижу такую иерархию. Да, она не отражает отношение "является" и, следовательно, не совсем корректна с точки зрения здравого смысла. |
| Автор: baldina 16.10.2013, 11:18 |
| zzkoderzzzx, http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF_%D0%BF%D0%BE%D0%B4%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B8_%D0%91%D0%B0%D1%80%D0%B1%D0%B0%D1%80%D1%8B_%D0%9B%D0%B8%D1%81%D0%BA%D0%BE%D0%B2 |
| Автор: zzkoderzzzx 16.10.2013, 11:32 | ||
Книгу где это было не помню. Пример того, что такой подход используется. http://www.cyberforum.ru/cpp-beginners/thread681679.html |
| Автор: baldina 16.10.2013, 11:54 | ||
это не пример, потому что даже там предложивший подобное г$ пишет
|
| Автор: zzkoderzzzx 16.10.2013, 13:19 |
| В том задании предлагается реализовать еще класс круга с наследованием от класса линии. Как это сделать (чтобы не просто унаследоваться, а использовать данные класса-предка)? Зачем то предлагается "не использовать виртуальные функции". Какой в этом смысл? |
| Автор: zzkoderzzzx 16.10.2013, 14:02 | ||
| Получается, что в классе окружности не вводится никаких дополнительных данных, добавляются только методы. Т.е. с точки зрения данных отрезок и окружность это одно и то же. Может быть в данном случае наследование вполне удачно? Добавлено @ 14:12 А может быть надо провести наследование в другую сторону?
Сторона - это треугоьник, вершины которого на одной прямой. Точка это сторона с совпадающими концами. Значит правило "is a" выполняется |
| Автор: bems 16.10.2013, 17:23 | ||
если доводить до такого абсурда, то можно и наследование прямой от окружности аргументировать бесконечностью радиуса |
| Автор: akizelokro 16.10.2013, 17:46 | ||||
Определяется логикой модели. Если.. ля-ля-тополя.. определять множество фигур, чья вершина лежит в некой точке.. ля-ля-тополя.. то можно как бы и так. Если же ещё сильнее абстрагироваться, то можно и ещё более забубенную логически цельную модель прописать. Но вряд ли это тема для элементарного учебника.
Перейти в неэвклидову геометрию. Хотя тут должна быть окружность, по идее. А линии могут быть замкнутые, незамкнутые, с радиусами кривизны и так далее. "Руки, ноги.. Главное - хвост!" Добавлено @ 17:50 Вообще, в той модели.. ну, точка - класс. Сторона - класс, в котором к одной точке добавляется ещё точка (координата), у треугольника к стороне, определяемой по двум координатам, добавляется ещё точка (координата). Можно и так завертеть. Добавлено @ 17:51 Если в теме или в учебнике по ООП не упоминается неэвклидова геометрия, это не означает, что мы живём в мире только прямых углов. |
| Автор: zzkoderzzzx 16.10.2013, 21:02 | ||
| А что, если нужен класс треугольника в пространстве? Т.е. дополнительно надо задать плоскость, в которой лежит треугольник. Мне кажется, что надо создать класс плоскости и применить множественное наследование. Нужно ли здесь виртуальное наследование? От какого класса лучше унаследовать класс плоскости?
|
| Автор: akizelokro 16.10.2013, 21:56 |
| Видишь ли, в эвклидовой геометрии плоскость, как и треугольник, задаётся тройкой точек. Так что будет уже избыточное описание. А вот точки придётся расписывать с тремя координатами (а не двумя). И опять всё сводится к логике модели. Предположу, что в бесконечном множестве задач Универсума любая логически непротиворечивая модель классов где-то да пригодится (но тут я мистик). А, может быть, и даже алгоритмы без классов. |