Projeto Detalhado - LPI-AgendaContatos/Progressive GitHub Wiki
Aqui será explicado a construção do projeto passo a passo, além de considerações, problemas e demais.
Passo 001
Classes, métodos, atributos e relações
-
Inicialmente iniciamos listando os requisitos funcionais do sistema, que brevemente se tornarão métodos. (TESTE\Main);
-
Depois identificamos quais serão os objetos\classes e seus respectivos atributos.
A mais importante entre as classes é o 'Contato' (e é o mais complexo também). Além dos atributos básicos como nome, e-mail e etc. A classe é composta por vários 'Telefones', então é criado uma classe para representá-los e os mesmos são acrescentados ao 'Contato" por meio de uma lista {O uso da lista foi escolhido, mesmo que complexamente, pois não precisa de um tamanho pré-definido, como o vetor. Mas poderia ser substituída por uma fila ou pilha}. Cada classe 'Telefone' por sua vez, é composto por um 'Tipo'. Mesmo que seja único, decidi representá-lo através de uma classe, já que tardiamente deveremos listá-las. E por último, haverá uma classe 'Agenda' onde será agrupado, os contatos, tipos e grupos, por meio de listas. Tais listas serão usadas para a exibição dos "CRUDS".
3 Após a listagem dos atributos, iniciamos a construção dos métodos.
{Uma boa prática de programação é delegar diferentes objetivos para as classes. Sendo assim, as classes citadas acima serão usadas somente para modelar os objetos, e as ações terão suas próprias classes. Tudo isso será melhor organizado, ou "empacotado", ao adotar o modelo MVC. Então, por enquanto, as ações dividirão espaço com a entrada e saída de dados, já que a interface ainda não foi incrementada}. O primeiro método é a criação de um 'Contato'. Lemos os atributos, passamos como parâmetro e inicializamos a classe e já adicionamos objeto á lista. Ainda não é possível adicionar mais de um telefone por contato. Mas as listas de exibições já estão prontas.
ERROS, OBSERVAÇÕES E PRÓXIMOS PASSOS:
-
A interação feita por Interactive Console
-
É de vital importância a criação do digrama de classes para o acompanhamento do desenvolvimento do programa.
-
Estudar sobre interfaces é crucial.
-
Ter, ao menos, conhecimentos básicos sobre o modelo organizacional MVC.
-
Incrementar o método de pesquisa.
-
Adicionar mais de um telefone por contato.
-
Preparar a interação por grupos
-
Tratamento de exceções.
-
Iniciar as interfaces e fazer as devidas alterações necessárias.
Passo 002
** Editar e excluir, grupos e tratamento de exceções**
- Implementar os métodos de editar e excluir contatos
Descrição
- Promover interação dos contatos por grupos.
Como ainda não foram implementadas a interfaces, deve-se interrogar o usuário a respeito se o contato a ser salvo pertence ou não a um grupo. Logo devemos ler o nome do grupo a qual se faz parte. E da mesma forma em que se fez com 'Contato', 'Telefone' e 'Tipo', iniciaremos a classe 'Grupo' com a variável lida e adicionaremos a lista de grupos na agenda e em contatos. {Mais tardiamente, se faz necessário listar os contatos que fazem parte dos respectivos grupos e não somente os grupos a qual o usuário faz parte, como está até agora. Deve se dar uma atenção especial a esta área quando implementar a interface.}
- Implementar tratamento de exceções.
O tratamento de exceções, como o próprio nome diz, tem como função identificar e cuidar de possíveis erros ou resultados não esperados. Então, é bom listarmos tais critérios que devem receber o tratamento. Um exemplo clássico de exceção que observamos no sistema de agenda é, ao listar os contatos, tipo e grupos (CRUD), verificar se a lista está vazia, e caso esteja, enviar uma mensagem ao usuário. Pode haver também, outros casos que precisarão ser tratados, cabe a cada programador identifica-los.
ERROS, OBSERVAÇÕES E PRÓXIMOS PASSOS:
- A interação feita por Interactive Console.
- Incrementar o método de pesquisa.
- Verificar se grupo ou tipo já existe.
- Listar os contatos que fazem parte de cada grupo.
- Iniciar as interfaces e fazer as devidas alterações necessárias.
Passo 03
** Modelo MVC, verificar existência e Interfaces **