[RESOLVIDO]Exercicio OO

29 respostas
Z

Ola,
estou começando a estudar OO em java.

Depois de ler o capitulo hoje, fiz um exercício. Gostaria de saber si ele pode ser considerado correto, quero saber si estou no caminho certo!

O exercício é:

  1. Crie uma classe para simular o funcionamento de um motor. A classe Motor deve possuir as variáveis velocidade em RPM ( rotações por minuto), fabricante, voltagem,
    status do motor (ligado/desligado) e os métodos ligaMotor, desligaMotor, verificaVelocida.

Olhem o que eu fiz :

package motor;
     
    public class Motor {
     
       
       
    static int velocidade = 80 ,voltagem = 12;
     
    boolean status;
     
    String fabricante;
     
     void ligaMotor(int voltagem,int velocidade){
     
    status = true;
    System.out.println("Motor ligado");
     
    }
     void desligaMotor(){
         
         
    status = false;
    System.out.println("Motor desligado");
       
       
    }
    int verificaVelocidade(int velocidade){
       
       
       
        return velocidade;
    }
    public static void main(String args[]){
       
        Motor motor = new Motor(); 
        motor.fabricante = "Ford";
        System.out.println("O fabricante do motor é " + motor.fabricante);
        motor.ligaMotor(voltagem,velocidade);
        System.out.println("A velocidade é " + motor.verificaVelocidade(velocidade));
        motor.desligaMotor();
    }
       
    }

29 Respostas

MarcioCasteloBranco

Esta mais o menos certo pq que vc usou as variareis de instância com static?

Vingdel

Olá luiz!

O método ligaMotor não precisa receber parâmetro algum, afinal você nem os utiliza ele poderia ficar assim:void ligaMotor(){ status = true; System.out.println("Motor ligado"); }O mesmo para o método verificaVelocidade(), ficaria assim:int verificaVelocidade(){ return velocidade; }

E claro, para chamar os mesmo, não é necessário passar os parâmetros também.

Outra coisa, para você criar uma instâcia da classe Motor ela precisa ter um construtor. Esse construtor poderia, por exemplo, receber o nome do fabricante do motor.

public class Motor{ ... String fabricante; public Motor(String fabricante){ this.fabricante = fabricante; } ... }

Você não chegou a testar esse código?

Até mais!

Vingdel

Para poderem ser usadas no main.

MarcioCasteloBranco

Sim, concordo com vc Vin so gostaria de saber se ele sabia !

Vingdel

Ops… mancada minha, foi mal, Marcio.

R
public class Motor {

	boolean status = false;
	int velocidade = 0;
	int voltagem = 0;
	String fabricante = "";

	void ligaMotor(int voltagem) {
		this.voltagem = voltagem;
		status = true;
		System.out.println("Motor ligado, voltagem = " + this.voltagem);
	}

	void desligaMotor() {
		status = false;
		System.out.println("Motor desligado");
	}

	int verificaVelocidade() {
		return velocidade;
	}

	public static void main(String args[]) {
		Motor motor = new Motor();
		motor.fabricante = "Ford";
		System.out.println("O fabricante do motor é " + motor.fabricante);
		motor.ligaMotor(12);
		System.out.println("A velocidade é " + motor.verificaVelocidade());
		motor.desligaMotor();
	}

}

Boa noite ziulluiz,

Fico legal do jeito que você fez, eu fiz algumas alterações:

  • Criando os atributos setando os valores default
  • No método ligaMotor() tirei o parametro velocidade porque nesse caso acho que ficaria melhor criar um método tipo
protected int acelera(int velocidade) {
       this.velocidade = velocidade;
       return velocidade;
}

e no motor deixar realmente só a voltagem.

  • No método verificaVelocidade você só vai verificar, ou seja só retornar e não atribuir uma nova velocidade e retornar a mesma entendeu?

E quando você instancia a classe e vai usar um método que tem que ser passado um valor como parametro você pode tanto passar direto com as variaveis como você fez, ou passar o valor direto como eu fiz.

Esperto ter ajudado ! :smiley:

MarcioCasteloBranco
Amigos vai uma maneira simples usando os métodos getter e setter !
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Marcio Zampiron
 */
public class Motor {

    private int velocidade;
    private String fabricante;
    private int voltagem;
    private boolean status;

