Aula 9
Fases do desenvolvimento de software
UML
1
Ideia do cliente
2
2003/2004
Programação Orientada para
Objectos
Resultado da falta de planeamento
3
2003/2004
Programação Orientada para
Objectos
Cuidado!
4
Tal como não faz sentido que o arquitecto
comece o seu trabalho assentando tijolos no
edifício final sem antes o ter projectado,
também não faz qualquer sentido uma
empresa de desenvolvimento de software
começar a resolver um problema escrevendo
linhas de código
2003/2004
Programação Orientada para
Objectos
Fases do desenvolvimento de software
Análise
Desenho
Decisão dos conceitos identificados que serão modelados
através de classes e suas relações
Resultado: modelo de desenho
Implementação
5
Identificação dos conceitos importantes e suas relações
Resultado: modelo de análise ou modelo conceptual
Implementação do modelo de desenho numa linguagem
de programação
Resultado: programa
2003/2004
Programação Orientada para
Objectos
Processo iterativo
Análise
Desenho
Implementação
6
2003/2004
Programação Orientada para
Objectos
Outras fases do processo de
desenvolvimento de software
Especificação de requisitos
Análise
Desenho
Implementação
Teste
Implantação
Manutenção
7
2003/2004
Programação Orientada para
Objectos
Criatividade
A criatividade é uma qualidade importante no
desenvolvimento de software
8
Deve utilizar-se no desenvolvimento da solução
Não na forma como a solução é escrita ou
apresentada
2003/2004
Programação Orientada para
Objectos
Programa
9
Um programa é um modelo simplificado de
parte do mundo
Uma solução só deve ser complexa se não
existir uma solução mais simples
2003/2004
Programação Orientada para
Objectos
UML: Unified Modelling Language
Linguagem gráfica de modelação
Grady Booch
Ivar Jacobson
James Rumbaugh
Diagramas representam modelo simplificado
Ferramenta importante de comunicação
10
2003/2004
Programação Orientada para
Objectos
Diagramas em UML
Estáticos:
11
De classes
De objectos
Casos de Utilização
Sequência
Colaboração
Estado
Actividade
Implementação
2003/2004
Programação Orientada para
Objectos
Diagramas de classes
12
Representam as classes e as relações que existem
entre elas
Vários diagramas é melhor que apenas um: ênfase
numa parte do modelo
Domínio do problema: conceitos - modelo de análise
Domínio da solução: classes - modelo de desenho
Estáticos: as relações entre as classes não se
alteram ao longo da execução do programa
2003/2004
Programação Orientada para
Objectos
Classes
Língua natural
Nome comum: “humano”
Empregado
Classe
concreta.
UML
Humano
Empregado
C++
Empregado {abstract}
13
Classe
abstracta.
2003/2004
class Humano {
// …
};
Programação Orientada para
Objectos
Características de uma classe
Conjunto das operações e dos atributos de
uma classe
Empregado
- nome_: string
- sexo_: Sexo
+ nome(): string
+ salário(): double
Empregado
Atributos
- nome_: string
- sexo_: Sexo
Operações
Empregado
+ nome(): string
+ salário(): double
14
2003/2004
Programação Orientada para
Objectos
Características de uma classe
Visibilidade
15
+, características públicas
#, características protegidas
-, características privadas
2003/2004
Programação Orientada para
Objectos
Características de uma classe
Forma
…
+ desenha()
+ nova(inout entrada: ifstream&): Forma*
…
Característica com
âmbito de instância.
Característica com
âmbito de classe,
Em C++:
class Forma {
public
static Forma* nova(ifstream& entrada);
// …
};
16
2003/2004
Programação Orientada para
Objectos
Notas, comentários e restrições
Notas
Isto é uma nota.
Empregado
Classe
representando
empregados…
Restrições
{Isto é uma restrição.}
Racional
- numerador_: int
- denominador_: int
17
«invariant»
{denominador_ 0
mdc(numerador_, denominador_) = 1}
2003/2004
Programação Orientada para
Objectos
Operações
Cada linha corresponde a uma operação
18
nome_de_função(lista_de_parâmetros):
tipo_de_devolução
nome_de_procedimento(lista_de_parâmetros)
2003/2004
Programação Orientada para
Objectos
Operações: parâmetros
tipo_de_passagem nome: tipo
Tipo de passagem
19
in: alterações ao parâmetro feitas pelo método que implementa a
operação não se reflectem no valor do respectivo argumento
inout: valor inicial do parâmetro é importante e, além disso, alterações
ao parâmetro feitas pelo método que implementa a operação
reflectem-se no valor do respectivo argumento
out: valor inicial não é importante (ou não existe de todo), mas valores
atribuídos ao parâmetro pelo método que implementa a operação
reflectem-se no valor do respectivo argumento
2003/2004
Programação Orientada para
Objectos
Operações
Empregado
Operações inspectoras.
+ nome(): string {query}
+ salário(): double {query}
Forma
- posição_: Posição
Construtores.
Inspectores.
«constructor»
+ Forma(in posição: Posição)
«query»
+ posição(): Posição {isPolymorphic = false}
+ desenha()
Modificadores.
«update»
+ movePara(in posição: Posição)
+ nova(inout entrada: ifstream&): Forma*
20
2003/2004
Programação Orientada para
Objectos
Operações: PC e CO
Racional
- numerador_: int
- denominador_: int
+ Racional(in numerador: int,
in denominador: int)
…
21
2003/2004
«precondition»
{denominador 0}
Programação Orientada para
Objectos
Métodos
Racional
- numerador_: int
- denominador_: int
…
+ numerador(): int {query}
…
22
{
return numerador_;
}
2003/2004
Programação Orientada para
Objectos
Atributos
Especificação
Multiplicidade
23
nome: tipo
nome [multiplicidade]: tipo
nome: tipo = valor_inicial
n - um número fixo n de valores
n..m - de n a m valores
* - um número arbitrário de valores
n..* - pelo menos n valores
2003/2004
Programação Orientada para
Objectos
Atributos
PilhaFixaDe100Int
- número_de_itens: int = 0
- número_máximo_de_itens: int = 100 {frozen}
- itens [número_de_itens]: int
…
PilhaFixaDe100Int
- número_de_itens: int = 0
- número_máximo_de_itens: int = 100 {frozen}
- itens: int[número_máximo_de_itens]
…
24
2003/2004
Programação Orientada para
Objectos
Atributos
FormaComposta
- formas [*]: Forma
…
…
FormaComposta
- formas: vector<Forma*>
…
…
25
Implementação:
class FormaComposta: public Forma {
public:
…
private:
vector<Forma*> formas;
…
};
2003/2004
Programação Orientada para
Objectos
Relação de generalização
Relação é um
Forma
Círculo
26
Rectângulo
2003/2004
FormaComposta
Programação Orientada para
Objectos
Relação de generalização: exemplos
Língua natural
"Um humano é um mamífero.", ou "Qualquer humano é um mamífero.".
UML
Mamífero
Humano
C++
class Humano : public Mamífero {
// …
};
27
2003/2004
Programação Orientada para
Objectos
Relação de generalização: exemplos
Língua natural
"Um hidroavião é um avião e é também um veículo naval.", ou
"Qualquer hidroavião é um avião e é um veículo naval.".
UML
VeículoNaval
Avião
Hidroavião
C++
class Hidroavião : public Avião, public VeículoNaval {
// …
};
28
2003/2004
Programação Orientada para
Objectos
Relação de amizade
Menos forte que generalização
Mais forte que associação
ListaDeInt
«friend»
ListaDeInt::Iterador
Dependência.
29
2003/2004
Programação Orientada para
Objectos
Relações de associação
Composição
Agregação
Relação parte/todo ou possui um
Pode implicar o controlo do tempo de vida de um objecto por outro
Associação simples
30
Relação é composto por um
Os tempos de vida dos objectos envolvidos estão relacionados
Não há conceito de posse
Os tempos de vida dos objectos ligados entre si são independentes
2003/2004
Programação Orientada para
Objectos
Associação simples
Empregado
Empregado
Empregado
Empregado
31
Chefe
empregados
*
- empregados
*
- empregados
*
chefe
Chefia
0..1
- chefe
Chefia
2003/2004
Chefe
0..1
- chefe
Chefia
Chefe
Chefe
0..1
Programação Orientada para
Objectos
Associações e outras…
Empregado
- empregados
*
Chefia
Chefe
- chefe
0..1
32
2003/2004
Programação Orientada para
Objectos
Associação simples
Língua natural
"Qualquer empregado é chefiado por (tem [fraco]) no máximo um chefe."
UML
- chefe
Empregado
ÉChefiadoPor
Chefe
0..1
C++
class Empregado {
// …
private:
Chefe* chefe;
};
33
2003/2004
Programação Orientada para
Objectos
Agregação
Especificada por losango vazio
- frota
Empresa
0..1
34
2003/2004
Veículo
*
Programação Orientada para
Objectos
Agregação
Língua natural
"Uma empresa possui (tem [médio]) um número arbitrário de veículos."
UML
- frota
Empresa
0..1
Veículo
*
C++
class Empresa {
// …
private:
list<Veículo*> frota;
};
35
2003/2004
Programação Orientada para
Objectos
Composição
Especificada por losango preenchido
Forma
- formas
*
{incomplete}
FormaComposta
0..1
36
2003/2004
Programação Orientada para
Objectos
Composição
Língua natural
"Um humano é composto por (tem [forte]) uma cabeça e dois braços."
UML
- cabeça
Humano
Cabeça
1
- braços
Braço
2
C++
class Humano {
// …
private:
Cabeça cabeça_;
Braço braços[2];
};
37
2003/2004
Programação Orientada para
Objectos
Diagramas de objectos
Mostram como as instâncias das classes, ou
seja, os objectos, se ligam entre si no sistema
em execução num dado instante de tempo
Estáticos: dizem respeito ao estado do
programa
38
2003/2004
Programação Orientada para
Objectos
Objectos
zé: Humano
Objecto sem nome
associado.
: Humano
Objecto cuja classe
pode ser inferida.
zé
Constante.
zé: Humano {frozen}
Estado do
objecto.
: Racional
numerador_ = 3
denominador_ = 2
39
2003/2004
Programação Orientada para
Objectos
Ligações
: Círculo
: FormaComposta
: Rectângulo
: Círculo
: Círculo
: FormaComposta
: Rectângulo
: Círculo
40
2003/2004
Programação Orientada para
Objectos
Aula 9: Sumário
Fases do desenvolvimento de software
UML
Diagramas de classes
Classes
Relações
Diagramas de objectos
Objectos ou instâncias
Ligações
41
2003/2004
Programação Orientada para
Objectos