Задачка на ООП, virtual
От: Juster  
Дата: 23.11.15 12:11
Оценка:
Привет! Любимый племяшка изучает С++, я иногда подсказываю, помогаю. Нужно придумать задачку на ООП: чтоб нужно было применить наследование, композицию, инкапсуляцию, полиморфизм, и в идеале еще как то ссылки затолкать в задачу. Есть идеи? Спасибо!
Re: Задачка на ООП, virtual
От: DOOM Россия  
Дата: 23.11.15 12:22
Оценка: +2
Здравствуйте, Juster, Вы писали:

J>Привет! Любимый племяшка изучает С++, я иногда подсказываю, помогаю. Нужно придумать задачку на ООП: чтоб нужно было применить наследование, композицию, инкапсуляцию, полиморфизм, и в идеале еще как то ссылки затолкать в задачу. Есть идеи? Спасибо!


Написать простой векторный графический редактор.
Вопрос, конечно, в возрасте племяшки — может для него это крутовато. Но в универе эта была самая нормальная задача по ООП, всякие абстрактные задачи с результатом, который толком не пощупать не цепляли ни разу.
Re: Задачка на ООП, virtual
От: Pavel Dvorkin Россия  
Дата: 23.11.15 12:32
Оценка:
Здравствуйте, Juster, Вы писали:

J>Привет! Любимый племяшка изучает С++, я иногда подсказываю, помогаю. Нужно придумать задачку на ООП: чтоб нужно было применить наследование, композицию, инкапсуляцию, полиморфизм, и в идеале еще как то ссылки затолкать в задачу. Есть идеи? Спасибо!


Гараж с автомобилями разных типов, мотоциклами, велосипедами. Можно для разнообразия еще и брички с лошадьми добавить.

А то и вообще всякие движущиеся объекты. Поезда, автомобили , самолеты и собачьи упряжки. Тут такая иерархия получится, что ему на месяц хватит.
With best regards
Pavel Dvorkin
Отредактировано 23.11.2015 12:37 Pavel Dvorkin . Предыдущая версия .
Re[2]: Задачка на ООП, virtual
От: Stanislav V. Zudin Россия  
Дата: 23.11.15 13:27
Оценка:
Здравствуйте, DOOM, Вы писали:

J>>Привет! Любимый племяшка изучает С++, я иногда подсказываю, помогаю. Нужно придумать задачку на ООП: чтоб нужно было применить наследование, композицию, инкапсуляцию, полиморфизм, и в идеале еще как то ссылки затолкать в задачу. Есть идеи? Спасибо!


DOO>Написать простой векторный графический редактор.

DOO>Вопрос, конечно, в возрасте племяшки — может для него это крутовато. Но в универе эта была самая нормальная задача по ООП, всякие абстрактные задачи с результатом, который толком не пощупать не цепляли ни разу.

Задача неплохая, но на ней многие норовят нарушить LSP.

Вот посмотри, возьмем основные примитивы: линия, прямоугольник, квадрат, полигон (дугу и текст даже трогать не будем). Что у них общего? Только отдельные свойства — толщина контура, возможность удалить, переместить.
А что пытаются делать? Унаследовать всех от IShape, в который понапихают толщину, заливку, размеры и проч.
Какая заливка у линии? Что делать, если меняется ширина у квадрата?
Если эти вопросы разобрать заранее, то задачка получается неплохая.

2ТС:
1. Со своей стороны могу предложить нечто менее гуёвое (задача реальная).
Для обмена данными между САПР существует формат odb++.
Вся информация хранится в куче файлов, разложенных по каталогам.
Файлы текстовые. Могут быть сжатыми (Z архив) или несжатыми.
Вся структура может передаваться как есть (каталог с кучей подкаталогов) или в виде tar'а.

Отличный повод применить ООП и написать свой стрим, для "прозрачного" чтения файлов, независимо сжаты они или нет, находятся в tar'е или в распакованном каталоге.

