Similar presentations:
Основы ООП
1.
Python: Основы ООП (Объектно-Ориентированное Программирование)Объектно-ориентированное программирование (ООП) — это
методология, позволяющая организовать код в виде
взаимодействующих объектов. Python поддерживает ООП,
предоставляя разработчикам инструменты для создания
классов, объектов и применения принципов ООП.
Основные принципы ООП
1.Классы и объекты
2.Инкапсуляция
3.Наследование
4.Полиморфизм
5.Абстракция
2.
1. Классы и объектыКласс — это шаблон для создания объектов,
который определяет свойства (атрибуты) и
поведение (методы).
Объект — экземпляр класса, созданный на
основе его шаблона.
Ключевые особенности:
•Атрибуты класса описывают состояние объекта.
•Методы класса описывают его поведение.
•Для создания объекта используется вызов
класса, как функции.
3.
Синтаксис:1. class ClassName:
•class — ключевое слово, которое
используется для определения класса. Оно
сообщает Python, что вы собираетесь создать
новый класс.
•ClassName — имя класса.
• Имя класса должно следовать правилам
именования в Python:
• Начинается с заглавной буквы (по
соглашению).
• Может содержать буквы, цифры и
символ _ (но не может начинаться с
цифры).
• Пример: Car, Rectangle, Student.
4.
2. Метод __init__•def — ключевое слово для определения функции.__init__ — это
специальный метод-конструктор, который автоматически
вызывается при создании объекта.
Назначение: инициализировать атрибуты объекта.Две пары
символов подчеркивания (__) в начале и конце делают этот
метод специальным (магическим).
•self — ссылка на текущий объект.Через self мы можем
обращаться к атрибутам и методам объекта.
•self передается в метод автоматически при вызове, поэтому
его нужно обязательно указать первым параметром.
атрибуты — это список параметров, которые передаются в
метод для инициализации объекта.
Например: def __init__(self, name, age):.
5.
3. self.атрибут = значение•self.атрибут — создается атрибут объекта.
• Это свойство, связанное с конкретным
экземпляром класса.
• Например: self.name создаст атрибут name,
который доступен для каждого объекта.
•= — присваивает значение атрибуту.
•значение — это параметр, переданный в
метод __init__, или любое фиксированное значение.
Например: self.name = name присваивает значению
атрибута name переданный параметр.
6.
Пример с пояснением:1.class Car:
1.Создаем класс Car (шаблон для
автомобилей).
2.def __init__(self, brand, model):
1.Создаем конструктор __init__, который
принимает два
параметра: brand (бренд)
и model (модель).
3.self.brand = brand
1.Создаем атрибут brand для объекта.
2.Значение этого атрибута берется из
параметра brand, переданного в
конструктор.
4.self.model = model
7.
Итог:•Метод __init__ задает начальные
свойства объекта.
•self всегда ссылается на
текущий объект.
•Атрибуты создаются с
помощью self.атрибут и
привязываются к объекту.
8.
2. ИнкапсуляцияИнкапсуляция — механизм, ограничивающий
доступ к внутренним компонентам класса.
В Python используются модификаторы доступа:
•Публичные атрибуты (без префикса): доступны
извне.
•Защищенные (_): рекомендуется использовать
только внутри класса или его наследников.
•Приватные (__): недоступны за пределами
класса.
9.
Пример:1. Класс BankAccount
Это шаблон (класс) для создания объектов,
которые представляют банковские счета.
Класс включает следующие элементы:
2. Конструктор __init__
•Конструктор используется для
инициализации нового
объекта.Параметры:owner — имя владельца
счета.
•balance — начальный баланс.
self.owner — публичный атрибут, доступный
извне.self.__balance — приватный
атрибут (обозначается двумя
подчеркиваниями __). Это означает, что его
3. Метод deposit
нельзя напрямую изменить извне, защищая
Этот
метод
увеличивает
баланс на указанную
данные
от случайных
изменений.
сумму.Аргумент amount — сумма пополнения.Обновление
происходит через self.__balance.
4. Метод withdraw
Создается объект account с начальным владельцем "Арай" и
балансом 1000.
Вызывается
метод deposit, который добавляет 500 к текущему
балансу. Баланс становится 1500.
Метод get_balance возвращает текущий баланс (1500),
который выводится на экран.
Этот метод уменьшает баланс, если запрашиваемая
сумма (amount) не превышает текущий баланс.Если
недостаточно средств, выводится
сообщение "Недостаточно средств!".
5. Метод get_balance
Метод возвращает текущее значение приватного атрибута __balance
10.
3. НаследованиеНаследование — механизм, позволяющий одному классу (дочернему) наследовать
свойства и методы другого (родительского). Это упрощает код и повышает его
переиспользуемость.
Пример:
11.
4. ПолиморфизмПолиморфизм позволяет использовать одинаковые методы для разных типов
объектов.
Класс Cat наследуется от базового класса Animal.
Предположим, что класс Animal
Ключевые моменты
1.Наследование:
Классы Cat и Dog наследуют базовый
класс Animal.
2.Переопределение метода: Каждый
дочерний класс (Cat и Dog)
переопределяет метод speak, чтобы он был
специфичным для этого класса.
3.Полиморфизм: Мы используем общий
интерфейс (speak) для разных типов
объектов (Cat и Dog). Во время
Наследование: Класс Cat наследует все
свойства и методы от
класса Animal.Переопределение метода:
Метод speak в классе Cat заменяет
(переопределяет) базовый
метод speak из Animal. Теперь у
объектов
Cat метод
speakнаследует
выводит сообщение,
Наследование:
Dog также
что
кошка мяукает.
от Animal.Переопределение
метода:
Метод speak выводит сообщение, что собака
лает.
•Создается список animals, содержащий два
объекта:Dog с именем "Шарик".
•Cat с именем "Мурка".
Полиморфизм: Python автоматически вызывает
правильный метод speak для каждого объекта, исходя
из их класса
12.
5. АбстракцияАбстракция позволяет скрывать сложность и показывать только нужный
функционал. Для этого используют абстрактные классы.
•ABC: Базовый класс для создания абстрактных классов.
Абстрактный класс не может быть напрямую создан как
объект.
•Декоратор @abstractmethod:
• Указывает, что метод area является абстрактным и
должен быть обязательно реализован в дочерних
классах.
• Если в дочернем классе метод area не будет
реализован, попытка создать объект дочернего
класса вызовет
ошибку.
•Наследование:
Класс Circle
наследует абстрактный
Абстрактный
класс Shape является базовым
для всех
фигур,
класс
Shape.Инициализация:Конструктор
__init__
принимае
но
не определяет
реализации
методаего
area.
т параметр
radiusконкретной
(радиус круга)
и сохраняет
в
атрибуте self.radius.
•Реализация метода area:Формула для площади
круга: π×radius2π×radius2, где ππ приблизительно
равно
3.14.
Абстрактный класс:
•Метод
вычисленное
значение
площади
круга. для
•Shape —возвращает
это абстрактный
класс, который
задает
общий интерфейс
всех фигур.
•Абстрактный метод area требует, чтобы все дочерние классы
(например, Circle) реализовали этот метод.
Принуждение к реализации:
•Нельзя создать объект класса Shape, так как он содержит абстрактные
методы.
•Попытка создать объект Shape вызовет ошибку TypeError.
Наследование и полиморфизм:
•Класс Circle наследует Shape и реализует метод area. Это позволяет
использовать единый интерфейс для работы с разными фигурами.
13.
Задачи1. Напишите класс BankAccount с атрибутами owner и balance. Реализуйте
методы deposit, withdraw и get_balance.
2. Реализуйте класс Employee с атрибутами name, position, и salary.
Напишите метод для увеличения зарплаты на заданный процент.
3. Создайте класс Triangle с атрибутами a, b, c (стороны треугольника).
Напишите метод для проверки, является ли треугольник правильным.
4. Напишите класс Clock с атрибутами hours и minutes. Добавьте метод,
который увеличивает время на заданное количество минут.
5. Реализуйте класс Fraction для работы с дробями. Добавьте методы
сложения, вычитания, умножения и деления.
6. Напишите класс Temperature с методами для перевода температуры из
Цельсия в Фаренгейты и наоборот.
7. Создайте класс ShoppingCart, который может добавлять товары, удалять
товары и возвращать общую сумму.
8. Реализуйте класс StudentGroup с методом, который возвращает список
студентов, сдавших экзамен.
9. Создайте класс Email с атрибутами sender, receiver, subject,
и content. Напишите метод для отправки письма.
10. Реализуйте класс Calculator с методами для сложения, вычитания,
умножения и деления двух чисел.
programming