    public Motor(int velocidade, String fabricante, int voltagem, boolean status) {
        this.velocidade = velocidade;
        this.fabricante = fabricante;
        this.voltagem = voltagem;
        this.status = status;
    }

    public Motor() {
    }

    public String getFabricante() {
        return fabricante;
    }

    public void setFabricante(String fabricante) {
        this.fabricante = fabricante;
    }

    public boolean isStatus() {
        return status;
    }

    public void setStatus(boolean status) {
        this.status = status;
    }

    public int getVelocidade() {
        return velocidade;
    }

    public void setVelocidade(int velocidade) {
        this.velocidade = velocidade;
    }

    public int getVoltagem() {
        return voltagem;
    }

    public void setVoltagem(int voltagem) {
        this.voltagem = voltagem;
    }

    public void ligarMotor() {
        if (!status) {
            this.setStatus(true);
            System.out.println("Motor esta ligado!");
        } else {
            System.out.println("Motor já esta ligado!");
        }
    }

    public void desligarMotor() {
        if (!status) {
            System.out.println("Motor  já esta desigado!");
        } else {
            this.setStatus(false);
        }
        System.out.println("Motor esta desligado!");
    }
    
    public void verificarVelocidade(){
        System.out.println("Velocidade: "+this.getVelocidade());
    }
    
    public static void main(String[] args) {
        Motor motor = new Motor(0, "Ferrari", 24, false);
        
        motor.ligarMotor();
        motor.verificarVelocidade();
        motor.setVelocidade(100);
        motor.verificarVelocidade();
        motor.setVelocidade(0);
        motor.verificarVelocidade();
        motor.desligarMotor();
    }
}
Z

Ola, eu usei as variaveis de instância como static, porque até hoje, eu ainda nao sabia o que era variável de instância e variavel de classe!

Quer dizer, ainda nao estou sabendo os conceitos muito bem!

Z

Vingdel:
Olá luiz!

O método ligaMotor não precisa receber parâmetro algum, afinal você nem os utiliza ele poderia ficar assim:void ligaMotor(){ status = true; System.out.println("Motor ligado"); }O mesmo para o método verificaVelocidade(), ficaria assim:int verificaVelocidade(){ return velocidade; }

E claro, para chamar os mesmo, não é necessário passar os parâmetros também.

Outra coisa, para você criar uma instâcia da classe Motor ela precisa ter um construtor. Esse construtor poderia, por exemplo, receber o nome do fabricante do motor.

public class Motor{ ... String fabricante; public Motor(String fabricante){ this.fabricante = fabricante; } ... }

Você não chegou a testar esse código?

Até mais!

blz, estou começando a entender, preciso saber os conceitos de variavel de instância , de variável de classe, e tambem saber o conceito de metodo construtor!

Pois ae eu começo a fazer os exercícios melhor!

o que voce acha?

Z

Para poderem ser usadas no main.

Isso mesmo, porque o main é um método statico, entao preciso qualificar a variavel como static para poder ser usada no main!

Z

MarcioCasteloBranco:
Sim, concordo com vc Vin so gostaria de saber se ele sabia !

sim eu sabia, ^^.

Estou em duvida na questao de conceitos referentes a VARIÀVEL DE INSTÂNCIA, saber o que é variavel de instância!?

Saber o que é variavel de classe!?

E saber em qual situação, eu tenho que criar um método construtor ? e tambem saber em qual situação ele deve conter parâmetros?

E saber em qual situação, eu devo usar um método costrutor default !?

MarcioCasteloBranco

Amigão qual livro vc esta usando como referência para seus estudos?

Z
RodrigoM91:
public class Motor {

	boolean status = false;
	int velocidade = 0;
	int voltagem = 0;
	String fabricante = "";

	void ligaMotor(int voltagem) {
		this.voltagem = voltagem;
		status = true;
		System.out.println("Motor ligado, voltagem = " + this.voltagem);
	}

	void desligaMotor() {
		status = false;
		System.out.println("Motor desligado");
	}

	int verificaVelocidade() {
		return velocidade;
	}

	public static void main(String args[]) {
		Motor motor = new Motor();
		motor.fabricante = "Ford";
		System.out.println("O fabricante do motor é " + motor.fabricante);
		motor.ligaMotor(12);
		System.out.println("A velocidade é " + motor.verificaVelocidade());
		motor.desligaMotor();
	}

}

Boa noite ziulluiz,

