November 23, 2022

ООП, КЛАССЫ И ОБЪЕКТЫ. О-НТАЦИЯ

Урок 6

ООП.

Что такое ООП?

ООП это абривиатура означающая Объектно-ориентированное программирование.

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

Парадигма - это совокупность идей и понятий, определяющих стиль написания компьютерных программ (подход к программированию).

ООП по простому можно характеризовать как создание классов и объектов их методов и их использования.

Рассмотрим преимущества ООП

1. Объектно-ориентированное программирование подразумевает повторное использование. Компьютерная программа написанная в форме объектов и классов может быть использована снова в других проектах без повторения кода.

2. Использование модулярного подхода в объектно-ориентированном программировании позволяет получить читаемый и гибкий код.

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

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

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

Перейдем к недостаткам ООП.

1. Для создания объектов необходимо иметь подробное представление о разрабатываемом программном обеспечении.

2. Не каждый аспект программного обеспечения является лучшим решением для реализации в качестве объекта. Для новичков может быть тяжело прочертить линию в золотой середине.

3. С тем, как вы вносите все новые и новые классы в код, размер и сложность программы растет в геометрической прогрессии.

Классы.

Что такое класс?

Классы - это шаблон для создания объектов одного и того же типа (все классы это объекты)

Как же создать новый класс?

Для создания класса пишется ключевое слово class, его имя и двоеточие. Первая строчка в теле описывает его. В теле класса допускается объявление атрибутов, методов и конструктора.

class ClassName:
    "Краткое описание класса (необязательно")
    

Разберем из чего состоит класс.

Класс состоит из атрибутов, методов, конструкторов.

Атрибут - это элемент класса. Например, у прямоугольника таких 2: ширина (width) и высота (height).

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

Конструктор - это уникальный метод класса, который называется __init__. Первый параметр конструктора во всех случаях self (ключевое слово, которое ссылается на сам класс). Конструктор нужен для создание объекта, передает значения аргументов свойствам создаваемого объекта. В одном классе только один конструктор. Если класс определяется не конструктором, он наследует конструктор родительского класса.

Попробуем создать класс.

class Human(object):# создали класс
    name = "Ivan"#Атрибуты
    height = 175
    age = 25
default_human1 = Human() #экземпляр класса
default_human2 = Human() #экземпляр класса
print(default_human1.name, default_human1.height, default_human1.age)
default_human2.name = "Dima"
print(default_human2.name, default_human2.height, default_human2.age)

Класс также можно создать с помощью функции. Рассмотрим пример.

class Human(object):# создали класс
    name = "Ivan"
    height = 175
    age = 25
    
    def __init__(self,n,h,a):
        self.name = n
        self.height = h
        self.age = a
        
h1 = Human("Anton",140,12)
h2 = Human("Dima",190,25)
print(h1.name,h1.age)
print(h2.name,h2.age)

def метод конструктор (класса) срабатывает при создании объекта класса (экземпляра)

self - обозначает что мы работаем с данным объектом.

object - это базовый класс от которого наследуются другие классы.

Рассмотрим еще один пример класса.

class Car(object):#Родительский класс
    brand = "Mazda"
    color = "black"
    max_speed = 100
    def __init__(self,b,ms):
        self.brand = b
        self.max_speed = ms
        
    def upgrade(self):
        self.max_speed +=25
        
class Truck(Car): #Дочерний класс
    max_weight = 10
    def __init__(self,b,ms,mw):
        super().__ibit__(b,ms) #обращение к родительскому классу
        self.max_weight = mw
        
gazel = Truck("Gazel",60,11)
print(gazel.brand, gazel.max_speed, gazel.max_weight)
gazel.upgrade()
print(gazel.brand, gazel.max_speed, gazel.max_weight)

super() - обозначает обращение к род. классу.

О-нтация.

О(n) - вычисление сложности кода.

У каждой строки кода да и вообщем у всего кода есть сложность