Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Современные средства разработки программного обеспечения. Учебное пособие
.pdf
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].
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