Fico legal do jeito que você fez, eu fiz algumas alterações:
- Criando os atributos setando os valores default
- No método ligaMotor() tirei o parametro velocidade porque nesse caso acho que ficaria melhor criar um método tipo

protected int acelera(int velocidade) {
       this.velocidade = velocidade;
       return velocidade;
}

e no motor deixar realmente só a voltagem.
- No método verificaVelocidade você só vai verificar, ou seja só retornar e não atribuir uma nova velocidade e retornar a mesma entendeu?

E quando você instancia a classe e vai usar um método que tem que ser passado um valor como parametro você pode tanto passar direto com as variaveis como você fez, ou passar o valor direto como eu fiz.

Esperto ter ajudado ! :D

Ola, RodrigoM91 ,

Pow você ajudou muito, valeu mesmo, tipo, essas alterações que você fez, ficou legal!

Entendi a questão do método verificaVelocidade, que no caso eu nao tenho necessidade de atribuir um novo valor, somente tenho que verificar a velocidade, ou seja
mostrar o valor da mesmo, que ja está sendo inicializada com (ZERO) no corpo da classe! é isso mesmo, será que entendi mesmo?

Deixa eu ver si eu entendi, a velocidade ae no seu codigo, está valendo (ZERO) quando retornada do método verificaVelocidade né?

Entendi a questão de passar valor direto como voce fez!

MarcioCasteloBranco

Vai um link muito bom do Guj:
http://www.guj.com.br/search?cx=partner-pub-9448585618971060%3A4001950301&cof=FORID%3A10&ie=UTF-8&q=Variaveis+de+instancia&x=0&y=0&siteurl=www.guj.com.br%2Fjava%2F243175-exercicio-oo%231257486#924

Z

Ola Marcio,

Estou usando o livro Java6 Ensino Didático

Desenvolvento e Implementando Aplicações 2° EDIÇÂO

Sérgio Furgeri

Z

Ola Marcio,

Estou usando o livro Java6 Ensino Didático

Desenvolvendo e Implementando Aplicações 2° EDIÇÂO

Sérgio Furgeri

Z

MarcioCasteloBranco:
Vai um link muito bom do Guj:
http://www.guj.com.br/search?cx=partner-pub-9448585618971060%3A4001950301&cof=FORID%3A10&ie=UTF-8&q=Variaveis+de+instancia&x=0&y=0&siteurl=www.guj.com.br%2Fjava%2F243175-exercicio-oo%231257486#924

Ola Marcio,

Estou usando o livro Java6 Ensiono Didático

Desenvolvendo e Implementando Aplicações

2° EDIÇÂO Sérgio Furgeri

MarcioCasteloBranco

Muito bom este livro eu comecei com ele!

MarcioCasteloBranco

Uma boa sugestão é o famoso livro do Deitel,
Como programar Java.

Z

MarcioCasteloBranco:
Uma boa sugestão é o famoso livro do Deitel,
Como programar Java.

Blz Marcio,

tipo, ja dei uma lida ali nos links que você me passou, ja clariou mais ainda minha mente!

Vou conseguir esse livro ae pra mim, como programar Java, Deitel!

Obrigado amigo, abraço

Z
MarcioCasteloBranco:
Amigos vai uma maneira simples usando os métodos getter e setter !
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Marcio Zampiron
 */
public class Motor {

    private int velocidade;
    private String fabricante;
    private int voltagem;
    private boolean status;

    public Motor(int velocidade, String fabricante, int voltagem, boolean status) {
        this.velocidade = velocidade;
        this.fabricante = fabricante;
        this.voltagem = voltagem;
        this.status = status;
    }

    public Motor() {
    }

    public String getFabricante() {
        return fabricante;
    }

    public void setFabricante(String fabricante) {
        this.fabricante = fabricante;
    }

    public boolean isStatus() {
        return status;
    }

    public void setStatus(boolean status) {
        this.status = status;
    }

    public int getVelocidade() {
        return velocidade;
    }

    public void setVelocidade(int velocidade) {
        this.velocidade = velocidade;
    }

    public int getVoltagem() {
        return voltagem;
    }

    public void setVoltagem(int voltagem) {
        this.voltagem = voltagem;
    }

    public void ligarMotor() {
        if (!status) {
            this.setStatus(true);
            System.out.println("Motor esta ligado!");
        } else {
            System.out.println("Motor já esta ligado!");
        }
    }

