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

Slides

Exercício 03.01 Considerando a especificação da classe Point apresentada, quais problemas poderiam ocorrer se ela fosse herdada? Como esses problemas poderiam ser evitados (Sintes, 2002)?

Exercício 03.02 Explique cada um dos seguintes termos: herança simples, herança múltipla, interface, superclasse e subclasse (Deitel, 2003).

Exercício 03.03 Desenvolva uma classe chamada RegularPolygon para representar um polígono regular. A classe possui um único atributo denominado length, que representa o comprimento do lado do polígono regular, do tipo double e cujo valor deve ser maior ou igual a zero e menor ou igual a vinte. A classe possui dois construtores: o primeiro configura o comprimento do lado do polígono regular com o valor padrão um, e o segundo recebe como parâmetro o comprimento do lado do polígono regular. O comprimento do lado do polígono regular pode ser obtido e alterado pelo usuário por meio dos métodos getLength() e setLength(), respectivamente. A quantidade de lados, o ângulo interno e a somatória dos ângulos internos do polígono regular podem ser obtidos pelo usuário por meio dos métodos getSides(), getInternalAngle() e getInternalAngleSum(), respectivamente. A classe também apresenta os métodos area() e perimeter(), que retornam a área e o perímetro do polígono regular, respectivamente. Estenda a classe RegularPolygon para implementar uma classe chamada EquilateralTriangle para representar um triângulo, ou seja, um trilátero regular com três lados de mesmo comprimento. Um triângulo possui um ângulo interno de 60°. A área de um triângulo de lado l é obtida pela fórmula √3 / 4 * l2. O perímetro de um triângulo de lado l é obtida pela fórmula 3 * l. Estenda a classe RegularPolygon para implementar uma classe chamada Square para representar um quadrado, ou seja, um quadrilátero regular com quatro lados de mesmo comprimento. Um quadrado possui um ângulo interno de 90°. A área de um quadrado de lado l é obtida pela fórmula l2. O perímetro de um quadrado de lado l é obtida pela fórmula 4 * l. Estenda a classe RegularPolygon para implementar uma classe chamada Pentagon para representar um pentágono, ou seja, um polígono regular com cinco lados de mesmo comprimento. Um pentágono possui um ângulo interno de 108°. A área de um pentágono de lado l é obtida pela fórmula (l2 * √(25 + 10 * √5)) / 4. O perímetro de um pentágono de lado l é obtida pela fórmula 5 * l. Estenda a classe RegularPolygon para implementar uma classe chamada Hexagon para representar um hexágono, ou seja, um polígono regular com seis lados de mesmo comprimento. Um hexágono possui um ângulo interno de 120°. A área de um hexágono de lado l é obtida pela fórmula 3 / 2 * √3 * l2. O perímetro de um hexágono de lado l é obtida pela fórmula 6 * l. Estenda a classe RegularPolygon para implementar uma classe chamada Octagon para representar um octógono, ou seja, um polígono regular com oito lados de mesmo comprimento. Um octógono possui um ângulo interno de 135°. A área de um octógono de lado l é obtida pela fórmula 2 * (√2 + 1) * l2. O perímetro de um octógono de lado l é obtida pela fórmula 8 * l. Estenda a classe RegularPolygon para implementar uma classe chamada Decagon para representar um decágono, ou seja, um polígono regular com dez lados de mesmo comprimento. Um decágono possui um ângulo interno de 144°. A área de um decágono de lado l é obtida pela fórmula 5 / 2 * (√5 + 2 * √5) * l2. O perímetro de um decágono de lado l é obtida pela fórmula 10 * l. Estenda a classe RegularPolygon para implementar uma classe chamada Dodecagon para representar um dodecágono, ou seja, um polígono regular com doze lados de mesmo comprimento. Um dodecágono possui um ângulo interno de 150°. A área de um dodecágono de lado l é obtida pela fórmula (6 + 3 * √3) * l2. O perímetro de um dodecágono de lado l é obtida pela fórmula 12 * l. Estenda a classe RegularPolygon para implementar uma classe chamada Hexadecagon para representar um hexadecágono, ou seja, um polígono regular com dezesseis lados de mesmo comprimento. Um hexadecágono possui um ângulo interno de 157,5°. A área de um hexadecágono de lado l é obtida pela fórmula 4 * (1 + √2 + √(2 * (2 + √2))) * l2. O perímetro de um hexadecágono de lado l é obtida pela fórmula 16 * l. Estenda a classe RegularPolygon para implementar uma classe chamada Icosagon para representar um icoságono, ou seja, um polígono regular com vinte lados de mesmo comprimento. Um icoságono possui um ângulo interno de 162°. A área de um icoságono de lado l é obtida pela fórmula 5 * (1 + √5 + √(5 + 2 * √5)) * l2. O perímetro de um hexadecágono de lado l é obtida pela fórmula 20 * l.

