Файл: Введение в объектноориентированное программирование.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.12.2023
Просмотров: 138
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
Уровень: Программирование для начинающих
Созданиеклассовиобъектов.Урок2
Уровень: Программирование для начинающих
Конструкторкласса—метод init .Урок3
Уровень: Программирование для начинающих
Уровень: Программирование для начинающих
Уровень: Программирование для начинающих
Уровень: Программирование для начинающих
Форматирование строк документирования
Пример документированного исходного кода
ПерегрузкаоператороввООП.Урок10
Уровень: Программирование для начинающих
Особенностиобъектно-ориентированногопрограммирования.Урок11
Уровень: Программирование для начинающих
Идеи (принципы) объектно-ориентированного программирования
Создание классов-частей
Теперь приступим к созданию программы. В соответствие с изучаемой темой написать ее надо используя объектно-ориентированную парадигму программирования, да еще и применяя "композиционный подход" (насколько он здесь уместен не обсуждается :b).
Можно заметить, что фактически у нас есть три типа объектов - это объекты-окна, объекты-двери и объекты-комнаты. Получается три класса. Окна и двери являются частями помещения, а значит могут создаваться внутри класса «комнаты». Кроме того, для данной задачи существенное значение имеют только два свойства: длина и ширина. Поэтому классы «окна» и «двери» можно объединить в один. Понятно, что если для задачи были бы важны другие свойства (например, толщина стекла, материал), то возможно следовало бы создать два класса.
-
class Win_Door: -
definit(self,x,y): -
self.square = x * y
Здесь при вызове класса Win_Door будет автоматически создан атрибут square объекта, являющийся ссылкой на значение площади объекта.
Создание класса-контейнера
Можно по-разному реализовать класс-контейнер. Есть подозрение, что многое зависит от задачи, решаемой программистом, его мастерства и вкуса. Классы-части можно вызывать в методеinit, тем самым объекты-части будут автоматически создаваться при создании объекта- контейнера. Однако в данной задаче мы пойдем другим путем: окна и двери будут создаваться специальным для этих целей методом (будем считать, что так интересней). Также класс должен содержать метод для вычисления площади требуемых обоев (wallpapers). В конце можно добавить метод, в котором реализован вывод тех
или иных данных.
-
class Room: -
definit(self,x,y,z): -
self.square = 2 * z * (x + y) -
def win_door(self, d,e, f,g, m=1,n=1): -
self.window = Win_Door(d,e) -
self.door = Win_Door(f,g) -
self.numb_w = m -
self.numb_d = n -
def wallpapers(self): -
self.wallpapers = self.square - \ -
self.window.square * self.numb_w \ -
- self.door.square * self.numb_d -
def printer(self): -
print ("Площадь стен комнаты равна "\ -
,str(self.square)," кв.м") -
print ("Оклеиваемая площадь равна: ", \ -
str(self.wallpapers), " кв.м")
В методеinitсоздается атрибут square объекта представляющий собой площадь стен комнаты. Метод принимает три аргумента: длину, ширину и высоту помещения.
В методе win_door создаются два объекта: window и door, а также атрибуты numb_w и numb_d (в последних будут содержаться значения о количестве окон и дверей). Если при вызове данного метода в программе не будет указано количество окон и дверей, то по умолчанию будут подставлены значения равные 1.
Метод wallpapers вычисляет площадь_требуемых_обоев = площадь_комнаты — площадь_окна * количество_окон — площадь_двери * количество_дверей. В коде данная строка разбита на несколько строчек с помощью знака \ (так делают, если строка очень длинная). Также обратите внимание, как происходит обращение к свойствам square объектов-частей: указывается объект класса Room (в классе его заменяет self), далее объект-часть, и наконец, сам атрибут (свойство) объекта-части.
Метод printer просто выводит данные.
Создание объектов
После того, как классы созданы, посмотрим как это все работает.
-
Создаем объект класса Room:
1. labor34 = Room(5,4,2)
-
Создаем в помещении labor34 окна и двери:
1. labor34.win_door(1.5,1.5, 2,1, 2)
Обратите внимание, что количество дверей не указано, а значит их будет ровно 1.
-
Вычисляем метры обоев:
-
labor34.wallpapers()
-
Просим вывести, что получилось:
-
labor34.printer()
В результате работы метода printer интерпретатор должен выдать что-то вроде этого:
-
Площадь комнаты равна 36 кв.м -
Оклеиваемая площадь равна: 29.5 кв.м
Может показаться, что в программе всего один реальный объект — labor34. Однако это не так. Там есть еще объекты labor34.window и labor34.door. Чтобы в этом убедиться достаточно обратиться к их свойствам.
-
print(labor34.window.square) -
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)
-
labor34.wallpapers() -
labor34.printer() 5.
-
print(labor34.window.square) -
print(labor34.door.square)
… и предположим, что классы этого модуля будут использоваться в другом (основном) файле. Допустим, этот основной файл предоставляет интерфейс пользователю для ввода данных и получения результата. Основной файл должен быть сохранен в том же каталоге, что и файл rooms.py.
Первым делом, импортируем содержимое файла rooms.py
1. import rooms
Далее организуем запрос данных у пользователя, одновременно преобразовав данные в целочисленный тип (функция int):
-
print ("Введите размеры помещения (в метрах) ...") -
l = int(input ("длина: ")) -
w = int(input ("ширина: ")) -
h = int(input ("высота: ")) 5.
-
print ("Введите данные об оконных проемах (в метрах) ...") -
h_w = int(input ("высота: ")) -
w_w = int(input ("ширина: ")) -
m = int(input ("количество: ")) 10.