    public void desligarMotor() {
        if (!status) {
            System.out.println("Motor  já esta desigado!");
        } else {
            this.setStatus(false);
        }
        System.out.println("Motor esta desligado!");
    }
    
    public void verificarVelocidade(){
        System.out.println("Velocidade: "+this.getVelocidade());
    }
    
    public static void main(String[] args) {
        Motor motor = new Motor(0, "Ferrari", 24, false);
        
        motor.ligarMotor();
        motor.verificarVelocidade();
        motor.setVelocidade(100);
        motor.verificarVelocidade();
        motor.setVelocidade(0);
        motor.verificarVelocidade();
        motor.desligarMotor();
    }
}

Muito bom, Marcio
Nesse caso ae voçê, ja usou conceitos de encapsulamento né?
qualificou os atributos como private, ae para cada atributo é necessário um método set e get !

Estou correto?

Valeu

Z

MarcioCasteloBranco:
Muito bom este livro eu comecei com ele!

È acho esse livro, muito didatico mesmo…

MarcioCasteloBranco

Sim e isto aí, parabéns vc tem uma boa percepção,
Bem vindo a JAVALAND!!
VLW

Z

MarcioCasteloBranco:
Sim e isto aí, parabéns vc tem uma boa percepção,
Bem vindo a JAVALAND!!
VLW

Vlw mano, obrigado pelo elogio!

abraço té + tudo de bom

adriano_si

Só um detalhe gente…

muito cuidado pra não colocar coisas desnecessárias para determinados tipos de problemas.

Métodos acessores são excelentes quando usados de forma coerente.

Aconselho esse Post: http://blog.caelum.com.br/nao-aprender-oo-getters-e-setters/

Para ter o entendimento pleno de getters e setters.

Embora legal, seu código não ficou mais simples Marcio, pois usar getters e setters nessa situação e da forma que foi usado, deixou o código maior e muito mais confuso…

Abs [] e sucesso nos estudos…

Z

adriano_si:
Só um detalhe gente…

muito cuidado pra não colocar coisas desnecessárias para determinados tipos de problemas.

Métodos acessores são excelentes quando usados de forma coerente.

Aconselho esse Post: http://blog.caelum.com.br/nao-aprender-oo-getters-e-setters/

Para ter o entendimento pleno de getters e setters.

Embora legal, seu código não ficou mais simples Marcio, pois usar getters e setters nessa situação e da forma que foi usado, deixou o código maior e muito mais confuso…

Abs [] e sucesso nos estudos…

Hum, blz, valeu amigo adriano_si.

Vi o link que voce passou, vou procurar conteudos relacionados a uso indiscriminado de gets e sets

R
ziulluiz:
void ligaMotor() {
		status = true;
		System.out.println("Motor ligado, voltagem = " + this.voltagem);
	}

Boa noite ziulluiz,

Fico legal do jeito que você fez, eu fiz algumas alterações:
- Criando os atributos setando os valores default
- No método ligaMotor() tirei o parametro velocidade porque nesse caso acho que ficaria melhor criar um método tipo

e no motor deixar realmente só a voltagem.
- No método verificaVelocidade você só vai verificar, ou seja só retornar e não atribuir uma nova velocidade e retornar a mesma entendeu?

E quando você instancia a classe e vai usar um método que tem que ser passado um valor como parametro você pode tanto passar direto com as variaveis como você fez, ou passar o valor direto como eu fiz.

Esperto ter ajudado ! :D

Ola, RodrigoM91 ,

Pow você ajudou muito, valeu mesmo, tipo, essas alterações que você fez, ficou legal!

Entendi a questão do método verificaVelocidade, que no caso eu nao tenho necessidade de atribuir um novo valor, somente tenho que verificar a velocidade, ou seja
mostrar o valor da mesmo, que ja está sendo inicializada com (ZERO) no corpo da classe! é isso mesmo, será que entendi mesmo?

Deixa eu ver si eu entendi, a velocidade ae no seu codigo, está valendo (ZERO) quando retornada do método verificaVelocidade né?

Entendi a questão de passar valor direto como voce fez!

[/quote]

Boa noite ziulluiz,

Nesse caso o método ligaMotor() pode ficar como nosso amigo citou acima é melhor mesmo.
Tudo que você disse está correto, se no caso você precisasse dar uma velocidade ao motor, era melhor criar um outro método como eu citei acima para receber como parametro a nova velocidaide entendeu ?

