СР5
.docxМИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
федеральное государственное автономное образовательное учреждение
высшего образования
«НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ
ТОМСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
Инженерная школа новых производственных технологий
Направление подготовки: 12.03.02 Оптотехника
ООП: Оптико-электронные приборы и системы
САМОСТОЯТЕЛЬНАЯ РАБОТА №5
дисциплина "Основы программирования на Python"
Выполнила:
студентка _________________
Проверил:
преподаватель _________________ В. Петровский
Томск - 2023
ЦЕЛЬ РАБОТЫ: обрести навыки применения объектно-ориентированного программирования.
ЗАДАНИЕ:
Создать класс ThreeStates и определить у него поле state и метод hasstate. Атрибут state реализовать как приватный. В рамках метода реализовать переключение состояний: первое, второе, третье. Продолжительность первого состояния составляет 5 секунд, второго — 3 секунды, третьего — 2 секунды. Переключение между состояниями должно осуществляться только в указанном порядке (первое, второе, третье). Проверить работу примера, создав экземпляр и вызвав описанный метод.
Реализовать класс Volume, в котором определить защищенные поля: length (длина), width (ширина) и height (высота). Значения данных атрибутов должны передаваться при создании экземпляра класса. Определить метод расчета, использовав формулу: длина*ширина*высота. Проверить работу метода.
Реализовать базовый класс Employee, в котором определить атрибуты: name, patronymic, surname, salary. Последний атрибут должен быть защищенным и ссылаться на словарь, содержащий элементы: жалование и бонус, например, {"wage": wage, "bonus": bonus}. Создать класс Salary на базе класса Employee. В классе Salary реализовать методы получения полного имени сотрудника (get_full_name) и дохода с учетом премии (get_total_income). Создать экземпляры класса Salary, передать данные, проверить значения атрибутов, вызвать методы экземпляров.
Реализуйте базовый класс Airplane. У данного класса должны быть следующие атрибуты: speed, color, name, is_jet (булево). А также методы: go, stop, direction, которые должны сообщать, что самолет летит, не летит, повернул в полете. Опишите несколько дочерних классов самолетов: FastAirplane, Biplane, ArmyAirplane. Добавьте в базовый класс метод show_speed, который должен показывать текущую скорость самолета. Для класса FastAirplane переопределите метод show_speed. При значении скорости свыше 1300 (FastAirplane) должно выводиться сообщение о сверхзвуковой скорости. Создайте экземпляры классов, передайте значения атрибутов. Выполните доступ к атрибутам, выведите результат. Выполните вызов методов и также покажите результат.
Реализовать класс MathOperations. Определить в нем атрибуты first_num, second_num и метод calc. Метод выводит сообщение “Запуск операции”. Создать три дочерних класса my_sum (сложение), my_sub (вычитание), my_mult (умножение). В каждом из классов реализовать переопределение метода calc. Для каждого из классов метод должен выполнять математическую операцию, соответствующую названию класса. Создать экземпляры классов и проверить работу методов.
ХОД РАБОТЫ
Класс ThreeStates: этот класс моделирует объект, который может находиться в одном из трех состояний, переходя из одного в другое по вызову метода hasstate. При создании экземпляра класса ThreeStates, в конструкторе __init__ инициализируется приватная переменная __state со значением. Метод hasstate проверяет текущее состояние объекта и в зависимости от этого состояния:
Печатает "Первое состояние", задерживается на 5 секунд с помощью time.sleep(5) и переходит в состояние 2.
Печатает "Второе состояние", задерживается на 3 секунды и переходит в состояние 3.
Печатает "Третье состояние", задерживается на 2 секунды и переходит обратно в состояние 1.
Класс Volume: этот класс вычисляет объем параллелепипеда. Конструктор __init__ инициализирует приватные переменные, хранящие размеры: длину, ширину и высоту. Метод calculate_volume возвращает объем, вычисляемый путем перемножения этих значений.
Класс Employee и Salary: класс Employee хранит информацию о сотруднике, а Salary расширяет Employee, добавляя функциональность для работы с зарплатой. Employee инициализирует общую информацию о сотруднике. Salary наследует эту информацию и добавляет методы: get_full_name для возврата полного имени сотрудника и get_total_income для расчета общего дохода (заработная плата плюс бонус).
Класс Airplane и его производные классы: Airplane определяет базовые методы и свойства для самолетов, в то время как подклассы (FastAirplane, Biplane, ArmyAirplane) наследуют или модифицируют эти методы. Конструктор устанавливает атрибуты самолета. Методы класса, такие как go, stop, direction, и show_speed, выводят информацию о состоянии и поведении самолета. FastAirplane переопределяет метод show_speed, чтобы отобразить специальное сообщение для сверхзвуковых скоростей. Biplane и ArmyAirplane наследуют поведение Airplane без изменений.
Классы MathOperations и его подклассы: эти классы демонстрируют полиморфизм в действии: один и тот же метод calc делает разные вещи в разных подклассах. MathOperations служит базовым классом, не делая ничего конкретного. Его подклассы my_sum, my_sub, my_mult реализуют метод calc для выполнения сложения, вычитания и умножения соответственно.
РЕЗУЛЬТАТЫ:
Таким образом, в данной работе был реализован код, который демонстрирует различные основные аспекты объектно-ориентированного подхода и Python-специфический синтаксис ООП.
Также были получены навыки работы с понимание инкапсуляции и управления внутренним состоянием объекта, использование условных выражений для контроля потока выполнения, с модулем time для приостановки исполнения кода, создание методов класса для взаимодействия с атрибутами объекта, понимание и применение наследования в ООП, работа со строками и словарями в Python, создание методов для форматирования данных и выполнения вычислений, понимание и применение наследования и полиморфизма.