<<
>>

Объектно-ориентированная модель Python

Язык Python одновременно поддерживает различные стили программиро- вания. Он позволяет программировать в процедурном стиле, объектно- ориентированном стиле и функциональном стиле, а также допускает смешива- ние стилей.
На сегодняшний день при создании крупных программных продук- тов предпочтение отдается объектно-ориентированному стилю программирова- ния, рассмотрим его более подробно.

Синтаксис создания собственного класса выглядит следующим образом:

class имя класса:

блок программного кода

class имя класса(имя базового класса): блок программного кода

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

Синтаксис создания класса дает возможность создавать классы динами- чески, когда в этом возникнет необходимость. Методы класса создаются с по- мощью инструкции def внутри блока программного кода класса.

Экземпляры класса создаются посредством обращения к имени класса.

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

Следовательно, все атрибуты и реализация методов класса скрыты от пользователя, который работает с объектом как с единым целым. В этом заклю- чается принцип инкапсуляции в Python.

Чтобы создать объект, необходимо выполнить два действия. Сначала не- обходимо создать неинициализированную заготовку объекта, а затем необхо- димо подготовить объект к использованию, инициализировав его. Когда созда- ется объект, то сначала вызывается специальный метод__ new_ (), который

создает объект, а затем выполняется инициализация объекта вызовом специ- ального метода_ init_ (), который называют конструктором и используют

для инициализации состояния объектов.

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

Рассмотрим пример создания двух классов:

class Thin_Lens():

def _ init_ (self, n, R1, R2):

self.n = n self.R1 = R1 self.R2 = R2 def D(self):

return (self.n - 1)*(1/self.R1 - 1/self.R2) def F(self):

return (1/self.D()) def pr(self):

if self.D()>0:

return "собирающая" else:

return "рассеивающая" def str (self) :

x = "Оптическая сила D = %s\n" %(self.D()) x+= "Фокусное расстояние F = %s\n" %(self.F()) x+= "Преломляющие свойства - %s\n" %(self.pr()) return x

def add (self, other):

x = "Оптическая сила комбинации линз D = " return x + str(self.D() + other.D())

class Lens(Thin_Lens):

def _ init_ (self, n, R1, R2, d):

self.n = n self.R1 = R1 self.R2 = R2 self.d = d def D(self):

x = (self.n-1)*self.d/(self.n*self.R1*self.R2) return (self.n-1)*(1/self.R1 - 1/self.R2 + x)

L1 = Thin_Lens(1.5, 0.2, 0.4) print(L1)

L2 = Lens(2.0, 0.1, 0.15, 0.02) print(L2) print(L1 + L2)

Как видно из примера, сначала создается класс тонких линз Thin_Lens, который является прямым наследником класса object. В этом классе сначала

перегружается метод инициализации класса__ init_ (self, n, R1, R2),

где устанавливаются начальные значения атрибутов: относительный показатель преломления n, радиусы кривизны линзы R1 и R2. Затем создается метод D (self), необходимый для расчета оптической силы линзы по начальным значениям. Этот метод создается с помощью инструкции def, после чего про- исходит расчет значения оптической силы, которое возвращается с помощью инструкции return. Далее создается еще один метод F(self), применяемый для нахождения фокусного расстояния линзы. Расчет фокусного расстояния осуществляется на основе вызова ранее описанного метода этого же класса self.D(), после чего полученное значение также возвращается с помощью инструкции return.

После этого создается метод pr (self) для оценки пре- ломляющих свойств линзы, который построен на применении условного опера- тора и вызове метода self.D(). В зависимости от значения оптической силы линзы метод возвращает либо значение «собирающая», либо значение «рас- сеивающая».

Далее применяется перезагрузка метода__ str_ () и_ add_ () . Ре- зультатом работы метода___________________ str_ (self) является формирование текстовой

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

пользователя. Метод__ add_ (self, other) вызывается тогда, когда над

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

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

d, поэтому метод инициализации класса__ init_ (self, n, R1, R2, d)

необходимо перегрузить. Также нужно изменить метод расчета оптической си- лы данной линзы self.D() с учетом атрибута d. Остальные методы останутся неизменными.

В данном случае можно видеть воплощение полиморфизма в Python, оз- начающего, что смысл операции зависит от объекта, над которым она выполня- ется. То есть расчет оптической силы линзы вызывается одним и тем же мето- дом self.D(), однако результат будет зависеть от того, к какому классу отно- сится объект.

В результате выполнения программы будет создан объект L1 класса Thin_Lens с относительным показателем преломления n = 1.5, радиусами кривизны линзы R1 = 0.4 и R2 = 0.4. Затем информация об этом объекте будет выведена на экран. После этого будет создан объект L2 класса Lens с относительным показателем преломления n = 2.0 , радиусами кривизны лин- зы R1 = 0.1 и R2 = 0.15 , толщиной линзы d = 0.01 . Затем информация об этом объекте также будет выведена на экран. В результате сложения этих двух объектов будет получена оптическая сила комбинации линз и выведена на эк- ран:

Оптическая сила D = 1.25

Фокусное расстояние F = 0.8

Преломляющие свойства - собирающая

Оптическая сила D = 4.0

Фокусное расстояние F = 0.25

Преломляющие свойства - собирающая

Оптическая сила комбинации линз D = 5.25

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

6.6.3

<< | >>
Источник: А. Г. Зрюмова, Е. А. Зрюмов, С. П. Пронин. ИНФОРМАТИКА. 2011

Еще по теме Объектно-ориентированная модель Python:

  1. Г.С.Иванова, Т.Н.Ничушкина, Е.К.Пугачев. Объектно- ориентированное программирование, 2001
  2. Прием анализа «объектных» психологических факторов.
  3. Правило анализа «объектных», обстановочных и субъектных психологических факторов
  4. ТЕСТ КРИТЕРИАЛЬНО - ОРИЕНТИРОВАННЫЙ
  5. 1. На кого ориентироваться?
  6. ПОДХОД ТЕЛЕСНО-ОРИЕНТИРОВАННЫЙ
  7. ТЕРАПИЯ ТЕЛЕСНО-ОРИЕНТИРОВАННАЯ
  8. 1.3. Город как феномен, как единство (взаимопереход) объектных и субъектных структур жизнедеятельности человека
  9. СМИ и информационный порядок в демократическом, гуманистически ориентированном обществе.
  10. Модель личности журналиста: профессиональные, социально-гражданские, нравственные, психологические и социально-демографические характеристики. Модификация общей модели для разных специализаций (репортер, аналитик, расследователь, публицист, ведущий-модератор и т.п.).
  11. 4. Помимо чувствительности вы должны ориентировать ребенка и на воспитание душевной стойкости и чувства собственного достоинства
  12. 4. Детей надо ориентировать на труд. Правда, помноженная на трудовое усилие, – едва ли не главный воспитатель личности
  13. Наша душа и есть то, на что надо ориентироваться, и что придаёт жизни счастливый смысл
  14. 9. Мы ориентировались на бедность, гордились бедностью и учили ненавидеть богатство. Педагогика Любви и Свободы ведет к богатству и изобилию
  15. МОДЕЛЬ ИНФОРМАЦИОННАЯ
  16. 2. Полезная модель.
  17. IV. 2. 4. Символическая модель психики человека
  18. Моделирование микростратегий. Модель ROLE
  19. Тема 6. Модели жизненного цикла
  20. 4.1. Теории, и модели