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.