10.5. Самостоятельная работа¶
Примечание
При выполнении заданий используйте заготовки решений: ->
Репозиторий.
Подробнее: см. Цикл выполнения и защиты заданий.
Предупреждение
В данном разделе НЕ должны использоваться сторонние модули для реализации заданной функциональности. Например, при реализации класса Дата
не нужно использовать готовый модуль datetime
и т.д.
10.5.1. Простой класс¶
Выберите класс под номером ЦИФРА_СБ + 1
(Таблица 10.5.1).
№ п/п |
Наименование класса |
Описание |
---|---|---|
1 |
|
Геометрический вектор на плоскости |
2 |
|
Математический интервал |
3 |
|
Комплексное число |
4 |
|
Время |
5 |
|
Дата/Время |
6 |
|
Денежная единица |
7 |
|
Стек |
8 |
|
Очередь |
9 |
|
Дата |
10 |
|
Обыкновенная дробь |
Прежде чем перейти к написанию кода:
изучите предметную область объекта и доступные операции;
для каждого поля и метода продумайте его область видимости, а также необходимость использования свойств.
При реализации класс должен содержать:
специальные методы:
__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).
№ п/п |
Классы |
Методы базового класса |
---|---|---|
1 |
Плеер, АудиоПлеер, ВидеоПлеер, DvdПлеер |
запустить(), остановить() |
2 |
ПищущаяПринадлежность, Карандаш, Ручка, ГелеваяРучка |
писать() |
3 |
ТранспортноеСредство, ВодноеТС, КолесноеТС, Автомобиль |
ехать() |
4 |
ДенежныйПеревод, ПочтовыйПеревод, БанковскийПеревод, ВалютныйПеревод |
выполнить() |
5 |
ПроезднойБилет, БезлимитныйБилет, БилетСОграничением, БилетСОграничениемПоездок |
списать_поездку() |
Далее:
выстройте классы в иерархию, продумайте их общие и отличительные характеристики и действия;
добавьте собственную реализацию методов базового класса в каждый из классов, предусмотрев:
необходимые параметры для базовых методов (например, в метод воспроизведения в Dvd-плеере можно передать абстрактный DVD-диск);
необходимые поля для функционирования базовых методов (например, при остановке Dvd-плеера имеет смысл сохранить текущую позицию воспроизведения); классы должны содержать как минимум по одному общедоступному, не общедоступному и закрытому полю/методу;
вывод на экран работы метода (например, вызов метода остановки в Dvd-плеере должен сообщать на экране, что плеер установлен на определенной позиции).
по желанию добавьте собственные методы в классы иерархии.
Реализуйте все классы в отдельном модуле, а также создайте main.py
, который бы тестировал все его возможности.
По согласованию иерархия может быть расширена или выбрана самостоятельная индивидуальная тема для данной задачи.