Introdução a Orientação a Objetos C# Exercícios

Introdução a Orientação a Objetos C# Exercícios

Introdução a Orientação a Objetos

Convênio ASSESPRO-RS

1 Classes e Objetos 2

2 Atributos e Métodos de Classe 3

3 Coleções de Objetos 4

4 Herança 5

5 Implementação de Interfaces 5

1Classes e Objetos

  1. Desenvolva uma abstração de uma lâmpada, a qual pode ser ligada e desligada. Também deve ser possível observar o estado da lâmpada (se desligada ou ligada).

  2. Desenvolva um novo tipo de abstração para a lâmpada de forma a incluir as características de potência e voltagem. Garanta que seja possível tanto ler quanto alterar os valores de potência e voltagem de uma lâmpada.

  3. Crie uma classe Teste com um método main para testar as classes desenvolvidas nos exercícios 1 e 2. Crie uma nova lâmpada, apresente no console as informações de estado (se ligada ou desligada, potência e voltagem), ligue a lâmpada e apresente novamente as informações de estado.

  4. Modifique a abstração da lâmpada criada anteriormente para incluir o caso de uma lâmpada queimar ao ser ligada. Sabe-se que existe uma chance de 15% da lâmpada queimar ao ser ligada. Dica: neste exercício é importante pesquisar na biblioteca de classes fornecida pela linguagem de programação uma classe que dê suporte à geração de números aleatórios.

  5. Faça uma classe Conta que contenha o nome do cliente, o número da conta e o saldo. Estes valores deverão ser informados no construtor da classe. Faça um método depositar e um método sacar para realizar o depósito e saque de valores da conta. Faça um método obterSaldo que retorne o saldo do cliente. Faça um método obterNumero que retorne o número da conta. Faça um método obterNomeCliente que retorna o nome do cliente titular da conta.

  6. Desenvolva um programa para testar a classe Conta. O programa deverá criar 3 contas diferentes e realizar diversas operações de saque e depósito. Depois, o programa deverá emitir um relatório (no console) apresentando o número, o titular e o saldo atual de cada conta.

  7. Crie uma classe Ponto, com a capacidade de armazenar a localização de ponto no plano cartesiano, de modo que ela possua três construtores: um construtor sem parâmetros, que cria um ponto nas coordenadas (0,0), um construtor que recebe dois parâmetros de coordenadas X e Y, e um construtor que inicializa o ponto através das coordenadas de um outro ponto recebido como parâmetro.

  8. Implemente uma classe Pessoa que possua como atributos nome, idade, peso (em quilogramas) e altura (em metros). Faça com que os dados sejam inicializados através do construtor da classe. Adicione métodos para ler e alterar cada um dos atributos em separado.

  9. Altere a classe Pessoa do exercício anterior de modo que ela seja capaz de calcular o Índice de Massa Corporal (IMC). O cálculo é feito através da fórmula IMC = peso/altura2. Adicionalmente, implemente um método que informa a faixa de categoria do IMC que a pessoa se encontra, utilizando a seguinte tabela.

IMC

Categoria

< 18,5

Abaixo do peso

