Файл: Введение в объектноориентированное программирование.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 11.12.2023

Просмотров: 152

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Урок - лекция

Уровень: Программирование для начинающих

Созданиеклассовиобъектов.Урок2

Методическая разработка урока

Уровень: Программирование для начинающих

Создание классов:

Создание объектов:

Self:

Первая ОО-программа:

Усложняем программу:

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

Конструкторкласса—метод init .Урок3

Методическая разработка урока

Уровень: Программирование для начинающих

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

Методическая разработка урока

Уровень: Программирование для начинающих

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

Методическая разработка урока

Полиморфизм

Переопределение методов

Вывод

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

Методическая разработка урока

Уровень: Программирование для начинающих

Описание задачи

Создание классов-частей

Создание класса-контейнера

Создание объектов

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

Модулииихимпорт. Урок8

Методическая разработка урока

Уровень: Программирование для начинающих

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

Методическая разработка урока

doc- строки документации

Форматирование строк документирования

Функция help

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

Пример документированного исходного кода

ПерегрузкаоператороввООП.Урок10

Методическая разработка урока

Уровень: Программирование для начинающих

Особенностиобъектно-ориентированногопрограммирования.Урок11

Методическая разработка урока

Уровень: Программирование для начинающих

Идеи (принципы) объектно-ориентированного программирования

Преимущества ООП

Особенность ООП

Особенности ООП в Python

Методическая разработка урока

Уровень: Программирование для начинающих

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

Форматирование строк документирования


Обратите внимание, когда мы вызывали методdoc для объектов, то использовали встроенную функцию print. Зачем? Ведь в интерактивном режиме вывод работает и без print. Однако если при вызове методаdoc__ не использовать функцию print, то вывод не отформатируется, а будет выглядеть как в исходном коде:


  1. >>> str.doc

  2. "str(string[, encoding[, errors]]) -> str\n\nCreate a new string object from the given encoded string.\nencoding defaults to the current default string encoding.\nerrors can be 'strict', 'replace' or 'ignore' and defaults to 'strict'."


Обратите внимание на сочетание символов \n. Оно обозначает переход на новую строку. Вообще оформление строк документации должно соответствовать определенному стандарту.

Функция help