Variavel de instancia é muito, muito simples.

Variavel de instancia são todas menos a static. Ou seja qualquer tipo de variavel que você declarar, veja:
public final int CODIGO_01 = 1;
private String nome = "NOME";
protected transient int sequencia = 0;

São todas variaveis de instancia porque elas só vão estar disponíveis a partir do momento que você instanciar a classe motor, entendi ?

Motor motor = new Motor();

Somente nesse momento você tem acesso aquelas variaveis, por isso, variaveis de instancia.

E variavel de classe é toda aquela declarada como static, porque ?

Porque independente se a classe for instanciada ou não, a variavel de classe vai sempre existir, exemplo:

public static String teste = "Teste";

Esse valor vai sempre estar disponivel, sem precisar que a classe seja instanciada. E instanciar uma classe é nada mais nada menos do que dar um new na mesma, assim como foi feito acima.

Z
RodrigoM91:
ziulluiz:
void ligaMotor() {
		status = true;
		System.out.println("Motor ligado, voltagem = " + this.voltagem);
	}

Boa noite ziulluiz,

Fico legal do jeito que você fez, eu fiz algumas alterações:
- Criando os atributos setando os valores default
- No método ligaMotor() tirei o parametro velocidade porque nesse caso acho que ficaria melhor criar um método tipo

e no motor deixar realmente só a voltagem.
- No método verificaVelocidade você só vai verificar, ou seja só retornar e não atribuir uma nova velocidade e retornar a mesma entendeu?

E quando você instancia a classe e vai usar um método que tem que ser passado um valor como parametro você pode tanto passar direto com as variaveis como você fez, ou passar o valor direto como eu fiz.

Esperto ter ajudado ! :D

Ola, RodrigoM91 ,

Pow você ajudou muito, valeu mesmo, tipo, essas alterações que você fez, ficou legal!

Entendi a questão do método verificaVelocidade, que no caso eu nao tenho necessidade de atribuir um novo valor, somente tenho que verificar a velocidade, ou seja
mostrar o valor da mesmo, que ja está sendo inicializada com (ZERO) no corpo da classe! é isso mesmo, será que entendi mesmo?

Deixa eu ver si eu entendi, a velocidade ae no seu codigo, está valendo (ZERO) quando retornada do método verificaVelocidade né?

Entendi a questão de passar valor direto como voce fez!

Boa noite ziulluiz,

Nesse caso o método ligaMotor() pode ficar como nosso amigo citou acima é melhor mesmo.
Tudo que você disse está correto, se no caso você precisasse dar uma velocidade ao motor, era melhor criar um outro método como eu citei acima para receber como parametro a nova velocidaide entendeu ?

Variavel de instancia é muito, muito simples.

Variavel de instancia são todas menos a static. Ou seja qualquer tipo de variavel que você declarar, veja:
public final int CODIGO_01 = 1;
private String nome = "NOME";
protected transient int sequencia = 0;

São todas variaveis de instancia porque elas só vão estar disponíveis a partir do momento que você instanciar a classe motor, entendi ?

Motor motor = new Motor();

Somente nesse momento você tem acesso aquelas variaveis, por isso, variaveis de instancia.

E variavel de classe é toda aquela declarada como static, porque ?

Porque independente se a classe for instanciada ou não, a variavel de classe vai sempre existir, exemplo:

public static String teste = "Teste";

Esse valor vai sempre estar disponivel, sem precisar que a classe seja instanciada. E instanciar uma classe é nada mais nada menos do que dar um new na mesma, assim como foi feito acima.[/quote]

Hum, RodrigoM91.

Agora sim, entendi legal, pow muito simples quando voçê entende!

Tipo esses conceitos ae, a pessoa tem que saber legal, para nao si perder, porque tipo, tudo em linguem de programação, voce tem que está sabendo dos detalhes,
as vezes por causa de um detalhe voce ja fica grilado, pensando que nao está aprendendo kkk.

Mas tipo, valeu irmao, continue ajudando as pessoas ae, quando eu tiver sabedoria suficiente, vou ajudar tambem.

Abraço e tudo de bom. té ++

R

:smiley:

Tranquilo cara, fica em paz !

Você vai aprende sim, eu também estou apredendo !

Falo !

Criado 29 de maio de 2011
Ultima resposta 1 de jun. de 2011
Respostas 29
Participantes 5