POO Televisão e controle remoto

Linguagem utilizada: Java.

Pessoal, estou apenas começando meu curso, e meu professor logo de cara já passou esta atividade para ser resolvido. No entanto, eu não sei bem como fazer. Alguém que saiba, ou tenha alguma dica pode me ajudar?

Crie uma classe Televisao e uma classe ControleRemoto que pode controlar o vol-
ume e trocar os canais da televisão. O controle de volume permite:
• Aumentar ou diminuir a potência do volume de som em uma unidade de cada vez;
• Aumentar e diminuir o número do canal em uma unidade
• Trocar para um canal indicado;
• Consultar o valor do volume de som e o canal selecionado.
Televisão
*Atributos:

  • volume : int
  • canal : int
  • marca : String
  • ligado : boolean
    *Métodos:
  • get…(alterar atributos da Classe - “Modificadores”)
    +set…(retorna valores dos atributos da Classe - “Acessores”)
    ControleRemoto
    *Atributos:
  • volumeMaximo : int
  • canalMaximo : int
    *Métodos
    +aumentarVolume (incremento de um no volume)
    +diminuirVolume (decremento de um do volume)
    +subirCanal (incrementa em um o valor do canal)
    +descerCanal (decrementa em um o valor do canal)

Isso aí está ao contrário, set são modificadores e get são acessores.

get =  obter   = acessar
set = atribuir = modificar

Os atributos são as variáveis e o método as funções, é bom se habituar com isso em Java.
Com relação as classes você tem que pensar quais atributos está relacionado com cada uma, no exemplo, conforme solicita, você tem uma TV que tem as propriedades volume, canal, se está ligada ou não. E tem um controle que é que faz as alterações na TV, então você imagina os métodos, aumentar volume, diminuir volume, canal e etc. Entendeu o que esta relacionado com cada coisa?
A partir dai restar criar cada classe com seus respectivos atributos e métodos.

1 curtida

Isso já está bem explicito no enunciado, então caso não saiba como implementar, vamos lá:
Crie um projeto, e duas classe TV e Controle.

Na classe TV defina os atributos:

public class tv {
    Integer volume, canal;
    String marca;
    boolean ligado;    
}

E gere os modificadores e acessores, dica para otimizar isso, clica com o botão direto dentro da área de digitação de código Inserir código > Getter & Setter… > marque todos os atribuitos e a IDE gerará automaticamente.

public class tv {
    Integer volume, canal;
    String marca;
    boolean ligado;    

    public Integer getVolume() {
        return volume;
    }

    public void setVolume(Integer volume) {
        this.volume = volume;
    }

    public Integer getCanal() {
        return canal;
    }

    public void setCanal(Integer canal) {
        this.canal = canal;
    }

    public String getMarca() {
        return marca;
    }

    public void setMarca(String marca) {
        this.marca = marca;
    }

    public boolean isLigado() {
        return ligado;
    }

    public void setLigado(boolean ligado) {
        this.ligado = ligado;
    }
}

Agora na classe controle você define os seus próprios atributos e métodos que alteram os atributos da TV. Pode definir já também o canal máximo e volume. Dentro de cada método você fazer as devidas alterações na tv, vou fazer o primeiro como exemplo.

public class controle {
    Integer volumeMaximo=100, canalMaximo=50;
    
    tv t = new tv();

void aumentarVolume(){
    Integer volume = t.getVolume();
    if(volume < volumeMaximo){
       volume++;
       t.setVolume(volume);
    }else{
        System.out.println("Volume já está no máximo");
    } 
}
    
    void diminuirVolume(){
        
    }
    
    void subirCanal(){
        
    }
    
    void descerCanal(){
        
    }
}

Como você precisa acessar os atributos de outra classe é preciso instancia-la, por a linha de código em cima do método, assim você pode usar o t. e chamar a classe que precisar em qualquer método da classe controle.

Além disso você precisa de uma classe principal, pra ligar a TV e definiar os valores iniciais, por exemplo:

public class main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader;
	reader = new BufferedReader(new InputStreamReader(System.in));
        tv t = new tv();
        System.out.println("\t\tControle");
        System.out.println("1 Ligar");
        System.out.println("2 Aumentar volume");
        System.out.println("3 Diminuir volume");
        System.out.println("4 Aumentar canal");
        System.out.println("5 Diminuir canal");
        System.out.println("6 Desligar");
        System.out.println("Opção:");
        String reply = reader.readLine();
        int op = Integer.parseInt(reply);
        switch (op){
            case 1:
                if (t.isLigado()) {
                    System.out.println("TV já está ligada!");
                }else{
                    t.setLigado(true);
                }
                break;
            case 2:
                //verificar se está ligada
                //aumentar o volume
                break;
        }
    }
}
1 curtida

Para adequar conforme o enunciado, a classe deveria se chamar Televisao e os atributos volume e canal deveriam ser do tipo int e não Integer. :wink:

Aqui também, para adequar conforme o enunciado, a classe deveria se chamar ControleRemoto e os atributos volumeMaximo e canalMaximo deveriam ser do tipo int e não Integer. :wink:

O que o enunciado não deixou claro é como deve ser feito o vínculo entre a Televisao e ControleRemoto.

Se instanciar a Televisao dentro do ControleRemoto você está criando uma composição, ou seja, o controle remoto não existe sem uma televisão.

Acredito que deveria ser uma agregação, neste caso poderia ter um método setTelevisao ou então receber a Televisao no construtor.

3 curtidas

Obrigado pelas considerações a cerca das declarações!
Com relação ao enunciado realmente não ficou muito claro, com base nos meus conhecimentos resolveria dessa forma, mas é totalmente válida sua colocação, vou estudar sobre agregação. Grato!

Você está apenas começando desde que data? Sério, gostaria de suas respostas sinceras para ter alguma noção para algo que estou escrevendo sobre o assunto. Tipo, seu curso começou essa semana? Esse mês? Quantas aulas já teve com esse professor e ele realmente passou esse exercício sem dar o conteúdo cobrado?

Agradeço se as suas respostas foram bem sinceras para que eu possa ter números exatos no meu artigo.

Bom, estou a aproximadamente um ano. Mas, durante esse ano o professor trabalhou outros assuntos, a introdução a algoritmo, depois começamos a trabalhar com a linguagem Java. Agora estamos vendo programação orientada a objetos. E sim, ele realmente deu os assuntos, e eu realmente estou bem empenhado a aprender a matéria por gosto muitíssimo do curso, porém tenho algumas dificuldade em questões como estás. Eu comecei a fazer o programa, fiz a classe Televisão, a Classe Controle, e tudo bem, só estou com dificuldade mesmo nos métodos de “aumentarVolume” e assim por diante. Não sei como implementa-las, tenho o raciocínio porém ainda não consigo programa-las.

Muitíssimo obrigado

Não sabe como esclareceu minhas dúvidas. Muitíssimo obrigado cara, sensacional

1 curtida

Era exatamente isso que eu estava pensando

Maravilhava, caso suas dúvidas tenham sido sanadas por favor adicione a flag [RESOLVIDO] no título do problema.

1 curtida