Problema Básico

6 respostas
L

Boa tarde! Eu sou iniciante na programação (no meu caso tô fazendo em Java por conta da faculdade), e eu sinto que meu maior problema muito além de entender os conceitos, é colocar eles em prática. Eu não consigo abstrair, por exemplo, o professor diz crie uma agenda, só que eu não consigo abstrair a ideia da agenda, o que a agenda tem? o que ela faz? Não sei se ficou claro, mas se alguém pudesse me dar um dica de como melhorar isso, ficaria grato!

6 Respostas

wldomiciano

Comece pensando que uma agenda guarda uma lista de contatos.

Só nisso você já percebe que seu programa deve conter pelo menos duas entidades: Agenda e Contato.

class Agenda {
  private List<Contato> contatos = new ArrayList<>();
}

class Contato {
  String nome;
  String telefone;

  Contato(String nome, String telefone) {
    this.nome = nome;
    this.telefone = telefone;
  }

  @Override
  public String toString() {
    return this.nome + " " + this.telefone;
  }
}

Uma agenda permite que você realize as seguintes operações:

  • Adição de contatos (com seu telefone)
  • Exclusão de contatos
  • Listagem de contatos cadastradas

Com isso podemos incrementar nossa classe Agenda pra ela ficar assim:

class Agenda {
  List<Contato> contatos = new ArrayList<>();

  void adicionarContato(Contato contato) {
    this.contatos.add(contato);
  }

  void removerContato(Contato contato) {
    this.contatos.remove(contato);
  }

  List<Contato> pegarContato() {
    return Collections.unmodifiableList(this.contatos);
  }
}

Depois você cria uma outra classe, que será a principal, que vai testar a ideia:

public class Main {
  public static void main(String... args) {
    Agenda agenda = new Agenda();

    Contato contato1 = new Contato("Contato 1", "1111");
    Contato contato2 = new Contato("Contato 2", "2222");
    Contato contato3 = new Contato("Contato 3", "3333");

    agenda.adicionarContato(contato1);
    agenda.adicionarContato(contato2);
    agenda.adicionarContato(contato3);

    agenda.pegarContato().forEach(System.out::println);

    agenda.removerContato(contato2);

    System.out.println("");

    agenda.pegarContato().forEach(System.out::println);
  }
}

Em seguida você desenvolver uma lógica para que o usuário consiga realizar essas operações a partir da linha de comando, mas isso é outra história.

L
Muito Obrigado!  uma duvida, poderia me explicar essa parte do código:

List pegarContato() {

return Collections.unmodifiableList(this.contatos);

}

Mais especificamente esse metodo unmodifiableList.
wldomiciano

O método unmodifiableList transforma uma lista normal em uma lista que não pode ser modificada.

Isto é, em uma lista que não permite a adição ou remoção de elementos.

Agenda possui a lista de contatos, logo, somente Agenda deveria ser capaz de modificar esta lista. Se eu tivesse retornado a lista diretamente assim:

public List<Contato> pegarContato() {
  return this.contatos;
}

Código de fora poderia alterar a lista a vontade e coisas como no código abaixo seriam possíveis.

public class Main {
  public static void main(String... args) {
    Agenda agenda = new Agenda();
    List<Contato> contatos = agenda.pegarContato();

    contatos.add(new Contato("Contato 1", "1111"));
    contatos.add(new Contato("Contato 2", "2222"));
    contatos.add(new Contato("Contato 3", "3333"));

    agenda.pegarContato().forEach(System.out::println);
  }
}

Viu ali como eu fui capaz de adicinar contatos sem precisar invodar o método Agenda.adicionarContato? Pois então, isso não deveria ser possível.

Contudo, como eu estou retornando uma lista não-modificavél eu posso até tentar alterar, mas vai causar um erro.

L

Program

Tipo eu estava tentando fazer recebendo os valores do usuário, mas eu não estou conseguindo entender como eu faria para remover um contato especifico, ou mostrar apenas determinado contato, a partir da entrada do usuário, por exemplo ele passaria o nome e eu mostraria o telefone e nome desse contato a partir disso.

L

Eu adicionei essa função ai no final (eu acredito que se eu tiver feito direito ela vai retornar a posição da lista que esse contato se encontra), então a partir dessa posição eu poderia mostrar ou remover um contato especifico com o usuário passando apenas o nome desse contato, tem como fazer isso, ou meio raciocínio esta errado?

wldomiciano

Pelo que eu testei, a lógica que vc usou está funcionando sim. Só não to conseguindo pensar agora se isso é util.

Criado 18 de janeiro de 2021
Ultima resposta 19 de jan. de 2021
Respostas 6
Participantes 2