Como determinar que classe básica possui uma coleção de outra classe em um relacionamento MxN?
Como exibir na GUI o resultado de uma consulta que retorna uma coleção de dados como resposta?
RESPOSTAS
Os alunos devem utilizar a exceção RuntimeException da seginte forma:Onde seria usadoNo mais nada em relação a exceções deve ser explicado até a aula sobre o assunto!
System.out.println(mensagem)
deve-se usar
throw new RuntimeException(mensagem)
O operador == compara as referências, ou seja, os valores que as variáveis têm. Assim a comparação verifica se duas variáveis referenciam, apontam para, o mesmo objeto. Neste caso há uma verificação de identidade.
Já o método equals normalmente compara atributos, dados do objeto, para decidir se um objeto é igual (não necessariamente idêntico) a outro. Mas para isso você deve redefinir o método na classe em questão, caso contrário o método herdado de Object é equivalente ao operador ==.A definição do método equals deve seguir a seguinte forma:
public class X { T a1; int a2; // ... public boolean equals(X x) { boolean resposta = false; // compara os atributos de this e de x // de modo a fornecer a semântica de igualdade entre dois // objetos, por exemplo: resposta = x.a1.equals(this.a1) && (x.a2 == this.a2); return resposta; } }
Dê preferência ao uso das classes java.util.Calendar e java.util.GregorianCalendar. Ex.:Calendar hoje = Calendar.getInstance(); int dia = hoje.get(Calendar.DAY_OF_MONTH); int mes = hoje.get(Calendar.MONTH); int ano = hoje.get(Calendar.YEAR);Para mais informações vejam a documentação.
A classe fachada é a classe que disponibiliza todos os serviços do sistema. É uma implementação do padrão de projetos Facade. A mesma deve ter como atributo todas as coleções de negócio (cadastros) do sistema, bem como disponibilizar métodos que chamem os métodos das coleções. Ainda é possível que a classe fachada faça verificações que envolvam mais de um cadastro, como, por exemplo, verificações de integridade do tipo: Antes de inserir uma conta no cadastro de contas verificar se o cliente da mesma está no cadastro de clientes do banco.
Esta escolha deve ser feita pelo grupo levando em conta a natureza da aplicação em questão. Normalmente a informação do relacionamento fica apenas de um lado (para diminuir a complexidade no uso de um mecanismo de persistência não OO). O lado que manterá a informação deve ser o que mais freqüentemente é consultado, ou o mais relevante, segundo a aplicação em desenvolvimento.
Normalmente essa classe é criada apenas quando existe um atributo oriundo deste relacionamento.
O uso da coleção de negócio provê um maior reuso de código, uma vez que as regras para cadastrar, consultar, e remover um objeto já estão implementadas no mesmo. Caso a coleção de dados fosse utilizada, a classe que usa a mesma deverá escrever tias regras. Por outro lado nem sempre as mesmas regras para incluir, remover, ou consultar um objeto no sistema deve ser utilizado para um relacionamento. Neste caso a coleção de dados deve ser reusada. Mais uma vez esta escolha deve ficar a cargo do grupo, uma vez que a mesma depende da natureza da aplicação sendo desenvolvida.
Os métodos de inserção e atualização sempre recebem o objeto a ser inserido, não os atributos necessários para que ele seja criado ou atualizado. Já os métodos de remoção e pesquisa podem receber tanto um objeto, base para a busca usando o método match, quanto uma informação que possa identificar unicamente o objeto, dependendo do que for mais útil à aplicação. As duas abordagens podem ser adotadas em um mesmo projeto!
Definir na coleção de dados (repositório) o método procurar que recebe um objeto da classe básica, por exemplo B, com os atributos que se deseja procurar setados, e definir um método na classe básica B, public boolean match(B b) que compara o objeto recebido como parâmetro apenas com os atributos não nulos (condições de pesquisa). Assim o método match deve ser usado pelo repositório para pesquisar por objetos de uma classe básica. Dessa forma ao se percorrer o repositório, todas os objetos do repositório que "match" o objeto passado como parâmetro para a busca serão selecionados.
O ideal é fazer o reuso da coleção de dados (RepositorioClasseBasicaArray ou Lista) criando uma nova instância da coleção com os elementos que satisfazem o critério da busca.
Uma maneira, enquanto não aprendemos o conceito de interfaces, é definir o método getIterator() no repositório que retorna um array com os objetos contidos nos mesmos. Por exemplo, este método deve ser chamado da coleção de dados retornada como resposta de uma consulta, como dito no item anterior, para listar na GUI os objetos retornados como resposta. Numa classe RepositorioPessoasArray o método deveria ser:
public Pessoa[] getIterator() {...}
Neste caso o sistema não deve utilizar o código (CPF) como o identificador para as operações do sistema. Cria-se um código interno que é utilizado pelo sistema para manipular os objetos.