Sie sind auf Seite 1von 4

1

Departamento de Engenharia Eltrica


Programao Orientada a Objetos 1 Semestre de 2014
Prof. Raquel Mini

2 TRABALHO PRTICO
VALOR: 20 PONTOS

Observaes:

O trabalho pode ser executado em grupo de no mximo 2 alunos. Tambm pode ser
executado individualmente.

permitido discutir os problemas e estratgias de soluo com seus colegas.

Quando se tratar de escrever ou implementar as solues, isto deve ser feito apenas
com o componente do seu grupo.

Se utilizar qualquer fonte externa para implementar suas respostas, voc deve citar
estas fontes: artigos ou livros, amigos ou colegas, informao que voc encontrou na
Internet qualquer coisa em qualquer lugar!

melhor tentar solucionar os problemas voc mesmo, pois solucionar problemas
um componente fundamental neste curso. No vamos penaliza-lo se voc utilizar uma
ajuda externa, desde que devidamente citada, e desde que esta ajuda no seja a cpia do
trabalho de um colega.

Utilizar o trabalho dos outros, como se fosse seu, plgio desonestidade
acadmica ser punida com severidade.

A entrega dos trabalhos ser feita no Moodle.

A data limite de entrega o dia 20/05/2014.

Todas as questes devem ser muito bem documentadas. Ao criar uma classe, crie a
documentao correspondente, o mesmo valendo para atributos, mtodos, casos de uso,
etc...

Organize corretamente seu trabalho: crie os arquivos de interface (.h) e de
implementao (.cpp) para cada classe e um arquivo separado para o programa
principal (main.cpp).





2

Questes:

1- (10 pontos) Desenvolver uma hierarquia de classes com comportamento polimrfico.
Nesta hierarquia, haver uma classe base abstrata de nome Forma, para encapsular
formas geomtricas (ou entidades geomtricas). A partir desta classe, sero derivadas
classes, ainda abstratas, que incluiro classificaes para a Forma, como Forma1D,
Forma2D e Forma3D . Delas, sero derivadas classes concretas que representaro
formas geomtricas reais:
(1D) linhas(segmentos de reta), crculos (somente a linha externa do crculo),
(2D) retngulos, tringulos, discos (toda a rea de um crculo),
(3D) esferas e cubos.
Todas essas formas esto embutidas em um espao tridimensional. Por exemplo, os
pontos extremos de uma linha tm coordenadas x, y e z.

Definir a classe Forma. A hierarquia criada a partir de Forma dever possuir as
seguintes funes: (OBS: a especificao do prottipo destas funes faz parte do
exerccio).
o Destrutor virtual;
o move. Funo puramente virtual, que ser usada para mover formas;
o desenha. Funo puramente virtual para desenhar as entidades na tela;
o area. Funo puramente virtual que calcula a rea da entidade;
o volume Funo puramente virtual que calcula o volume da entidade;
o pontoNaForma. Funo puramente virtual que recebe as coordenadas de um
ponto e verifica se este ponto se localiza na forma.
o tipo. Funo virtual que retorna uma string com o nome da classe da forma.
o le e escreve. Funo puramente virtual que l e escreve os dados da forma em um
istream e um ostream passados por referncia.
o operator>> e operator<<, sobrecarregados como funo no membro somente
para a classe base Forma e que chama as funes virtuais le e escreve criadas
acima.

Definir as classes derivadas, criando os atributos necessrios, construtores para elas
(projete estes construtores da melhor forma possvel), seus destrutores e
implementando os mtodos especificados como puramente virtuais na classe Forma.
Para formas 1D, as funes area e volume retornam zero; para formas 2D, a funo
volume retorna zero; para formas 3D a funo area retorna a rea da superfcie do
objeto. pontoNaForma deve retornar verdadeiro caso o ponto esteja no interior ou
sobre a forma. No necessrio implementar de verdade a funo desenha. Por
exemplo, para a classe Linha, voc pode simplesmente escrever na tela, algo como
Desenhando uma Linha com pontos extremos p1 = (x1, y1, z1) e p2 = (x2, y2, z2).
Criar uma classe para armazenar todas as Formas criadas (voc pode usar um
vector<Forma* > como atributo desta classe). Nesta classe, crie a possibilidade de
desenhar todas as formas armazenadas, mover uma determinada forma (o usurio
fornecer as coordenadas de um ponto e o sistema dever verificar qual das Formas
contm aquele ponto), mover todas as formas criadas, calcular a rea e o volume de
todas ou de uma nica forma (novamente, especificada atravs das coordenadas de


3

um ponto). No se esquea de criar um destrutor para esta classe que desaloque as
formas que esto sendo apontadas pelos Forma* .
Crie um programa principal com um menu (no grfico) para o usurio de modo que
este possa escolher novas formas para serem criadas em tempo de execuo,
escolhendo tambm seus parmetros. Possibilite, tambm, a manipulao destas
Formas (mover, calcular a rea, etc...) e a gravao e leitura de todas elas em arquivo.

