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

Slides

Exercício 04.01 Ao programar, por que você deve programar para uma interface, em vez de para uma implementação (Sintes, 2002)?

Exercício 04.02 Desenvolva uma classe chamada Transport para representar um veículo de transporte. A classe possui cinco atributos, denominados: a) name: nome do veículo de transporte, do tipo String; b) height: altura do veículo de transporte em metros (m), do tipo double; c) length: comprimento do veículo de transporte em metros (m), do tipo double; d) payload: capacidade de carga do veículo de transporte em toneladas (t), do tipo int; e) speed: velocidade do veículo de transporte em quilômetros por hora (km/h), do tipo int. Estenda a classe Transport para implementar uma classe chamada AirTransport para representar um veículo de transporte aéreo. A classe possui dois atributos, denominados: a) range: autonomia de voo do veículo de transporte aéreo em quilômetros (km), do tipo int; b) wingspan: envergadura da asa do veículo de transporte aéreo em metros (m), do tipo double. Estenda a classe Transport para implementar uma classe chamada LandTransport para representar um veículo de transporte terrestre. A classe possui dois atributos, denominados: a) engine: motor do veículo de transporte terrestre, do tipo String; b) wheels: rodas do veículo de transporte terrestre, do tipo String. Estenda a classe Transport para implementar uma classe chamada WaterTransport para representar um veículo de transporte marítimo. A classe possui dois atributos, denominados: a) beam: boca do veículo de transporte marítimo em metros (m), do tipo int; b) draught: calado do veículo de transporte marítimo em metros (m), do tipo int. Desenvolva uma classe chamada Catalog para representar um catálogo de veículos de transporte, implementando os métodos para inserção e apresentação dos veículos de transporte cadastrados.

Exercício 04.03 Desenvolva uma classe chamada Ingresso que possui um valor em reais e um método para imprimir o seu valor. Desenvolva uma classe chamada Ingresso VIP que possui um valor adicional sobre o preço do Ingresso. Desenvolva uma classe chamada Ingresso Normal que imprime a mensagem: Ingresso Normal. Desenvolva uma classe chamada Meia Entrada que possuiu metade do valor do Ingresso Normal. Desenvolva uma classe Bilheteria, onde o usuário seleciona 1 para Meia Entrada, 2 para Ingresso Normal e 3 para Ingresso VIP. Imprima todos os bilhetes emitidos pela Bilheteria e o valor arrecadado.

Exercício 04.04 Desenvolva uma classe abstrata chamada Triangle para representar um triângulo, ou seja, uma figura geométrica composta por três arestas e três vértices. A quantidade de arestas e vértices do triângulo podem ser obtidos pelo usuário por meio dos métodos getEdges() e getVertices(), respectivamente. A classe também apresenta o método abstrato area() que retorna a área do triângulo. Estenda a classe Triangle para implementar uma classe chamada EquilateralTriangle para representar um triângulo equilátero. A classe possui um único atributo denominado edgeA, que representa o comprimento da aresta do triângulo equilátero, do tipo double e cujo valor deve ser maior que zero. A classe possui um construtor que recebe como parâmetro o comprimento da aresta do triângulo equilátero. O comprimento da aresta do triângulo equilátero pode ser obtido pelo usuário por meio do método getEdgeA(). A área de um triângulo equilátero de aresta a é obtida pela fórmula √3 / 4 * a2. Estenda a classe EquilateralTriangle para implementar uma classe chamada IsoscelesTriangle para representar um triângulo isósceles. A classe possui um único atributo denominado edgeB, que representa o comprimento da base do triângulo isósceles, do tipo double e cujo valor deve ser maior que zero. A classe possui um construtor que recebe como parâmetro o comprimento da aresta e da base do triângulo isósceles, lembrando que os valores fornecidos devem ser distintos. O comprimento da base do triângulo isósceles pode ser obtido pelo usuário por meio do método getEdgeB(). A área de um triângulo isósceles de aresta a e base b é obtida pela fórmula b * h / 2, onde h é obtida pela fórmula √(a2 - (b2 / 4)). Estenda a classe IsoscelesTriangle para implementar uma classe chamada ScaleneTriangle para representar um triângulo escaleno. A classe possui um único atributo denominado edgeC, que representa o comprimento da terceira aresta do triângulo escaleno, do tipo double e cujo valor deve ser maior que zero. A classe possui um construtor que recebe como parâmetro o comprimento das três arestas do triângulo escaleno, lembrando que os valores fornecidos devem ser distintos. O comprimento da terceira aresta do triângulo escaleno pode ser obtido pelo usuário por meio do método getEdgeC(). A área de um triângulo escaleno de arestas a, b e c é obtida pela fórmula √(s * ((s - a) + (s - b) + (s - c))), onde s é obtida pela fórmula (a + b + c) / 2. Desenvolva uma classe chamada Shapes para representar um catálogo de figuras geométricas, implementando os métodos para inserção e apresentação das figuras geométricas cadastradas.

