Polimorfismo, Interfaces, Classes Abstractas/Exercício 05: Tabelas e Impressoras
From Wiki**3
Problema
Modele e implemente a classe Table que contém um número fixo de inteiros (especificado na altura da criação das suas instâncias). Essa classe possui um método (print) que permite imprimir todo o conteúdo, aplicando um formato a cada valor. O formato aplicado por print varia de acordo com o tipo de “impressora” (objecto do tipo Printer, passados como argumento de print). As potenciais impressoras têm um método format (aceita um inteiro e devolve uma cadeia de caracteres – tipo String) que permite apresentar um valor inteiro de uma forma específica para cada impressora. Defina os conceitos Table e Printer. Defina ainda duas impressoras: uma que formata cada inteiro entre parânteses rectos (BracketsPrinter); e outra que repita cada valor duas vezes cada um dos valores da tabela (DuplicatePrinter). Pode realizar outros conceitos/métodos que julgue necessitar. Evite repetições de código.
Solução
UML: Diagrama de Classes
Conceito de Tabela
public class Table {
private int _vector[];
public Table(int size) {
_vector = new int[size];
// init table here...
}
public void print(Printer p) {
for (int i: _vector) System.out.println(p.format(i));
}
}
Conceito de Transformação
public interface Printer {
String format(int i);
}
Conceito de "BracketsPrinter"
public class BracketsPrinter implements Printer {
@Override
public String format(int i) {
return "[" + i + "]";
}
}
Conceito de "DuplicatePrinter"
public class DuplicatePrinter implements Printer {
@Override
public String format(int i) {
return "" + i + i;
}
}
Programa Principal
O programa principal é como indicado no enunciado do problema e indicado abaixo para clarificação:
public class Application {
//TODO
}
Compiling and Running
How to Compile?
The compilation is as follows:
javac Table.java javac Printer.java javac BracketsPrinter.java javac DuplicatePrinter.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).
Running
The program starts at a main function (in this case, contained in the Application class):
java Application