[18,5 ; 25[

Peso normal

[25 ; 30[

Sobrepeso

[30 ; 35[

Obesidade grau I

[35; 40[

Obesidade grau II

>= 40

Obesidade grau III

  1. Seja a seguinte descrição de um sistema de informação: “Deseja-se criar um sistema de estoque de produtos que são vendidos em um supermercado. Cada produto possui uma descrição e um valor de venda. O sistema permite a emissão de relatórios dos produtos disponíveis em estoque. Também, é permitido ao gerente aplicar reajustes de preços sobre o produto que desejar.”

    1. Para uma classe Produto, quais seriam seus métodos e atributos?

    2. Para uma classe Estoque, quais seriam seus métodos e atributos?

  2. Pense em um pequeno sistema de informação. Descreva brevemente algumas funcionalidades dele (como no exercício anterior). Entregue a descrição à outra pessoa e solicite que ela descreva um conjunto básico de classes (com seus métodos e atributos) que darão suporte à implementação orientada a objetos do sistema.

2Atributos e Métodos de Classe

  1. Seja uma classe Ponto com a capacidade de armazenar a localização de ponto no plano cartesiano. Adicionalmente, deseja-se que esta classe seja capaz de calcular a distância entre dois pontos. Para tal é desejado o seguinte comportamento:

    • calcular a distância entre a instância do ponto e um outro objeto ponto qualquer;

    • calcular a distância entre a instância do ponto e um outro ponto dado pelas coordenadas X e Y;

    • calcular a distância entre dois pontos dadas as coordenadas X1, Y1 e X2, Y2;

    • calcular a distância entre dois objetos ponto passados como parâmetro;

    • a fórmula a ser utilizada é

  1. Altere a classe Ponto desenvolvida no exercício anterior de modo que os objetos possuam um identificador numérico único atributo pelo método construtor de forma automática (ou seja, não é fornecido como parâmetro do método construtor). Para tal, utilize um atributo de classe que funciona como um contador de instâncias de objetos Ponto já criados e armazene o próximo valor do contador como identificador do objeto recém criado.

3Coleções de Objetos

  1. Dada uma lista de números reais, considere um método, acimaMedia, para calcular o número de elementos da lista cujos valores são maiores do que a média de todos os elementos.

  2. Deseja-se implementar um cofrinho de moedas com a capacidade de receber moedas e calcular o total depositado no cofrinho. O seguinte diagrama UML apresenta o projeto da solução desejada.

  1. Altere a classe Cofrinho do exercício anterior de modo que ela implemente métodos para:

    • Contar o número de moedas armazenadas;

    • Contar o número de moedas de um determinado valor;

    • Informar qual a moeda de maior valor.

  2. Considere um cadastro de alunos matriculados em uma disciplina, com as seguintes informações para cada aluno: nome, e-mail, número de matrícula, notas obtidas em três provas. Partindo de uma classe CadastroAlunos, que contém uma lista para armazenar os alunos de uma determinada disciplina, implemente um método nesta classe que retorne a lista de alunos aprovados na disciplina. Para um aluno ser considerado aprovado, a média nas três notas deve ser maior ou igual a cinco (5.0) e nenhuma das notas pode ser menor do que três (3.0). Lembre-se que é necessário criar a classe Aluno também e desenvolver métodos para a inserção de alunos no cadastro.

  3. Utilizando uma coleção de objetos, implemente uma agenda de telefones que não aceita nomes repetidos e que só armazena um telefone por pessoa. Forneça operações para inserir/remover um contato da agenda, e para buscar todos os contatos que possuem uma determinada seqüência de caracteres no nome.

4Herança

  1. Seja uma classe Conta (desenvolvida anteriormente) com as operações de saque, depósito e verificação de saldo. Crie uma subclasse ContaPoupanca com uma operação capaz de calcular e adicionar valores referentes ao rendimento de acordo com uma taxa de juros associada à conta. A classe ContaPoupanca deve possuir os seguintes métodos: ContaPoupanca(double juros) e void adicionarRendimento(); e o seguinte atributo adicional: double taxaJuros.

  2. Crie um programa de teste que utilize um array de 4 contas de tipos variados, realize diversas operações sobre as contas e imprima no console o saldo atual de cada conta.

  3. Retome a hierarquia de classes de contas e sobrescreva os métodos toString() e equals() em todas as classes da hierarquia. Depois, teste as implementações dos métodos.

  4. Retome o exemplo do cofre de moedas e altere o código para incluir um método que retorne o número de moedas iguais a uma determinada moeda recebida como parâmetro: int contarMoedas(Moeda m).

  5. Estamos interessados em implementar um cadastro de professores da Faculdade de Informática. Os professores podem ser “em regime”, cuja carga horária é fixa de 40 horas, e “horistas” cuja carga horária pode variar de semestre a semestre. Todo professor possui um número de matrícula, um nome, uma carga horária e um salário. O salário de um professor em regime é fixo, enquanto o salário de um professor horista depende do número de horas trabalhadas e do salário/hora. Apresente a modelagem e implementação das classes que suportam o conceito de “professor”. Dica: neste exercício é necessário utilizar o conceito de classe abstrata.

5Implementação de Interfaces

  1. Crie uma classe Produto que armazene um código numérico (número inteiro) e uma descrição. Garanta que a classe possa ser utilizada em uma coleção de objetos que pode ser ordenada pelo código dos produtos em ordem crescente.

  2. Dada a seguinte classe Pais, que representa os dados (nome e área) de um determinado país, implemente as alterações necessárias para que seja possível ordenar coleções de paises por nome ou área.

public class Pais {

private String nome;

private double area;

public Pais(String n, double a) {

nome = n;

area = a;

}

public String obterNome() {

return nome;

}

public double obterArea() {

return area;

}

}

  1. Estamos interessados em construir um conjunto de classes que poderia ser utilizado em um programa de desenhos. Assumindo um plano cartesiano com coordenadas X e Y, vamos controlar a posição de figuras geométricas nesse plano através de deslocamentos. Os deslocamentos serão definidos por um método move(direção, distância), em que direção pode ser Norte, Sul, Leste ou Oeste e distância é um número inteiro.

    1. Construa uma interface, denominada IMove, que caracteriza os conceitos descritos no parágrafo anterior. Dica: utilize uma enumeração para indicar a direção do movimento.

    2. Construa as seguintes classes de elementos geométricos, que podem ser movimentados sobre o plano cartesiano:

      1. Ponto. Deve possuir dois construtores, um que recebe as coordenadas X e Y e outro que crie um ponto nas coordenadas padrão (0,0). Deve possuir métodos para acesso aos valores das coordenadas.

      2. Circunferência. Deve possuir um construtor que receba as coordenadas do centro e um valor para o tamanho do raio. Deve possuir um método para retornar o valor do centro e um método para retornar/alterar o valor do raio. Deve possuir métodos para o cálculo da área e do perímetro.

      3. Retângulo. Deve possuir um construtor que recebe o tamanho da base e altura, além da posição no plano cartesiano do ponto superior esquerdo. Deve possuir métodos para acesso/alteração dos valores da altura e base. Deve possuir métodos para o cálculo da área e do perímetro.

      4. Quadrado. Deve possuir um construtor que recebe o tamanho do lado e a posição no plano cartesiano do ponto superior esquerdo. Deve possuir métodos para acesso/alteração do tamanho do lado. Deve possuir métodos para o cálculo da área e do perímetro.

  2. Um sistema de automação inteligente de residências possui um módulo de controle de iluminação dos cômodos de uma casa. Neste módulo de controle, é possível observar o estado de todas as lâmpadas da casa e também ligar/desligar lâmpadas individualmente. Sabendo que a classe Lampada já foi implementada e apresenta as características descritas no diagrama UML abaixo, responda as questões que seguem.

    1. Projete e implemente uma interface que permita que a classe Controle atue sobre qualquer tipo de dispositivo que possa ser ligado, desligado e observado o estado.

    2. Modifique o projeto da classe Controle fazendo uso da interface descrita no passo anterior.

    3. Implemente a classe Controle projetada.

    4. Crie uma classe que represente um dispositivo que possa ser controlado pela classe Controle e teste o funcionamento em pequeno programa.

Comentários