Методическая разработка урока
Элективный курс: Введение в объектно-ориентированное программирование на Python
Уровень: Программирование для начинающих
В конце данного курса придумаем и напишем небольшую программу, используя объектно-ориентированную парадигму программирования.
Как уже отмечалось в предыдущем уроке в ООП очень важен этап предварительного проектирования. Вообще можно выделить следующие этапы создании ОО-программы:
- Формулирование задачи.
- Определение объектов, участвующих в ее решении.
- Проектирование классов, на основе которых будут созданы объекты, а также установление между ними иерархических связей.
- Определение существенных свойств и методов для задач, которые будут решать объекты на основе проектируемых классов.
- Создание классов, описание их свойств и атрибутов.
- Создание объектов.
- Решение задачи путем взаимодействия объектов.
Первый этап:
Допустим нам надо написать программу по «сценарию» описанному в уроке 1: про занятие, где ученики должны получить некий объем знаний.
Второй этап:
Какие объекты понадобятся? Очевидно, это ученики, учитель, информация, а также возможно вспомогательные предметы такие как проектор и др.
Третий этап:
Классы: учитель, ученик, информация. Учитель и ученик во многом похожи: по идеи оба - люди. Значит классы учитель и ученик могут принадлежать одному суперклассу - человек. Однако не все так просто. Если существенные признаки для решения данной задачи не имеют ничего общего, то выделить что-то в суперкласс просто невозможно.
Четвертый этап:
Выделим важное, чем должны обладать объекты (классы) для решения задачи «увеличить знания».
Ученик должен уметь воспринимать информацию, и превращать ее в знания.
Учитель, по крайней мере, должен уметь выбирать и транслировать информацию.
Информация должна содержать определенный набор строк символов. Должна быть предусмотрена возможность извлечения ее частей.
Пятый этап:
Класс «Информация»:
class Information:
def __init__(self,info):
self.info = info
def extract(self,i):
self.current = self.info[i]
return "%s" % self.current
Объекты данного класса при создании должны содержать ту или иную информацию (содержание урока), допустим в виде списка. В классе также предусмотрен метод extract, позволяющий извлекать какую-то часть информации и возвращать ее в основную программу.
Класс «Учитель»:
class Teacher:
def into(self,phrase):
self.phrase = phrase
def out(self):
return "%s" % self.phrase
Объектам типа «Учитель» в нашей программе позволено лишь вспоминать фразу и громко транслировать.
Класс «Ученик»:
class Pupil:
def __init__(self):
self.know = []
def take(self, i):
self.know.append(i)
Объекты класса Pupil уже при своем создании обязаны иметь атрибут know, куда будут помещаться знания. Также предусмотрен метод take, обеспечивающий приемку информации.
Создание объектов:
Допустим в программе будет по одному объекту «Информатика» и «Учитель» и пару объектов «Ученик».
inform = Information(["> (больше)","< (меньше)","== (равно)", "!= (не равно)"])
t = Teacher()
p1 = Pupil()
p2 = Pupil()
Решение задачи с помощью взаимодействия объектов:
Какая в данном случае задача? Научить учеников чему-нибудь. Приступим.
t.into(inform.extract(2))
p1.take(t.out())
print ("1-ый ученик пока еще знает только ", p1.know)
t.into(inform.extract(0))
p1.take(t.out())
p2.take(t.out())
print ("1-ый ученик знает, что ", p1.know)
print ("2-ой ученик знает, что ", p2.know)
Учитель берет с помощью метода extract объекта inform часть информации. Ученики, используя свой метод take имеют возможность получить информацию, воспроизводимую учителем (метод out объекта t).
В результате работы этой программы атрибут know учеников изменяется (если конечно те использовали метод take).
Практическая работа
- Напишите программу рассмотренную в этом уроке. Посмотрите как она работает.
- Создайте еще пару учеников и еще один объект класса Information. Научите новых учеников чему-нибудь.
- Может ли в данной программе ученик освоить информацию минуя учителя. Если «да», то реализуйте в программе «самостоятельную работу» ученика.