Значение ООП ассоциации в коде, которое не нарушает инкапсуляцию - PullRequest
0 голосов
/ 11 июня 2018

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

  • водитель может ускорять автомобиль.
  • водитель может проверить, может ли он управлять им.
  • водитель может проверить, доступно ли его водительское удостоверение

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

enter image description here



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

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

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

код для классаВодитель

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

Является ли этот подход правильным?

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

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

...