| Следующая версия | Предыдущая версия |
| theory:oop_c [2024/11/24 14:29] – создано labuser30 | theory:oop_c [2024/12/04 12:44] (текущий) – labuser30 |
|---|
| |
| Попробуем разобраться на примере | Попробуем разобраться на примере |
| <code python> | <code arduino> |
| class Car: | class Car { |
| def __init__(self, color, fuel, consumption): | private: |
| self.color = color | String color; |
| self.fuel = fuel | float fuel; |
| self.consumption = consumption | float consumption; |
| self.odo = 0 | int odo; |
| | |
| def go(self, way): | public: |
| self.odo += way | Car(String _color, int _fuel, float _consumption) { |
| self.fuel -= self.consumption/100 * way | color = _color; |
| | fuel = _fuel; |
| def get_odo(self): | consumption = _consumption; |
| return self.odo | odo = 0; |
| | } |
| def get_fuel(self): | |
| return self.fuel | void go(int dist) { |
| | odo += dist; |
| | fuel -= consumption / 100.0 * dist; |
| | } |
| | |
| | float getFuel() { |
| | return fuel; |
| | } |
| | |
| | int getOdo() { |
| | return odo; |
| | } |
| | }; |
| </code> | </code> |
| |
| |
| Методы класса Car | Методы класса Car |
| * ''go(self, way)'' — ехать. Принимает в качестве параметра количество километров | * ''void go(int dist)'' — ехать. Принимает в качестве параметра количество километров |
| * ''get_odo(self)'' — получить текущий пробег | * ''int getOdo()'' — получить текущее количество топлива в баке |
| * ''get_fuel(self)'' — получить текущее количество топлива в баке | * ''float getFuel()'' — получить текущий пробег |
| | |
| | |
| | Сразу возникает вопрос, а что за метод ''Car(String _color, int _fuel, int _consumption)''. Это //конструктор// — функция, вызываемая при создании объекта. Когда создается объект, то код этой функции исполняется. Наш конструктор автомобиля принимает сразу несколько параметров — цвет, количество топлива в баке и потребление топлива на 100км. При создании объекта автомобиля мы эти параметры указываем и конструктор создает объект с заданными параметрами. |
| |
| Сразу возникает вопрос, а что за метод __init__. Это //конструктор// — функция, вызываемая при создании объекта. Когда создается объект, то код этой функции исполняется. Наш конструктор автомобиля принимает сразу несколько параметров — цвет, количество топлива в баке и потребление топлива на 100км. При создании объекта автомобиля мы эти параметры указываем и конструктор создает объект с заданными параметрами. | Класс это всего лишь шаблон, и объектов, которые могут быть созданы по нему — много. Используя класс Car можно создать много экземпляров автомобилей со своими наборами свойств. |
| |
| Также непонятно что такое self в параметрах всех функций и при обращении к свойствам. self — это ссылка объекта на самого себя, на текущий экземпляр класса. Ведь класс это всего- лишь шаблон. И объектов, которые могут быть созданы по нему — много. Используя класс Car можно создать много экземпляров автомобилей со своими наборами свойств. | Ключевые слова ''private'' (приватный) и ''public'' (публичный) определяют доступность свойств и методов снаружи класса. Например мы не сможем напрямую изменить свойство "odo" так как оно является приватным. Для изменения "odo" нам нужно воспользоваться публичным методом ''go()''. |
| |
| Как видно мы описали абстрактно автомобиль. У любого автомобиля есть цвет, есть одометр, определенное потребление топлива и сколько-то топлива в баке. Теперь создадим два конкретных автомобиля- мой автомобиль и автомобиль брата: | Как видно мы описали абстрактно автомобиль. У любого автомобиля есть цвет, есть одометр, определенное потребление топлива и сколько-то топлива в баке. Теперь создадим два конкретных автомобиля — мой автомобиль и автомобиль брата: |
| |
| <code python> | <code arduino> |
| MyCar = Car('Black', 50, 10) | Car MyCar("Black", 50, 10); |
| BrotherCar = Car('White', 60, 15) | Car BrotherCar("White", 60, 15); |
| </code> | </code> |
| |
| Мы создали два объекта автомобиля ''MyCar'' и ''BrotherCar''. Это разные автомобили, разного цвета, в них разное количество топлива и даже потребляют они по- разному. Посмотрим сколько сейчас топлива в моем автомобиле и сколько он проехал | Мы создали два объекта автомобиля ''MyCar'' и ''BrotherCar''. Это разные автомобили, разного цвета, в них разное количество топлива и даже потребляют они по-разному. Посмотрим сколько сейчас топлива в моем автомобиле и сколько он проехал. |
| |
| <code python> | <code arduino> |
| print(MyCar.get_odo()) | Serial.println(MyCar.getOdo()); |
| print(MyCar.get_fuel()) | Serial.println(MyCar.getFuel()); |
| </code> | </code> |
| |
| <code> | <code> |
| 0 | 0 |
| 50 | 50.00 |
| </code> | </code> |
| |
| Мой автомобиль еще ничего не проехал и топлива не потратил нисколько. Теперь проедем 20 километров и еще 10. | Мой автомобиль еще ничего не проехал и топлива не потратил нисколько. Теперь проедем 20 километров и еще 10. |
| <code python> | <code arduino> |
| MyCar.go(20) | MyCar.go(20); |
| MyCar.go(10) | MyCar.go(10); |
| </code> | </code> |
| |
| И повторим запросы пробега и уровня топлива | И повторим запросы пробега и уровня топлива |
| <code python> | <code arduino> |
| print(MyCar.get_odo()) | Serial.println(MyCar.getOdo()); |
| print(MyCar.get_fuel()) | Serial.println(MyCar.getFuel()); |
| </code> | </code> |
| |
| <code> | <code> |
| 30 | 30 |
| 47.0 | 47.00 |
| </code> | </code> |
| |
| Действительно ''MyCar'' проехала 30 километров и за это время израсходовала 3 литра топлива. Теперь дадим проехаться машине ''BrotherCar'' | Действительно ''MyCar'' проехала 30 километров и за это время израсходовала 3 литра топлива. Теперь дадим проехаться машине ''BrotherCar'' |
| |
| <code python> | <code arduino> |
| BrotherCar.go(15) | BrotherCar.go(15); |
| print(BrotherCar.get_odo()) | Serial.println(BrotherCar.getOdo()); |
| print(BrotherCar.get_fuel()) | Serial.println(BrotherCar.getFuel());) |
| </code> | </code> |
| |