Em primeiro lugar, leia esse texto. Ele tem tudo a ver com o assunto Tipos Abstratos de Dados, e é baseado em um livro de Antoine de Saint-Exupery intitulado "O Pequeno Príncipe". É da década de 40 e tem tudo a ver com programação para tipos abstratos, logo, leia com atenção!
Agora (após ler o texto) baixe o projeto ordenador.zip e abra-o pelo BlueJ.
Analise especialmente os códigos das classes Contato e Ordenador.
Projetamos a classe Ordenador para ser um utilitário responsável por ordenar ArrayList's de quaisquer objetos que venhamos a criar pra nossas aplicações, mesmo que sejam de diferentes domínios de problemas (como Contato, Conta e Item, presumivelmente oriundos de sistemas distintos).
Na classe Ordenador, implemente um método para ordenar ArrayList's de objetos Conta (pelo nome do titular) e outro método para ordenar ArrayList's de objetos Item (pelo título). Implemente por analogia, com base no método ordenarContatos(), já implementado.
Qual é a diferença entre as implementações que você fez? Quais os problemas que você pode identificar com essa abordagem? Conseguiremos nosso objetivo de ordenar ArrayList's de QUALQUER objeto com essa abordagem.
Como pode o problema que o aviador enfrentou em desenhar carneiros estar associado com o problema que estamos enfrentando com o nosso ordenador???
interface U{
public int operU();
}
class V{
public int operV(){
return 9;
}
}
class W extends V{
public int operW(){
return 1;
}
class X implements U{
public int operU(){
return 11;
}
public int operX(){
return 5;
}
}
class Y implements U{
public int operU(){
return 3;
}
public int operY(){
return 7;
}
}
class Z{
public void metodo1(U u){
System.out.println(u.operU());
}
public void metodo2(V v){
System.out.println(v.operV());
}
public void metodo3(W w){
System.out.println(w.operW());
}
public void metodo4(X x){
System.out.println(x.operX());
}
public void metodo5(Y y){
System.out.println(y.operY());
}
}
Considere, quando necessário, as seguintes variáveis:
V v1=new V();
W w1=new W();
X x1=new X();
U u1=new X();
U u2=new Y();
Z z1=new Z();
int n;
Analise cada item a seguir. Caso um item seja falso, justifique. Caso seja verdadeiro, indique o valor que será atribuído ou impresso na saída padrão. Todos os itens são independentes, e devem ser analisados considerando que apenas o código do início da questão foi executado.
3. Considere as seguintes classes:
class HomemSafado{
public HomemSafado(){}
public void namorar(){}
}
class Mulher{
public Mulher(){}
public void namorarAlguem(HomemSafado homem){
homem.namorar();
}
}
4. Use interfaces e modifique as classes acima para que Mulher não “conheça” a classe concreta HomemSafado.