Os alunos no final desta aula deverão conhecer:
Deverão também ser capazes de:
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.
O resumo da matéria abordada nesta aula prática pode ser consultado aqui.
Ponto.  Deve ser possível obter as coordenadas
cartesianas (abcissa e ordenada) de um ponto bem como as suas coordenadas
polares (ângulo e módulo).
1.a)  Represente em UML a classe Ponto.  Represente
explicitamente apenas as operações da classe.
1.b) Acrescente atributos à classe. Assuma que cada ponto guarda as suas coordenadas cartesianas. Coloque notas no diagrama com o código das operações de inspecção para a abcissa (eixo x) e para o módulo.
1.c)  Altere a representação da classe Ponto
de modo a passar a usar atributos para o ângulo e o módulo
(coordenadas polares). 
Actualize as notas que contêm o código das operações
de inspecção da alínea anterior.
1.d) Defina a classe em C++ (versão com coordenadas polares).
2.a)  Represente em UML a classe abstracta Colaborador
que representa um colaborador de uma empresa.  Esta classe guarda
o nome do colaborador e tem uma operação abstracta que devolve a respectiva
remuneração.
2.b)  Construa um diagrama de classes que represente as relações
entre a classe abstracta Colaborador e as classes concretas Consultor
e Administrativo, que representam especializações
e concretizações do conceito de colaborador.  As classes
Consultor
e Administrativo fornecem métodos para a operação
de cálculo da remuneração.
2.c)  A classe Empresa guarda o nome da empresa e detém
uma lista de colaboradores.  Actualize o diagrama da alínea
anterior de modo a incluir esta classe Empresa.  Uma empresa
pode contratar ou dispensar colaboradores.
2.d) Elabore um diagrama de objectos representativo do estado do programa depois do bloco de código abaixo:
void main()
{
Empresa empresa("PIM");
Colaborador* ponteiro_para_o_joao = new Administrativo("João Nunes");
Colaborador* ponteiro_para_o_luis = new Consultor ("Luís Ortiga");
empresa.contrata(ponteiro_para_o_joao);
empresa.contrata(ponteiro_para_o_luis);
//Diagrama de objectos representa estado aqui!
}
3. Construa um diagrama de classes contendo classes representando automóveis, rodas e chassis.
4.  Construa um diagrama de classes que represente a classe Empregado
e a classe Departamento.  Cada empregado está afecto
a um e um só departamento (é pior que o Hotel Califórnia*). 
Os empregados podem mudar de departamento.  Cada departamento é chefiado
um só empregado
que tem de estar afecto ao departamento que chefia.  Os departamentos podem
estar temporariamente sem chefe.  Anote o diagrama
de modo a deixar clara esta restrição.  Escreva o código C++
correspondente (mesmo que incompleto, mas deixando claras todas as relações
entre as classes).
* Hotel Califórnia, Eagles:
[...]
You can check out any time you like
But you can never leave
5. Pense nas classes que devem existir no Trabalho Final e nas relações que devem existir entre elas.