(→Selecção de Carro de Topo de Gama) |
(→Conceito de Carro de Gama Média) |
||
Line 47: | Line 47: | ||
{{CollapsedCode|Ficheiro '''CarMidrange.java'''| | {{CollapsedCode|Ficheiro '''CarMidrange.java'''| | ||
− | < | + | <source lang="java"> |
public class CarMidrange extends Car { | public class CarMidrange extends Car { | ||
Line 55: | Line 55: | ||
} | } | ||
− | </ | + | </source> |
}} | }} | ||
Contents |
Modele e implemente o seguinte problema (incluindo um método “main” ilustrativo da funcionalidade). Uma fábrica constrói vários tipos de carro: o modelo básico, que não pode ser reconfigurado, mas que é barato; o modelo de gama média, um pouco mais caro, essencialmente um modelo básico que permite trocar com um simples comando o motor original por outro (motores de confiança da aclamada gama básica); e o modelo topo de gama, que além de permitir todas as operações do modelo de gama média, permite utilizar ainda qualquer um dos possantes motores da gama Xtreme. Assim, mantendo o motor básico, permite adicionar um novo motor, utilizando ambos os motores para maior desempenho. Do ponto de vista de cada carro, o tipo e número de motores não são importantes, já que todos fazem basicamente o mesmo: ligar (quando o carro precisa de andar) e desligar (quando o carro precisa de parar). Considere que os carros apenas disponibilizam os métodos de criação, configuração de motores e andar/parar. Considere que ambas as gamas de motores fornecem a funcionalidade ligar/desligar. Pode realizar outros métodos que julgue necessitar. Evite repetições de código.
Diagrama de classes |
---|
Ficheiro Car.java |
---|
public class Car {
private Engine _engine;
public Car() {
_engine = new Engine();
}
public void go() {
_engine.on();
}
public void stop() {
_engine.off();
}
public Engine getEngine() {
return _engine;
}
protected void setEngine(Engine engine) {
_engine = engine;
}
}
|
Ficheiro CarMidrange.java |
---|
public class CarMidrange extends Car {
public void updateEngine(BasicEngine engine) {
setEngine(engine);
}
}
|
Ficheiro CarTop.java |
---|
public class CarTop extends CarMidrange {
private Xtreme _xtra;
@Override
public void go() {
super.go();
if (_xtra != null) _xtra.on();
}
@Override
public void stop() {
super.stop();
if (_xtra != null) _xtra.off();
}
public void addXtra(Xtreme engine) {
_xtra = engine;
}
}
|
Ficheiro Engine.java |
---|
public class Engine {
public void on() { System.out.println("Engine ON!"); }
public void off() { System.out.println("Engine OFF!"); }
}
|
Ficheiro BasicEngine.java |
---|
public class BasicEngine extends Engine {
@Override
public void on() { System.out.println("BasicEngine ON!"); }
@Override
public void off() { System.out.println("BasicEngine OFF!"); }
}
|
Ficheiro Xtreme.java |
---|
public class Xtreme extends Engine {
@Override
public void on() { System.out.println("Xtreme ON!"); }
@Override
public void off() { System.out.println("Xtreme OFF!"); }
}
|
O programa principal é como indicado no enunciado do problema e indicado abaixo por motivos de clarificação:
Ficheiro Application.java |
---|
/**
* Sample uses.
*/
public class Application {
// TODO
}
|
The compilation is as follows:
javac Car.java javac CarMidrange.java javac CarTop.java javac Engine.java javac BasicEngine.java javac Xtreme.java javac Application.java
In fact, compiling Application.java would cause the rest of them be compiled as well (the Java compiler accounts for all explicit class dependencies).
The program starts at a main function (in this case, contained in the Application class):
java Application