mercredi 7 septembre 2016

Right inheritance order

We need to have instances of light/heavy cars and instances of arctic light/heavy cars. What is the correct way of inheritance (or composition?) not to duplicate code of ArcticCar code into ArcticLight/HeavyCar?

class Car {
    startEnging() {
        log("engine started");
    }
    /* Common car stuff */
}

class LightCar extend Car {
    override startEngine() {
        log("light car prepare to start");
        parent.startEnging();
    }
    /* Basic light car stuff */
}
class HeavyCar extend Car {
    override startEngine() {
        turnOnLights();
        log("heavy car prepare to start");
        parent.startEnging();
    }
    /* Basic heavy car stuff */
}

class ArcticCar extend   ??? {
    override startEngine() {
        warmUpEngine()
        wait10seconds();
        log("arctic mode: warming up engine");
        parent.startEnging();
    }
    /* A lot of common stuff for arctic cars. Can overwrite some common Car's functions */
}

class LightArcticCar extend ArcticCar {
    override startEngine() {
        log("arctic ligh car prepare to start");
        parent.startEnging();
    }
    /* Arctic light car stuff. Can overwrite some specific LightCar's functions */
}
class HeavyArcticCar extend ArcticCar {
    override startEngine() {
        if(checkForecast())
            parent.startEnging();
    }
    /* Arctic heavy car stuff. Can overwrite some specific HeavyCar's functions */
}

class Main {
    buggy = new LightCar();
    awdSUV = new HeavyCar();

    snowmobile = new ArcticLightCar();
    mobileLaboratory = new ArcticHeavyCar();
}

Aucun commentaire:

Enregistrer un commentaire