![]() |
Модераторы: Се ля ви |
![]() ![]() ![]() |
|
zlobozavr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 14.12.2008 Репутация: нет Всего: нет |
Такая вот задачка, хотелось бы знать Ваше мнение. Рассмотрите три геометрических понятия: линия (бесконечна в обоих направлениях), луч (начало в фиксированной точке, бесконечен в одном направлении), сегмент (отрезок прямой с фиксированными концами). Как бы вы построили классы, представляющие эти три понятия, в виде иерархии наследования? Будет ли ваше решение другим, если вы обратите особое внимание на представление данных (на поведение)? Охарактеризуйте тип наследования, который вы использовали.
Насколько понимаю, изменится. Базовый класс - линия. Его наследует луч, а его сегмент. Но при рассмотрении поведения, например, НАРИСОВАТЬ, здесь уже композиция - сегмент содержится в луче, а луч в линии.. Или я не прав? |
|||
|
||||
deniva |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 24.5.2007 Репутация: 2 Всего: 2 |
Пример может быть не очень хорош, но суть понятна.
Решение - образец проектирования Bridge |
|||
|
||||
zlobozavr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 14.12.2008 Репутация: нет Всего: нет |
thnx, только никогда не использовал его...
|
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: нет Всего: 110 |
никакого наследования в смысле ООП тут нет
луч не является отрезком, отрезок не является лучом, с прямой - то же самое чтобы обратить внимание на поведение, нужно знать, что ж у них за поведение - в разных системах можно дать разный набор операций -------------------- qqq |
|||
|
||||
zlobozavr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 14.12.2008 Репутация: нет Всего: нет |
Как нет наследования?
А поведение ну хотя бы самый элементарный случай - Нарисовать() |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: нет Всего: 110 |
![]() конечно, можно написать программу, где одно наследуется от другого но, насколько я понял, интересует, как написать её правильно наследование в ООП выражает знание о том, что все объекты какого-то класса также являются объектами более общего класса (классический пример: любое яблоко является фруктом) так вот в данном случае это не так - луч не является прямой Добавлено через 1 минуту и 30 секунд а что касается поведения: в данном случае можно выделить базовый класс "объект, который можно нарисовать" и все класса унаследовать от него -------------------- qqq |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: нет Всего: 250 |
Это сообщение отредактировал(а) mes - 15.12.2008, 13:52 |
|||
|
||||
zlobozavr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 14.12.2008 Репутация: нет Всего: нет |
Луч является прямой. Луч - это часть бесконечной прямой у которой есть только одно отличие - начало. Луч наследует у прямой - угол и добавляет координаты точки начала луча. Разве нет?
|
|||
|
||||
ida |
|
|||
![]() замужем ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2277 Регистрация: 14.5.2002 Где: Санкт-Петербург Репутация: 6 Всего: 58 |
zlobozavr, вы лучше задачу опишите.
Все зависит от того, как мы потом собираемся работать с этим лучом, отрезком и тп. Что хорошо для одних задач, будет плохо для других. Типичная программерская ошибка - отбрасывать предметную область. |
|||
|
||||
ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
и это разные вещи. По вашему, глаз является частью человека, следовательно, глаз - это человек! maxim1000, выше все верно написал -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
zlobozavr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 14.12.2008 Репутация: нет Всего: нет |
Это небеизвестная книга: Бадд Объектно-ориентированное программирование в действии, 7.6.4
|
|||
|
||||
ida |
|
|||
![]() замужем ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2277 Регистрация: 14.5.2002 Где: Санкт-Петербург Репутация: 6 Всего: 58 |
zlobozavr, не поняла ответа.
Вы просто тренируетесь? Никакой прикладной цели нет? |
|||
|
||||
zlobozavr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 14.12.2008 Репутация: нет Всего: нет |
Пока да.
![]() |
|||
|
||||
ida |
|
|||
![]() замужем ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2277 Регистрация: 14.5.2002 Где: Санкт-Петербург Репутация: 6 Всего: 58 |
Тогда я вам отвечу.
Решение полностью определяется задачей. Не зная задачи, нельзя построить оптимальную модель. Т.к. решений здесь множество, каждое подойдет, но надо знать, в какой ситуации его применять. |
|||
|
||||
zlobozavr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 14.12.2008 Репутация: нет Всего: нет |
Согласен. Именно поэтому и обратился за помощью потому как нашел несколько вроде казалось правильных решений, подумал что запутался...
|
|||
|
||||
zlobozavr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 14.12.2008 Репутация: нет Всего: нет |
mes
по поводу твоей реализации, дело в том что угол нужен всем трем, точка начала нужна только двум, а точка конца только одному из трех перечисленных объектов. И терминология в условии немного отличается от привычной - сегмент - обычная линия с двумя концами под определенным углом, так что ей нужны все три параметра, а не два.. ![]() |
|||
|
||||
ida |
|
|||
![]() замужем ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2277 Регистрация: 14.5.2002 Где: Санкт-Петербург Репутация: 6 Всего: 58 |
Все зависит от системы координат.
Можно взять декартову, а можно полярную. Тогда в декартовой всем трем будет достаточно двух точек А в полярной - угла и одной точки. |
|||
|
||||
zlobozavr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 14.12.2008 Репутация: нет Всего: нет |
тоже верно
![]() |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: нет Всего: 110 |
можно выделить класс объектов, которые могут быть аналитически представлены частью прямой что-то типа Linear границы можно будет задавать параметром на этой прямой, а не полноценными трёхмерными точками, у прямой не будет ни одной, в луча одна, у отрезка - две границы от этого класса унаследуются все три объекта хотя здесь стоит быть поосторожнее - получается вынесение внутренних аспектов реализации наружу -------------------- qqq |
|||
|
||||
zlobozavr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 14.12.2008 Репутация: нет Всего: нет |
Интересный вариант..
![]() |
|||
|
||||
StepS |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 26.8.2005 Где: Днепропетровск Репутация: нет Всего: нет |
maxim1000, практически прав, но я бы предложил немного другой подход:
все три объекта содержат координаты хотя бы 2-х точек, т.к. чтобы нарисовать линию - нужно знать 2 точки, луч - тоже, только у него одна из точек является началом, отрезок - 2 точки (начало и конец). Т.е. у них разное только поведение НарисоватьСебя. Отсюда имеем:
как-то так. Это сообщение отредактировал(а) StepS - 16.12.2008, 19:45 |
|||
|
||||
zlobozavr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 14.12.2008 Репутация: нет Всего: нет |
аналогично как и я думал сначала. Но дело в том что не требуется здесь никакая конкретная реализация, а
1. Как бы вы построили классы, представляющие эти три понятия, в виде иерархии наследования? 2. Будет ли ваше решение другим, если вы обратите особое внимание на представление данных (на поведение)? 3. Охарактеризуйте тип наследования, который вы использовали. По-моему правильнее будет 1. сегмент - часть луча, луч - часть линии ("has a") 2. не изменится (нарисоватьСебя()) 3. композиция |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Системный анализ, проектирование и UML" | |
|
Форум "Системный анализ, проектирование и UML" предназначен для обсуждения вопросов, так или иначе связанных с этапами жизненного цикла автоматизированных (программных, информационных, автоматических) систем: • предпроектные обследования объектов автоматизации; • разработка концепции создания систем; • моделирование бизнес-процессов (в т.ч. на UML); • проектирование архитектуры систем; • управление проектами; • управление качеством; • CASE-средства; • реинжиниринг. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Се ля ви. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Системный анализ, проектирование и UML | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |