Python_tutorial
  • Вступление
  • Web
    • Введение в web-программирование
  • Основы программирования
    • Файл-менеджмент
    • Алгоритм. Блок-схема
    • Обзор языков программирования
  • Введение в Python
    • Особенности языка Python
    • Установка. Использование
    • Основные определения. Простые типы данных
    • Переменные*
    • Встроенные функции. f-строки
    • Ошибки
    • Основы командной строки
  • Операторы ветвлений, циклы, исключения
    • Условные конструкции и их синтаксис
    • Циклы
    • Обработка исключений
  • Строки. Списки
    • Строки
    • Регулярные выражения (regex)*
    • Списки
    • Изменяемые и неизменяемые объекты в Python*
    • Практика
  • Функции
    • Введение в функции. Модули
    • Функции. Продолжение
    • Функциональное программирование
    • Замыкания. Карринг. Декораторы.
    • Практика
  • Практика программирования
    • Стандарты написания кода
    • Основы тестирования*
    • Аннотации типов*
  • Основы алгоритмов
    • Введение
    • Алгоритмы поиска
    • Алгоритмы сортировки
  • Коллекции
    • Введение
    • Кортежи
    • Словари
    • Множества
    • Практика
  • Файлы
    • Введение
    • Работа с файлами в Python
  • Системы контроля версий
    • Введение в Git
  • Проект 1: Десктопное приложение
    • План работы
  • Основы ООП
    • Введение в ООП
  • Последние обновления
  • Обратная связь
    • Связаться с нами
Powered by GitBook
On this page
  • Парадигмы программирования
  • Понятие ООП
  • Классы
  • Наследование
Edit on GitHub
  1. Основы ООП

Введение в ООП

Парадигмы программирования

Существует несколько парадигм программирования, вот основные:

  1. Императивное программирование — программа это последовательность инструкций, которые выполняются по порядку

def sum_list(lst):
    total = 0
    for num in lst:
        total += num
    return total
  1. Функциональное программирование — программа это набор функций, которые работают с данными используя входные и выходные параметры

import functools

def sum_list(lst):
    return functools.reduce(lambda x, y: x + y, lst)
  1. Объектно-ориентированное программирование — программа представляется в виде объектов, которые содержат данные и методы для их обработки. Основная идея — объекты являются сущностями, которые существуют самостоятельно и могут взаимодействовать друг с другом

class List:
    def __init__(self, lst):
        self.lst = lst
    
    def sum(self):
        total = 0
        for num in self.lst:
            total += num
        return total

# Создаем экземпляр класса
my_list = [1, 2, 3, 4, 5]
my_obj = List(my_list)

# Вызываем метод sum()
result = my_obj.sum()
print(result)

Иногда рассматривают ещё методы программирования. И выделяют два основных метода: процедурный и объектно-ориентированный.

Процедурное программирование — метод написания программного обеспечения, в центре внимания которой находятся процедуры или действия, происходящие в программе.

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

Понятие ООП

Объект — это программная сущность, которая содержит данные и процедуры. Находящиеся внутри объекта данные называются атрибутами данных. Выполняемые объектом процедуры называются методами. Методы объекта — это функции, которые выполняют операции с атрибутами данных.

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

Например, у объекта "автомобиль" есть атрибуты: марка, модель, год выпуска и методы : припарковать, посигналить, открыть дверь.

Интерактив:

  • Приведите примеры объктов из реальной жизни с атрибутами и методами. Как с ними можно взаимодействовать? Как можно изменить атрибуты объекта?

Принцип инкапсуляции — объединение данных и программного кода в одном объекте. Включает в себя сокрытие данных — атрибуты объекта можно изменять только при помощи методов, которые мы определили и за их пределами доступа к атрибутам нет.

Когда меняются данные объекта, программист меняет реализацию методов этого объекта. При этом снаружи взаимодействие с объектом остается прежним. Например, есть объект "велосипед" и у него метод "затормозить". Мы можем поменять внутреннее устройство тормоза, но внешний интерфейс — нажатие ручки тормоза, лучше оставить прежним.

Пример объекта из повседневной жизни

Пусть будильник — программный объект. У него есть атрибуты:

current_second # текущая секунда, значение в диапазоне 0-59
current_minute # текущая минута, значение в диапазоне 0-59
current_hour # текущий час, значение в диапазоне 1-12
alarm_time # время сигнала, допустимые час и минута
alarm_is_set # будильник включен - истина или ложь
  • Мы видим, что атрибуты — это всего лишь значения они определяют состояние, в котором будильник находится в настоящее время. Мы, как пользователи, не можем напрямую манипулировать этими атрибутами данных, необходимо применить один из методов объекта

  • Некоторые методы объекта "будильник"

set_time # задать время
set_alarm_time # задать время сигнала
set_alarm_on # включить будильник
set_alarm_off # выключить будильник
  • При помощи этих методов мы, пользователи, можем манипулировать атрибутами объекта "будильник". То есть эти методы "выставлены наружу" и являются публичными

  • Есть также приватные методы — закрытые от внешних сущностей (нас) и являющиеся частью приватного, внутреннего устройства объекта.

# приватные методы
increment_current_second() # прирастить текущую секунду
increment_current_minute() # прирастить текущую минуту
increment_current_hour() # прирастить текущий час
sound_alarm() # подать звуковой сигнал

Интерактив:

  • Что такое объект?

  • Что такое инкапсуляция?

  • Почему внутренние данные объекта обычно скрыты от внешнего программного кода?

  • Что такое публичные методы? Что такое приватные методы?

Классы

Класс — это шаблон, определяющий характеристики для объектов

Экземпляры — объекты определенного класса

Параметр self означает, что он применяется для конкретного экземпляра. То есть мы создали класс, в нем определили метод с параметром self и вызывая этот метод для экземпляра класса и применяя self.x мы используем x для этого конкретного экземпляра. Это и значит self.

Посмотреть атрибуты и методы любого объекта — dir(объект)

Жизненный цикл объектов

Конструктор — то, что надо сделать при создании экземпляра класса. Деструктор — то, что надо сделать при удалении экземпляра класса

Наследование

Вместо создания класса с нуля, можно сделать это уже от существующего класса — так создаются подклассы

Класс FootballFan наследует всё от родительского класса и плюс в его пространстве имён есть внутренние объекты

PreviousПлан работыNextПоследние обновления

Last updated 1 year ago

Объект, атрибуты и методы
Класс и экземпляр класса
Основные определения
Конструктор и деструктор
Наследование
Порядок вызовов при наследовании