Файл: Введение в объектноориентированное программирование.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.12.2023
Просмотров: 142
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
Уровень: Программирование для начинающих
Созданиеклассовиобъектов.Урок2
Уровень: Программирование для начинающих
Конструкторкласса—метод init .Урок3
Уровень: Программирование для начинающих
Уровень: Программирование для начинающих
Уровень: Программирование для начинающих
Уровень: Программирование для начинающих
Форматирование строк документирования
Пример документированного исходного кода
ПерегрузкаоператороввООП.Урок10
Уровень: Программирование для начинающих
Особенностиобъектно-ориентированногопрограммирования.Урок11
Уровень: Программирование для начинающих
Идеи (принципы) объектно-ориентированного программирования
10. t1 = T1()
11. t2 = T2()
-
t1.total(45) -
t2.total(45) -
print (t1.total) #Вывод:55 -
print (t2.total) #Вывод:2
Задание. Напишите программу, запрашивающую у пользователя ввод числа. Если число принадлежит диапазону от-100 до 100, тосоздается объект одного класса, во всех остальных случаях создается объект другого класса. В обоих классах должен быть метод-конструкторinit,который впервом классевозводитчисловквадрат, а во-втором-умножаетнадва.
Ответ:
-
class One: -
definit(self,a): -
self.a = a ** 2 4.
-
class Two: -
definit(self,a): -
self.a = a * 2 8.
-
a = input ("введите число ") -
a = int(a)
11. if -100 < a < 100:
-
obj = One(a) -
else: -
obj = Two(a) 15.
16. print (obj.a)
Переопределение методов
Использование полиморфизма при наследовании классов позволяет переопределять методы суперклассов их подклассами. Например, может возникнуть ситуация, когда все подклассы реализуют определенный метод из суперкласса, и лишь один подкласс должен иметь его другую реализацию. В таком случае метод переопределяется в подклассе. Пример:
-
class Base: -
definit(self,n): -
self.numb = n -
def out(self): -
print (self.numb) 6.
-
class One(Base): -
def multi(self,m): -
self.numb *= m 10.
-
class Two(Base): -
def inlist(self): -
self.inlist = list(str(self.numb)) -
def out(self):
15. i = 0
-
while i < len(self.inlist): -
print (self.inlist[i])
18. i += 1
19.
-
obj1 = One(45) -
obj2 = Two('abc') 22.
-
obj1.multi(2) -
obj1.out() #Выводчисла90 -
-
obj2.inlist() -
obj2.out() #Выводвстолбикбуквa,b,c
В данном случае объект obj1 использует метод out из cуперкласса Base, а obj2 – из своего класса Two. Атрибуты ищутся «снизу вверх»: сначала в классах, затем суперклассах. Поскольку для obj2 атрибут out уже был найден в классе Two, то из класса Base он не используется. Другими словами, класс Two переопределят атрибут суперкласса Base.
Расширение методов
При ООП может возникнуть ситуация, когда метод суперкласса в принципе подходит для реализации того или иного действия с объектами класса, однако требует небольших изменений. В таком случае можно использовать так называемое расширение метода, когда из тела метода класса вызывается метод суперкласса и дописываются дополнительные инструкции. В примере ниже в методе класса Subclass вызывается метод другого класса (в данном случае его суперкласса; однако может вызываться метод, не принадлежащий
собственному суперклассу):
-
class Base: -
definit(self,N): -
self.numb = N -
def out(self): -
self.numb /= 2 -
print (self.numb) 7.
-
class Subclass(Base): -
def out(self): -
print ("\n ") -
Base.out(self) -
print (" \n") -
14. i = 0
15. while i < 10:
16. if 4 < i < 7:
-
obj = Subclass(i) -
else: -
obj = Base(i) 20. i += 1
21. obj.out()
Вывод
Полиморфизм в объектно-ориентированном программировании дает возможность реализовывать так называемые единые интерфейсы для объектов различных классов. Имеется ввиду, что если есть методы с одинаковыми названиями (или операции, обозначаемая одинаковыми знаками, как будет показано в уроке №7) для всех объектов, то это позволяет писать более очевидный исходный код. Например, разные классы могут предусматривать различный способ вывода той или иной информации объектов. Однако единое название для всех объектов метода «вывода» позволит не запутать программу, сделать ее более очевидной.
Переопределение методов в подклассах (а также их расширение) позволяет специализировать ранее написанный исходный код, не меняя его в суперклассах, где обычно требуется оставить код в неизменном виде для других подклассов.
Практическая работа
Напишите небольшую объектно-ориентированную программку, демонстрирующую такие свойства ООП как наследование и полиморфизм.
Композиционныйподходвобъектно-ориентированномпрограммировании.Урок7
Методическая разработка урока
Элективный курс: Введение в объектно-ориентированноепрограммированиенаPython
Уровень: Программирование для начинающих
Еще одной особенностью объектно-ориентированного программирования является возможность реализовывать так называемый композиционный подход. Заключается он в следующем: есть класс-контейнер, который включает в себя вызовы других классов. В результате получается, что создавая объект класса-контейнера, мы одновременно создаем и объекты включенных в него классов.
Чтобы понять зачем нужна композиция в программировании, можно как всегда провести аналогию с реальным миром. Так подавляющее большинство природных, биологических и технических объектов состоят из других более простых частей, по своей сути, также являющихся объектами. Например, человек состоит из различный органов (сердце, кожа и др.), компьютер — из различного "железа" (процессор, ОЗУ, диск и т.д.).
Следует понимать, что "композиция" и "наследование" - достаточно разные свойства реальных и виртуальных систем. Наследование предполагает принадлежность к какой-то общности (похожесть), а композиция — формирование целого из частей.
Еще раз: при создании объекта, принадлежащего
классу-контейнеру, автоматически создаются объекты-части, из которых он как бы состоит. Свойства и методы объектов частей определяются в их классах. Программисты могут создавать целые коллекции встраиваемых классов.
Рассмотрим использование композиции при программировании на Python с помощью конкретного примера.
Описание задачи
Допустим, нам требуется написать программу, которая вычисляет площадь обоев для оклеивания комнаты определенных пользователем размеров. При этом необходимо учитывать, что окна, двери, пол и потолок оклеивать не надо.
Для начала решим данную задачу логически. Комната — это прямоугольный параллелепипед, состоящий из шести прямоугольников. Его площадь представляет собой сумму площадей составляющих его прямоугольников. Площадь прямоугольника равна произведению его длины на ширину.
Обои клеятся только на стены, следовательно площади верхнего и нижнего прямоугольников нам не нужны. Из рисунка можно заключить, что площадь одного прямоугольника равна x * z, второго – у * z. Противоположные прямоугольники равны, значит общая площадь четырех прямоугольников будет равна S = 2xz + 2уz = 2z(x+y). Потом из этой площади надо будет вычесть общую площадь дверей и окон. Двери и окна — это прямоугольники (как вычислить их площадь должно быть понятно).