Exercício 03.04 Desenvolva uma classe chamada PlatonicSolid para representar um Sólido Platônico. A classe possui um único atributo denominado length, que representa o comprimento da aresta do Sólido Platônico, do tipo double e cujo valor deve ser maior ou igual a zero e menor ou igual a trinta. A classe possui dois construtores: o primeiro configura o comprimento da aresta do Sólido Platônico com o valor padrão um, e o segundo recebe como parâmetro o comprimento da aresta do Sólido Platônico. O comprimento da aresta do Sólido Platônico pode ser obtido e alterado pelo usuário por meio dos métodos getLength() e setLength(), respectivamente. A quantidade de faces, arestas e vértices do Sólido Platônico podem ser obitos pelo usuário por meio dos métodos getFaces(), getEdges() e getVertices(), respectivamente. A classe também apresenta os métodos area() e volume(), que retornam a área e o volume do Sólido Platônico, respectivamente. Estenda a classe PlatonicSolid para implementar uma classe chamada Tetrahedron para representar um tetraedro, ou seja, um poliedro regular de quatro faces, considerado um dos cinco Sólidos Platônicos. Um tetraedro possui quatro faces, seis arestas e quatro vértices. A área de um tetraedro de aresta a é obtida pela fórmula √3 * a2. O volume de um tetraedro de aresta a é obtida pela fórmula √2 / 12 * a3. Estenda a classe PlatonicSolid para implementar uma classe chamada Hexahedron para representar um hexaedro, ou seja, um poliedro regular de seis faces, considerado um dos cinco Sólidos Platônicos. Um hexaedro possui seis faces, doze arestas e oito vértices. A área de um hexaedro de aresta a é obtida pela fórmula 6 * a2. O volume de um hexaedro de aresta a é obtida pela fórmula a3. Estenda a classe PlatonicSolid para implementar uma classe chamada Octahedron para representar um octaedro, ou seja, um poliedro regular de oito faces, considerado um dos cinco Sólidos Platônicos. Um octaedro possui oito faces, doze arestas e seis vértices. A área de um octaedro de aresta a é obtida pela fórmula 2 * √3 * a2. O volume de um octaedro de aresta a é obtida pela fórmula √2 / 3 * a3. Estenda a classe PlatonicSolid para implementar uma classe chamada Dodecahedron para representar um dodecaedro, ou seja, um poliedro regular de doze faces, considerado um dos cinco Sólidos Platônicos. Um dodecaedro possui doze faces, trinta arestas e vinte vértices. A área de um dodecaedro de aresta a é obtida pela fórmula 3 * √(25 + 10 * √5) * a2. O volume de um dodecaedro de aresta a é obtida pela fórmula 1 / 4 * (15 + 7 * √5) * a3. Estenda a classe PlatonicSolid para implementar uma classe chamada Icosahedron para representar um icosaedro, ou seja, um poliedro regular de vinte faces, considerado um dos cinco Sólidos Platônicos. Um icosaedro possui vinte faces, trinta arestas e doze vértices. A área de um icosaedro de aresta a é obtida pela fórmula 5 * √3 * a2. O volume de um icosaedro de aresta a é obtida pela fórmula 5 / 12 * (3 + √5) * a3.

Exercício 03.05 A empresa XPTO precisa desenvolver um sistema para catalogar itens colecionáveis, como livros, CDs, DVDs e revistas. A funcionalidade principal deste sistema é manter os itens colecionáveis, organizados por tipo. O sistema deve permitir cadastrar os dados comuns e os específicos de cada tipo de item. Os dados comuns são: identificação única, nome, data de aquisição e lista de autores. Para os livros é importante manter também o nome da editora e o ano de publicação. Para os CDs é interessante manter o gênero musical e a identificação das faixas de áudio (nome das músicas). Para os DVDs é importante armazenar o tipo (musical, filme ou dados) e uma descrição geral sobre o item ou os extras, por exemplo. Por fim, para as revistas é interessante manter o ano de publicação, o volume, a editora e os principais assuntos tratatos. Desenvolva um modelo de classes que represente as informações descritas no levantamento de requisitos para o sistema da empresa XPTO.

Exercício 03.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) de inteiros. 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 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. 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.

Exercício 03.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 encadeada (singly linked list) de inteiros. 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 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. 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.

Exercício 03.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) de inteiros. 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 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. 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.

Exercício 03.09 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) de inteiros. 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 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. 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.

Exercício 03.10 Desenvolva um programa que calcule a média aritmética simples, a média geométrica e a média harmônica de uma sequência de valores inteiros fornecidos pelo usuário.