Следующая версия | Предыдущая версия |
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> |
| |