Exercício 04.05 Desenvolva uma classe chamada Dequeue para representar o tipo abstrato de dados deque, ou seja, onde os elementos podem ser inseridos e/ou removidos em ambas as extremidades da lista. Os elementos devem ser armazenados numa lista encadeada (singly linked list) genérica. Estenda a classe Dequeue para implementar as classes Stack e Queue, para representar os tipos abstratos de dados pilha e fila, respectivamente (Goodrich, 2007). Forneça métodos public para cada um dos itens a seguir da classe Queue: a) inserir um elemento na fila; b) remover e retornar o elemento inserido na fila; c) retornar o elemento inserido na fila, sem removê-lo; d) retornar o número de elementos inseridos na fila; e) retornar se há ou não elementos inseridos na fila. Forneça métodos public para cada um dos itens a seguir da classe Stack: a) inserir um elemento na pilha; b) remover e retornar o elemento inserido na pilha; c) retornar o elemento inserido na pilha, sem removê-lo; d) retornar o número de elementos inseridos na pilha; e) retornar se há ou não elementos inseridos na pilha.

Exercício 04.06 Desenvolva uma classe chamada Dequeue para representar o tipo abstrato de dados deque, ou seja, onde os elementos podem ser inseridos e/ou removidos em ambas as extremidades da lista. Os elementos devem ser armazenados numa lista encadeada (singly linked list) genérica. A classe deve possuir um construtor que receba como parâmetro a quantidade máxima de elementos a serem armazenados na lista encadeada. Estenda a classe Dequeue para implementar as classes Stack e Queue, para representar os tipos abstratos de dados pilha e fila, respectivamente (Goodrich, 2007). Forneça métodos public para cada um dos itens a seguir da classe Queue: a) inserir um elemento na fila, retornando o sucesso ou a falha na operação; b) remover e retornar o elemento inserido na fila; c) retornar o elemento inserido na fila, sem removê-lo; d) retornar o número de elementos inseridos na fila; e) retornar se há ou não elementos inseridos na fila. Forneça métodos public para cada um dos itens a seguir da classe Stack: a) inserir um elemento na pilha, retornando o sucesso ou a falha na operação; b) remover e retornar o elemento inserido na pilha; c) retornar o elemento inserido na pilha, sem removê-lo; d) retornar o número de elementos inseridos na pilha; e) retornar se há ou não elementos inseridos na pilha.

Exercício 04.07 Desenvolva uma classe chamada Dequeue para representar o tipo abstrato de dados deque, ou seja, onde os elementos podem ser inseridos e/ou removidos em ambas as extremidades da lista. Os elementos devem ser armazenados numa lista duplamente encadeada (doubly linked list) genérica. Estenda a classe Dequeue para implementar as classes Stack e Queue, para representar os tipos abstratos de dados pilha e fila, respectivamente (Goodrich, 2007). Forneça métodos public para cada um dos itens a seguir da classe Queue: a) inserir um elemento na fila; b) remover e retornar o elemento inserido na fila; c) retornar o elemento inserido na fila, sem removê-lo; d) retornar o número de elementos inseridos na fila; e) retornar se há ou não elementos inseridos na fila. Forneça métodos public para cada um dos itens a seguir da classe Stack: a) inserir um elemento na pilha; b) remover e retornar o elemento inserido na pilha; c) retornar o elemento inserido na pilha, sem removê-lo; d) retornar o número de elementos inseridos na pilha; e) retornar se há ou não elementos inseridos na pilha.

Exercício 04.08 Desenvolva uma classe chamada Dequeue para representar o tipo abstrato de dados deque, ou seja, onde os elementos podem ser inseridos e/ou removidos em ambas as extremidades da lista. Os elementos devem ser armazenados numa lista duplamente encadeada (doubly linked list) genérica. A classe deve possuir um construtor que receba como parâmetro a quantidade máxima de elementos a serem armazenados na lista duplamente encadeada. Estenda a classe Dequeue para implementar as classes Stack e Queue, para representar os tipos abstratos de dados pilha e fila, respectivamente (Goodrich, 2007). Forneça métodos public para cada um dos itens a seguir da classe Queue: a) inserir um elemento na fila, retornando o sucesso ou a falha na operação; b) remover e retornar o elemento inserido na fila; c) retornar o elemento inserido na fila, sem removê-lo; d) retornar o número de elementos inseridos na fila; e) retornar se há ou não elementos inseridos na fila. Forneça métodos public para cada um dos itens a seguir da classe Stack: a) inserir um elemento na pilha, retornando o sucesso ou a falha na operação; b) remover e retornar o elemento inserido na pilha; c) retornar o elemento inserido na pilha, sem removê-lo; d) retornar o número de elementos inseridos na pilha; e) retornar se há ou não elementos inseridos na pilha.

Exercício 04.09 Uma empresa quer manter o registro da vida acadêmica de todos os seus funcionários, de modo que o modelo deve contemplar o registro das seguintes informações, de forma incremental:

  1. Para o funcionário que não estudou, apenas o nome e o código funcional;
  2. Para o funcionário que concluiu o ensino básico, a escola;
  3. Para o funcionário que concluiu o ensino médio, a escola;
  4. Para o funcionário que concluiu o ensino superior, a universidade.

Apresente a implementação, na linguagem de programação Java, da solução do problema apresentado, considerando os conceitos de encapsulamento, herança e polimorfismo do paradigmas de programação orientada a objetos.

Exercício 04.10 Desenvolva um conversor de números arábicos, no intervalo de 1 a 999, para números romanos, números arábicos por extenso e números ordinais por extenso.