Similar presentations:
Объектно-ориентирование программирование в Python. Классы и объекты
1.
Объектно-ориентированиепрограммирование в Python.
Классы и объекты
2.
3.
Объектно-ориентированноепрограммирование (ООП) — парадигма
программирования, в которой основными концепциями
являются понятия объектов и классов. Объектноориентированное программирование (ООП)
сосредоточено на создании объектов.
Объект - это программная сущность, которая содержит
данные и процедуры. Находящиеся внутри объекта
данные называются атрибутами данных. Это просто
переменные, которые ссылаются на данные.
4.
Выполняемые объектомпроцедуры называются
методами.
Методы объекта - это функции,
которые выполняют операции с
атрибутами данных. В
концептуальном плане объект
представляет собой автономную
единицу, которая состоит из
атрибутов данных и методов,
которые оперируют атрибутами
данных.
5.
ООП решает проблему разделения программного кода и данных посредствоминкапсуляции и сокрытия данных. Инкапсуляция обозначает объединение
данных и программного кода в одном объекте. Сокрытие данных связано со
способностью объекта скрывать свои атрибуты данных от программного кода,
который находится за пределами объекта. Только методы объекта могут
непосредственно получать доступ и вносить изменения в атрибуты данных
объекта.
Объект, как правило, скрывает свои
данные, но позволяет внешнему коду
получать доступ к своим методам. Как
показано на рис., методы объекта
предоставляют программным
инструкциям за пределами объекта
косвенный доступ к атрибутам данных
объекта.
6.
Возможность многократного использования объектаВ дополнение к решению проблем разделения программного
кода и данных, применение ООП также всецело
поддерживалось трендом на многократное использование
объектов.
Объект не является автономной программой. Напротив, он
используется программами, которым нужны его услуги.
7.
Пример объекта из повседневной жизни8.
Пример объекта из повседневной жизни9.
10.
Классы11.
Классы12.
Классы13.
Классы14.
Создание классов15.
Определение классов16.
Пример17.
Пример:18.
Определение классов19.
(не полная программа):20.
21.
22.
23.
24.
25.
Для того чтобыпродемонстрировать
класс Coin, необходимо
написать законченную
программу, которая его
использует для создания
объекта.
Определение класса Coin
находится в строках 6-29,
а главная функция
расположена в строках
32-44.
26.
27.
28.
29.
30.
Сокрытие атрибутовАтрибуты данных объекта должны быть приватными с тем, чтобы только методы объекта
имели к ним непосредственный доступ. Такой подход защищает атрибуты данных от
случайного повреждения. Однако в классе Coin, который был показан в предыдущем
примере, атрибут sideup не является приватным. К нему могут получать непосредственный
доступ инструкции, отсутствующие в методе класса Coin.
Следующая программа демонстрирует соответствующий пример. В ней строки 1-30
содержат класс Coin, и они совпадают со строками 1-30 в предыдущей программе.
31.
32.
Если мы хотим сымитировать подбрасывание монеты по-настоящему, то надосделать так, чтобы код за пределами класса не имел возможности менять результат
метода toss (). Для того чтобы этого не происходило, следует сделать атрибут
sideup приватным. В Python атрибут можно скрыть, если предварить его имя двумя
символами подчеркивания. Если изменить имя атрибута sideup на _ sideup, то
программный код за пределами класса Coin не сможет получать к нему доступ.
В следующей программе приведена новая версия класса Coin с этим внесенным
изменением:
33.
34.
35.
36.
Хранение классов в модуляхПримеры программ, которые были рассмотрены ранее содержали
определение класса Coin в том же файле, что и программные инструкции,
которые используют класс Coin. Этот подход хорошо работает с
небольшими программами, содержащими всего один или два класса.
Однако по мере привлечения программами все большего количества
классов возрастает потребность в упорядочении этих классов.
Программисты обычно упорядочивают свои определения классов,
размещая их в модулях. Затем модули можно импортировать в любые
программы, которым требуется использовать содержащиеся в них классы.
Например, предположим, что мы решаем сохранить класс Coin в модуле
coin.
В программе далее приведено содержимое файла coin.py. Затем, когда нам
нужно применить класс coin в программе, мы импортируем модуль coin.
37.
Хранение классов в модулях38.
Хранение классов в модулях39.
КлассBankAccount
В программе представлен класс BankAccount (Банковский счет), сохраненный в модуле bankaccount.
Объекты, которые создаются на основе этого класса, имитируют банковские счета, позволяя иметь
начальный остаток, вносить вклады, снимать суммы со счета и получать текущий остаток на счете.
40.
Класс BankAccount41.
Класс BankAccountПрограмма демонстрирует применение этого класса:
продолжение..
42.
Класс BankAccount43.
Класс BankAccount44.
Метод _str_()45.
Метод _str_()Вывод на экран состояния объекта является широко распространенной задачей. Она настолько
распространена, что многие программисты оснащают свои классы методом, который возвращает
строковое значение, содержащее состояние объекта. В Python этому методу присвоено специальное
имя _str_.
В следующей программе представлен класс BankAccount с добавленным в него методом _ str_() ,
который расположен в строках 36-37. Он возвращает строковое значение, сообщающее остаток на
банковском счете.
продолжение…
46.
Метод _str_()47.
Метод _str_()48.
Метод _str_()49.
Метод _str_()50.
Работа с экземплярамиКаждый экземпляр класса имеет собственный набор атрибутов
данных.
При использовании методом параметра self для создания атрибута
этот атрибут принадлежит конкретному объекту, на который
ссылается параметр self. Мы называем такие атрибуты атрибутами
экземпляра, потому что они принадлежат конкретному экземпляру
класса.
В программе можно создавать многочисленные экземпляры
одного и того же класса. И каждый экземпляр будет иметь
собственный набор атрибутов.
В следующей программе создаются три экземпляра класса Coin.
Каждый экземпляр имеет собственный атрибут_ sideup.
51.
Работа с экземплярамиПродолжение…
52.
Работа с экземплярами53.
Работа с экземплярами54.
Работа с экземплярами55.
Создание класса CellPhone56.
Создание класса CellPhone57.
Создание класса CellPhoneВ программе
показано
определение
класса, который
сохранен в
модуле
cellphone:
Продолжение….
58.
Создание класса CellPhone59.
Создание класса CellPhone60.
Создание класса CellPhone61.
Методы-получатели и методымодификаторыНа практике широко принято делать в классе все атрибуты
данных приватными и предоставлять публичные методы для
доступа к этим атрибутам и их изменения.
Так гарантируется, что объект, владеющий этими атрибутами,
будет держать под контролем все вносимые в них изменения.
Метод, который возвращает значение из атрибута класса и при
этом его не изменяет, называется методом-получателем.
Методы-получатели дают возможность программному коду,
находящемуся за пределами класса, извлекать значения
атрибутов безопасным образом, не подвергая эти атрибуты
изменению программным кодом, находящимся вне метода.
В классе CellPhone методы get_manufact(), get_model() и get retail
price () являются методами-получателями.
62.
Методы-получатели и методымодификаторыМетод, который сохраняет значение в атрибуте данных либо какимнибудь иным образом изменяет значение атрибута данных, называется
методом-модификатором.
Методы модификаторы могут управлять тем, как атрибуты данных
класса изменяются. Когда программный код, находящийся вне класса,
должен изменить в объекте значение атрибута данных, он, как правило,
вызывает модификатор и передает новое значение в качестве аргумента.
Если это необходимо, то модификатор, прежде чем он присвоит значение
атрибуту данных, может выполнить проверку этого значения.
В программе в предыдущем примере методы set_manufact (),
set model () и set retail price () являются методами-модификаторами.
63.
Хранение объектов в спискеКласс CellPhone, который был создан ранее будет
использоваться во множестве программ. Многие из этих
программ будут хранить объекты CellPhone в списках.
Для того чтобы протестировать способность хранить
объекты CellPhone в списке, напишем следующую
программу. Она получает от пользователя данные о пяти
телефонах, создает пять объектов CellPhone, содержащих эти
данные, и сохраняет эти объекты в списке. Затем она
выполняет последовательный обход списка, показывая
атрибуты каждого объекта.
64.
Хранение объектов в спискеПродолжение….