Найти тему
tech talk

Введение в объектно-ориентированное программирование на Python

Оглавление
created by tech talk
created by tech talk

Содержание:

  • Что такое ООП
  • Концепции объектно-ориентированного программирования
  • Принципы объектно-ориентированного программирования
  • Главное об ООП

tech talk — я читаю

Что такое ООП

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

В Python, ООП основывается на трех основных концепциях

  1. Классы - это определения объектов, которые содержать методы (функции) и атрибуты (переменные).
  2. Объекты - это экземпляры классов, созданные во время выполнения программы.
  3. Наследование - это процесс, при котором класс может наследовать атрибуты и методы другого класса.

Для создания класса в Python используется ключевое слово `class`.

Все примеры кода можно посмотреть на GitHub Gist здесь.

Например, следующий код создает класс `Person`:

created by tech talk
created by tech talk

В этом примере класс `Person` содержит два атрибута - `name` и `age` - и метод `say_hello`, который выводит на экран приветствие, используя значения атрибутов.

Для создания объекта класса `Person` необходимо вызвать конструктор класса, используя следующий синтаксис: person = Person(“Leo”, 30)

Этот код создает объект `person` класса `Person` с атрибутами `name=”Leo”` и `age=30`.

Чтобы вызвать метод объекта `person`, необходимо использовать следующий синтаксис: person.say_hello()

Этот код вызывает метод `say_hello` объекта `person`, который выведет на экран приветствие.

Четыре основных принципа на которых зиждется ООП:

1. Инкапсуляция - это принцип, который позволяет скрыть атрибуты и методы объекта от прямого доступа и обращаться к ним только через определенные интерфейсы.

В Python инкапсуляция достигается с помощью использования префиксов “__” перед именами атрибутов и методов. Это делает их недоступными для прямого доступа извне объекта, но они все еще могут быть вызваны через публичные методы объекта.

Рассмотрим пример:

created by tech talk
created by tech talk

В этом примере у нас есть класс "BankAccount", который представляет банковский счет. У нас есть приватное поле "__balance", которое хранит баланс счета. Методы "deposit" и "withdraw" позволяют вносить деньги на счет и снимать их соответственно. Метод "get_balance" возвращает текущий баланс счета.

Обратите внимание на префиксы "__" перед именами полей и методов. Это делает их приватными и недоступными для прямого доступа извне объекта. Однако, мы все еще можем получить доступ к этим полям и методам через публичные методы объекта, например, через метод "get_balance".

Также мы создаем объект "account", вносим на него 500 и снимаем 200, и затем выводим текущий баланс, который равен 1300.

Таким образом, использование инкапсуляции в Python позволяет создавать более безопасные и надежные программы, скрывая данные и методы объектов от прямого доступа.

2. Наследование - это принцип ООП, который позволяет классу наследовать свойства и методы другого класса. Класс, который наследует свойства и методы, называется подклассом или производным классом, а класс, от которого наследуются свойства и методы, называется базовым классом или родительским классом.

В Python наследование достигается путем указания имени базового класса в определении производного класса.

Рассмотрим пример:

created by tech talk
created by tech talk

В этом примере мы создаем класс "Animal", который имеет атрибуты "name" и "age" и метод "eat". Затем мы создаем класс "Dog", который наследует свойства и методы класса "Animal" и добавляет свой собственный атрибут "breed" и метод "bark".

После мы создаем объект класса "Dog" с именем "Buddy", возрастом 3 года и породой "Golden Retriever". Затем мы выводим на экран имя, возраст и породу собаки, а также используем метод "eat" и "bark".

Таким образом, использование наследования в Python позволяет создавать более эффективный и модульный код, путем повторного использования свойств и методов базового класса в производном классе.

3. Полиморфизм - это принцип ООП, который позволяет объектам разных классов иметь одинаковое имя метода и действовать по-разному в зависимости от класса, к которому они принадлежат.

В Python полиморфизм достигается благодаря динамической типизации, то есть тип переменной определяется автоматически во время выполнения программы.

Рассмотрим пример:

created by tech talk
created by tech talk

Здесь мы создаем класс "Animal", который имеет атрибут "name" и метод "make_sound". Затем мы создаем классы "Dog", "Cat" и "Cow", которые являются подклассами "Animal" и переопределяют метод "make_sound". В методе "make_sound" каждого подкласса возвращается разная строка, представляющая звук, который издает каждое животное.

Затем мы создаем список "animals", содержащий объекты всех трех классов, и используем цикл "for" для вывода имени каждого животного и звука, который они издают, используя метод "make_sound". Здесь мы можем видеть, что метод "make_sound" имеет одно и то же имя для всех животных, но возвращает разные значения, в зависимости от типа объекта.

Таким образом, в Python полиморфизм позволяет использовать объекты разных классов с одним и тем же именем метода, что делает код более гибким и удобным для использования.

4. Абстракция - это принцип ООП, который позволяет скрыть внутреннюю реализацию объекта и предоставить только необходимые для работы с ним методы и свойства.

В Python абстракция достигается с помощью абстрактных классов и методов.
Абстрактный класс - это класс, который не может быть создан напрямую, а только унаследован другими классами. Он может содержать абстрактные методы, которые не имеют реализации, но должны быть определены в каждом классе-наследнике.

Рассмотрим пример:

created by tech talk
created by tech talk

Здесь мы создаем абстрактный класс "Shape", который содержит абстрактный метод "area". Этот метод не имеет реализации и должен быть определен в каждом классе-наследнике.

Затем мы создаем классы "Rectangle" и "Circle", которые наследуют класс "Shape" и реализуют метод "area". В классе "Rectangle" метод "area" вычисляет площадь прямоугольника, а в классе "Circle" - площадь круга.

Затем мы создаем список "shapes", содержащий объекты классов "Rectangle" и "Circle", и используем цикл "for" для вывода площади каждой фигуры, используя метод "area". Здесь мы можем видеть, что мы можем использовать метод "area" для объектов разных классов, так как он определен в абстрактном классе "Shape".

Таким образом, абстракция позволяет скрыть внутреннюю реализацию объекта и предоставить только необходимые для работы с ним методы и свойства, что делает код более удобным и понятным.

Главное об ООП

Исходя из вышеизложенного, мы узнали, что ООП - это методология программирования, которая основывается на представлении программы в виде набора объектов, которые взаимодействуют друг с другом, образуя систему. ООП в Python основывается на классах, объектах и наследовании. Для создания класса используется ключевое слово class, а для создания объекта класса - конструктор класса. Основные принципы ООП включают инкапсуляцию, наследование, полиморфизм и абстракцию. Чтобы создавать эффективные программы с помощью ООП, важно следовать этим принципам и проектировать классы и объекты таким образом, чтобы они были легко понятны и модифицируемы.

Если у вас есть что-либо добавить к статье, пишите это в комментарии.

Ставьте лайк и подписывайтесь. Давайте позновать новое вместе 🙌