4.93M
Категория: ПрограммированиеПрограммирование

Объектно-ориентирование программирование в 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.

Класс BankAccount

41.

Класс BankAccount
Программа демонстрирует применение этого класса:
продолжение..

42.

Класс BankAccount

43.

Класс BankAccount

44.

Метод _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.

Создание класса CellPhone

56.

Создание класса CellPhone

57.

Создание класса CellPhone
В программе
показано
определение
класса, который
сохранен в
модуле
cellphone:
Продолжение….

58.

Создание класса CellPhone

59.

Создание класса CellPhone

60.

Создание класса CellPhone

61.

Методы-получатели и методымодификаторы
На практике широко принято делать в классе все атрибуты
данных приватными и предоставлять публичные методы для
доступа к этим атрибутам и их изменения.
Так гарантируется, что объект, владеющий этими атрибутами,
будет держать под контролем все вносимые в них изменения.
Метод, который возвращает значение из атрибута класса и при
этом его не изменяет, называется методом-получателем.
Методы-получатели дают возможность программному коду,
находящемуся за пределами класса, извлекать значения
атрибутов безопасным образом, не подвергая эти атрибуты
изменению программным кодом, находящимся вне метода.
В классе CellPhone методы get_manufact(), get_model() и get retail
price () являются методами-получателями.

62.

Методы-получатели и методымодификаторы
Метод, который сохраняет значение в атрибуте данных либо какимнибудь иным образом изменяет значение атрибута данных, называется
методом-модификатором.
Методы модификаторы могут управлять тем, как атрибуты данных
класса изменяются. Когда программный код, находящийся вне класса,
должен изменить в объекте значение атрибута данных, он, как правило,
вызывает модификатор и передает новое значение в качестве аргумента.
Если это необходимо, то модификатор, прежде чем он присвоит значение
атрибуту данных, может выполнить проверку этого значения.
В программе в предыдущем примере методы set_manufact (),
set model () и set retail price () являются методами-модификаторами.

63.

Хранение объектов в списке
Класс CellPhone, который был создан ранее будет
использоваться во множестве программ. Многие из этих
программ будут хранить объекты CellPhone в списках.
Для того чтобы протестировать способность хранить
объекты CellPhone в списке, напишем следующую
программу. Она получает от пользователя данные о пяти
телефонах, создает пять объектов CellPhone, содержащих эти
данные, и сохраняет эти объекты в списке. Затем она
выполняет последовательный обход списка, показывая
атрибуты каждого объекта.

64.

Хранение объектов в списке
Продолжение….

65.

Хранение объектов в списке

66.

67.

68.

Передача объектов в качестве аргументов

69.

Передача объектов в качестве аргументов

70.

Программа демонстрирует этот метод:

71.

Пояснение к предыдущей программе:
English     Русский Правила