Aula prática 7

Sumário

Objectivos

Os alunos no final desta aula deverão conhecer:

  1. O mecanismo de derivação de classes em C++.
  2. As utilizações da derivação de classes em C++: estabelecimento da relação é um ou da relação implementa-se à custa de um entre as duas classes e herança de características (poupança de código).
  3. A diferença entre herança privada e pública em C++.
  4. As consequências dos tipos de herança em termos da relação estabelecida entre as classes.
  5. As consequências dos tipos de herança em termos do acesso às características da classe baixa.
  6. Os mecanismos de delegação, nomeadamente na herança privada.

Deverão também ser capazes de:

  1. Usar a herança privada como mecanismo de implementação de classes.
  2. Definir pequenas hierarquias de classes onde for apropriado.

Caso os alunos sintam que os objectivos não foram atingidos na totalidade deverão concluir/repetir os exercícios desta aula autonomamente e ou recorrer aos horários de dúvidas.

Resumo

O resumo da matéria abordada nesta aula prática pode ser consultado aqui.

Material de apoio

Os ficheiros relativos a esta aula estão disponíveis no arquivo Aula7.zip.

Exercícios

1.  Construa uma classe FilaDeInt por herança privada da classe ListaDeInt definida no módulo físico lista_de_int (ficheiros lista_de_int.H, lista_de_int_impl.H e lista_de_int.C) no directório ~/POO/Aula7.


2.  Seja a classe Filme no módulo físico filme constituído pelos ficheiros filme.H, filme_impl.H e filme.C bem como o programa de teste teste_de_filme.C e o ficheiro filmes.txt , que se podem encontrar no directório ~/POO/Aula7/

2.a)  Construa as classes FilmeEstrangeiro e EdicaoDoRealizador por herança pública da classe Filme.  

A classe FilmeEstrangeiro deve ter informação sobre o país de origem e a língua em que o filme é falado.  

A classe EdicaoDoRealizador deve ter informação (uma string) sobre as alterações feitas ao original.

Ambas as classes devem ter os métodos carregaDe() e mostraEm() bem como um construtor a partir de um canal de entrada.

2.b)  Altere o ficheiro teste_de_filme.C de modo a que construa, carregue e mostre não apenas instâncias da classe Filme, mas também instâncias das classes FilmeEstrangeiro e EdicaoDoRealizador.  Cada classe derivada apenas carrega e mostra a sua própria informação específica, delegando sempre que necessário nos procedimentos da classe base para carregar e mostrar a informação genérica relativa a um Filme.  Altere o ficheiro filmes.txt de modo a conter os três tipos de filmes.

2.c)  Altere o programa de teste de modo a criar uma lista de ponteiros para a classe Filme e nela inserir ponteiros para os três tipos de filmes definidos.  Depois faça um ciclo que percorra a lista mostrando os filmes no ecrã.  Que conclui?

2.d)  Suponha que pretende preencher a lista de ponteiros com filmes lidos a partir do ficheiro filmes.txt, que nesta fase já deve conter os três tipos de filmes.  Como o fazer?  Será que precisa de alterar o ficheiro filmes.txt?  Como?


3.  Trabalhe no Trabalho Final.