![]() |
Модераторы: группа: Модератор, группа: Комодератор |
![]() ![]() ![]() |
|
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск |
ivashkanet, да ну? ![]() ![]() |
|||
|
||||
DeadSoul |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва |
-------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
||||
|
|||||
Exception |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 |
Как я уже сказал, либо вообще лучше не наследовать (предоставив метод ToRectangle() у квадрата), либо использовать стратегии, как говорил Чипсет, либо пользовать вариант Войда, который мне тоже нравится.
|
|||
|
||||
Се ля ви |
|
|||
![]() Java/SOAрхитектор ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space |
Квадрат - частный случай прямоугольника, прямоугольник, соответственно, более общий. Квадрат можно описать длиной одной его стороны, а прямоугольник - длинами двух его сторон, имеющих различную длину.
Поэтому с точки зрения эффективного использования ресурсов прямоугольник должен быть наследником квадрата, т.к квадрат проще прямоугольника. Я оптимальную схему считаю что-то типа такой: Квадрат | длина ребра | |- Прямоугольник длина ребра длина ребра2 Это сэкономит память, поскольку представлять квадрат как прямоугольник с одинаковыми длинами рёбер будет не рационально с точки зрения оптимизации памяти - налицо дублирование данных. С другой стороны, логически прямоугольник - не есть квадрат и у нас страдает логическая структура. При преобразовании
Для того, что бы разрулить данное противоречие, действительно нужно ориентироваться на конкретную задачу и на язык программирования. Но если уж заранее сказать ничего конкретного мы не можем, могу предложить такой вариант: имплементировать длины рёбер (вообще-то это всегда рекомендуется делать) и сыграть на их представлении в памяти. Можно задать в Прямоугольнике методы, которые возвращают оба ребра - первое и второе и в квадрате интерфейс будет тот же самый, но метод, возвращающий второе ребро будет перегружен и реально будет вызывать метод первый, и только первый метод будет возвращать длину первого ребра. Тогда получаем оптимальный компромиcс. Единственное, что не очень красиво - это всплывающая проблема именования рёбер - их четыре, но реально отличаются из них в прямоугольнике - 2, а в квадрате - вообще только одно уникальное ребро в плане длины, так что если нам нужно установить длину ребра, то нам лучше реализовать методы "верниГоризонтальноеРебро" и "верниВертикальное". P.S. Впрочем, вся эта модель заметно усложняется, если нам понадобиться создавать всё дерево наследования объектов Планиметрии, а не только эти два, хотя и можно при этом действовать похожим способом. Это сообщение отредактировал(а) Се ля ви - 20.5.2006, 15:32 -------------------- |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Песочница | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |