Aula prática 9

Sumário

Objectivos

Os alunos no final desta aula deverão conhecer:

  1. As fases usuais de desenvolvimento de software.
  2. A importância da modelação.
  3. A importância de uma notação gráfica universal para representar os modelos.
  4. Os tipos básicos de diagramas UML disponíveis.
  5. Os símbolos principais usados nesses diagramas e o seu significado.
  6. Os mapeamentos usuais entre o UML e o código C++.

Deverão também ser capazes de:

  1. Desenhar pequenos diagramas de classes e de objectos em UML.
  2. Implementar em C++ os modelos de desenho representados em UML.

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.

Exercícios

1.  Suponha o conceito de ponto num plano, representado através de uma classe 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.