(→Problema) |
(→Solução) |
||
Line 18: | Line 18: | ||
public Cat(String name, int age) { _name = name; _age = age; } | public Cat(String name, int age) { _name = name; _age = age; } | ||
+ | |||
+ | public String getName() { return _name; } | ||
public String toString() { return "CAT: " + _name + " " + _age; } | public String toString() { return "CAT: " + _name + " " + _age; } | ||
Line 32: | Line 34: | ||
private Map<String, Cat> _registry = new TreeMap<String, Cat>(); | private Map<String, Cat> _registry = new TreeMap<String, Cat>(); | ||
− | public Cat get(String name) | + | public Cat get(String name) { return _registry.get(name); } |
− | public void put( | + | public void put(Cat cat) { _registry.put(cat.getName(), cat); } |
} | } | ||
</java5> | </java5> | ||
Line 56: | Line 58: | ||
Cat c2 = new Cat("Tareco", 1); | Cat c2 = new Cat("Tareco", 1); | ||
// (2) insere os gatos no registo | // (2) insere os gatos no registo | ||
− | registry.put( | + | registry.put(c1); |
− | registry.put( | + | registry.put(c2); |
// (3) guarda o registo em disco | // (3) guarda o registo em disco | ||
ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("cats.dat"))); | ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("cats.dat"))); |
Modele e implemente uma classe CatRegistry cujas instâncias registam gatos. A classe deve manter um mapa de gatos, indexando-os pelos respectivos nomes. Não é necessário implementar Cat. Considere que a classe Cat tem atributos idade (_age) e nome (_name). Considere ainda que o construtor de Cat aceita os valores para os atributos mencionados e que os métodos de acesso (getters e setters) estão definidos. Considere ainda que Cat implementa a interface Serializable.
A interface da classe CatRegistry contém os métodos de inserção (put) e consulta (get). O primeiro aceita um gato e regista-o; o segundo aceita o nome de um gato e devolve o gato, caso exista, ou null, se não existir. Deve ser possível guardar em disco as instâncias do registo.
Escreva uma função main que execute as seguintes operações: (1) cria um registo e dois gatos; (2) insere os gatos no registo; (3) guarda o registo em disco; (4) recupera o registo a partir do disco; (5) recupera os dois gatos a partir do registo; e (6) apresenta os gatos na saída (System.out).
A classe gato, descrita no enunciado, pode ser a seguinte (note-se que deve implementar java.io.Serializable): <java5> import java.io.Serializable;
public class Cat implements Serializable {
private String _name = ""; private int _age = 0;
public Cat(String name, int age) { _name = name; _age = age; }
public String getName() { return _name; }
public String toString() { return "CAT: " + _name + " " + _age; }
} </java5>
A classe do registo, CatRegistry, é simplesmente um gestor de um mapa de gatos (também deve ser serializável): <java5> import java.util.Map; import java.util.TreeMap; import java.io.Serializable;
public class CatRegistry implements Serializable {
private Map<String, Cat> _registry = new TreeMap<String, Cat>();
public Cat get(String name) { return _registry.get(name); } public void put(Cat cat) { _registry.put(cat.getName(), cat); }
} </java5>
Finalmente, a classe App é simplesmente a classe que contém a função main. Os comentários nessa função seguem os passos descritos no enunciado. <java5> import java.io.ObjectOutputStream; import java.io.BufferedOutputStream; import java.io.FileOutputStream;
import java.io.ObjectInputStream; import java.io.BufferedInputStream; import java.io.FileInputStream;
import java.io.IOException;
public class App {
public static void main(String[] args) throws IOException, ClassNotFoundException { // (1) cria um registo e dois gatos CatRegistry registry = new CatRegistry(); Cat c1 = new Cat("Pantufa", 9); Cat c2 = new Cat("Tareco", 1); // (2) insere os gatos no registo registry.put(c1); registry.put(c2); // (3) guarda o registo em disco ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("cats.dat"))); oos.writeObject(registry); oos.close(); // (4) recupera o registo a partir do disco ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream("cats.dat"))); CatRegistry previousRegistry = (CatRegistry)ois.readObject(); ois.close(); // (5) recupera os dois gatos a partir do registo Cat recCat1 = previousRegistry.get("Pantufa"); Cat recCat2 = previousRegistry.get("Tareco"); // (6) apresenta os gatos na saída (System.out) System.out.println(recCat1); System.out.println(recCat2); }
} </java5>