Ybadoo - Soluções em Software Livre
Tutoriais
Programação Orientada a Objetos

Desenvolva uma classe Televisão e uma classe ControleRemoto que podem controlar o volume 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, no intervalo de 0 a 50.

O controle de canal permite aumentar ou diminuir o número do canal em uma unidade, porém, também possibilita trocar para um canal específico, no intervalo de 1 a 500.

Os canais disponíveis são apenas os canais cujos números sejam divisíveis por 3 ou por 5. Caso o usuário selecione um canal inválido, a Televisão deverá selecionar o próximo canal válido.

Desenvolva a solução solicitada, apresentando a modelagem do projeto em Unified Modeling Language (UML) e a sua implementação.

 

Diagrama de classes
Diagrama de classes da solução em Java

Arquivo Televisao.java

/**
 * Copyright (C) 2009/2018 - Cristiano Lehrer (cristiano@ybadoo.com.br)
 *                  Ybadoo - Solucoes em Software Livre (www.ybadoo.com.br)
 *
 * Permission is granted to copy, distribute and/or modify this document
 * under the terms of the GNU Free Documentation License, Version 1.3
 * or any later version published by the Free Software Foundation; with
 * no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
 * A copy of the license is included in the section entitled "GNU
 * Free Documentation License".
 */

package com.ybadoo.tutoriais.poo;

import java.io.Serializable;

/**
 * Classe para representar uma televisao
 */
public class Televisao implements Serializable
{
  /**
   * Identificador de serialicacao da classe
   */
  private static final long serialVersionUID = 1L;
  
  /**
   * Canal atual da televisao
   */
  private int canal;
  
  /**
   * Volume atual da televisao
   */
  private int volume;
  
  /**
   * Construtor padrao
   */
  public Televisao()
  {
    this(0, 0);
  }
  
  /**
   * Construtor para inicializar o canal e o volume da televisao
   * 
   * @param canal canal atual da televisao
   * @param volume volume atual da televisao
   */
  public Televisao(int canal, int volume)
  {
    setCanal(canal);
    
    setVolume(volume);
  }
  
  /**
   * Incrementar o canal em uma unidade
   */
  public void addCanal()
  {
    setCanal(getCanal() + 1);
  }

  /**
   * Incrementar o volume em uma unidade
   */
  public void addVolume()
  {
    setVolume(getVolume() + 1);
  }
  
  /**
   * Retornar o canal atual da televisao
   * 
   * @return canal atual da televisao
   */
  public int getCanal()
  {
    return this.canal;
  }

  /**
   * Retornar o volume atual da televisao
   * 
   * @return volume atual da televisao
   */
  public int getVolume()
  {
    return this.volume;
  }
  
  /**
   * Configurar o canal atual da televisao
   * 
   * @param canal canal atual da televisao
   */
  public void setCanal(int canal)
  {
    if((canal < 1) || (canal > 500))
    {
      canal = 1;
    }
    
    for(int index = canal; index <= 500; index++)
    {
      if(((index % 3) == 0) || ((index % 5) == 0))
      {
        this.canal = index;
        
        break;
      }
    }
    
    System.out.println("Canal: " + getCanal());
  }
  
  /**
   * Configurar o volume atual da televisao
   * 
   * @param volume volume atual da televisao
   */
  private void setVolume(int volume)
  {
    if((volume >= 0) && (volume <= 50))
    {
      this.volume = volume;
    }
    
    System.out.println("Volume: " + getVolume());
  }

  /**
   * Decrementar o canal em uma unidade
   */
  public void subCanal()
  {
    setCanal(getCanal() - 1);
  }
  
  /**
   * Decrementar o volume em uma unidade
   */
  public void subVolume()
  {
    setVolume(getVolume() - 1);
  }
}

Arquivo ControleRemoto.java

/**
 * Copyright (C) 2009/2018 - Cristiano Lehrer (cristiano@ybadoo.com.br)
 *                  Ybadoo - Solucoes em Software Livre (www.ybadoo.com.br)
 *
 * Permission is granted to copy, distribute and/or modify this document
 * under the terms of the GNU Free Documentation License, Version 1.3
 * or any later version published by the Free Software Foundation; with
 * no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
 * A copy of the license is included in the section entitled "GNU
 * Free Documentation License".
 */

package com.ybadoo.tutoriais.poo;

import java.io.Serializable;

/**
 * Classe para representar o controle remoto de uma televisao
 */
public class ControleRemoto implements Serializable
{
  /**
   * Identificador de serialicacao da classe
   */
  private static final long serialVersionUID = 1L;
  
  /**
   * Instancia da televisao controlada pelo controle remoto
   */
  private Televisao televisao;
  
  /**
   * Construtor padrao
   */
  public ControleRemoto()
  {
    this.televisao = new Televisao();
  }
  
  /**
   * Incrementar o canal em uma unidade
   */
  public void addCanal()
  {
    this.televisao.addCanal();
  }

  /**
   * Incrementar o volume em uma unidade
   */
  public void addVolume()
  {
    this.televisao.addVolume();
  }
  
  /**
   * Retornar o canal atual da televisao
   * 
   * @return canal atual da televisao
   */
  public int getCanal()
  {
    return this.televisao.getCanal();
  }

  /**
   * Retornar o volume atual da televisao
   * 
   * @return volume atual da televisao
   */
  public int getVolume()
  {
    return this.televisao.getVolume();
  }
  
  /**
   * Configurar o canal atual da televisao
   * 
   * @param canal canal atual da televisao
   */
  public void setCanal(int canal)
  {
    this.televisao.setCanal(canal);
  }

  /**
   * Decrementar o canal em uma unidade
   */
  public void subCanal()
  {
    this.televisao.subCanal();
  }
  
  /**
   * Decrementar o volume em uma unidade
   */
  public void subVolume()
  {
    this.televisao.subVolume();
  }
  
  /**
   * Metodo principal da linguagem de programacao Java
   * 
   * @param args argumentos da linha de comando (nao utilizado)
   */
  public static void main(String[] args)
  {
    ControleRemoto controle = new ControleRemoto(); // Canal: 3 Volume: 0
    
    controle.addCanal(); // Canal: 5
    controle.addCanal(); // Canal: 6
    controle.addCanal(); // Canal: 9
    
    controle.addVolume(); // Volume: 1
    controle.subVolume(); // Volume: 0
    controle.subVolume(); // Volume: 0
    
    controle.setCanal(499); // Canal: 500
    controle.addCanal(); // Canal: 3
    controle.addCanal(); // Canal: 5
  }
}