Colecções de Objectos/Registo de Gatos: Difference between revisions
From Wiki**3
Created page with "= Problema = Modele em UML (incluindo construtores) e implemente em Java uma classe '''CatRegistry''' cujas instâncias registam gatos (classe '''Cat'''). A classe '''CatRegis..." |
|||
| Line 14: | Line 14: | ||
{{CollapsedCode|Classe DuplicateCatException| | {{CollapsedCode|Classe DuplicateCatException| | ||
<source lang="java"> | <source lang="java"> | ||
class DuplicateCatException extends Exception { | |||
public DuplicateCatException(String message) { | |||
super(message); | |||
} | |||
} | |||
</source> | </source> | ||
}} | }} | ||
| Line 19: | Line 24: | ||
{{CollapsedCode|Classe NoSuchCatException| | {{CollapsedCode|Classe NoSuchCatException| | ||
<source lang="java"> | <source lang="java"> | ||
class NoSuchCatException extends Exception { | |||
public NoSuchCatException(String message) { | |||
super(message); | |||
} | |||
} | |||
</source> | </source> | ||
}} | }} | ||
| Line 24: | Line 34: | ||
{{CollapsedCode|Classe CatRegistry| | {{CollapsedCode|Classe CatRegistry| | ||
<source lang="java"> | <source lang="java"> | ||
import java.util.HashMap; | |||
import java.util.Map; | |||
public class CatRegistry { | |||
private Map<String, Cat> cats; | |||
public CatRegistry() { | |||
this.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; | |||
} | |||
} | |||
</source> | |||
}} | |||
A classe '''Cat''' (não pedida no exercício) poderia ser algo como se apresenta de seguida. | |||
{{CollapsedCode|Classe CatRegistry| | |||
<source lang="java"> | |||
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; } | |||
} | |||
</source> | </source> | ||
}} | }} | ||
Revision as of 07:49, 3 October 2024
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;
public CatRegistry() {
this.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 CatRegistry |
|---|
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; }
}
|