Форум программистов, компьютерный форум, киберфорум
ООП и паттерны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.94/65: Рейтинг темы: голосов - 65, средняя оценка - 4.94
5 / 7 / 2
Регистрация: 26.05.2015
Сообщений: 81

Что от чего наследовать: прямоугольник от квадрата или квадрат от прямоугольника?

27.05.2015, 16:48. Показов 14322. Ответов 42
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собсно вопрос, который часто возникает при проектировании объектной модели, и который я не до конца понимаю и который я попытался выразить в простом примере - что от чего наследовать: прямоугольник от квадрата или квадрат от прямоугольника?

1) С одной стороны логично наследовать что-то более конкретное от более общего - то есть унаследовать квадрат от прямоугольника, так как любой квадрат является прямоугольником, но не любой прямоугольник квадратом.
В этом случае для кода:

class Rectangle { }
class Square : Rectangle { }

Square obj = new Square();

print(obj is Square); // вернет True
print(obj is Rectangle); // вернет True

две последние строчки вернут значение True, что собсно верно.


2) С другой стороны, обратное более практично - для прямоугольника необходимо хранить как ширину, так и высоту, в отличии от квадрата для которого достаточно хранить информацию только для одной из сторон. Следовательно при наследовании прямоугольника от квадрата класс Square не будет хранить избыточную информацию, что может быть критично, если нам надо создавать огромный массив объектов.

Так как же все таки правильнее наследовать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.05.2015, 16:48
Ответы с готовыми решениями:

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

Нарисовать прямоугольник, внутри него квадрат, который движется вдоль стен прямоугольника
Нарисовать прямоугольник, внутри него квадрат, который движется вдоль стен прямоугольника.

Определить тип параллелограмма (ромб, прямоугольник или квадрат)
Задача 1. Задан параллелограмм со сторонами a, b и углом α между ними. Определить тип параллелограмма (ромб, прямоугольник или квадрат),...

42
04.06.2015, 22:50
Студворк — интернет-сервис помощи студентам

Не по теме:

а какой смысл разбивать именно на объекты?
там структурно все разбито на процедурочки
карта рисуется из кэша, остальное динамически
кэш размером Screen*2
все очень быстро
выглядит как игра-стратегия
прямо хочется обвести десяток юнитов "трамвай" и отправить на конечную

0
Антикодер
Эксперт функциональных языков программирования
1889 / 871 / 48
Регистрация: 15.09.2012
Сообщений: 3,092
10.06.2015, 21:59
когда возникают такие вопросы, которые непонятно какую цель преследуют, стоит начать изучение функционального программирования. И эти вопросы исчезнут.
То есть ответ на вопрос ТС: это не важно, каким способом ваша программа решает задачу, если результаты верные.

У каждого своя иерархия классов, которая зависит от многих факторов.
То есть чтобы определить иерархию, нужно сначала определить требования для конкретного проекта, чем лучше описаны требования, тем очевиднее иерархия классов [если она там нужна]

Добавлено через 3 минуты
В вашем случае, напрашивается вывод, что вы ещё создадите супер класс Figure
То есть возможно у вас в коде есть проблема длинных иерархий наследования.
0
11.06.2015, 00:40

Не по теме:

Любую проблему можно решить добавлением ещё одного уровня абстракции... кроме проблемы слишком большого количества уровней абстракции. :)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.06.2015, 00:40

Выводить информацию, какая фигура: квадрат или прямоугольник
Надо просто расписать каждую строчку кода что она обозначает и как то модифицировать програму Вот програма надо зделать чтобы она в...

Верно ли что 2 прямоугольника получены разрезанием некоторого квадрата одним прямолинейным разрезом?
Верно ли, что два заданных прямоугольника a1 x b1 и a2 x b2 были получены разрезанием некоторого квадрата одним прямолинейным разрезом?...

Составить программу для вычисления площади одной из фигур: квадрата, круга или прямоугольника по значению x
Пожалуйста помогите. Составить программу для вычисления площади одной из фигур: квадрата, круга или прямоугольника по значению x,...

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

Что исправить, чтобы фигуры квадрат и прямоугольник могли изменять размер?
Подскажите, пожалуйста, что нужно исправить, чтобы фигуры квадрат и прямоугольник могли изменять размер. #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
43
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru