The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Problema
Modele em UML (incluindo construtores) e implemente em Java uma classe CatRegistry cujas instâncias registam gatos (classe Cat). A classe CatRegistry deve manter um mapa de gatos, indexando-os pelos respectivos nomes. Não é necessário implementar a classe 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.
A interface da classe CatRegistry contém os métodos de inserção (put) e consulta (get). O primeiro (put) aceita um gato e regista-o (se o nome do gato já tiver sido usado – por um gato com esse nome já existir no mapa – deve lançar a excepção DuplicateCatException); o segundo (get) aceita o nome de um gato e devolve o gato com esse nome a partir do mapa, caso exista, ou lança uma excepção (NoSuchCatException), se não existir.
Diagrama UML
| Diagrama UML
|
|
|
Código da Solução
| Classe DuplicateCatException
|
class DuplicateCatException extends Exception {
public DuplicateCatException(String message) { super(message); }
}
|
| Classe NoSuchCatException
|
class NoSuchCatException extends Exception {
public NoSuchCatException(String message) { super(message); }
}
|
| Classe CatRegistry
|
import java.util.HashMap;
import java.util.Map;
public class CatRegistry {
private Map<String, Cat> cats = new HashMap<>();
public void put(Cat cat) throws DuplicateCatException {
String name = cat.getName();
if (cats.containsKey(name)) {
throw new DuplicateCatException("A cat with the name " + name + " already exists.");
}
cats.put(name, cat);
}
public Cat get(String name) throws NoSuchCatException {
Cat cat = cats.get(name);
if (cat == null) {
throw new NoSuchCatException("No cat found with the name " + name + ".");
}
return cat;
}
}
|
A classe Cat (não pedida no exercício) poderia ser algo como se apresenta de seguida.
| Classe Cat
|
class Cat {
private String name;
private int age;
public Cat(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
}
|