Еще более интересный способ получить информацию о модуле или его частях — это использование встроенной функции help. Она выводит текстовый отчет о переданном ей в качестве аргумента объекте. Этот отчет включает не только строки документации, но и структуру запрошенной части кода. т.е. применив функцию help по отношению к объектам мы получим еще и информацию о внутренних функциях и классах.

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


  1. Напишите строки документации к программе, созданной на 7 уроке (вычисление площади оклеивания) . Поместите следующую информацию:

  • Модуль. Для чего предназначена данная программа.

  • Классы. Для чего предназначены, какие аргументы передаются методу init.

  • Методы (кроме init). Назначение, описание входных и выходных данных.


  • Используя метод doc, вызовите в интерактивном режиме строки документации для различных объектов модуля. Предварительно необходимо импортировать модуль (чтобы импортировать его без проблем, поместите файл в каталог установки python).

  • Примените функцию help для данного модуля. Например, если имя модуля rooms, то вызов справки по нему будет выглядеть так: help (rooms).



    Пример документированного исходного кода


    1. "It is the program for definition of quantity of wall-paper" 2.

    3. class Win_Door:

    4. """

    1. Class Win_Door calculates the area of a rectangular.

    2. Methodinitaccepts two parameters: length and width. 7. """

    1. definit(self,x,y):

    2. self.square = x * y 10.

    11. class Room:

    12. """

    1. Class Room is intended for definition of the pasted over area of a room.

    2. Methodinitaccepts three arguments (length, width and height). 15. """

    1. definit(self,x,y,z):

    2. self.square = 2 * z * (x + y)

    3. def win_door(self, d,e, f,g, m=1,n=1):

    19. """

    1. The first pair parameters - the sizes of a window,

    2. the second pair - the sizes of a door,

    3. the fifth and sixth parameters - quantity of windows and doors accordingly 23. """

    1. self.window = Win_Door(d,e)

    2. self.door = Win_Door(f,g)

    3. self.numb_w = m

    4. self.numb_d = n

    5. def wallpapers(self):

    29. """

    30. This method calculates the pasted over area 31. """

    1. self.wallpapers = self.square - \

    2. self.window.square * self.numb_w \

    3. - self.door.square * self.numb_d

    4. def printer(self):

    36. """

    37. Displays the information 38. """

    1. print ("Площадь стен комнаты равна "\

    2. ,str(self.square)," кв.м")

    3. print ("Оклеиваемая площадь равна: ", \

    4. str(self.wallpapers), " кв.м")


    ПерегрузкаоператороввООП.Урок10

    Методическая разработка урока


    Элективный курс: Введение в объектно-ориентированноепрограммированиенаPython

    Уровень: Программирование для начинающих


    До этого мы говорили только о классах и объектах, которые создает программист (пользовательские классы). Однако Python настолько объектно-ориентированный язык, что в нем любые строка, число, список и др. являются по сути объектами, принадлежащими встроенным классам (типам данных): строкам, числам и др. Т. е. типы данных это встроенные классы, а любые данные — это объекты.
    Объектно-ориентированное программирование подразумевает не только наличие объектов, но и их взаимодействие между собой. Поэтому важно, чтобы к объектам разных классов можно было применить одну и туже операцию (например, сложение).
    Для пользовательских классов предусмотрены специальные методы, позволяющие объектам данных классов участвовать в таких привычных операциях как сложение, вычитание, умножение, деление (+ - * /), а также во многих других. Другими словами, смысл (то, что он делает) знака + (или любого другого оператора) зависит от того, к каким объектам он применяется. Это называется перегрузкой операторов. В классах перегруженные операторы описываются с помощью специальных зарезервированных методов, которые в начале и в конце имеют по два знака подчеркивания. В уроке рассматриваются лишь некоторые из них. Кроме того, ранее был уже рассмотрен один такой метод — конструкторinit, который автоматически вызывается при создании объектов класса.
    Рассмотрим пример перегрузки операторов.


    1. class Newclass:

    2. definit(self, base):

    3. self.base = base

    4. defadd(self, a):

    5. self.base = self.base + a

    6. defstr(self):

    7. return "%s !!! " % self.base 8.


    9. a = Newclass(10) 10. a + 20

    11. print (a) 12.

    1. b = Newclass("yes")

    2. b + "terday"

    3. print (b)



    17. c = Newclass([2,6,3]) 18. c + [7, 1]

    19. print (c)
    В данном примере используется два метода (исключаяinit) перегрузки операторов:addиstr. Методaddвызывается в том случае, когда объект данного класса участвует в операции сложения (для чисел), конкатенации (для строк) и объединения (для списков). Методstr вызывается, когда объект передается в качестве аргумента встроенной функции print (на самом деле не только ей) и представляет данные в виде строки.
    Результат работы скрипта представленного выше будет таким:
    1. 30 !!!

    2. yesterday !!!

    3. [2, 6, 3, 7, 1] !!!
    Задание. Спешите пример, посмотрите как он работает. Дополните класс методамиmul (вызывается при использовании объекта в операциях умножения) иsub (вычитание). Вызовите данные методы с помощью соответствующих операций с объектами. Для каких объектов невозможно использовать методsub?

    call- перегрузка вызова функции
    Методcallавтоматически вызывается, когда к объекту обращаются как к функции. Например, здесь во второй строке произойдет вызов методаcallнекогоКласса:
    объект = некийКласс() объект(*возможные аргументы+)
    Другими словами, метод callпозволяет объектам вести себя как функции. Пример:

    1. class Changeable:

    2. definit(self, color):

    3. self.color = color

    4. defcall(self, newcolor):

    5. self.color = newcolor

    6. defstr(self):

    7. return "%s" % self.color 8.

    1. canvas = Changeable("green")

    2. frame = Changeable("blue") 11.

    1. canvas("red")

    2. frame("yellow") 14.

    15. print (canvas, frame)
    В этом примере с помощью конструктора