Автомобильные аналогии никогда не бывают идеальными, потому что автомобили и двигатели на самом деле являются очень сложными системами.Вы должны игнорировать многие вещи, чтобы просто смоделировать их.Ваша проблема в том, что вы, кажется, не понимаете, как двигатель работает в первую очередь.
Масляный поддон является частью двигателя, а не автомобиля.Бензобак является частью автомобиля, но не двигателя.У вас есть масляный насос (также часть двигателя), который качает масло в цилиндры двигателя.Большинство автомобилей (возможно, всех) не «проверяют уровень масла» и отказываются заводиться.Двигатель просто закроется, если не будет достаточно масла.Аналогично, если он не получает достаточно газа, он не проверяет уровень бензобака ... у него просто заканчивается топливо.
Это было бы больше так:
class Car
{
Engine engine;
GasTank gasTank;
StartEngine() { engine.Start(); }
}
class Engine
{
Timer timer;
OilPan oilPan;
OilPump oilPump;
public Engine() { oilPump = new OilPump(oilPan, this); }
Start() { timer.Start(oilPump); }
InjectOil() {}
}
class Timer
{
OilPump op; // This is a reference
public Timer(OilPump op) { _op = op; }
Revolve() { op.Pump(); }
}
class OilPump {
OilPan _oilPan; // Reference
Engine _engine; // Reference
OilPump(OilPan oilPan, Engine engine) { _oilPan = oilPan; _engine = engine; }
Pump() { _engine.InjectOil(_oilPan.GetOil); }
}
Таймер представляет обороты двигателя, так как он вращается, он приводит в действие масляный насос, который закачивает масло в цилиндры.Масло обычно не «расходуется», как топливо.Это переработано.Со временем он может сломаться, а в некоторых двигателях, которые находятся в плохом состоянии, он может сгореть.
Ссылка «Масляный насос» представляет собой механическую связь между двигателем и масляным насосом (обычно зубчатые колеса поворачивают его).Таймер не имеет масляного насоса, он имеет ссылку на масляный насос.
Бензобак будет работать аналогичным образом.
Опять же, все это несовершенно (очень несовершенно), потому что так много не хватает.