Значение ООП ассоциации в коде, которое не нарушает инкапсуляцию

это сценарий связи между классом водителя и классом автомобиля
водитель может водить машину

  • водитель может разогнать машину
  • водитель может проверить это он может водить его
  • водитель может проверить, есть ли у него водительские права

диаграмма классов

введите описание изображения здесь

я хочу реализовать этот сценарий в диаграмме классов

Пример кода ниже

пожалуйста, не это не фактический код. Это фиктивный код

код для класса драйвера

Class driver {

private $car;
private $license
private $name


public __construct(Car $car,$license){
$this->car      = $car;
$this->$license = $license;
}

//driver can accelerate car
public accelerating(){
$this->car->accelerate();
}

checkDriverlicenceIsavailable(){
$av = ($this->license)?true:false;
return $av;
}

canDriveVehicle(){
$cd = ($this->car->$vehicleType= 'luxuary car')?true:false
return $cd;
}

}

код для класса автомобилей

Class Car {

private $xlocation;
private $ylocation;
private $xspeed;
private $yspeed;
private $vehicleType;

public __construct($xlocation,$ylocation,$xspeed = 0,$yspeed = 0,$vehicleType){
$this->xlocation      = $xlocation;
$this->ylocation      = $ylocation;
$this->xspeed         = $xspeed;
$this->yspeed         = $yspeed;
$this->vehicleType    = $vehicleType;
}

public drive(){

$this->xlocation + ($this->xspeed*(1));
$this->ylocation + ($this->yspeed*(1));
}


public park(){
$this->speed = 0;
}


public accelerate(){
$this->xspeed++;
$this->yspeed++;
}
}

показать, что водитель может разогнать машину,
в классе водителя есть accelerating() метод, и он будет вызывать метод ускорения класса автомобиля.
в классе автомобиля accelerate() метод работает только на xspeed,yspeed

это правильный подход?

этот подход не нарушает инкапсуляцию?

если в классе водителя такой метод не нужен, чтобы показать, что водитель может ускорять автомобиль, то как реализовать драйвер в коде для ускорения автомобиля?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]