Пример объектно-ориентированной программирования на языке Python. Урок 12

В конце данного курса придумаем и напишем небольшую программу, используя объектно-ориентированную парадигму программирования.

Как уже отмечалось в предыдущем уроке в ООП очень важен этап предварительного проектирования. Вообще можно выделить следующие этапы создании ОО-программы:

  1. Формулирование задачи.
  2. Определение объектов, участвующих в ее решении.
  3. Проектирование классов, на основе которых будут созданы объекты, а также установление между ними иерархических связей.
  4. Определение существенных свойств и методов для задач, которые будут решать объекты на основе проектируемых классов.
  5. Создание классов, описание их свойств и атрибутов.
  6. Создание объектов.
  7. Решение задачи путем взаимодействия объектов.

Первый этап:

Допустим нам надо написать программу по «сценарию» описанному в уроке 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).

Практическая работа

  1. Напишите программу рассмотренную в этом уроке. Посмотрите как она работает.
  2. Создайте еще пару учеников и еще один объект класса Information. Научите новых учеников чему-нибудь.
  3. Может ли в данной программе ученик освоить информацию минуя учителя. Если «да», то реализуйте в программе «самостоятельную работу» ученика.

Создано