2. Можно сделать собственный "Нортон Коммандер", который сможет отображать содержимое каталогов и архивов (zip, rar и проч) — и гуй есть, и протестировать есть на чем.
Если обобщить, то получается "браузер" + набор плагинов для просмотра файлов разных форматов.
_____________________
С уважением,
Stanislav V. Zudin
Re[3]: Задачка на ООП, virtual
От: Juster  
Дата: 23.11.15 13:30
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>2ТС:
SVZ>1. Со своей стороны могу предложить нечто менее гуёвое (задача реальная).
SVZ>Для обмена данными между САПР существует формат odb++.
SVZ>Вся информация хранится в куче файлов, разложенных по каталогам.
SVZ>Файлы текстовые. Могут быть сжатыми (Z архив) или несжатыми.
SVZ>Вся структура может передаваться как есть (каталог с кучей подкаталогов) или в виде tar'а.

SVZ>Отличный повод применить ООП и написать свой стрим, для "прозрачного" чтения файлов, независимо сжаты они или нет, находятся в tar'е или в распакованном каталоге.


SVZ>2. Можно сделать собственный "Нортон Коммандер", который сможет отображать содержимое каталогов и архивов (zip, rar и проч) — и гуй есть, и протестировать есть на чем.

SVZ>Если обобщить, то получается "браузер" + набор плагинов для просмотра файлов разных форматов.

Что-то слишком круто для изучающего ООП. Тут и обычному программисту есть рад чем подумать. Задачу попроще бы, чтобы не на недели работы новичку, а на часы. Спасибо!
Re[4]: Задачка на ООП, virtual
От: Stanislav V. Zudin Россия  
Дата: 23.11.15 13:38
Оценка:
Здравствуйте, Juster, Вы писали:

SVZ>>Отличный повод применить ООП и написать свой стрим, для "прозрачного" чтения файлов, независимо сжаты они или нет, находятся в tar'е или в распакованном каталоге.


SVZ>>2. Можно сделать собственный "Нортон Коммандер", который сможет отображать содержимое каталогов и архивов (zip, rar и проч) — и гуй есть, и протестировать есть на чем.

SVZ>>Если обобщить, то получается "браузер" + набор плагинов для просмотра файлов разных форматов.

J>Что-то слишком круто для изучающего ООП. Тут и обычному программисту есть рад чем подумать. Задачу попроще бы, чтобы не на недели работы новичку, а на часы. Спасибо!


Да ладно, в первой задаче получается два интерфейса: "Каталог" и "Файл" с двумя классами для первого интерфейса и 4 — для второго.
А во второй задаче вообще всего один интерфейс "плагин" и несколько классов для разных форматов (txt, bmp, что-нибудь еще).
_____________________
С уважением,
Stanislav V. Zudin
Re: Задачка на ООП, virtual
От: velkin Удмуртия http://blogs.rsdn.org/effective/
Дата: 23.11.15 15:24
Оценка:
Здравствуйте, Juster, Вы писали:

J>Привет! Любимый племяшка изучает С++, я иногда подсказываю, помогаю. Нужно придумать задачку на ООП: чтоб нужно было применить наследование, композицию, инкапсуляцию, полиморфизм, и в идеале еще как то ссылки затолкать в задачу. Есть идеи? Спасибо!


Пусть пишет компьютерную игру, сейчас это модно.
Re[2]: Задачка на ООП, virtual
От: Juster  
Дата: 23.11.15 17:22
Оценка:
Здравствуйте, velkin, Вы писали:

V>Здравствуйте, Juster, Вы писали:


J>>Привет! Любимый племяшка изучает С++, я иногда подсказываю, помогаю. Нужно придумать задачку на ООП: чтоб нужно было применить наследование, композицию, инкапсуляцию, полиморфизм, и в идеале еще как то ссылки затолкать в задачу. Есть идеи? Спасибо!


V>Пусть пишет компьютерную игру, сейчас это модно.


Нужна небольшая задача, на 2-4ч решения.
Re[3]: Задачка на ООП, virtual
От: Александр Кузнецов Россия  
Дата: 24.11.15 07:16
Оценка: +1
Здравствуйте, Juster, Вы писали:

J>Нужна небольшая задача, на 2-4ч решения.


Хорошая задача на ООП, который показывает реальную эффективность только на больших объемах кода, по определению не может быть на 2-4 часа, и при этом не быть абсолютно синтетической и притянутой за уши. Так что выбор между:
1. маленькая синтетическая задача, которая, скорее всего, будет слишком абстрактной и, скорее всего, неинтересной ребенку.
2. большая интересная задача:
а) векторный редактор. Обычно для тех, кто постарше. Хорошо ложатся базовые концепции и есть большой потенциал для расширения/проверки кривизны рук обучаемого доп заданиями типа "добавить фигуру", "реализовать сохранение в файл" и т.д.
б) игрушка с разными типами строений/юнитов. Не надо писать на ООП тетрис, или lines. Хорошо подойдут Tower Defence, танчики, простенькая пошаговая стратегия и т.д.
Если вот прямо очень надо сэкономить время, то можно отдать заготовку, в которую надо встроить свои классы. Не 2-4 часа будет, но все-таки экономия.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Re: Задачка на ООП, virtual
От: Nuseraro Россия  
Дата: 27.11.15 16:30
Оценка:
J>Привет! Любимый племяшка изучает С++, я иногда подсказываю, помогаю. Нужно придумать задачку на ООП: чтоб нужно было применить наследование, композицию, инкапсуляцию, полиморфизм, и в идеале еще как то ссылки затолкать в задачу. Есть идеи? Спасибо!

Из файла вводятся данные. Данные состоят из строчек, каждая из строчек или
1) Слово Round затем X затем Y затем R
2) Слово Triangle затем x1, y1, x2, y2, x3, y3
3) Слово Rectangle затем x, y, height, width

Задания
1) Их надо считать
2) Их надо нарисовать
3) Разработать "Приказы", например, двигаться в центр экрана, от центра экрана, расти, уменьшаться, бегать за мышкой, убегать от мышки, идти в точку, избегая других фигур, whatever

Или какого он возраста?
Homo Guglens
Re: Задачка на ООП, virtual
От: wildwind Россия  
Дата: 04.12.15 09:47
Оценка:
Здравствуйте, Juster, Вы писали:

J> Привет! Любимый племяшка изучает С++, я иногда подсказываю, помогаю. Нужно придумать задачку на ООП: чтоб нужно было применить наследование, композицию, инкапсуляцию, полиморфизм, и в идеале еще как то ссылки затолкать в задачу. Есть идеи? Спасибо!


Не нужно столько концепций пихать в одну задачу. Придумай лучше по паре задачек на каждую. Будет проще и тебе, и ему. А когда вы их вместе решите, тебе уже не составит труда придумывать задачи, объединяющие несколько концепций.

Нужно есть слона по частям.
Я привык, что в интернете можно найти ответ на любой вопрос. Я не люблю думать. Зачем думать, если всё уже придумано до меня? © Zenden@RSDN ::: avalon/1.0.442
Re: Задачка на ООП, virtual
От: vsb Казахстан  
Дата: 08.12.15 03:11
Оценка:
Я в детстве писал игрушку на Borland Pascal-е, которая рисовала небольшие круги на экране. Одним кругом управлял игрок, второй круг был целью, куда надо попасть, остальными кругами двигал компьютер (ловил игрока). Там хорошо легло ООП — был базовый класс для круга и каждый потомок его переопределял (для рисования задавал цвет; для поведения задавал обработчик). Композиции там, правда, не было, но в принципе можно выделить поведение в отдельный класс, рисование в отдельный класс и применить композицию.

Вообще, имхо, человек должен до этого сам додумываться. Додумывать за него — значит забрать у него львиную долю размышлений, которые и ценны для формирования понимания.
Отредактировано 08.12.2015 3:14 vsb . Предыдущая версия . Еще …
Отредактировано 08.12.2015 3:13 vsb . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.