Ir ao conteúdo
  • Cadastre-se

Java Conceitos e terminologias em Orientação a Objetos


Posts recomendados

Boa noite!

 

Estou começando a ver programação orientada a objetos em Java (antes estava nas estruturadas).

 

Minhas principais dúvidas são a respeito das terminologias e da organização do código que ainda não peguei muito bem.

 

import java.util.Scanner;


public class usuario 
{
	private String nome;
	private String email; 
	private String login; 
	private String senha; 
	private double media; 

	public usuario ()
	{
		this("","","",""); 
	}

	public usuario (String nome, String email, String login, String senha)
	{
		this.nome = nome; 
		this.email = email; 
		this.login = login; 
		this.senha = senha; 
	}
	
	//Setters

	public void setNome(String nome)
	{
		this.nome = nome; 
	}
	
	public void setEmail(String email)
	{
		this.email = email; 
	}
	
	public void setLogin(String login)
	{
		this.login = login;
	}
	
	
	//Getters
    	
    public String getNome()
	{
		return this.nome;
	}
	

	public String getEmail()
	{
		return this.email;
	}
	
		public void setSenha(String senha)
	{
		this.senha = senha; 
	}
	

	public String getLogin()
	{
		return this.login;
	}

	public String getSenha()
	{
		return this.senha; 
	}

	public void provarExistencia()
	{
		System.out.println("Oi, eu existo");
	}
	
	public void setMedia(double media)
	{
	    this.media = media; 
	}
	
	public double getMedia()
	{
	    return this.media;
	    
	}
	
	public void testaMedia(double media)
	{
	    if(this.media >= 6)
	    {
	        System.out.println("Media: " + this.media);
	        System.out.println("APROVADO");
	    } else
	    {
	        System.out.println("Media: " + this.media);
	        System.out.println("REPROVADO");
	        
	    }
	}
	
}

Essa daqui séria então a classe objeto que possui todos os dados a serem pegos. Eu terminei programação estruturada vendo muito pouco a respeito de funções,

então me corrijam se eu estiver errado, mas programação orientada  a objetos possui muita modularização? Seria correto afirmar que são funções dentro de funções?

class Exemplo1
{
	public static void main (String[] args)
	{
			usuario usuario1 = new usuario();
			
			Scanner scanf = new Scanner(System.in);

			usuario1.setNome("Lucas");
			usuario1.setEmail("[email protected]");
			usuario1.setLogin("Tecnologgamer"); 
			usuario1.setSenha("27031998");
			
			usuario1.setNome() = scanf.nextLine();
			usuario1.setEmail()  = scanf.nextLine();
			usuario1.setLogin()  = scanf.nextLine();
			usuario1.setSenha()  = scanf.nextLine();
			

	}
}

Por último eu queria saber onde eu errei nesse momento onde eu estava tentando pegar os valores de entrada, mas deu erro de compilação. Qual seria o jeito certo de atribuir um valor de entrada?

Link para o comentário
Compartilhar em outros sites

O import  java.util.Scanner foi usado no arquivo da classe usuario. Acontece que não é usado nessa classe.

 

Melhor importá-lo no programa principal, na classe Exemplo1, onde de fato é usado.

 

Dica, prefira dar as classes nomes com letras maiúsculas e variáveis (instancias) nomes com letras minúsculas. Afeta nada na lógica porém ajuda na documentação e manutenção futura do programa a ser feita por você mesmo ou por um coleguinha de trabalho.

 

Outra dica. Quando usamos uma IDE que gera os setter/getter para nós. ela tende a escrever setter/getter para todos os atributos da classe. As vezes não é necessário. Por exemplo, setter de média a rigor não deveria atuar direto na média e sim calculá-la de acordo como "notas" que seriam fornecidas como parametros ou ... a partir dos atributos. No caso, como não tem atributo com as notas, acho que seria melhor usar passando parametros (mais de uma nota). Também não é um erro de programação, não está errado. É apenas uma recomendação de boa prática.

 

Agora vamos depressa a questão do seu programa não compilar.

 

No programa principal, observe como você usa o setNome() no primeiro exemplo

usuario1.setNome("Lucas");

 

Depois você usa o setNome() uma segunda vez, mas com um formato diferente, observe ...

usuario1.setNome() = scanf.nextLine();

 

Concorda que estão diferentes ? Então uma forma está correta e a outra está errada.

 

Aqui o problema é que você não respeitou a sintaxe. 

 

A primeira forma é a forma correta de invocar um método, ou seja, objeto.metodo( parametros );

No caso o objeto é usuario1

o método é setNome(),  que atribui um nome ao infeliz do usuário

o parâmetro é "Lucas", que passará a ser o nome do coitado.

 

A segunda forma está sintaticamente errada pois você está tentando atribuir ao método um valor. Métodos não são campos, não são variáveis. O máximo que se faz com um método é invocá-lo e passar um parâmetro para ele dentro dos parenteses. No caso, você quer dar ao usuário o nome que foi digitado. Então a forma correta seria

usario1.setNome(scanf.nextLine());

 

Então como ficariam os outros ??? Pense um pouco.

 

PS.:  esse nome que você deu a instancia do teclado denuncia sua origem hein ?? scanf hein ?? Tö ligado ! :)

 

Dá uma olhada nesse fonte aqui

https://repl.it/@bokomoko/cadastro-de-usuarios

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...