Слайд 2Что такое ООП?
Вы наверняка слышали, что существуют два главных подхода к написанию

программ:
Процедурное программирование
Объектно-ориентированное программирование (оно же ООП)
Оба подхода объединены общей целью - сделать процесс программирования максимально эффективным. Это значит, что благодаря им разработка программного обеспечения становится более простой для понимания, легко масштабируемой и содержащей минимальное количество ошибок.
Слайд 3В чем суть процедурного подхода?
Процедурное программирование – это написание функций и их

последовательный вызов в некоторой главной(main) функции.
Слайд 4Объектно-ориентированное программирование (ООП) — методология программирования, основанная на представлении программы в виде совокупности

объектов, каждый из которых является экземпляром определённого класса, а классы образуют иерархию наследования.
Слайд 5Итак, чем же хорош подход ООП?
Программа разбивается на объекты. Каждый объект отвечает

за собственные данные и их обработку. Как результат - код становится проще и читабельней.
Уменьшается дупликация кода. Нужен новый объект, содержимое которого на 90% повторяет уже существующий? Давайте создадим новый класс и унаследуем эти 90% функционала от родительского класса!
Упрощается и ускоряется процесс написания программ. Можно сначала создать высокоуровневую структуру классов и базовый функционал, а уже потом перейти к их подробной реализации.
Слайд 6Класс — в объектно-ориентированном программировании, представляет собой шаблон для создания объектов, обеспечивающий начальные

значения состояний: инициализация полей-переменных и реализация поведения функций или методов.
Объект — некоторая сущность в цифровом пространстве, обладающая определённым состоянием и поведением, имеющая определенные свойства (атрибуты) и операции над ними (методы). Как правило, при рассмотрении объектов выделяется то, что объекты принадлежат одному или нескольким классам, которые определяют поведение (являются моделью) объекта. Термины «экземпляр класса» и «объект» взаимозаменяемы.
Слайд 7Класс описывает множество объектов, имеющих общую структуру и обладающих одинаковым поведением. Класс

- это шаблон кода, по которому создаются объекты. Т. е. сам по себе класс ничего не делает, но с его помощью можно создать объект и уже его использовать в работе.
Данные внутри класса делятся на свойства и методы. Свойства класса (они же поля или атрибуты) - это характеристики объекта класса.
Методы класса - это функции, с помощью которых можно оперировать данными класса.
Объект - это конкретный представитель класса.
Объект класса и экземпляр класса - это одно и то же.
Класс = Свойства + Методы
Слайд 9Парадигмы ООП
Абстракция
Абстракция - принцип ООП, согласно которому объект характеризуется свойствами, которые отличают его

от всех остальных объектов и при этом четко определяют его концептуальные границы.
Т. е. абстракция позволяет:
Выделить главные и наиболее значимые свойства предмета.
Отбросить второстепенные характеристики.
Слайд 10Инкапсуляция
Инкапсуляция - принцип ООП, согласно которому сложность реализации программного компонента должна быть спрятана

за его интерфейсом.
Отсутствует доступ к внутреннему устройству программного компонента.
Взаимодействие компонента с внешним миром осуществляется посредством интерфейса, который включает публичные методы и поля.
Слайд 11Наследование
Наследование - способ создания нового класса на основе уже существующего, при котором класс-потомок

заимствует свойства и методы родительского класса и также добавляет собственные.
На что обратить внимание?
Класс-потомок = Свойства и методы родителя + Собственные свойства и методы.
Класс-потомок автоматически наследует от родительского класса все поля и методы.
Класс-потомок может дополняться новыми свойствами.
Класс-потомок может дополняться новыми методами, а также заменять(переопределять) унаследованные методы. Переопределить родительский метод - это как? Это значит, внутри класса потомка есть метод, который совпадает по названию с методом родительского класса, но функционал у него новый - соответствующий потребностям класса-потомка.
Слайд 14Полиморфизм
Полиморфизм - это поддержка нескольких реализаций на основе общего интерфейса.
Другими словами, полиморфизм позволяет

