881.74K
Категория: ПрограммированиеПрограммирование

Лекция 1

1.

ВВЕДЕНИЕ В ООП.
КЛАССЫ И
ОБЪЕКТЫ

2.

Введение в объектно-ориентированное
программирование (ООП)
■ Объектно-ориентированное программирование (ООП) - это парадигма
программирования, основанная на представлении программы в виде
совокупности объектов, которые взаимодействуют между собой. В Python ООП
является ключевым аспектом, и множество функций и возможностей языка
строятся вокруг этой парадигмы.

3.

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

4.

Преимущества ООП
4. Наследование:
Одно из ключевых понятий ООП. Наследование позволяет создавать новые классы на
основе существующих, наследуя их атрибуты и методы. Это позволяет переиспользовать
код и создавать иерархии классов с общей функциональностью.
5. Полиморфизм:
Полиморфизм позволяет объектам разных классов вести себя одинаково при выполнении
одних и тех же операций. Это позволяет создавать более обобщенный и гибкий код,
который может работать с различными типами объектов.
6. Управление сложностью:
ООП способствует разбиению сложных систем на более мелкие, понятные части. Это
делает процесс разработки более управляемым и позволяет командам разработчиков
работать параллельно над разными аспектами программы.

5.

Преимущества ООП
7. Реализация реального мира:
ООП позволяет моделировать реальные объекты и их взаимодействие в программном
коде. Это делает программу более понятной для людей, знакомых с предметной областью.
8. Сопровождаемость и масштабируемость:
ООП делает программу более гибкой и удобной для сопровождения и изменения. Новые
функции или изменения можно вносить в существующие классы, не затрагивая другие
части кода.
9. Повторное использование:
Возможность переиспользования классов и компонентов ускоряет процесс разработки,
так как вы можете использовать готовые компоненты в новых проектах.

6.

Введение в объектно-ориентированное
программирование (ООП)
■ Объектно-ориентированное программирование предоставляет множество
инструментов и концепций, которые облегчают разработку программ, повышают
их качество и делают код более структурированным и управляемым.

7.

Классы
■ Зачем нужны классы:
o Абстракция: Класс позволяет абстрагироваться от деталей реализации и
думать о данных и действиях в терминах объектов. Это упрощает
понимание и организацию кода.
o Модульность: Классы позволяют группировать связанные данные и
функциональность в одной сущности. Это делает код более организованным
и легко сопровождаемым.
o Повторное использование кода: Классы можно использовать для создания
множества объектов с одинаковой структурой и функциональностью. Это
позволяет избежать дублирования кода.
o Наследование: Классы позволяют создавать иерархии, где один класс
наследует атрибуты и методы другого. Это упрощает обобщение и
переиспользование кода.

8.

Атрибуты класса
■ Атрибуты класса - это переменные, которые определены внутри класса и
представляют собой характеристики или данные, связанные с объектами этого
класса. Они могут быть доступны для всех экземпляров класса (объектов),
созданных на его основе. Атрибуты класса определяют состояние объектов,
которые этот класс может представлять.

9.

Атрибуты экземпляра и атрибуты
класса
■ Атрибуты экземпляра и атрибуты класса - это два разных типа атрибутов в Python,
и они имеют разные области видимости и назначения.
■ Атрибуты экземпляра:
o Атрибуты, которые связаны с конкретным экземпляром класса.
o Они создаются и инициализируются в методе __init__ экземпляра.
o Каждый экземпляр может иметь свои уникальные значения атрибутов.
o Обращение к атрибуту экземпляра происходит через self.
o Если значение атрибута экземпляра изменяется, это не влияет на другие
экземпляры.

10.

Атрибуты экземпляра и атрибуты
класса
■ Пример атрибутов экземпляра:

11.

Атрибуты экземпляра и атрибуты
класса
■ Атрибуты класса:
o Атрибуты, которые принадлежат классу в целом, а не конкретному
экземпляру.
o Они определяются внутри класса, но вне методов.
o Обращение к атрибуту класса происходит через имя класса, например,
ClassName.attribute.
o Значение атрибута класса одинаково для всех экземпляров этого класса.
o Изменение значения атрибута класса затрагивает все экземпляры этого
класса.

12.

Атрибуты экземпляра и атрибуты
класса
■ Пример атрибутов класса:

13.

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

14.

Ссылки на объекты
■ Каждая ссылка уникальна. Мы можем обратиться к каждому объекту. Например,
мы можем обратиться к возрасту животного и поменять его. При этом значение
поменяется только у одного объекта

15.

setattr, getattr и delattr
■ setattr, getattr и delattr - это встроенные функции в Python, которые позволяют
взаимодействовать с атрибутами объектов динамически, то есть по имени
атрибута в виде строки. Эти функции часто используются в различных сценариях
программирования, таких как работа с атрибутами классов, обработка данных и
т.д.
■ setattr(obj, name, value): Эта функция устанавливает значение атрибута name
объекта obj на значение value.

