OOD - почему автомобиль / автобус / мотоцикл должен происходить от автомобиля
Предположим, мы проектируем класс парковки. Есть два способа определения транспортных средств.
1)
Abstract class Vehicle {
protected int size;
private string plate;
...
}
class car : Vehicle{
car(){base.size = enum.carSize;}
}
class bus: Vehicle{
bus(){base.size = enum.busSize;}
}
2)
class Vehicle {
private int size;
protected string plate;
public setSize(int size);
}
Тогда в классе парковки мы можем определить
Vehicle Car;
vehicle Bus;
Какой из них лучше? Я вижу, 1) используется в "взлома интервью по кодированию". Но я вижу 2) лучше как это просто. Что я должен использовать в интервью?
2 ответа
Если вам не нужны разные виды функциональности для разных видов транспортных средств, вам не нужно наследование.
Ваш Vehicle
класс имеет базовые методы и атрибуты, такие как engine()
, licensePlate = ''
и так далее. Все транспортные средства будут иметь эти методы и атрибуты.
Сейчас Car
а также Bus
класс отличается друг от друга, поэтому вы расширяете Vehicle
класс в Car
а также Bus
классы должны иметь одинаковую базовую функциональность, но различаться в определенной функциональности (например, Car
могу иметь stereoType = ''
в то время как Bus
могу иметь hasSecondFloor = true
,
class Vehicle {
private $licensePlate;
public function startEngine()
{
/* ... */
}
public setLicensePlate()
{
/* ... */
}
}
class Car extends Vehicle {
public function _construct()
{
$this->setLicensePlate('ABC-123');
$this->startEngine();
}
public function turnOnStereo()
{
/* ... */
}
}