Привет всем.
В следующем семестре буду вести практику по ООП для студентов 2 курса. Возникает проблема — какими должны
быть задания по программированию? Хотелось бы узнать мнение тех, кто учится/учился, узнать — чего не хватало, а что, наооборот, надо бы игнорировать. Было бы замечательно, если бы вы привели список заданий своего ВУЗа. Пока что возможные варианты такие — 2 задания:
(Общие требования)
1.
*Аккуратное разбиение на модули
— определение каждого класса, реализация функций-членов, основная программа должны быть в разных
файлах
— модули включают (#include) только те описания, от которых зависят
—
*Иерархия как минимум из 3 уровней откытого наследования классов.В классах верхенго уровня должны
присутствовать виртуальные методы. Некоторые классы этого уровня — абстрактные. Производные классы
должны поддерживать контракт родительских классов.
*Основные модули должны соответствовать принципу "открытости-закрытости", т.е. зависеть только от
классов, описывающих абстракции, а не от их реализаций.
2. *Аккуратное разбиение на модули
— определение каждого класса, реализация функций-членов, основная программа должны быть в разных
файлах
— модули включают (#include) только те описания, от которых зависят
—
*Использованы статические методы и переменные
*Использован механизм обработки исключений
*Созданы и использованы шаблонные классы
*Перегружены операторы, в том числе и <<, для вывода объектов
*Объекты создаются в динамической памяти, виртуальные деструкторы
*Использована стандартная библиотека С++ (string,контейнеры,итераторы,алгоритмы)
Здравствуйте, Мемега, Вы писали: М>В следующем семестре буду вести практику по ООП для студентов 2 курса. Возникает проблема — какими должны М>быть задания по программированию? Хотелось бы узнать мнение тех, кто учится/учился, узнать — чего не хватало, а что, наооборот, надо бы игнорировать. Было бы замечательно, если бы вы привели список заданий своего ВУЗа.
Если ООП на С++ да еще с нуля, начинать надо с самы простых заданий:
Создать класс (первое задание — без перегрузки операций и конструкторов).
Операции класса задать 2 способами: как друзья и как мемберы
Второе — тот же класс — с перегрузкой операций, конструкторами — 3 штуки. И опять: мемберы и друзья — пусть почувствуют разницу.
Третье — динамический класс-контейнер конкретного типа — для уяснения конструкторов, присваивания, деструктора.
Динамику делать 2-х видов: как динамический массив, как список.
Четвертое — тот же динамический класс, но с исключениями (например, для проверки индекса)
Тот же динамический класс, но как шаблон.
А потом уже наследование: простое: открытое-закрытое, множественное, абстрактные классы.
Паттерны — обязательно (как раз и абстрактные классы поизучают)
Тут и перегрузка [] и () для доступа к элементу контейнера.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Мемега, Вы писали:
М> В следующем семестре буду вести практику по ООП для студентов 2 курса. М> Возникает проблема — какими должны быть задания по программированию?
По-моему, в приведенных заданиях больший упор на физической декомпозиции, а не на логической.
Имхо, задания по ООП должны быть такими, чтобы у обучающихся были хорошие шансы неверно распределить
обязанности классов. После этого следующее задание можно давать в виде дополнения к предыдущему,
чтобы студенты сами испытали на себе последствия неудачных проектных решений. Иначе, без мало-
мальского хождения по граблям, для устранения которых предназначено ООП, боюсь, все слова
о необходимости грамотного проектирования останутся словами.
Кста, а сколько часов отведено на данную практику?
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Я в свое время я слушал лекции по ООП. Сначала нам объясняли основные понятия. Затем, когда у нас появились знания, на лекция мы разберали пару простых примеров(файловая система например). Но чесно говоря мне не понятно как студентам объяснять паттерны если они не владеют общими понятиями. Т.е. как два курса могут идти паралельно?
P.S. У меня есть неплохие на мой взгляд методички по этому делу в эл. виде. По сути в них тоже что и в Бутче, только все сжато. Написаны неплохо. Читаются быстро и легко. Могу поделиться.
Здравствуйте, SergeyBi, Вы писали:
SB>Я в свое время я слушал лекции по ООП. Сначала нам объясняли основные понятия. Затем, когда у нас появились знания, на лекция мы разберали пару простых примеров(файловая система например). Но чесно говоря мне не понятно как студентам объяснять паттерны если они не владеют общими понятиями. Т.е. как два курса могут идти паралельно?
Не параллельно. Паттерны идут позже
SB>P.S. У меня есть неплохие на мой взгляд методички по этому делу в эл. виде. По сути в них тоже что и в Бутче, только все сжато. Написаны неплохо. Читаются быстро и легко. Могу поделиться.
Здравствуйте, Мемега, Вы писали:
LVV>>Если ООП на С++ да еще с нуля, начинать надо с самы простых заданий:
М>А если не с нуля, а уже был курс ООП с Java
Тогда с перегрузки операций — как раз в Java отсутствует.
А можно (и скорее всего — нужно) сделать так: взять лабы по Jave и то же самое сделать средсвами С++ (с учетом отсутствия интерфейсной библиотеки).
А если учите интегрированной среде — то и с интерфейсом в виде MFC или VCL.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>Здравствуйте, Мемега, Вы писали:
LVV>>>Если ООП на С++ да еще с нуля, начинать надо с самы простых заданий:
М>>А если не с нуля, а уже был курс ООП с Java LVV>Тогда с перегрузки операций — как раз в Java отсутствует. LVV>А можно (и скорее всего — нужно) сделать так: взять лабы по Jave и то же самое сделать средсвами С++ (с учетом отсутствия интерфейсной библиотеки). LVV>А если учите интегрированной среде — то и с интерфейсом в виде MFC или VCL.
Честно говоря, очень хотелось бы обойтись только ISO C++. Как мне кажется, испольование MFC,ATL и подобных библиотек лишь затруднит понимание С++ и студенты "за деревьями не увидят леса".
Здравствуйте, SergeyBi, Вы писали:
SB> Но чесно говоря мне не понятно как студентам объяснять паттерны если они не владеют общими понятиями. Т.е. как два курса могут идти паралельно?
Да, интересно SB>P.S. У меня есть неплохие на мой взгляд методички по этому делу в эл. виде. По сути в них тоже что и в Бутче, только все сжато. Написаны неплохо. Читаются быстро и легко. Могу поделиться.
Если не составит труда, сбросьте мне, пожалуйста.
Laptev@astu.org
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>Здравствуйте, SergeyBi, Вы писали:
SB>> Но чесно говоря мне не понятно как студентам объяснять паттерны если они не владеют общими понятиями. Т.е. как два курса могут идти паралельно? LVV>Да, интересно
Не параллельно, паттерны включены в курс "Объектные технологии", который идет гораздо позже
memega
Re: Университетские задания по ООП
От:
Аноним
Дата:
18.12.03 23:25
Оценка:
Здравствуйте, Мемега, Вы писали:
М>Привет всем. М>В следующем семестре буду вести практику по ООП для студентов 2 курса. Возникает проблема — какими должны М>быть задания по программированию? Хотелось бы узнать мнение тех, кто учится/учился, узнать — чего не хватало, а что, наооборот, надо бы игнорировать. Было бы замечательно, если бы вы привели список заданий своего ВУЗа. Пока что возможные варианты такие — 2 задания:
М>(Общие требования)
М>1. М> *Аккуратное разбиение на модули М> — определение каждого класса, реализация функций-членов, основная программа должны быть в разных М> файлах М> — модули включают (#include) только те описания, от которых зависят М> — М> *Иерархия как минимум из 3 уровней откытого наследования классов.В классах верхенго уровня должны М> присутствовать виртуальные методы. Некоторые классы этого уровня — абстрактные. Производные классы М> должны поддерживать контракт родительских классов. М> *Основные модули должны соответствовать принципу "открытости-закрытости", т.е. зависеть только от М> классов, описывающих абстракции, а не от их реализаций.
М>2. *Аккуратное разбиение на модули М> — определение каждого класса, реализация функций-членов, основная программа должны быть в разных М> файлах М> — модули включают (#include) только те описания, от которых зависят М> — М> *Использованы статические методы и переменные М> *Использован механизм обработки исключений М> *Созданы и использованы шаблонные классы М> *Перегружены операторы, в том числе и <<, для вывода объектов М> *Объекты создаются в динамической памяти, виртуальные деструкторы М> *Использована стандартная библиотека С++ (string,контейнеры,итераторы,алгоритмы)
Это, конечно, не относится напрямую к ООП, но вот сколько учусь, так ни разу никто работу с указателями и ссылками толком не объяснил. -> Долго решал проблемы с перегрузкой операторов и использованием виртуальных ф-ций.
А>Это, конечно, не относится напрямую к ООП, но вот сколько учусь, так ни разу никто работу с указателями и ссылками толком не объяснил. -> Долго решал проблемы с перегрузкой операторов и использованием виртуальных ф-ций.
Спасибо, обязательно учту ваши замечания.
memega
Re[2]: Университетские задания по ООП
От:
Аноним
Дата:
19.12.03 09:20
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Это, конечно, не относится напрямую к ООП, но вот сколько учусь, так ни разу никто работу с указателями и ссылками толком не объяснил. -> Долго решал проблемы с перегрузкой операторов и использованием виртуальных ф-ций.
Надо учить С/C++ после ассемблера, такая благодать наступает... Именно так нас и учили
I-курс: Turbo Pascal 7.0 (общие понятия и технологии программированния, некоторые с нуля начинали, поэтому нагружать сразу как то нехорошо)
II-курс: Assembler
III-курс:
I- семестр: С
II- семестр: С++
Ну а дальше уже все прикладное VCL, ATL, STL, MFC и так далее...
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Аноним, Вы писали:
А>>Это, конечно, не относится напрямую к ООП, но вот сколько учусь, так ни разу никто работу с указателями и ссылками толком не объяснил. -> Долго решал проблемы с перегрузкой операторов и использованием виртуальных ф-ций.
А>Надо учить С/C++ после ассемблера, такая благодать наступает... Именно так нас и учили
А>I-курс: Turbo Pascal 7.0 (общие понятия и технологии программированния, некоторые с нуля начинали, поэтому нагружать сразу как то нехорошо) А>II-курс: Assembler А>III-курс: А> I- семестр: С А> II- семестр: С++
А>Ну а дальше уже все прикладное VCL, ATL, STL, MFC и так далее...
У нас примерно так и есть: 1 семестр — паскаль,стеки,очереди,деревья, списки, файлы.
2 семестр — язык С, информатика
3 семестр — Архитектура компьютера(ассемблер), Алгоритмы и структуры данных,ООП
(Java)
4 семестр — ООП (C++)
Я как раз в этом семестре вел практику по ассемблеру, в следующем будет C++, т.к. студенты уже знают основы (Java), то я могу начинать не с нуля. А вот если бы еще кто-нибудь подкинул задания, которые выполняли на практических занятиях...
memega
Re[4]: Университетские задания по ООП
От:
Аноним
Дата:
19.12.03 09:37
Оценка:
Здравствуйте, Мемега, Вы писали:
М>Я как раз в этом семестре вел практику по ассемблеру, в следующем будет C++, т.к. студенты уже знают основы (Java), то я могу начинать не с нуля. А вот если бы еще кто-нибудь подкинул задания, которые выполняли на практических занятиях...
Страуструппа берешь там много интересных заданий , главное чтобы народ был готов к их выполнению... Именно наш препод так и поступал, но естественно он их переработал в более ясную форму и сделал варианты для каждого...
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Мемега, Вы писали:
М>>Я как раз в этом семестре вел практику по ассемблеру, в следующем будет C++, т.к. студенты уже знают основы (Java), то я могу начинать не с нуля. А вот если бы еще кто-нибудь подкинул задания, которые выполняли на практических занятиях...
А>Страуструппа берешь там много интересных заданий , главное чтобы народ был готов к их выполнению... Именно наш препод так и поступал, но естественно он их переработал в более ясную форму и сделал варианты для каждого...
Честно говоря, я склоняюсь к комбинированому варианту — объяснять по Страуструпу и Экелю, но из Страуструпа первую часть "Basic Fasilities" пробежать вкратце, подробно останавливаясь лишь на ссылках. А вот "Abstraction Mechanizms", "Sdandard Library" и "Design Using C++" по возможности очень подробно. Плюс к темам из этих разделов вкрапления из Мейерса (50 и 35 советов, ну и STL), и Саттера.
Заданий хочу дать много и сложных, ибо только, решая на практике сложные задачи, можно усвоить многие детали, которые написаны в умных книжках. К тому, что уже было написано в этой ветке выше добавил бы обязательно смарт-поинтеры (auto_ptr и написание своего механизма). + Заставить студентов читать!!
У кого какие замечания? Предложения? Критика?
memega
Re[6]: Университетские задания по ООП
От:
Аноним
Дата:
19.12.03 10:12
Оценка:
Здравствуйте, Мемега, Вы писали:
М>Честно говоря, я склоняюсь к комбинированому варианту — объяснять по Страуструпу и Экелю, но из Страуструпа первую часть "Basic Fasilities" пробежать вкратце, подробно останавливаясь лишь на ссылках. А вот "Abstraction Mechanizms", "Sdandard Library" и "Design Using C++" по возможности очень подробно. Плюс к темам из этих разделов вкрапления из Мейерса (50 и 35 советов, ну и STL), и Саттера.
М>Заданий хочу дать много и сложных, ибо только, решая на практике сложные задачи, можно усвоить многие детали, которые написаны в умных книжках. К тому, что уже было написано в этой ветке выше добавил бы обязательно смарт-поинтеры (auto_ptr и написание своего механизма). + Заставить студентов читать!!
М>У кого какие замечания? Предложения? Критика?
Заданий не должно быть много, так как могут возникнуть проблемы со сдачей заданий, да и это ведет к распылению внимания при выполнении, так как некоторый перечень задач(взять хотябы интерфейс) придеться начинать каждый раз с нуля, токо из-за того что это абсолютно новая задача...
Даже лучше всего что бы следущее задание было продолжением предыдущего, то есть достаточно одного задания которое бы охватывало все разделы которые будут освещены, это ведет не только к изучению материала но и к навыкам планирования...
А>Заданий не должно быть много, так как могут возникнуть проблемы со сдачей заданий, да и это ведет к распылению внимания при выполнении, так как некоторый перечень задач(взять хотябы интерфейс) придеться начинать каждый раз с нуля, токо из-за того что это абсолютно новая задача...
Если имеется ввиду интерефейс пользователя, то он будет минималистичным, никаких GUI.
А определить сколько много, а сколько мало — довольно трудная задача, т.к. уровень восприятия материала у студентов очень различается. Хотелось бы, конечно, ориентироваться на сильных, т.е. на уровень выше среднего. Для гениев возможны отдельные задания
А>Даже лучше всего что бы следущее задание было продолжением предыдущего, то есть достаточно одного задания которое бы охватывало все разделы которые будут освещены, это ведет не только к изучению материала но и к навыкам планирования...