Модераторы: Се ля ви

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Наследование: линия, луч, сегмент, Наследование: линия, луч, сегмент 
:(
    Опции темы
zlobozavr
Дата 14.12.2008, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Такая вот задачка, хотелось бы знать Ваше мнение. Рассмотрите три геометрических понятия: линия (бесконечна в обоих направлениях), луч (начало в фиксированной точке, бесконечен в одном направлении), сегмент (отрезок прямой с фиксированными концами). Как бы вы построили классы, представляющие эти три понятия, в виде иерархии наследования? Будет ли ваше решение другим, если вы обратите особое внимание на представление данных (на поведение)? Охарактеризуйте тип наследования, который вы использовали. 

Насколько понимаю, изменится. Базовый класс - линия. Его наследует луч, а его сегмент. Но при рассмотрении поведения, например, НАРИСОВАТЬ, здесь уже композиция - сегмент содержится в луче, а луч в линии.. Или я не прав?

PM MAIL   Вверх
deniva
Дата 14.12.2008, 21:41 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Пример может быть не очень хорош, но суть понятна.

Решение - образец проектирования Bridge
PM MAIL   Вверх
zlobozavr
Дата 14.12.2008, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



thnx, только никогда не использовал его...
PM MAIL   Вверх
maxim1000
Дата 14.12.2008, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

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



никакого наследования в смысле ООП тут нет

луч не является отрезком, отрезок не является лучом, с прямой - то же самое


чтобы обратить внимание на поведение, нужно знать, что ж у них за поведение - в разных системах можно дать разный набор операций


--------------------
qqq
PM WWW   Вверх
zlobozavr
Дата 14.12.2008, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Как нет наследования?
Код

    class MyLine
    {
        protected Double angle;
        public MyLine(double ang)
        {
            angle = ang;
        }
        public virtual void DrawMyLine(Graphics gr)
        {  
            double x = Math.Cos(angle) * 500;
            double y = Math.Sin(angle) * 500;
            gr.DrawLine(Pens.Black, 0, 0, (float)x, (float)y);
        }
    }

    class MyRay : MyLine
    {
        protected PointF start;
        public MyRay(double ang, PointF strt) : base(ang)
        {
            start = strt;
        }
        public override void DrawMyLine(Graphics gr)
        {
            double x = Math.Cos(base.angle) * 500;
            double y = Math.Sin(base.angle) * 500;
            gr.DrawLine(Pens.Black, start.X, start.Y, (float)x, (float)y);
        }
    }

    class MySegment : MyRay
    {
        double length;
        public MySegment(double angl, PointF st, double len) : base(angl, st)
        {
            length = len;
        }
        public override void DrawMyLine(Graphics gr)
        {
            double x = Math.Cos(base.angle) * length;
            double y = Math.Sin(base.angle) * length;
            gr.DrawLine(Pens.Black,base.start.X, base.start.Y, (float)x, (float)y);
        }
    }


 А поведение ну хотя бы самый элементарный случай - Нарисовать()
PM MAIL   Вверх
maxim1000
Дата 15.12.2008, 09:42 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

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



Цитата(zlobozavr @  14.12.2008,  22:40 Найти цитируемый пост)
Как нет наследования?

smile
конечно, можно написать программу, где одно наследуется от другого
но, насколько я понял, интересует, как написать её правильно
наследование в ООП выражает знание о том, что все объекты какого-то класса также являются объектами более общего класса (классический пример: любое яблоко является фруктом)
так вот в данном случае это не так - луч не является прямой

Добавлено через 1 минуту и 30 секунд
а что касается поведения:
в данном случае можно выделить базовый класс "объект, который можно нарисовать" и все класса унаследовать от него


--------------------
qqq
PM WWW   Вверх
mes
Дата 15.12.2008, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Код

class Figure 
{
   public:
     virtual void  Draw (DC& );  
};

class FgRay : public Figure
{
   public:
     virtual void  Draw (DC& dc)
    {
          ..
          dc.Draw...
    }  
   private:
     Point  m_Start;
};

class FgLine : public Figure
{
   public:
     virtual void  Draw (DC& dc)
    {
          ..
          dc.Draw...
    }
  private:
     Point  m_Start, m_End;
};

class FgSegment : public Figure
{
   public:
     virtual void  Draw (DC& dc)
    {
          ..
          dc.Draw...
    }  
  private:
     Point  m_Start;
     Angle  m_Angle;
};


Это сообщение отредактировал(а) mes - 15.12.2008, 13:52


--------------------
PM MAIL WWW   Вверх
zlobozavr
Дата 15.12.2008, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Луч является прямой. Луч - это часть бесконечной прямой у которой есть только одно отличие - начало. Луч наследует у прямой - угол и добавляет координаты точки начала луча. Разве нет?
PM MAIL   Вверх
ida
Дата 15.12.2008, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


замужем
****


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

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



zlobozavr, вы лучше задачу опишите.
Все зависит от того, как мы потом собираемся работать с этим лучом, отрезком и тп.
Что хорошо для одних задач, будет плохо для других. Типичная программерская ошибка - отбрасывать предметную область.
PM WWW   Вверх
ksili
Дата 15.12.2008, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(zlobozavr @  15.12.2008,  14:18 Найти цитируемый пост)
Луч является прямой

и
Цитата(zlobozavr @  15.12.2008,  14:18 Найти цитируемый пост)
Луч - это часть бесконечной прямой

это разные вещи.

По вашему, глаз является частью человека, следовательно, глаз - это человек!
maxim1000, выше все верно написал


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
zlobozavr
Дата 15.12.2008, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Это небеизвестная книга: Бадд Объектно-ориентированное программирование в действии, 7.6.4
PM MAIL   Вверх
ida
Дата 15.12.2008, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


замужем
****


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

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



zlobozavr, не поняла ответа.
Вы просто тренируетесь? Никакой прикладной цели нет?
PM WWW   Вверх
zlobozavr
Дата 15.12.2008, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Пока да. smile 
PM MAIL   Вверх
ida
Дата 15.12.2008, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


замужем
****


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

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



Тогда я вам отвечу. 
Решение полностью определяется задачей. Не зная задачи, нельзя построить оптимальную модель. Т.к. решений здесь множество, каждое подойдет, но надо знать, в какой ситуации его применять.
PM WWW   Вверх
zlobozavr
Дата 15.12.2008, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Согласен. Именно поэтому и обратился за помощью потому как нашел несколько вроде казалось правильных решений, подумал что запутался...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Системный анализ, проектирование и UML"
Се ля ви

Форум "Системный анализ, проектирование и UML" предназначен для обсуждения вопросов, так или иначе связанных с этапами жизненного цикла автоматизированных (программных, информационных, автоматических) систем:

• предпроектные обследования объектов автоматизации;

• разработка концепции создания систем;

• моделирование бизнес-процессов (в т.ч. на UML);

• проектирование архитектуры систем;

• управление проектами;

• управление качеством;

• CASE-средства;

• реинжиниринг.


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

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


 




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


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

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