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
Download

Aula teórica - iscte-iul