Baixe o app para aproveitar ainda mais
Prévia do material em texto
Lista de Exercício 3 Conceitos básicos OO 1. Crie uma classe produto para representar os produtos de um supermercado. a. Cada produto tem uma descrição (texto), valor (real), e quantidade em estoque(inteiro). b. Lembre-se de definir métodos para ler e alterar os atributos dos produtos. 2. Implementar as classes a seguir: a. Classe: ContaCorrente. i. Atributos da classe ContaCorrente: 1. numeroConta (inteiro) -> não pode receber um valor menor ou igual a zero; 2. correntista (string) -> não pode receber um valor nulo ou string vazia; 3. saldo (ponto-flutuante) -> nao pode manter um valor menor que zero; ii. Implementar apenas um constructor recebendo valores para os atributos numeroConta e correntista da classe ContaCorrente. iii. Utilizar a técnica de encapsulamento apresentada no curso e implementar métodos get e set para todos os atributos da classe (ver observação abaixo). iv. OBS.: Não implementar o método set para o atributo saldo. O valor do atributo saldo só poderá ser alterado através dos métodos deposita, saque e transfere detalhados a seguir. v. Implementar o método boolean deposita (double valor) que deposita um valor na conta corrente. O método retorna verdadeiro se o depósito foi realizado com sucesso ou falso em caso contrário. OBS.: Verificar se o valor informado é maior que zero. vi. Implementar o método boolean saque(double valor) que realiza um saque na conta corrente. O método retorna verdadeiro se o saque foi realizado com sucesso ou falso e caso contrário. OBS.: Verificar se o valor informado é maior que zero e se há saldo suficiente para realizer o saque. vii. Implementar o método boolean transfere (double valor, Contacorrente conta2) que realiza uma transferência de um valor da conta corrente para a conta corrente conta2. O método retorna verdadeiro se a transferência foi realizada com sucesso ou falso em caso contrário. OBS.: Verificar se o valor informado é maior que zer, se o objeto conta2 não é nulo e se há saldo suficiente para realizer a transferência. b. Implementar uma aplicação chamada Aplicacaocontas que instancia dois objetos do tipo ContaCorrente, a partir de dados informados pelo usuário. Em seguida, o programa deve oferecer um menu para o usuário com as seguintes opções: i. Imprimir dados de uma conta: Para esta opção o usuário deverá informar o número da conta; ii. Realizar depósito. Para esta opção o usuário deverá informar o número da conta e o valor para o depósito. iii. Realizar saque. Para esta opção o usuário deverá informar o número da conta e o valor para saque; iv. Realizar transferência. Para esta opção o usuário deverá informar o número da conta origem, o número da conta destino e o valor para transferência; v. OBS.: para as opções de depósito, saque e transferência, o programa deve imprimir na tela uma mensagem indicando se o depósito, o saque ou a transferência foi realizado com sucesso ou não. c. Implementar os testes unitários para verificar o código acima. 3. Implementar as classes a seguir: a. Classe: DVD i. Atributos da classe DVD: estado (booleano) -> receberá o valor true quando o DVD estiver ligado, e false em caso contrário. Defina, na classe DVD, duas constantes booleanas: LIGADO = true e DESLIGADO = false. operacaoEmExecucao(string) -> receberá um dos valores pré- definidos (ver tabela abaixo) de acordo com a operação que estiver sendo realizada pelo DVD. OBS.: definir constantes para manter os valores da tabela abaixo: ii. Implementar apenas o construtor default que atribui o valor DESLIGADO para o atributo estado e o valor PARADO para o atributo operacaoEmExecucao. iii. Utilizar a técnica de encapsulamento apresentada no curso e implementar apenas métodos get para todos os atributos. iv. OBS.: Os métodos set dos atributos estado e operacaoEmExecucao não serão implementados pois seus valores só poderão ser alterados através dos métodos liga, desliga, play, stop, pause, volta e avança detalhados a seguir. v. Implementar o método void ligar() que altera o estado do equipamento para LIGADO e atribui o valor PARADO para o atributo operacaoEmExecucao. vi. Implementar o método void desliga() que altera o estado do equipamento para DESLIGADO e atribui o valor PARADO para o atributo operacaoEmExecucao. vii. Implementar o método void play() que altera o valor do atributo operacaoEmExecucao para REPRODUZINDO. OBS.: Este método só pode ser executado se o estado do equipamento for LIGADO. viii. Implementar o método void stop() que altera o valor do atributo operacaoEmExecucao para PARADO. OBS.: Este método só pode ser executado se o estado do equipamento for LIGADO. ix. Implementar o método void pause() que altera o valor do atributo operacaoEmExecucao para EM_PAUSA. OBS.: Este método só pode ser executado se o estado do equipamento for LIGADO. x. Implementar o método void volta() que altera o valor do atributo operacaoEmExecucao para VOLTANDO. OBS.: Este método só pode ser executado se o estado do equipamento for LIGADO. xi. Implementar o método void avanca() que altera o valor do atributo operacaoEmExecucao para AVANCADO. OBS.: Este método só pode ser executado se o estado equipamento for LIGADO. b. Implementar uma aplicação chamada AplicacaoDVD que instancia um objeto do tipo DVD e oferece um menu com as opções: liga, desliga, play, stop, pause, volta, avança e sair, permitindo que o usuário possa manipular seu equipamento. OBS.: Todas as vezes que o usuário selecionar uma opção do menu, deve-se imprimir na tela o estado e a operação corrente do equipamento. c. Implementar os testes unitários para verificar o código acima. 4. Implementar as classes a seguir: a. Classe: Deducao i. Atributos da classe Deducao: 1. descricao (string) -> não pode receber um valor nulo ou stirng vazia; 2. valor (ponto-flutuante) -> não pode receber um valor menor ou igual a zero. ii. Para a classe DEducao implementar apenas um construtor recebendo valores para todos os atributos. iii. Utilizar a técnica de encapsulamento apresentada no curso e implementar métodos get e set para todos os atributos. b. Classe: ImpostoDeRenda i. Atributos da classe ImpostoDeRenda: 1. nomecontribuinte (string) -> não pode receber um valor nulo ou string vazia; 2. cpf (string) -> não pode receber um valor nulo ou string vazia; 3. rendaAnual(ponto-flutuante) -> não pode receber um valor menor ou igual a zero; 4. deduções (Array de objetos do tipo Deducao) -> não pode manter um array nulo. ii. Para a classe ImpostoDeRenda implementar apenas o construtor recebendo valores para os atributos nomeContribuinte, cpf, rendaAnual. OBS.: estr construtor deverá inicializar o atributo deduções com um array de tamanho 3. iii. Utilizar a técnica de encapsulamento apresentada no curso e implementar métodos get e set para todos os atributos (ver observação abaixo). iv. OBS.: Não implementar o método set para o atributo deduções da classe ImpostoDeREnda. O atributo deduções só será manipulado pelo método inserirDeducao detalhado a seguir. v. Implementar o método boolean inserirDeducao(Deducao deducao) que insere um objeto do tipo Deducao no array de deduções do ImpostoDeRenda. O método retorna verdadeiro se a dedução foi inserida no array com sucesso e falso quando o array de deduções estiver cheio ou se o objeto dedução passado como parâmetro é nulo. vi. Implementar o método double calculaImposto() que retorna o valor do imposto de renda do contribuinte segundo a seguinte fórmula: c. Implementar uma aplicação chamada AplicacaoImpostoDeRenda que instancia um objeto do tipo ImpostoDeRenda, a partir do nome do contribuinte, do CPF e da renda anual informados pelo usuário.Em seguida, o programa deve oferecer um menu para o usuário com as seguintes opções: i. Incluir dedução. O usuário deverá informar os dados da dedução a ser inserida na declaração de imposto. ii. Imprimir resumo da dedução de imposto de renda. Nesta opção, o programa deve imprimir os valores de todos os atributos do objeto ImpostoDeRenda instanciado (incluindo as deduções – se houverem), bem como imprimir o valor do seu importo de renda calculado. d. Implementar os testes unitários para verificar o código acima.
Compartilhar