Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Современные средства разработки программного обеспечения. Учебное пособие

.pdf
Скачиваний:
1
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
51
Это концепция, которая связывает данные и методы объектов воедино. Методы манипулируют информацией и сохраняют ее в безопасности. При инкапсуляции со­стояние объекта в большинстве случаев закрыто от объектов, находящихся за преде­лами данного объекта.
Для закрытия атрибутов в Python приняты обозначения, работающие на уровне соглашений, зачастую вызывающие разночтение и споры у программистов по во­просу назначения атрибутов открытыми или закрытыми [15].
Можно выделить следующие рекомендации по обозначениям согласно автори­тетному руководству по Python, PEP 8:
− Всегда решайте, должны ли методы класса и переменные экземпляра (сов-
местно именуемые “атрибуты”) быть общедоступными или непубличными. Если со­мневаетесь, выберите непубличный; проще сделать его общедоступным позже, чем делать общедоступный атрибут непубличным. Используйте начальный символ под­черкивания для атрибутов, которые вероятно не будут использоваться извне и не яв­ляются частью обычного интерфейса "клиентского кода".
− Как правило, двойные начальные подчеркивания следует использовать
только для предотвращения конфликтов имен с атрибутами в классах, предназначен­ных для выделения в подклассы. Также существует практика использования двойного подчеркивания для вещей, которые являются чисто удобными внутри класса или мо­гут нанести значительный ущерб, если их случайно раскрыть.
При необходимости изменения состояния объекта или запроса текущего состо­яния объекта, используют специальные методы:
52
Рисунок 4.3 – Доступ к атрибутам через свойства
def name(self):
def name(self, value):
53
закрыто». Принцип "Открыто-закрыто" гласит, что класс должен быть открыт для расширения, но закрыт для модификации.
54
Class BaseClass:
{Body}
Class DerivedClass(BaseClass):
{Body}
переопределением.
55
Полиморфизм
56
4.3 Лабораторная работа
Цель. Изучить особенности объектно-ориентированного программирования в языке Python.
Задания
Для своего варианта индивидуального задания выполнить:
1) Проанализировать предметную область, выделить ее сущности (например,
для предметной области «Дорожное движение» выделенными сущностями будут – автомобиль, пешеход, автотрасса), которые будут реализованы в виде классов. Уточ­нить предложенную иерархию классов, определить необходимые характеристики классов.
2) Разработать иерархию классов c методами, закрытыми полями и свойствами
(реализация инкапсуляции) для каждого из определяемых классов.
a) Выделить атрибуты структур и классов, организовать к ним доступ через
методы и/или свойства.
b) Разработать основные методы классов, иллюстрирующие работу с ними.
3) Разработать программное средство на Python с учетом его назначения в со-
57
ответствии с индивидуальным вариантом исполнения, иллюстрирующее взаимодей­ствие классов предметной области. Реализовать ввод всех необходимых данных с кла­виатуры.
4) Протестировать работу программы.
5) Подготовить отчет в электронном виде.
4.3.1 Порядок выполнения лабораторной работы
1 Ознакомиться с целью, задачами, содержанием лабораторной работы, об- щими методическими указаниями к выполнению.
2 Установить и настроить интегрированную среду Visual Studio Code или PyСharm, следую инструкциям на официальном сайте разработчика.
3 Изучить правила работы с условными и циклическими операторами, функ- циями.
4 Подготовить исходные данные к работе.
5 В системе Visual Studio Code или PyСharm выполнить практические зада- ния согласно варианту, вариант выбирается по номеру списка студентов в группе.
6 Оформить отчет.
4.3.2 Индивидуальные варианты заданий к лабораторной работе
1 Предметная область: кадры производственного отдела. Классы: Служащий, персона, рабочий, инженер, производственный отдел
2 Предметная область: кадры предприятия. Классы: Рабочий, кадры, инженер, администрация, трудовой договор
3 Предметная область: промышленное изделие. Классы: Деталь, механизм, из- делие, узел, заказ
4 Предметная область: организации города. Классы: Организация, страховая компания, нефтегазовая компания, завод, каталог организаций
58
5 Предметная область: учет печатной продукции. Классы Журнал, книга, пе- чатное издание, учебник, план изданий
6 Предметная область: Контроль учебного процесса. Классы: Тест, экзамен,
выпускной экзамен, испытание, сессия (включить свойства: id, наименование, дисци­плина)
7 Предметная область: Населенные пункты России. Классы: Место, область, город, мегаполис, план путешествия
8 Предметная область: Товары в магазине. Классы: Игрушка, продукт, товар, молочный продукт, покупка
9 Предметная область: расчетные документы. Классы: Квитанция, накладная, документ, счет, реестр расходов (id, дата, наименование организации, сумма, внеш­ний ключ на подтверждающий документ)
10 Предметная область: Транспортные средства. Классы: Автомобиль, поезд, транспортное средство, экспресс, расходы на транспорт
11 Предметная область: Двигатели в автомобилях. Классы: Двигатель, двига­тель внутреннего сгорания, дизель, реактивный двигатель, план производства двига­телей
12 Предметная область: форма правления. Классы: Республика, монархия, ко­ролевство, государство, страна
13 Предметная область: животный мир. Классы: Млекопитающее, парноко- пытное, птица, животное. Предметная область, план закупок животных
14 Предметная область: Водный транспорт. Классы: Корабль, пароход, парус­ник, корвет. Предметная область: Водный транспорт, заявка на ремонт кораблей (в одной заявке может быть указан только один корабль)
4.4 Контрольные вопросы
59
60
5 Итераторы и генераторы
5.1 Итераторы
Во многих современных языках программирования используют такие сущно­сти как итераторы. Основное их назначение – это упрощение навигации по элементам объекта, который, как правило, представляет собой некоторую коллекцию (список, словарь и т.п.).
Итерируемый объект – это объект, который позволяет поочередно обойти свои элементы и может быть преобразован к итератору.
Итератор – это объект, который поддерживает функцию next() для перехода к следующему элементу коллекции.
iter() и next()
Итерируемые объекты содержат в себе объект итератор, для того, чтобы его по­лучить необходимо использовать функцию iter(), а для извлечения следующего эле­мента из итератора – функцию next().
Синтаксис
iter(object)
iter(callable, sentinel)
object: объект, итератор которого должен быть создан. Это может быть объект коллекции, такой как список или кортеж, или объект, определенный пользователем (с использованием OOPS).
callable: представляет вызываемый объект, может быть функцией, методом или лямбда;
sentinel - значение, при котором итерация должна быть завершена, значение sentinel представляет конец повторяемой последовательности.
Итерируемый объект Python и итератор Python — это разные вещи. Основное различие между ними заключается в том, что итерируемый объект в Python не может сохранять состояние итерации, тогда как в итераторах сохраняется состояние теку­щей итерации. Каждый итератор также является итерируемым объектом, но не каж­дый итерируемый объект является итератором в Python [20].
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]