Aula 4.3 - Classes do tipo coleções - java POO
Na ultima aula dessa série de aulas sobre POO, se ainda não conferiu... clique aqui, começamos a introduzir o conceito de coleções usando a classe ArrayList.
Para compreender melhor o uso de coleções vamos realizar uma atividade abaixo, mas antes precisamos introduzir a classe HashMap.
HashMap é uma especialização de map. Um map é uma coleção de pares chave/valor (de objetos). Como o ArrayList, um map pode armazenar um número flexível de entradas. Uma diferença entre eles é que em Map cada entrada não é um objeto, mas um par de objetos.
Com isso em mente, apresentamos a atividade abaixo:
Implemente em Java um sistema simples de Suporte técnico.
Seu sistema será capaz de criar um banco de soluções e pesquisar, dentre estas soluções, aquela que for mais adequada para resolver o problema descrito pelo usuário. Caso não exista uma resposta cadastrada para o problema, o seu sistema deverá exibir uma resposta padrão, que também estará cadastrada (em separado).
Você deverá implementar uma classe denominada SuporteTecnico, que terá os seguintes campos:
- bancoSolucao, do tipo HashMap<String,String>;
- respostaPadrao, do tipo ArrayList<String>;
Esta classe deverá conter os seguintes métodos:
- um construtor que cria campos defnidos;
- um método que inicializa os campos defnidos (a ser invocado pelo construtor);
- um método para buscar uma solução, conforme o problema apresentado – a ser passado como parâmetro;
- um método para buscar uma “solução padrão” aleatória, caso não exista solução prevista para o problema apresentado;
Implemente uma classe denominada Interpretadora, que terá um único campo:
- palavraChave, do tipo HashSet<String>;
O conjunto palavraChave deverá ser preenchido através da interpretação do problema descrito pelo usuário. Essa interpretação consistirá em ler o problema (do teclado) e separar as palavras lidas em um conjunto, sem repetição, para possibilitar a busca da solução pela classe SuporteTecnico.
Exemplo:
Descrição do problema:
“Meu computador está apresentado problemas. Está travando. Está apresentando tela azul.”
palavraChave = “meu”, ”computador”, ”está”, ”apresentando”, ”problemas”, “travando”, ”tela”, ”azul”.
Crie um aplicativo Java denominado CallCenter para testar o uso das classes definidas.
Dica:
Na classe Interpretadora, utilize a classe StringTokenizer.
Então vamos começar com nossa classe SuporteTecnico com os campos informados:
public class SuporteTecnico {
private HashMap<String, String> bancoSolucao ;
private ArrayList<String> respostaPadrao;
Também precisamos declarar os seguintes campos:
private Interpretadora palavraChave; //instanciar a classe Interpretadora
private SecureRandom aleatorio; //para gerar números aleatórios
Assim podemos criar nosso construtor da classe SuporteTecnico, mas antes como pedido vamos criar um método que inicializa os campos "bancoSolucao" e "respostaPadrao".
public void inicializaCampos(HashMap<String, String> bancoSolucao, ArrayList<String> respostaPadrao) {
bancoSolucao.put("lento","compre mais um pente de memória ram");
respostaPadrao.add("Preciso de maiores informações a respeito.");
}
Como você está usando um HashMap, note que no método acima você precisa adicionar mais palavras chaves seguidas de respostas para o problema em seu banco de solução. Já o ArrayList do respostaPadrao... você pode adicionar outros tipos de respostas padrão para um problema não encontrado no banco de solução usando o método .add() da coleção, repare que o método para adicionar em um HashMap é .put().
Depois, crie o construtor da classe:
public SuporteTecnico(){ //CONSTRUTOR
aleatorio = new SecureRandom();
palavraChave = new Interpretadora();
bancoSolucao = new HashMap<>();
respostaPadrao = new ArrayList<String>();
inicializaCampos(this.bancoSolucao,this.respostaPadrao); //inicializa as variaveis
}
Seguindo a ordem dos pedidos solicitados na atividade, agora devemos criar um método para buscar as soluções presente em nosso HashMap. Antes disso vamos precisar de quebrar a frase que descreve o problema digitada pelo usuário. Por exemplo a frase: "Meu computador está lento" deverá ser quebrada em: "Meu", "computador", "está", "lento". Para fazer isso vamos criar nossa classe "Interpretadora" para quebrar essa frase digitada pelo usuário e retornar para a variável HashSet "pergunta", a imagem abaixo ilustra como ficou nossa classe.. se necessário clique sobre a imagem para ampliar.
Você provavelmente ainda não entendeu porque estamos usando a coleção HashSet, estamos usando ela pois ela permite retirar palavras repetidas.. supondo que o usuário digita a frase "meu pc está lento e meu pendrive não conecta" ... depois que quebrar a frase e jogar dentro de um hashset.. o hashset conterá apenas: "meu", "pc", "está", "lento", "e", "pendrive", "não", "conecta".. como pode notar a palavra repetida "meu" foi inserida apenas uma vez no hashset.
O código da classe "Interpretadora" já é auto explicativo e também está comentado. Então agora voltemos ao método para buscar as soluções presente em nosso HashMap.
Como pode notar na imagem acima, chamamos um método da classe "Interpretadora" para retornar em um hashset a pergunta do usuário quebrada. Depois utilizamos um for aprimorado que serve para percorrer por exemplo todo um array sem precisar informar tamanho.
for(declaração : expressão){
//instruções
}
No for do nosso método "buscarSolucao" a variavel "value" do tipo String recebe a String que tem contida em uma posição do nosso hashset "pergunta" e esse loop continua até percorrer todo o hashset "pergunta". Na condição dentro do for, se nosso HashMap "bancoSolucao" que inicializamos no método "inicializaCampos" contiver a como chave a mesma String do hashset "pergunta" então retornamos para quem chamar o método "buscarSolucao" a frase que será a solução do problema do usuário. Caso contrário, chamamos o método "solucaoPadrao" que criamos mais abaixo (confira na imagem acima), este método utiliza da classe SecureRandom para gerar um número aleatório dentre os número de respostas padrão que colocamos dentro do ArrayList "respostaPadrao"... assim podemos imprimir diversas respostas para o problema que não está em nosso hashmap de "bancoSolucao".
A imagem abaixo ilustra como ficou nossa classe "SuporteTecnico", se necessário clique sobre a imagem para ampliar:
Nosso programa está praticamente pronto, agora só falta criar a classe principal.. a classe que conterá o método main() que executará nosso programa. Confira como ela fica abaixo:
Acredito que o código acima é de fácil compreensão. Para dar uma ajudinha para quem ainda não compreendeu... na linha 16 é instanciado a classe "SuporteTecnico", neste momento o construtor é criado e os campos inicializados. Na linha seguinte enviamos para o método da classe.. a frase digitada pelo usuário, o método vai receber a frase e retornar uma resposta padrão caso não encontre a palavra chave em nosso banco de solução ou caso encontre, ele irá retornar uma frase informando como o usuário deve proceder com o problema descrito por ele mesmo.
Bom, espero que tenha compreendido tudo.. se surgiu alguma dúvida, deixe um comentário abaixo!
COMENTÁRIOS