Archive for the ‘Обучения программированию’ Category

Хороший вводный текст к ООП

Март 15, 2010

Потиху изучаю Питон. Решил почитать, что по этому поводу пишет intut.ru.  Введение в ОПП у них меня порадовало — просто и доступно. Можно спокойно использовать этот текст для объяснения новичкам.

Абстракция в ООП позволяет составить из данных и алгоритмов обработки этих данных объекты, отвлекаясь от несущественных (на некотором уровне) с точки зрения составленной информационной модели деталей. Таким образом, программа подвергается декомпозиции на части «дозированной» сложности. Отдельный объект, даже вместе с совокупностью его связей с другими объектами, человеком воспринимается легче (именно так он привык оперировать в реальном мире), чем что-то неструктурированное и монотонное.

Перед тем как начать написание даже самой простенькой объектно-ориентированной программы, необходимо провести анализ предметной области, для того чтобы выявить в ней классы объектов.

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

Выделяемые объекты необязательно должны походить на физические объекты — ведь это абстракции, за которыми скрываются процессы, взаимодействия, отношения.

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

Даже если просто перечислить все существительные, встретившиеся в описании задачи (явно или неявно), получится неплохой список кандидатов в классы.

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

Реклама

Захомутали

Сентябрь 16, 2009

homutСегодня позвонила Светлана Леонидовна. И ей удалось меня уговорить преподавать олимпиадное программирование.

Честно сказать я отказывался по следующим причинам:

  • Нет времени.
  • Я лентяй. Для того, чтобы воспитывать настощих бойцов из практически всех, а не выезжать на природной пытливости некоторых учеников (например Левкевич Вероника), необходима программа обучения. Тяп-ляп уже не прокатит. Нужно учить твёрдо и усердно, с домашними заданиями.
  • Моя отсталость. В последнее время, а если быть точнее, то с момента окончания
  • Опять «двадцать-пять». За время моего обучения, точнее преподавания я уже всё что знал — рассказал. Начинать сначала ой как не хочется.

Кроме того, мне предложили проводить лекци для учителей. Ну что ж. Намыливать жопу, значит намыливать жопу. Как можно отказаться от новых приключений?

Если честно, очень хочется, чтобы появилась еще одна «Вероничка» или «Вероник» :) Знания вроде есть. Надо их передавать.

Новая задача для олимпиады по программированию

Февраль 19, 2009

В своё время, когда я еще был маленький (8 класс) и занимался математикой, я был на олимпиаде по математике и получил диплом второй степени. И на разборе задач Жук (это фамилия преподавателя) сказал, что очень часто задачу для олимпиады можно составить взглянув на самые простые вещи, например, на игры.

Поэтому, глядя на игру «Block Drop«, я сразу понял: вот она, одимпиадная задача.

Вот какой текст получился у меня.

Имеется игровое клетчатое поле размером N на M. Оно полностью залито водой. В каждой клетке над водой находиться определенное количество кубиков. У нас есть человечек, который может прыгать со столбика на соседний столбик или через одну клетку. Если человечек прыгнет в клетку в которой нет кубиков, то он утонет. После того, как человечек прыгнул с одного столбика на другой, тот столбик, на котором он находился до прыжка погружается на один кубик в воду, т.е. в этом столбике становиться на один кубик меньше. Необходимо пропрыгать со столбика А до столбика B таким образом, чтобы на поле не осталось ни одного кубика, кроме кубика на финишной клетке, на котором и должен стоять человечек после окончания серии прыжков. Необходимо вывести последовательность прыжков, выполня которую человечик решит поставленную задачу Варианты прыжков на соседнюю клетку — L,R,U,D, через одну — L2,R2,U2, D2.

Надеюсь объянять, что такое L,R,U,D не надо :) Как её решать я пока не знаю, но мне кажется будет интересно.

Откуда люди только берут идеи?

Январь 14, 2009

Я всё не перестаю удивляться, откуда люди умудряются брать столько идей для простых игр. И меня терзает вопрос, почему я не смог придумать это, ведь это так просто. За примером ходить долго не надо.

Dodge

Казалось бы, простая игра, в которой нет ничего сложного. Летает себе какой-то абстрактный корабль, который даже стрелять то не умеет. А по нем «палят изо всех орудий» другие «абстракции». Но паляи не простыми ракетами, а … самонаводящимися, которые после некоторого времени полёта, если не встретили никакого препятствия взрываются. Так вот нужно запутать эти ракеты так, чтобы они попадали в сових хозяев, т.е. наших недругов.

Игра завораживает своеё простотой и очень легка в производстве. Именно по этой причине после того, как мы со школьниками закончим змейку, будем делать эту игру.

Кстати, прикольно было бы если запустить сразу есколько игроков (типа мулиплеер), и каждый мог бы стрелять в направлении своего движения. Ракета выбирала бы себе цель, как самого близкого противника. Вот бы масакалово было бы. Эх … мечты мечты.

Урок первый : Змейка

Январь 12, 2009

Я веду факультатив по подготовке школьников к олиппиаде по информатике.  Если во времена моего «детства»  возможность посидеть за компьютером уже являлась стимулом для занятий, то сейчас все намного иначе. У каждого дома уже есть компьютер. Поэтому приходиться заинтерисовывать детишек как-нибудь по другому. Именно с этой целью я начал писать книгу, в которой на примере создания игр, дети смогут научиться азам программирования и некоторым технологиям.

Итак, мы учимся программировать создавая игры.

На первом (первое по данной методике) занятии мы делали на Borland Pascal обычную змейку. Для этого нам понадобились только модули CRT и GRAPH. Так как полноценного учебника не было, то пришлось пользоваться школьным учебников, в котором в краткой форме изложены основы графического и текстового режима.

Первоначальная задача сделать змейку, даже не змейку а линию, которая движется по экрану до тех пор, пока не встретит препятсвие. Препятствием являются границы экрана и непосредственно сама змейка. При нажатии клавиш управления курсора змейка меняет своё направление.

С этим заданием справились все. Однако, сначала дети реализовывали змейку которая движется только при нажатии клавиши. Но после более точного объяснения условия и некоторых подсказок, быстро исправлялись.

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

На примере создания данной игры были изучены:

  • основы работы в текстовом и графическом режиме
  • цикл repeat until. Почему то школьники игнорируют все виды циклов, за сключением for. В данном случае, for не мог помочь, поэтому пришлось учиться  :)
  • основы создания интерактивных программ

А как же алгоритмы и всё такое, спросите вы? Буду стараться подбирать такие игры, в которых данные алгоритмы как раз и нужны. Например, поиск кратчайшего пути можно реализовать на примере игры Maze Stopper