Страницы

Поиск по вопросам

среда, 25 декабря 2019 г.

Нужна помощь с наследованием

#ооп #наследование


Мне нужно создать класс Dateдля работы с датами, и к этому классу применить наследование.

У меня была идея создать класс Calendar, унаследоваться от моего класса Date, и реализовать
методы такие как "добавить события", "получить предстоящие события" и т.д.

Проблема в том, что мне кажется, что я неправильно применяю принцип наследования,
может все-таки класс Calendar не очень подходит чтобы наследоваться от Date? Что вы
можете посоветовать ?
    


Ответы

Ответ 1



Зайдите на сайт Чарльза Петцольда , известного автора многих книг по программированию для Windows. Скачайте по данной ссылке его свободно распространяемую книгу NET Book Zero. В этой книге как раз последовательно определяется класс Date на языке C#, а затем в последующих главах этот класс наследуется классом ExtendedDate. Вы можете почерпнуть оттуда идеи, например, какие методы определить в своем производном классе независимо от того, как вы его назовете, и даже если вы позаимствуете определения классов, это все равно для вас будет полезно, так как вы изучите представленный в книге материал. Вы даже в своей лабораторной можете дать ссылку на эту книгу в разделе "Используемая литература". То есть у вас будет солидный результат, показывающийя, что вы, действительно, проделали большую работу.:)

Ответ 2



Мне кажется, что можно обойтись агрегацией. Но это мое субъективное мнение. class Date{ } class Calendar { private Date d; //и тд }

Ответ 3



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

Ответ 4



В вашем случае найболее правильно будет использовать агрегацию, как уже говорили выше, если у вас есть специальный класс для дат, можно просто сделать его полем класа Event. class Event { private Date date; ... field1; ... field2; } Наследование тут вообще не в тему, очевидно что событие никак не является подмножеством даты.

Комментариев нет:

Отправить комментарий