В конце данного курса придумаем и напишем небольшую программу, используя объектно-ориентированную парадигму программирования.
Как уже отмечалось в предыдущем уроке в ООП очень важен этап предварительного проектирования. Вообще можно выделить следующие этапы создании ОО-программы:
Первый этап:
Допустим нам надо написать программу по «сценарию» описанному в уроке 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).