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

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

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

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

Добавлен: 11.12.2023

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

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

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

СОДЕРЖАНИЕ

Урок - лекция

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

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

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

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

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

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

Self:

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

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

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

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

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

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

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

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

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

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

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

Полиморфизм

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

Вывод

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Функция help

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

Можно заметить, что фактически у нас есть три типа объектов - это объекты-окна, объекты-двери и объекты-комнаты. Получается три класса. Окна и двери являются частями помещения, а значит могут создаваться внутри класса «комнаты». Кроме того, для данной задачи существенное значение имеют только два свойства: длина и ширина. Поэтому классы «окна» и «двери» можно объединить в один. Понятно, что если для задачи были бы важны другие свойства (например, толщина стекла, материал), то возможно следовало бы создать два класса.


  1. class Win_Door:

  2. definit(self,x,y):

  3. self.square = x * y


Здесь при вызове класса Win_Door будет автоматически создан атрибут square объекта, являющийся ссылкой на значение площади объекта.

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


Можно по-разному реализовать класс-контейнер. Есть подозрение, что многое зависит от задачи, решаемой программистом, его мастерства и вкуса. Классы-части можно вызывать в методеinit, тем самым объекты-части будут автоматически создаваться при создании объекта- контейнера. Однако в данной задаче мы пойдем другим путем: окна и двери будут создаваться специальным для этих целей методом (будем считать, что так интересней). Также класс должен содержать метод для вычисления площади требуемых обоев (wallpapers). В конце можно добавить метод, в котором реализован вывод тех
или иных данных.


  1. class Room:

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

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

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

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

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

  7. self.numb_w = m

  8. self.numb_d = n

  9. def wallpapers(self):

  10. self.wallpapers = self.square - \

  11. self.window.square * self.numb_w \

  12. - self.door.square * self.numb_d

  13. def printer(self):

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

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

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

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


В методеinitсоздается атрибут square объекта представляющий собой площадь стен комнаты. Метод принимает три аргумента: длину, ширину и высоту помещения.

В методе win_door создаются два объекта: window и door, а также атрибуты numb_w и numb_d (в последних будут содержаться значения о количестве окон и дверей). Если при вызове данного метода в программе не будет указано количество окон и дверей, то по умолчанию будут подставлены значения равные 1.
Метод wallpapers вычисляет площадь_требуемых_обоев = площадь_комнаты — площадь_окна * количество_окон — площадь_двери * количество_дверей. В коде данная строка разбита на несколько строчек с помощью знака \ (так делают, если строка очень длинная). Также обратите внимание, как происходит обращение к свойствам square объектов-частей: указывается объект класса Room (в классе его заменяет self), далее объект-часть, и наконец, сам атрибут (свойство) объекта-части.
Метод printer просто выводит данные.


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


После того, как классы созданы, посмотрим как это все работает.


  1. Создаем объект класса Room:


1. labor34 = Room(5,4,2)


  1. Создаем в помещении labor34 окна и двери:


1. labor34.win_door(1.5,1.5, 2,1, 2)
Обратите внимание, что количество дверей не указано, а значит их будет ровно 1.


  1. Вычисляем метры обоев:




    1. labor34.wallpapers()




  1. Просим вывести, что получилось:




    1. labor34.printer()


В результате работы метода printer интерпретатор должен выдать что-то вроде этого:


  1. Площадь комнаты равна 36 кв.м

  2. Оклеиваемая площадь равна: 29.5 кв.м

Может показаться, что в программе всего один реальный объект — labor34. Однако это не так. Там есть еще объекты labor34.window и labor34.door. Чтобы в этом убедиться достаточно обратиться к их свойствам.


  1. print(labor34.window.square)

  2. print(labor34.door.square)



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


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

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

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


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

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


На прошлом уроке нами была написана "серьезная" программа, которую могут использовать другие программисты. Однако как? Просто копировать код и вставлять в свои скрипты? Или есть
более экономный способ смысле уменьшения объема кода и удобства его использования)?
При создании крупных программ оказался выгодным так называемый модульный принцип организации, когда есть основной файл с частью кода программы, к которому подсоединяется (в который импортируется) содержимое других файлов. Когда исходный код основного файла транслируется в машинный код, то импортируемые файлы также выполняются как и код основного файла.


Такой способ организации программы позволяет изолировать часто используемый код в файл-модуль, а затем импортировать его в другие файлы без копирования кода. Но это далеко не единственное преимущество модульного принципа организации программы.
Так как же импортировать содержимое одного файла в другой в языке программирования Python? Существует два основных способа: инструкция import и инструкция from. Первая инструкция запускает (интерпретирует) файл-модуль полностью, при этом для доступа к переменным (атрибутам) модуля из основного файла следует указывать имя модуля впереди требуемого атрибута: module.attribute (так называемая, точечная нотация). Инструкция from передает интерпретатору лишь указанные имена из файла-модуля, однако при доступе к этим переменным не надо указывать имя модуля. Первый способ хорош, если предстоит пользоваться содержимым почти всего модуля, второй если будут востребованы одна-две функции или класс из модуля. В примере данного урока мы воспользуемся инструкцией import.
Импорт в языке программирования Python осуществляется следующим образом: после слова import пишется имя импортируемого модуля. Модуль и файл в Python понятия почти не различимые. Файлы с кодом на языке Python обычно
имеют расширение .py, однако в инструкции

import расширение не указывается. Например, если мы имеем файл-модуль scale.py, то импортировать его в другой файл следует так: import scale.
Где должен располагаться модуль? В принципе, где угодно, т.к. можно "вручную" настроить интерпретатор так, что он будет искать там, где пожелает программист. Однако, если ничего не настраивать, то интерпретатор Python найдет файлы, если их расположить например, в каталоге, куда установлен Python или в том же каталоге, где и файл, в который осуществляется импорт. Этим последним вариантом мы и воспользуемся.
Итак, у нас есть файл с кодом, позволяющим вычислять оклеиваемую площадь помещения (урок №7). Пусть он называется rooms.py. Кроме того, удалим из него "код тестирования"
1. labor34 = Room(5,4,2)

2. labor34.win_door(1.5,1.5, 2,1, 2)

  1. labor34.wallpapers()

  2. labor34.printer() 5.

  1. print(labor34.window.square)

  2. print(labor34.door.square)


… и предположим, что классы этого модуля будут использоваться в другом (основном) файле. Допустим, этот основной файл предоставляет интерфейс пользователю для ввода данных и получения результата. Основной файл должен быть сохранен в том же каталоге, что и файл rooms.py.
Первым делом, импортируем содержимое файла rooms.py
1. import rooms
Далее организуем запрос данных у пользователя, одновременно преобразовав данные в целочисленный тип (функция int):


  1. print ("Введите размеры помещения метрах) ...")

  2. l = int(input ("длина: "))

  3. w = int(input ("ширина: "))

  4. h = int(input ("высота: ")) 5.

  1. print ("Введите данные об оконных проемах метрах) ...")

  2. h_w = int(input ("высота: "))

  3. w_w = int(input ("ширина: "))

  4. m = int(input ("количество: ")) 10.