Dicas: (a) Voc deve implementar os mtodos para manipulao do conjunto de formas
como mtodos da classe que armazena todas as Formas, fazendo chamada aos mtodos
correspondentes de Forma; (b) Para que a gravao e a leitura em arquivo funcionem
corretamente necessrio que seja armazenado em disco, alm dos atributos da forma, o
seu tipo (por exemplo, uma string com o nome da classe). Se isso no for feito, no
momento da leitura voc no saber qual tipo de Forma dever instanciar. Uma maneira
bacana de instanciar as Formas que esto sendo lidas criar uma funo que funcione
como uma Fbrica de Formas, recebendo como parmetro a string com o nome da
classe a que pertence a forma a ser criada e retornando um ponteiro para a forma
instanciada.



2- (10 pontos) A seguir so apresentados os oito primeiros elementos de seis sequncias
numricas:

Fibonnacci: 1, 1, 2, 3, 5, 8, 13, 21, ... f[i] = f[i-1]+f[i-2]
Lucas: 1, 3, 4, 7, 11, 18, 29, 47, ... L[i] = L[i-1]+L[i-2]
Pell: 1, 2, 5, 12, 29, 70, 169, 408, ... p[i] = 2*p[i-1]+p[i-2]
Triangular: 1, 3, 6, 10, 15, 21, 28, 36, ... t[i] = t[i-1] + i+1
Quadrados: 1, 4, 9, 16, 25, 36, 49, 64, ... q[i] = (i+1)*(i+1)
Pentagonal: 1, 5, 12, 22, 35, 51, 70, 92, ... p[i] = (i+1)*(3*i +2)/2

Crie uma hierarquia de classes, com comportamento polimrfico, para sequncias
numricas. A classe base, abstrata (Seq), declararia, no mnimo, as seguintes funes:

unsigned long int elem(int i) // Retorna o isimo elemento da seqncia (public)
void gen_elems(int i) // Gera os elementos da srie at o isimo elemento (protected)
print(ostream& os) // Escreve todos os elementos gerados em os (public)
int length() // Retorna o tamanho atual da srie

Esta interface a mnima. Voc pode adicionar os mtodos que julgar necessrios. Cada
classe da hierarquia possui um vector<unsigned long int>. A sequncia deve ser gerada
sob demanda, isto , se chamarmos elem(10) em um objeto da sequncia de Fibonnaci e
o ltimo elemento gerado for o 15, simplesmente buscamos no vector o elemento
armazenado. Porm, ao chamarmos elem(17) teremos que gerar os elementos no
presentes at ento na sequncia (16 e 17). Como a sequncia a mesma para cada
objeto de determinado tipo, o vector pode ser compartilhado por todos os objetos, isto ,
pode ser um atributo de classe (static).


4

(a) No Objecteering, projete a hierarquia, adicionando todos os mtodos que forem
necessrios, alm dos mnimos;
(b) Crie construtores que possam criar sequncias vazias ou inicializadas com um certo
nmero de elementos, passado como parmetros.
(c) Crie um nico operator<< que faa uso do mtodo print e que possa ser utilizado
para imprimir quaisquer das sequncias da hierarquia, at o ponto em que elas esto
criadas;
(d) Crie uma nica funo que imprima quaisquer das sequncias da hierarquia, de um
elemento i at um elemento j, recebidos como parmetros;
(e) Crie uma classe container que possua como atributo um vector<Seq*>. Ela
servir para armazenar e manipular o conjunto de sequncias.
(f) Crie um programa com um menu (no grfico) para o usurio de modo que este
possa escolher sequncias para serem criadas em tempo de execuo, escolhendo
tambm seus parmetros. Estas sequncias sero adicionadas dinamicamente ao
vector <Seq* > da classe da letra (e).
(g) Crie a possibilidade de imprimir todas as sequncias armazenadas, de forma
completa ou de um determinado elemento i at o elemento j, e de imprimir um
isimo elemento de todas as sequncias.

Dica: voc deve implementar todos estes mtodos como mtodos da classe "container"
de Seq*, fazendo chamada aos mtodos correspondentes de Seq.

Das könnte Ihnen auch gefallen