(→Solução) |
|||
(3 intermediate revisions by the same user not shown) | |||
Line 8: | Line 8: | ||
== Solução == | == Solução == | ||
− | A solução contém cinco classes (4 são as descritas no enunciado e a 5ª é a que contém o método '''main''', '''App'''). Os métodos descritos no enunciado estão assinalados como "required method" e os atributos com "required attributes". Note-se que a solução é mínima e que algumas opções não são | + | A solução contém cinco classes (4 são as descritas no enunciado e a 5ª é a que contém o método '''main''', '''App'''). Os métodos descritos no enunciado estão assinalados como "required method" e os atributos com "required attributes". Note-se que a solução é mínima e que algumas opções não são ideais em casos gerais (o uso de '''ArrayList''' na classe '''Tabuleiro''', por exemplo). |
O diagrama de classes é o seguinte: | O diagrama de classes é o seguinte: | ||
Line 14: | Line 14: | ||
[[Image:PO-20121119-uml-class-diag-tabs.png|600px]] | [[Image:PO-20121119-uml-class-diag-tabs.png|600px]] | ||
− | Ficheiro '''Tabuleiro.java''' | + | {{CollapsedCode|Ficheiro '''Tabuleiro.java'''| |
− | < | + | <source lang="java"> |
import java.util.List; | import java.util.List; | ||
import java.util.ArrayList; | import java.util.ArrayList; | ||
Line 44: | Line 44: | ||
} | } | ||
− | </ | + | </source> |
+ | }} | ||
− | + | {{CollapsedCode|Ficheiro '''Peça.java'''| | |
− | < | + | <source lang="java"> |
public abstract class Peça { | public abstract class Peça { | ||
private int _x; // Note: required attribute | private int _x; // Note: required attribute | ||
Line 90: | Line 91: | ||
} | } | ||
− | </ | + | </source> |
+ | }} | ||
− | + | {{CollapsedCode|Ficheiro '''Cabo.java'''| | |
− | < | + | <source lang="java"> |
public class Cabo extends Peça { | public class Cabo extends Peça { | ||
public Cabo(int x, int y, String color) { | public Cabo(int x, int y, String color) { | ||
Line 99: | Line 101: | ||
} | } | ||
} | } | ||
− | </ | + | </source> |
+ | }} | ||
− | + | {{CollapsedCode|Ficheiro '''Sargento.java'''| | |
− | < | + | <source lang="java"> |
public class Sargento extends Peça { | public class Sargento extends Peça { | ||
public Sargento(int x, int y, String color) { | public Sargento(int x, int y, String color) { | ||
Line 108: | Line 111: | ||
} | } | ||
} | } | ||
− | </ | + | </source> |
+ | }} | ||
− | Ficheiro '''App.java''' | + | {{CollapsedCode|Ficheiro '''App.java'''| |
− | < | + | <source lang="java"> |
public class App { | public class App { | ||
public static void main(String[] args) { | public static void main(String[] args) { | ||
Line 125: | Line 129: | ||
} | } | ||
} | } | ||
− | </ | + | </source> |
+ | }} | ||
[[category:Ensino]] | [[category:Ensino]] |
Execício do teste de 2012/11/19.
Implemente, em Java, as classes Tabuleiro e Peça. A classe Tabuleiro guarda um número variável de peças e tem o método desenhaPeças() que é responsável por desenhar todas as peças guardadas. A classe Peça tem dois atributos inteiros que representam as suas coordenadas no tabuleiro, um atributo que representa a côr da peça (cadeia de caracteres) e dois métodos: o método move() e o método devolveCor(). Existem dois tipos de peças: Cabo e Sargento. Cada tipo de peça move-se de forma distinta: as peças do tipo Cabo avançam uma unidade em cada uma das coordenadas enquanto que as peças do tipo Sargento avançam 3 unidades em cada uma das coordenadas. Para simplificar o seu trabalho considere que o tabuleiro não tem limites.
Se necessário pode implementar outras classes e/ou métodos.
A solução contém cinco classes (4 são as descritas no enunciado e a 5ª é a que contém o método main, App). Os métodos descritos no enunciado estão assinalados como "required method" e os atributos com "required attributes". Note-se que a solução é mínima e que algumas opções não são ideais em casos gerais (o uso de ArrayList na classe Tabuleiro, por exemplo).
O diagrama de classes é o seguinte:
Ficheiro Tabuleiro.java |
---|
import java.util.List;
import java.util.ArrayList;
public class Tabuleiro {
// could be more sophisticated
private List<Peça> _board = new ArrayList<Peça>();
public void add(Peça piece) {
_board.add(piece);
}
/**
* Note: required method
*/
public void desenhaPeças() {
for (Peça p: _board)
System.out.println(p);
}
/**
* Moves all pieces.
*/
public void shake() {
for (Peça p: _board)
p.move();
}
}
|
Ficheiro Peça.java |
---|
public abstract class Peça {
private int _x; // Note: required attribute
private int _y; // Note: required attribute
private String _color; // Note: required attribute
private int _xstep;
private int _ystep;
public Peça(int x, int y, String color, int xstep, int ystep) {
_x = x;
_y = y;
_color = color;
_xstep = xstep;
_ystep = ystep;
}
public Peça(int x, int y, String color, int xystep) {
this(x, y, color, xystep, xystep);
}
public Peça(int x, int y, String color) {
this(x, y, color, 1);
}
public String toString() {
return "Peça at (" + _x + ", " + _y + ") is " + _color + " (" + getClass().getName() + ")";
}
/**
* Note: required method
* @return color
*/
public String devolveCor() { return _color; }
/**
* Note: required method
*/
public void move() {
_x += _xstep;
_y += _ystep;
}
}
|
Ficheiro Cabo.java |
---|
public class Cabo extends Peça {
public Cabo(int x, int y, String color) {
super(x, y, color);
}
}
|
Ficheiro Sargento.java |
---|
public class Sargento extends Peça {
public Sargento(int x, int y, String color) {
super(x, y, color, 3);
}
}
|
Ficheiro App.java |
---|
public class App {
public static void main(String[] args) {
Tabuleiro t = new Tabuleiro();
t.add(new Cabo(1, 1, "azul"));
t.add(new Cabo(2, 5, "azul"));
t.add(new Sargento(4, 1, "amarelo"));
System.out.println("Initial:");
t.desenhaPeças();
t.shake();
System.out.println("After shaking:");
t.desenhaPeças();
}
}
|