(3 intermediate revisions by the same user not shown)
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.
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''':
'''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.
* Overloading: definição de métodos com o mesmo nome, mas com diferenças nos argumentos (tipo, número ou ambos) na mesma ou em classes relacionadas;
* Overriding: redefinição de um método definido anteriormente por uma das superclasses da hierarquia de uma classe.
* Overloading: '''Gato(int age) {...}''' e '''Gato(String name) {...}'''
* Overriding: redefinição por parte de '''Gato.respirar()''' de '''Animal.respirar()''' (sendo '''Gato''' uma subclasse de '''Animal''')
</div>
'''1.4.''' (1.5 val.) Explique em consiste o mecanismo de abstracção presente em linguagens como o Java e o C++. Qual é a sua relação com o polimorfismo. Que consequências têm estes dois aspectos na produção de código?
'''1.4.''' (1.5 val.) Explique em consiste o mecanismo de abstracção presente em linguagens como o Java e o C++. Qual é a sua relação com o polimorfismo. Que consequências têm estes dois aspectos na produção de código?
* Abstracção: possibilidade de desenvolver código ou conceitos "abstractos" (tanto classes ou interfaces que devem ser especializadas, como código/implementações baseadas nelas)
* Polimorfismo: possibilidade de referenciar um objecto através de um tipo genérico ou de um tipo mais abstracto que o seu (numa hierarquia de classes, por exemplo)
* Consequências: possibilidade de utilizar tipos concretos (ou mais específicos) em código escrito para tipos menos específicos; redução e reutilização de código; desenvolvimento incremental.
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.4. (1.5 val.) Explique em consiste o mecanismo de abstracção presente em linguagens como o Java e o C++. Qual é a sua relação com o polimorfismo. Que consequências têm estes dois aspectos na produção de código?