Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия |
theory:oop_c [2024/11/30 12:12] – labuser30 | theory:oop_c [2024/12/04 12:44] (текущий) – labuser30 |
---|
| |
Попробуем разобраться на примере | Попробуем разобраться на примере |
<code python> | <code arduino> |
class Car { | class Car { |
private: | private: |
String color; | String color; |
int fuel; | float fuel; |
int consumption; | float consumption; |
int odo; | int odo; |
| |
public: | public: |
Car(String _color, int _fuel, int _consumption) { | Car(String _color, int _fuel, float _consumption) { |
color = _color; | color = _color; |
fuel = _fuel; | fuel = _fuel; |
odo = 0; | odo = 0; |
} | } |
| |
void go(int dist) { | void go(int dist) { |
odo += dist; | odo += dist; |
fuel -= consumption / 100 * dist; | fuel -= consumption / 100.0 * dist; |
} | } |
| |
int getFuel() { | float getFuel() { |
return fuel; | return fuel; |
} | } |
| |
Методы класса 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> |
| |