10.5. Самостоятельная работа

Примечание

При выполнении заданий используйте заготовки решений: -> Google Диск.

Подробнее: см. Цикл выполнения и защиты заданий.

Предупреждение

В данном разделе НЕ должны использоваться сторонние модули для реализации заданной функциональности. Например, при реализации класса Дата не нужно использовать готовый модуль datetime и т.д.

10.5.1. Простой класс

Выберите класс под номером ЦИФРА_СБ + 1 (Таблица 10.5.1).

Таблица 10.5.1 - Классы и их описание (простой класс)
№ п/п Наименование класса Описание
1 Vector Геометрический вектор на плоскости
2 LineSegment Математический интервал
3 Complex Комплексное число
4 Time Время
5 DateTime Дата/Время
6 Money Денежная единица
7 Stack Стек
8 Queue Очередь
9 Date Дата
10 Fraction Обыкновенная дробь

Прежде чем перейти к написанию кода:

  • изучите предметную область объекта и доступные операции;
  • для каждого поля и метода продумайте его область видимости, а также необходимость использования свойств.

При реализации класс должен содержать:

  • специальные методы:

    • __init__(self, ...) - инициализация с необходимыми параметрами;
    • __str__(self) - представление объекта в удобном для человека виде;
    • специальные методы для возможности сложения, разности и прочих операций, которые класс должен поддерживать;
  • методы класса:

    • from_string(cls, str_value) - создает объект на основании строки str_value;
  • поля, методы, свойства:

    • поля, необходимые для выбранного класса;
    • метод save(self, filename) - сохраняет объект в JSON-файл filename;
    • метод load(self, filename) - загружает объект из JSON-файла filename;
    • прочие методы (не менее 3-х) и свойства, выявленные на этапе изучения класса.

Реализуйте класс в отдельном модуле, а также создайте main.py, который бы тестировал все его возможности.

10.5.2. Класс-контейнер

Создайте класс-контейнер, который будет содержать набор объектов из предыдущей задачи. Например, класс VectorCollection будет содержать объекты класса Vector.

Для класса-контейнера предусмотрите:

  • специальные методы:

    • __init__(self, ...) - инициализация с необходимыми параметрами;
    • __str__(self) - представление объекта в удобном для человека виде;
    • __getitem__() - индексация и срез для класса-контейнера.
  • поля, методы, свойства:

    • поле _data - содержит набор данных;
    • метод add(self, value) - добавляет элемент value в контейнер;
    • метод remove(self, index) - удаляет элемент из контейнера по индексу index;
    • метод save(self, filename) - сохраняет объект в JSON-файл filename;
    • метод load(self, filename) - загружает объект из JSON-файла filename.

10.5.3. Иерархия классов

Выберите вариант под номером (ЦИФРА_СБ % 5) + 1 (Таблица 10.5.2).

Таблица 10.5.2 - Иерархия классов
№ п/п Классы Методы базового класса
1 Плеер, АудиоПлеер, ВидеоПлеер, DvdПлеер запустить(), остановить()
2 ПищущаяПринадлежность, Карандаш, Ручка, ГелеваяРучка писать()
3 ТранспортноеСредство, ВодноеТС, КолесноеТС, Автомобиль ехать()
4 ДенежныйПеревод, ПочтовыйПеревод, БанковскийПеревод, ВалютныйПеревод выполнить()
5 ПроезднойБилет, БезлимитныйБилет, БилетСОграничением, БилетСОграничениемПоездок списать_поездку()

Далее:

  • выстройте классы в иерархию, продумайте их общие и отличительные характеристики и действия;

  • добавьте собственную реализацию методов базового класса в каждый из классов, предусмотрев:

    • необходимые параметры для базовых методов (например, в метод воспроизведения в Dvd-плеере можно передать абстрактный DVD-диск);
    • необходимые поля для функционирования базовых методов (например, при остановке Dvd-плеера имеет смысл сохранить текущую позицию воспроизведения); классы должны содержать как минимум по одному общедоступному, не общедоступному и закрытому полю/методу;
    • вывод на экран работы метода (например, вызов метода остановки в Dvd-плеере должен сообщать на экране, что плеер установлен на определенной позиции).
  • по желанию добавьте собственные методы в классы иерархии.

Реализуйте все классы в отдельном модуле, а также создайте main.py, который бы тестировал все его возможности.

По согласованию иерархия может быть расширена или выбрана самостоятельная индивидуальная тема для данной задачи.