перегружать одноименные методы родительского класса в классах-потомках.
Также для понимания работы этого принципа важным является понятие абстрактного метода:
Абстрактный метод (он же виртуальный метод) - это метод класса, реализация для которого отсутствует.
Как итог - за одинаковым названием могут скрываться методы с совершенно разным функционалом, который в каждом конкретном случае соответствует нуждам класса, к которому он относится.
Слайд 16Классы и объекты в Python
Теперь давайте посмотрим, как реализуется ООП в рамках

языка программирования Python. Синтаксис для создания класса выглядит следующим образом:
Синтаксис
class <название_класса>:
<тело_класса>
А вот так компактно смотрится пример объявления класса с минимально возможным функционалом:
Слайд 17Чтобы создать объект класса, нужно воспользоваться следующим синтаксисом:
Синтаксис
<имя_объекта> = <имя_класса>()
И в качестве

примера создадим объект класса Car:
Слайд 18Атрибуты класса в Python
Все атрибуты можно разделить
на 2 группы:
Встроенные(служебные) атрибуты
Пользовательские атрибуты

Слайд 20Это важно
В теории ООП конструктор класса - это специальный блок инструкций, который вызывается при

создании объекта. При работе с питоном может возникнуть мнение, что метод __init__(self) - это и есть конструктор, но это не совсем так. На самом деле, при создании объекта в Python вызывается метод __new__(cls, *args, **kwargs) и именно он является конструктором класса.
Также обратите внимание, что __new__() - это метод класса, поэтому его первый параметр cls - ссылка на текущий класс. В свою очередь, метод __init__() является так называемым инициализатором класса. Именно этот метод первый принимает созданный конструктором объект. Как вы уже, наверное, не раз замечали, метод __init__() часто переопределяется внутри класса самим программистом. Это позволяет со всем удобством задавать параметры будущего объекта при его создании.
Слайд 21Список атрибутов класса / объекта можно получить с помощью команды dir()
Как видим, в

нем есть только встроенные атрибуты, которые наш класс по-умолчанию унаследовал от базового класса object. А теперь добавим ему функционала:
Слайд 22Поля (свойства) класса
Поля(они же свойства или переменные) можно (так же условно)

разделить на две группы:
Статические поля
Динамические поля
Слайд 23Статические поля
Это переменные, которые объявляются внутри тела класса и создаются тогда, когда

создается класс. Создали класса - создалась переменная:
Слайд 24Динамические поля
Это переменные, которые создаются на уровне экземпляра класса. Нет экземпляра -

нет его переменных. Для создания динамического свойства необходимо обратиться к self внутри метода
Слайд 25Что такое self в Python?
Служебное слово self - это ссылка на текущий экземпляр класса.

Как правило, эта ссылка передается в качестве первого параметра метода Python:
class Apple:
____# Создаем объект с общим количеством яблок 12
____def __init__(self):
________self.whole_amount = 12
____# Съедаем часть яблок для текущего объекта
____def eat(self, number):
________self.whole_amount -= number
Стоит обратить внимание, что на самом деле слово self не является зарезервированным. Просто существует некоторое соглашение, по которому первый параметр метода именуется self и передает ссылку на текущий объект, для которого этот метода был вызван. Хотите назвать первый параметр метода по-другому - пожалуйста.
Слайд 26Задание №1
Создайте класс Example. В нём пропишите 3 (метода) функции. Две переменные

задайте статически, две динамически.
Первая функция: создайте переменную и выведите её
Вторая функция: верните сумму 2-ух глобальных переменных
Третья функция: верните результат возведения первой динамической переменной во вторую динамическую переменную
Создайте объект класса.
Напечатайте обе функции
Напечатайте переменную a
Слайд 28
Задание №2
Калькулятор.
Создайте класс, где реализованы функции(методы) математических операций. А также функция, для

ввод данных.