Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
theory:oop [2020/05/24 15:38] labuser29theory:oop [2024/11/30 12:21] (текущий) labuser30
Строка 1: Строка 1:
-===== Объектно- ориентированное программирование =====+===== Объектно-ориентированное программирование =====
  
 Объектно-ориентированное программирование (сокращенно ООП) — это парадигма разработки программных систем, в которой приложения состоят из объектов. Объектно-ориентированное программирование (сокращенно ООП) — это парадигма разработки программных систем, в которой приложения состоят из объектов.
Строка 30: Строка 30:
  
 Таким образом, класс — это описание того, какими свойствами и поведением будет обладать объект. А объект — это экземпляр с собственным состоянием этих свойств. Таким образом, класс — это описание того, какими свойствами и поведением будет обладать объект. А объект — это экземпляр с собственным состоянием этих свойств.
 +
 +Попробуем разобраться на примере
 +<code python>
 +class Car:
 +    def __init__(self, color, fuel, consumption):
 +        self.color = color
 +        self.fuel = fuel
 +        self.consumption = consumption
 +        self.odo = 0
 +        
 +    def go(self, way):
 +        self.odo += way
 +        self.fuel -=  self.consumption/100 * way
 +    
 +    def get_odo(self):
 +        return self.odo
 +    
 +    def get_fuel(self):
 +        return self.fuel
 +</code>
 +
 +Мы объявили класс Car, описали его свойства и методы. 
 +Свойства класса Car
 +  * ''color'' — цвет
 +  * ''fuel'' — количество топлива в баке
 +  * ''consumption'' — потребление топлива на 100км
 +  * ''odo'' — одометр (счетчик пробега в километрах)
 +
 +Методы класса Car
 +  * ''go(self, way)'' — ехать. Принимает в качестве параметра количество километров
 +  * ''get_odo(self)'' — получить текущий пробег
 +  * ''get_fuel(self)'' — получить текущее количество топлива в баке
 +
 +Сразу возникает вопрос, а что за метод __init__. Это //конструктор// — функция, вызываемая при создании объекта. Когда создается объект, то код этой функции исполняется. Наш конструктор автомобиля принимает сразу несколько параметров — цвет, количество топлива в баке и потребление топлива на 100км. При создании объекта автомобиля мы эти параметры указываем и конструктор создает объект с заданными параметрами.
 +
 +Также непонятно что такое self в параметрах всех функций и при обращении к свойствам. self — это ссылка объекта на самого себя, на текущий экземпляр класса. Ведь класс это всего лишь шаблон. И объектов, которые могут быть созданы по нему — много. Используя класс Car можно создать много экземпляров автомобилей со своими наборами свойств. 
 +
 +Как видно мы описали абстрактно автомобиль. У любого автомобиля есть цвет, есть одометр, определенное потребление топлива и сколько-то топлива в баке. Теперь создадим два конкретных автомобиля — мой автомобиль и автомобиль брата:
 +
 +<code python>
 +MyCar = Car('Black', 50, 10)
 +BrotherCar = Car('White', 60, 15)
 +</code>
 +
 +Мы создали два объекта автомобиля ''MyCar'' и  ''BrotherCar''. Это разные автомобили, разного цвета, в них разное количество топлива и даже потребляют они по-разному. Посмотрим сколько сейчас топлива в моем автомобиле и сколько он проехал
 +
 +<code python>
 +print(MyCar.get_odo())
 +print(MyCar.get_fuel())
 +</code>
 +
 +Результат:
 +<code>
 +0
 +50
 +</code>
 +
 +Мой автомобиль еще ничего не проехал и топлива не потратил нисколько. Теперь проедем 20 километров и еще 10.
 +<code python>
 +MyCar.go(20)
 +MyCar.go(10)
 +</code>
 +
 +И повторим запросы пробега и уровня топлива
 +<code python>
 +print(MyCar.get_odo())
 +print(MyCar.get_fuel())
 +</code>
 +
 +Результат:
 +<code>
 +30
 +47.0
 +</code>
 +
 +Действительно ''MyCar'' проехала 30 километров и за это время израсходовала 3 литра топлива. Теперь дадим проехаться машине ''BrotherCar''
 +
 +<code python>
 +BrotherCar.go(15)
 +print(BrotherCar.get_odo())
 +print(BrotherCar.get_fuel())
 +</code>
 +
 +Результат:
 +<code>
 +15
 +57.75
 +</code>
 +
 +Мы рассмотрели основы объектно- ориентированного программирования. Поняли что такое класс и объект. Узнали как создать объект и как вызывать его методы. Но на самом деле объектно- ориентированное программирование на этом только начинается. 
 +
 +<WRAP center round info 60%>
 +[[https://habr.com/ru/post/463125/|Подробнее об ООП]]
 +</WRAP>
 +