Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Классы геометрических фигур 
:(
    Опции темы
zzkoderzzzx
Дата 16.10.2013, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 1.10.2013

Репутация: нет
Всего: нет



В учебниках часто приводят иерархию классов 
Код

class Tochka
{
//
};
class Storona:public Tochka
{
//
};
class Treugolnik:public Storona
{
//
};

Правильна ли она с точки зрения ООП? 
Вроде как сторона не является точкой, а треугольник стороной, почему тогда они наследуются друг от друга?

Это сообщение отредактировал(а) zzkoderzzzx - 16.10.2013, 11:13
PM MAIL   Вверх
baldina
Дата 16.10.2013, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Цитата(zzkoderzzzx @  16.10.2013,  11:12 Найти цитируемый пост)
Правильна ли она с точки зрения ООП

нет

Цитата(zzkoderzzzx @  16.10.2013,  11:12 Найти цитируемый пост)
В учебниках часто приводят

плиз ссылку на такой учебник

PM MAIL   Вверх
vinter
Дата 16.10.2013, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Впервые вижу такую иерархию. Да, она не отражает отношение "является" и, следовательно, не совсем корректна с точки зрения здравого смысла.


--------------------
Мой блог
PM MAIL WWW   Вверх
baldina
Дата 16.10.2013, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



zzkoderzzzxLSP
PM MAIL   Вверх
zzkoderzzzx
Дата 16.10.2013, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 1.10.2013

Репутация: нет
Всего: нет



Цитата(baldina @ 16.10.2013,  11:14)
плиз ссылку на такой учебник

Книгу где это было не помню.

Пример того, что такой подход используется.
http://www.cyberforum.ru/cpp-beginners/thread681679.html

PM MAIL   Вверх
baldina
Дата 16.10.2013, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



это не пример, потому что даже там предложивший подобное г$ пишет
Цитата

Получился бред, конечно, но преподам, в основном, это и нужно.

PM MAIL   Вверх
zzkoderzzzx
Дата 16.10.2013, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 1.10.2013

Репутация: нет
Всего: нет



В том задании предлагается реализовать еще класс круга с наследованием от класса линии. Как это сделать (чтобы не просто унаследоваться, а использовать данные класса-предка)? 
Зачем то предлагается "не использовать виртуальные функции". Какой в этом смысл?
PM MAIL   Вверх
bsa
Дата 16.10.2013, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(zzkoderzzzx @  16.10.2013,  14:19 Найти цитируемый пост)
Как это сделать (чтобы не просто унаследоваться, а использовать данные класса-предка)? 
Класс линия содержит как минимум два атрибута - координаты двух точек. Одну можно назначить центром окружности, вторую лежащей на окружности. Расстояние между ними - это радиус. Дальше объяснять? Можно поступить иначе, и посчитать, что обе точки являются лежащими на окружности, а прямая - диаметр ее. Таким образом, центр прямой (по факту, ее отрезка, так как даны две точки) - это центр окружности, а половина расстояния между точками - радиус.

Цитата(zzkoderzzzx @  16.10.2013,  14:19 Найти цитируемый пост)
Зачем то предлагается "не использовать виртуальные функции". Какой в этом смысл?
Какой смысл пытаться делать бред, который кем-то больным на всю голову предлагается?

PM   Вверх
zzkoderzzzx
Дата 16.10.2013, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 1.10.2013

Репутация: нет
Всего: нет



Получается, что в классе окружности не вводится никаких дополнительных данных, добавляются только методы. 
Т.е. с точки зрения данных отрезок и окружность это одно и то же. 
Может быть в данном случае наследование вполне удачно?

Добавлено @ 14:12
А может быть надо провести наследование в другую сторону?

Код

class Treugolnik {
//
};
class Storona:public Treugolnik
{
//
};
class Tochka:public Storona
{
//
};


Сторона - это треугоьник, вершины которого на одной прямой. Точка это сторона с совпадающими концами. Значит правило "is a" выполняется

Это сообщение отредактировал(а) zzkoderzzzx - 16.10.2013, 14:14
PM MAIL   Вверх
bems
Дата 16.10.2013, 17:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



Цитата(zzkoderzzzx @  16.10.2013,  14:02 Найти цитируемый пост)
Сторона - это треугоьник, вершины которого на одной прямой. Точка это сторона с совпадающими концами.

если доводить до такого абсурда, то можно и наследование прямой от окружности аргументировать бесконечностью радиуса


--------------------
Обижено школьников: 8
PM MAIL   Вверх
akizelokro
Дата 16.10.2013, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 1
Всего: 5



Цитата(zzkoderzzzx @  16.10.2013,  11:12 Найти цитируемый пост)
Правильна ли она с точки зрения ООП? 
Вроде как сторона не является точкой, а треугольник стороной, почему тогда они наследуются друг от друга?


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

Цитата(zzkoderzzzx @  16.10.2013,  13:19 Найти цитируемый пост)
В том задании предлагается реализовать еще класс круга с наследованием от класса линии. Как это сделать (чтобы не просто унаследоваться, а использовать данные класса-предка)? 

Перейти в неэвклидову геометрию. Хотя тут должна быть окружность, по идее.
А линии могут быть замкнутые, незамкнутые, с радиусами кривизны и так далее.

"Руки, ноги.. Главное - хвост!" smile

Добавлено @ 17:50
Вообще, в той модели.. ну, точка - класс. Сторона - класс, в котором к одной точке добавляется ещё точка (координата), у треугольника к стороне, определяемой по двум координатам, добавляется ещё точка (координата).
Можно и так завертеть.

Добавлено @ 17:51
Если в теме или в учебнике по ООП не упоминается неэвклидова геометрия, это не означает, что мы живём в мире только прямых углов.

Это сообщение отредактировал(а) akizelokro - 16.10.2013, 17:57


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
zzkoderzzzx
Дата 16.10.2013, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 1.10.2013

Репутация: нет
Всего: нет



А что, если нужен класс треугольника в пространстве? 
Т.е. дополнительно надо задать плоскость, в которой лежит треугольник. 
Мне кажется, что надо создать класс плоскости и применить множественное наследование.  
Нужно ли здесь виртуальное наследование?
От какого класса лучше унаследовать класс плоскости?

Код

class Tochka
{
//
};
class Storona:public Tochka
{
//
};
class Ploskost:public Storona //???
{
//
};
class Treugolnik:/*virtual*/ public Ploskost, /*virtual */public Storona
{
//
};


PM MAIL   Вверх
akizelokro
Дата 16.10.2013, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 1
Всего: 5



Видишь ли, в эвклидовой геометрии плоскость, как и треугольник, задаётся тройкой точек. Так что будет уже избыточное описание. А вот точки придётся расписывать с тремя координатами (а не двумя).

И опять всё сводится к логике модели. 
Предположу, что в бесконечном множестве задач Универсума любая логически непротиворечивая модель классов где-то да пригодится (но тут я мистик). А, может быть, и даже алгоритмы без классов.

Это сообщение отредактировал(а) akizelokro - 16.10.2013, 22:02


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0818 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.