|
|
Line 5: |
Line 5: |
| '''1.1.''' (3.0 val.) [[Introdução à Modelação com UML/Empresa de Mobiliário|Empresa de Mobiliário]] | | '''1.1.''' (3.0 val.) [[Introdução à Modelação com UML/Empresa de Mobiliário|Empresa de Mobiliário]] |
| | | |
− | '''1.2.''' (1.0 val.) 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. | + | '''1.2.''' (1.0 val.) [[Polimorfismo, Interfaces, Classes Abstractas/Exercício 06: Tabuleiros e Peças|Tabuleiros e Peças]] |
− | | |
− | Se necessário pode implementar outras classes e/ou métodos.
| |
− | | |
− | <div style="padding: 8px; border-style: dashed; border-width: 1px; border-color: #2f6fab; background: #f9f9f9; ">
| |
− | 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 ideias em casos gerais (o uso de '''ArrayList''' na classe '''Tabuleiro''', por exemplo).
| |
− | </div>
| |
− | | |
− | Ficheiro '''Tabuleiro.java''':
| |
− | <java5>
| |
− | 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();
| |
− | }
| |
− | | |
− | }
| |
− | </java5>
| |
− | | |
− | Ficheiros '''Peça.java''', '''Cabo.java''' e '''Sargento.java''':
| |
− | <java5>
| |
− | 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;
| |
− | }
| |
− | | |
− | }
| |
− | </java5>
| |
− | | |
− | Ficheiros '''Cabo.java''':
| |
− | <java5>
| |
− | public class Cabo extends Peça {
| |
− | public Cabo(int x, int y, String color) {
| |
− | super(x, y, color);
| |
− | }
| |
− | }
| |
− | </java5>
| |
− | | |
− | Ficheiros '''Sargento.java''':
| |
− | <java5>
| |
− | public class Sargento extends Peça {
| |
− | public Sargento(int x, int y, String color) {
| |
− | super(x, y, color, 3);
| |
− | }
| |
− | }
| |
− | </java5>
| |
− | | |
− | Ficheiro '''App.java''':
| |
− | <java5>
| |
− | 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();
| |
− | }
| |
− | }
| |
− | </java5>
| |
| | | |
| '''1.3.''' (1.5 val.) Diga em que consistem e como se expressam os conceitos de sobrecarregamento (overloading) e redefinição (overriding) de métodos nas linguagens de programação com objectos. Dê exemplos práticos, se possível, relacionados com o projecto. | | '''1.3.''' (1.5 val.) Diga em que consistem e como se expressam os conceitos de sobrecarregamento (overloading) e redefinição (overriding) de métodos nas linguagens de programação com objectos. Dê exemplos práticos, se possível, relacionados com o projecto. |
Considere o diagrama UML da figura 1 (à direita). Qual das seguintes afirmações está correcta?