16.

setattr, getattr и delattr
■ getattr(obj, name[, default]): Эта функция возвращает значение атрибута name
объекта obj. Если атрибут не существует и указан аргумент default, то он
возвращается вместо ошибки.

17.

setattr, getattr и delattr
■ delattr(obj, name): Эта функция удаляет атрибут name объекта obj.
■ Эти функции особенно полезны, когда необходимо динамически управлять
атрибутами объектов на этапе выполнения программы, например, при создании
более обобщенных алгоритмов или работе с данными из файлов и баз данных.

18.

hasattr
■ Функция hasattr в Python используется для проверки наличия атрибута
(переменной или метода) в объекте. Эта функция принимает два аргумента:
объект и имя атрибута, и возвращает True, если атрибут с заданным именем
существует в объекте, и False, если его нет.

19.

Методы класса
■ Методы класса - это функции, определенные внутри класса, которые могут
выполнять операции и взаимодействовать с атрибутами объекта. Они
предоставляют способ для объектов выполнять действия и предоставлять
функциональность.

20.

self
■ self - это параметр, который используется в методах класса в Python для
обращения к текущему экземпляру (объекту) этого класса.
■ Зачем нужен self:
– Идентификация экземпляра: Когда вы создаете экземпляр класса, self
ссылается на этот конкретный экземпляр. Он позволяет методам
определить, с каким именно объектом они работают.
– Доступ к атрибутам и методам: Через self методы могут обращаться к
атрибутам и другим методам объекта.

21.

self
■ Как это работает ссылками:
Когда вы вызываете метод класса через экземпляр, Python автоматически передает
этому методу ссылку на экземпляр, используя параметр self. Это делает работу с
атрибутами и методами экземпляра удобной и интуитивной.

22.

метод __init__
■ __init__ - это метод (или как его еще называют "конструктор"), который
используется в Python для инициализации объектов при их создании. Этот метод
вызывается автоматически при создании нового экземпляра класса и позволяет
задать начальные значения атрибутов объекта.
■ Пример использования __init__:

23.

Установка значений по умолчанию
■ Метод __init__ можно использовать для установки значений по умолчанию для
атрибутов объекта. Это полезно, когда вы хотите, чтобы некоторые атрибуты
имели определенное начальное значение, но при этом оставались
настраиваемыми при создании объекта.

24.

Метод __str__
■ Метод __str__ является одним из магических (или специальных) методов в
Python. Он позволяет определить строковое представление объекта вашего
класса. Когда вы вызываете функцию str() для объекта или используете функцию
print() для объекта, Python будет искать метод __str__ в этом объекте и вызывать
его для получения строкового представления.

25.

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

26.

Статические методы
■ Чтобы объявить статический метод в классе, используется декоратор
@staticmethod. Обычно статические методы принимают аргументы и выполняют
какие-то операции, но они не имеют доступа к атрибутам экземпляра или
изменению состояния класса.
■ Пример статического метода:

27.

Методы на уровне класса (class
methods)
■ Методы на уровне класса (class methods) - это специальные методы, которые
связаны с классом в целом, а не с конкретными экземплярами этого класса. Они
имеют доступ к атрибутам класса, но не имеют доступа к атрибутам экземпляров.
■ Для создания метода на уровне класса используется декоратор @classmethod.
Первый аргумент метода на уровне класса, как правило, называется cls и
представляет сам класс, а не экземпляр.
■ Преимущества методов на уровне класса:
o Общий доступ к атрибутам класса: Методы на уровне класса могут
использовать и изменять атрибуты класса, что полезно, например, для
управления общими данными класса.
o Полиморфизм: Методы на уровне класса могут использоваться как
интерфейс для выполнения одних и тех же действий в разных подклассах.

28.

Методы на уровне класса (class
methods)
■ Пример метода на уровне класса:

29.

Методы на уровне класса (class
methods)
■ Методы на уровне класса полезны, когда нужно взаимодействовать с классом в
целом или когда требуется общая функциональность, независимая от конкретных
данных экземпляра.

30.

Задачи на отработку
■ Класс "Прямоугольник":
– Создайте класс Rectangle для представления прямоугольника. У
прямоугольника должны быть атрибуты width (ширина) и height (высота), и
методы area() для вычисления площади и perimeter() для вычисления
периметра.
■ Класс "Счетчик":
– Создайте класс Counter, который представляет счетчик. У счетчика должны
быть методы increment() для увеличения значения на 1 и get_value() для
получения текущего значения счетчика.
■ Класс "Студент":
– Создайте класс Student, представляющий информацию о студенте. Класс
должен иметь атрибуты name, age и major. Также создайте метод
display_info(), который выводит информацию о студенте.
English     Русский Правила