Modelagem de Software
Orientado a Objetos
utilizando a
Linguagem UML
Alcides Calsavara
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
1
Conteúdo Programático
princípios de O-O
 método, casos de uso, classes
 relacionamentos, restrições, interfaces,
tipos parametrizados, estereótipos,
pacotes
 estados e eventos
 seqüência, colaboração, atividades,
componentes, implantação

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
2
Bibliografia Básica
UML Toolkit
 UML in a Nutshell
 Object-Oriented Software Construction
 Modelagem de Objetos através da UML
 Design Patterns: Elements of Reusable
Object-Oriented Software
 Modelagem e Projeto baseados em
Objetos

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
3
Princípios de
Orientação a Objetos
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
4
Sumário
Tipos de dados abstratos
 Classes e instâncias
 Operações e atributos
 Construção de objetos
 Referências para objetos
 Pacotes de classes
 Encapsulamento
 Modos de visibilidade/acesso

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
5
Sumário
Asserções e invariantes de classe
 Tratamento de exceções
 Objetos compostos
 Herança, sobrecarga, polimorfismo
 Herança múltipla
 Interfaces
 Tipos parametrizados

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
6
Tipos de Dados Abstratos
(ADT)
Um ADT é um modelo matemático para
descrição de um tipo independente de
sua representação física.
 Um tipo é uma coleção de objetos
caracterizados através de funções,
axiomas e pré-condições.
 Um objeto que pertence ao conjunto de
objetos descritos por um ADT é dito ser
uma instância do ADT.

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
7
Exemplo de ADT
Pilha (Stack)

Opções de representação:
– array
– listas
– ...

Questão básica:
Como definir formalmente uma pilha de
forma independente de sua
representação?
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
8
Exemplo de ADT
Primeira Parte: Tipos
Especificação ADT para pilhas

TYPES
– STACK [G]
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
9
Exemplo de ADT
Segunda Parte: Funções

FUNCTIONS
– put: STACK[G] X G --> STACK[G]
– remove: STACK[G] -/-> STACK[G]
– item: STACK[G] -/-> G
– empty: STACK[G] --> BOOLEAN
– new: STACK[G]
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
10
Exemplo de ADT
Terceira Parte: Axiomas
AXIOMS
Para todo x : G, s : STACK[G]
A1 - item ( put ( s, x ) ) = x
A2 - remove ( put ( s, x ) ) = s
A3 - empty ( new )
A4 - not empty ( put ( s, x ) )

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
11
Exemplo de ADT
Quarta Parte: Pré-condições

PRECONDITIONS
– remove ( s : STACK[G] ) require not
empty(s)
– item ( s : STACK[G] ) require not empty(s)
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
12
Modularização
Construção de software orientado a
objetos é a construção de um sistema
de software como uma coleção de
implementações de ADTs
possivelmente parciais.
 Um ADT corresponde a um módulo de
um sistema de software.

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
13
Classe
Uma classe é um tipo abstrato de
dados equipado com uma
implementação possivelmente parcial.
 A definição de uma classe inclui uma
lista de atributos e uma lista de
operações.
 Um sistema de software orientado a
objetos é definido por um conjunto de
classes.

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
14
Instância
Todo objeto é instância de alguma
classe.
 A execução de um sistema de software
orientado a objetos corresponde a
interações entre objetos através de
mensagens (chamadas de operações).
 Toda execução é iniciada em um objeto
raiz, com a chamada de uma de suas
operações.

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
15
Classe X Objeto
Um classe é um elemento de
construção de software. Portanto, é um
elemento definido e criado
estaticamente.
 Um objeto é um elemento de run-time,
isto é, só existe em tempo de execução
de um sistema de software. Portanto, é
criado dinamicamente.

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
16
Atributo
A definição de uma classe inclui uma
lista de atributos.
 Toda instância de uma classe contém
todos os atributos definidos pela classe.
 Cada atributo tem um nome, um tipo e,
opcionalmente, um valor default.
 O conjunto de valores dos atributos de
um objeto define o seu estado.

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
17
Atributo

Tipos de atributos:
– de instância: há um valor específico para
cada instância
– de classe: há um único valor
(compartilhado) para todas as instâncias

O valor de um atributo pode ser uma
constante.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
18
Operação
A definição de uma classe inclui uma
lista de operações que correspondem à
interface da classe.
 Uma operação é uma função ou
transformação que pode ser aplicada a
todo e qualquer objeto de uma classe.
 Uma operação tem um nome, uma lista
de argumentos, um tipo de retorno e
uma implementação (um método).

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
19
Operação
Em um sistema de software, existe
apenas uma única ocorrência de cada
operação de uma classe,
independentemente do número de
instâncias da classe.
 Operações são definidas e criadas
estaticamente.

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
20
Construção de Objetos
Toda classe define um ou mais
operações específicas para a criação
(iniciação) de novos objetos,
normalmente denominadas
construtores da classe.
 Toda vez que um novo objeto é criado,
um construtor da correspondente classe
deve ser selecionado para execução.

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
21
Referência para Objeto




Uma referência é um valor de run-time que
pode ser void ou attached.
Quando o valor de uma referência for
attached, a referência identifica um único
objeto. (A referência está fixada em um certo
objeto.)
Podem existir várias referências para um
mesmo objeto.
Copiar uma referência é diferente de copiar
um objeto.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
22
Pacote de Classes
Classes podem ser logicamente
organizadas em grupos denominados
pacotes.
 Pacotes são estrurados de forma
hierárquica.
 Há pacotes disponibilizados em
bibliotecas.
 Usuários podem criar seus próprios
pacotes.

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
23
Encapsulamento
Processo de ocultamento de partes
internas da implementação de um
objeto e permissão de acesso ao
estado do objeto somente através de
uma interface bem definida.
 Os atributos de um objeto são
manipulados (para leitura e escrita)
somente por operações definidas para
o objeto.

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
24
Modos de
Visibilidade/Acesso


Pode-se controlar a manipulação de atributos
e operações (membros, de forma geral)
considerando-se os escopos de classe,
subclasse e pacote, de forma combinada.
Modificadores:
– private
– protected
– package
– public
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
25
Modificador private

Um membro qualificado como private
somente é acessível a partir de
métodos da própria classe à qual
pertence o membro.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
26
Modificador public

Um membro qualificado como public é
acessível a partir de qualquer operação
de qualquer classe, independentemente
de subclasse e de pacote.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
27
Modificadores public e
private -
Exemplo 1
class Pessoa
{ private int idade;
private int altura;
public Pessoa(int i, int a) { idade = i; altura =
a; }
private void cresce( ) { idade++; altura++; }
private void decresce( ) { idade++; altura--; }
public void envelhece( )
{ if (idade < 22) cresce( ) else decresce( ); }
}
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
28
Modificadores public e
private -
Exemplo
2
class Funcionario extends Pessoa
{ private int nivel; private int horas;
public Funcionario(int i, int a, int n, int
h)
{ super(i, a); nivel = n; horas = h; }
public double salario( )
{ return ( nivel * 80 * horas) ; }
}
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
29
Modificador package

Um membro qualificado como package
é acessível a partir de qualquer
operação de qualquer classe
pertencente ao mesmo pacote que a
classe à qual pertence o membro,
independentemente de subclasse.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
30
Modificador protected

Um membro qualificado como protected
é acessível a partir de qualquer
operação de qualquer classe, exceto se
a classe de acesso estiver em pacote
distinto e não for subclasse da classe à
qual pertence o membro.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
31
Modificadores package e
protected
class Veiculo {
Exemplo
1
int ano; // package
protected int potencia; ... }
class Carro extends Veiculo
{ ... potencia++;
ano++;
... }
class Retificadora
{ ... Carro c = new Carro (...) ;
c.ano = 1980;
c.potencia = 100; ... }
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
32
Modificadores package e
protected
package Basico;Exemplo
// arquivo 1 2
class Veiculo { int ano; // package
protected int potencia; ... }
package Extensao; // arquivo 2
class Carro extends Veiculo
{ ... potencia++; ... } // sem acesso a ano
class Retificadora
{ ... Carro c = new Carro (...) ; ... }
// sem acesso a ano e potencia
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
33
Asserções
P {A} Q
A execução de A, iniciando em um
estado no qual P é verdadeira,
terminará em um estado no qual Q é
verdadeira.
P : pré-condição
Q : pós-condição
A : uma operação (ou parte de)
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
34
Asserções - Exemplos
{x >= 9} x := x + 5 {x >= 13}
 {x >= 0} y := sqrt(x) { true }
 {false} y := x * x { y >= 0 }
 {not full} put(x : G) { not empty AND
item = x AND count = old count + 1 }

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
35
Invariante de Classe
Uma invariante é uma propriedade
inalterável durante todo o ciclo de vida
de um objeto.
 Exemplos:

– 0 <= count
– count <= capacity
– empty = (count = 0)
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
36
Tratamento de Exceção


Exceções são acontencimentos fora do
comportamento normal ou desejado para um
programa. O gerenciamento de exeções
permite o controle sobre erros e
possivelmente uma solução de contorno.
Exemplos: entrada em formato inválido,
arquivo corrompido, conexão de rede não
disponível, índice inválido para vetor, ...
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
37
Exemplo de código frágil
class TestNullP
{ static String s = null;
public static void main(String args[ ])
{
char c1 = s.charAt(2);
// java.lang.NullPointerException (programa pára)
s = new String("Curitiba");
char c2 = s.charAt(2);
// c2 = 'r'
char c3 = s.charAt(8);
// java.lang.StringIndexOutOfBoundsException (programa
pára)
}
} // fim
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
38
Exemplo de código frágil
class TestNullP
{ static String s = null;
public static void main(String args[ ])
{
char c1 = s.charAt(2);
// java.lang.NullPointerException (programa pára)
s = new String("Curitiba");
char c2 = s.charAt(2);
// c2 = 'r'
char c3 = s.charAt(8);
// java.lang.StringIndexOutOfBoundsException (programa
pára)
}
} // fim
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
39
Exemplo modificado com ifs
class TestNullP
{ static String s = null;
public static void main(String args[ ])
{
if (s != null && s.length( ) > 2)
char c1 = s.charAt(2);
s = new String("Curitiba");
if (s != null && s.length( ) > 2)
char c2 = s.charAt(2);
// c2 = 'r'
if (s != null && s.length( ) > 8)
char c3 = s.charAt(8);
} } // fim
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
40
Exemplo modificado com
tratamento
de
exceções
class TestNullP
{
static String s = null;
public static void main(String args[])
{
try
{
char c1 = s.charAt(2);
}
catch (Exception e)
{
System.out.println("Exceção " + e);
// Exceção: java.lang.NullPointerException
}
// continua
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
41
Exemplo modificado com
tratamento de exceções
(cont.)
s = new String("Curitiba");
try
{
char c2 = s.charAt(2);
// c2 = 'r'
}
catch (Exception e)
{
System.out.println("Exceção " + e);
}
// continua
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
42
Exemplo modificado com
tratamento de exceções
(cont.)
try
{
char c3 = s.charAt(8);
}
catch (Exception e)
{
System.out.println("Exceção " + e);
// Exceção: java.lang.StringIndexOutOfBoundsException
}
}
} // fim
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
43
Hierarquia de exceções
Throwable
Error
Exception
...
RuntimeException
IOException
...
...
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
...
44
A cláusula throws
class TestNullP
{ static String s = null;
static void work( ) throws Throwable
{
try
{ char c1 = s.charAt(2); }
catch (Exception e)
{ System.out.println("Exceção"); throw(e); }
catch (Error e)
{ System.out.println("Erro"); throw(e); }
finally
{ System.out.println("Adios, amigos");}
}
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
// continua
45
A cláusula throws (cont.)
public static void main(String args[ ])
{
try
{ work( ); }
catch(Throwable t)
{ System.out.println("Erro ou Exceção " + t); }
finally
{ System.out.println("Adios, amigos II");}
}
} // fim
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
46
Definindo suas próprias
exceções
class ProblemaEmWork extends Exception
{
public ProblemaEmWork( ) { }
public ProblemaEmWork(String msg) { super(msg); }
}
// continua
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
47
Definindo suas próprias
exceções (cont.)
class TestNullP
{ static String s = null;
static void work( ) throws ProblemaEmWork
{
try
{ char c1 = s.charAt(2); }
catch (Exception e)
{ throw(new ProblemaEmWork("Exceção em work " + e)); }
catch (Error e)
{ throw(new ProblemaEmWork("Erro em work " + e)); }
finally
{ System.out.println("Adios, amigos");}
}
// continua
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
48
Definindo suas próprias
exceções (cont.)
public static void main(String args[ ])
{
try
{ work(); }
catch(ProblemaEmWork p)
{ System.out.println(p); }
finally
{ System.out.println("Adios, amigos II");}
}
} // fim
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
49
Objeto Composto

Um objeto pode conter uma referência
para outro objeto, recursivamente.
Nesse caso, o objeto é dito ser
composto ou complexo.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
50
Generalização
Relacionamento entre uma classe e
uma ou mais versões refinadas ou
especializadas da classe.
 Especialização: relacionamento inverso
 Superclasse: versão mais abstrata de
outra classe, a subclasse
 Subclasse: versão mais refinada de
outra classe, a superclasse

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
51
Herança
Mecanismo baseado em objetos que
permite que as classes compartilhem
atributos e operações baseados em um
relacionamento, geralmente
generalização.
 Uma subclasse herda atributos e
operações da superclasse.

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
52
Classes Abstratas e
Concretas


Classe abstrata: classe que não pode ter
instâncias diretas, mas cujos descendentes
sim; organizam características comuns a
diversas classes; mecanismo para reutilizar
código; pode definir operações abstratas
(sem um correspondente método)
Classe concreta: classe que pode ter
instâncias diretas; não pode definir
operações abstratas
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
53
Interface
Um classe totalmente abstrata é dita
ser uma interface.
 A definição de uma interface não inclui
qualquer implementação.

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
54
Interfaces
- definição básica 



Uma interface possui um nome, e define apenas
métodos abstratos e constantes (descreve uma
abstração, normalmente um comportamento)
Uma interface não pode ser instanciada
Uma interface pode ser implementada por uma ou
mais classes
Cada classe pode estender somente uma classe,
mas pode implementar diversas interfaces
(alternativa para a falta de herança múltipla em Java)
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
55
Interfaces
- definição básica 


Uma classe que implementa uma interface deve
implementar todos os métodos abstratos definidos
pela interface (não pode deixar qualquer
implementação para suas subclasses)
Uma interface pode estender uma ou mais interfaces
Se uma classe herda duas constantes de duas
interfaces distintas mas com o mesmo nome, deve
fazer referência a cada constante precedendo-a com
o nome da interface e um ponto
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
56
Interfaces
- como usar - exemplo 1 public interface F
{ int k = 10; // public, static, final (constante)
int f ( ); // public, abstract
}
class C implements F
{
public int f ( ) { return k; } // tem que ser public
}
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
57
Interfaces
- como usar - exemplo 2 public interface F
{ int k = 10;
int f( );
}
interface G extends F
// G e seus membros tem visibilidade package
{ void g( ); }
class C implements G
{ public
int f( ) { return k; }
public
void g( ) {}
}
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
58
Interfaces
- como usar - exemplo 3 public interface F
{ int k = 10; int f( ); }
interface H
{ int k = 10; int h( ); }
interface G extends F, H
{ void g( ); }
class C implements G
{ public
int f( ) { return F.k;}
public
int h( ) { return H.k;}
public
void g() {}
Modelagem
} de Software Orientado a Objetos utilizando a Linguagem UML
59
Interfaces
- como usar - exemplo 4 public interface F
{ int k = 10; int f( ); }
interface H
{ int k = 10; int h( ); }
class D
{}
class E extends D implements F, H
{ public
int f( ) { return F.k;}
public
int h( ) { return H.k;}
}
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
60
Sobrecarga

Atributos e operações podem ser
redefinidos (sobrecarregados) por
subclasses.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
61
Sobrecarga para extensão

A nova operação é igual à operação
herdada, exceto pelo fato de
acrescentar alguns detalhes de
comportamento, normalmente afetando
novos atributos da subclasse.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
62
Sobrecarga para restrição
A nova operação restringe o protocolo
(assinatura da operação), podendo
reduzir os tipos de argumentos.
 A operação herdada fica fechada
(restrita) dentro de cada subclasse
específica.

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
63
Sobrecarga para
otimização
O novo método tem o mesmo protocolo
externo e apresenta o mesmos
resultados
 A implementação do novo método
(algoritmo utilizado) pode ser
completamente diferente

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
64
Sobrecarga por
conveniência
Emprego adhoc de herança para
reutilizar classes.
 Uma nova classe é tornada subclasse
de uma classe existente e substitui os
métodos inconvenientes.
 Semanticamente errado e conduz a
problemas de manutenção; recomendase criar uma terceira classe
(superclasse das demais)

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
65
Polimorfismo




Assume muitas formas
A propriedade segundo a qual uma operação
pode comportar-se diferentemente em
classes diferentes.
A subclasse redefine a implementação de
uma operação herdada da superclasse.
Onde se espera uma instância de um certa
classe pode aparecer uma instância de
qualquer subclasse daquela classe.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
66
Herança Múltipla
Uma classe possui mais de uma
subclasse e herda características de
todos os seus ancestrais.
 Maior capacidade de especificação de
classes.
 Maior oportunidade de reutilização.
 Perda em simplicidade conceitual e de
implementação.

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
67
Tipo Parametrizado
Um tipo pode receber como parâmetro
uma lista de tipos.
 Exemplos:

– pilha de inteiros
– pilha de reais
– pilha de pessoas
– ...
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
68
Modelagem Orientada a
Objetos
Use-Case Modeling
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
69
Objetivos básicos de um
modelo use-case
Descrever o que um novo sistema deve
fazer
 Descrever o que um sistema existente
faz
 Formalizar os requisitos de um sistema,
normalmente obtidos através de
discussões entre os desenvolvedores e
os clientes (usuários) do sistema.

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
70
Componentes de um usecase

um conjunto de use cases
– Um use case representa uma
funcionalidade do sistema, do ponto de
vista do usuário do sistema (visão
externa).

um conjunto de actors
– Um actor representa um tipo de usuário do
sistema.
– Um actor deve estar associado a pelo
menos um use case
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
71
O componente use case
Um use case representa uma
funcionalidade completa (mas pode
haver dependências entre os diversos
use-cases de um sistema)
 Um use case sempre faz algo solicitado
por um actor e retorna alguma coisa
para esse actor

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
72
O componente actor
Um actor é uma entidade externa ao
sistema que interage com o sistema.
 Um actor é normalmente um ser
humano, mas pode ser outro sistema
ou alguma espécie de hardware que
interage com o sistema.

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
73
Outros objetivos de usecase
 Fornecer uma base para a realização de


testes do sistema.
Prover uma descrição clara, consistente e
simples do que o sistema dever fazer,
facilitando a discussão entre o desenvolvedor
e o cliente do sistema e ainda facilitando a
comunicação dentro da equipe de
desenvolvedores
Ser a base para definição das classes do
sistema e para definição da dinâmica do
sistema.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
74
Exemplo de diagrama usecase
Sistema
de Seguros
Cliente
Assinatura de uma apólice de
seguro
Levantamento de estatísticas de
vendas
Corretor de
seguros
Levantamento de estatísticas sobre
clientes
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
75
Mais sobre actors
Um actor é uma classe no diagrama em
UML
 Pode-se construir uma hierarquia de
actors. Exemplo: Um cliente pode ser
um cliente comum ou um cliente
especial. Exemplo: Um cliente pode ser
um cliente de telefone ou um cliente de
água.

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
76
Mais sobre use-cases


Um use-case pode ser estendido com
outro(s) use case(s). Exemplo: Os use cases
"Assinatura de seguro de carro" e "Assinatura
de seguro de vida" são extensões do use
case "Assinatura de apólice de seguro".
Um use-case pode utilizar outro(s) use
case(s). Exemplo: O use case "Assinatura do
contrato de compra de um automóvel" utiliza
o use case "Assinatura de uma apólice de
seguro de carro".
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
77
Modelagem Orientada a
Objetos
Relacionamentos
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
78
Conteúdo
Ligação entre objetos
 Associação entre classes
 Agregação
 Multiplicidade e Papel
 Atributo de ligação
 Associação como uma classe
 Associações ternárias
 Ordenação em associações
 Associação qualificada

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
79
Ligação
Uma conexão física ou conceitual entre
objetos
 Exemplo: O país Brasil tem como
capital a cidade de Brasília.
 Exemplo: O funcionário João trabalha
na empresa Transamérica S.A.
 Exemplo: O artigo “OO Solutions” foi
publicado na conferencia OOPSLA’99.

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
80
Associação
Relacionamento entre instâncias de
duas ou mais classes descrevendo um
grupo de ligações com estrutura e
semântica comuns.
 Exemplo: Um país tem como capital
uma cidade.
 Exemplo: Um funcionário trabalha numa
empresa.

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
81
Agregação
Forma especial de associação, entre o
todo e suas partes, na qual o todo é
composto pelas partes
 Também chamada de herança
horizontal
 Exemplo: Um artigo é publicado em
uma conferência, isto é, o artigo faz
parte da conferência (ou dos anais da
conferência).

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
82
Multiplicidade e Papel
Multiplicidade: Número de instâncias
de uma classe que podem se relacionar
a uma única instância de um classe
associada (ou agregada).
 Papel: nome que identifica
inequivocamente uma extremidade de
uma associação.

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
83
Atributo de Ligação
Um valor de dados presente em cada
ligação (nível de instâncias) de uma
associação (nível de classes)
 Uma propriedade da ligação entre
objetos, e não dos objetos ligados,
propriamente ditos
 Exemplos: permissão de acesso que
um usuário possui para a um arquivo; o
salário de uma pessoa em um emprego
em uma companhia

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
84
Associação como uma
Classe
Cada ligação de uma associação é uma
instância de uma classe
 Uma ligação é um objeto, com atributos
e métodos
 Útil quando ligações podem participar
em associações com outros objetos
 Útil quando ligações sofrem operações
 Exemplo: autorização para usuários em
estações de trabalho

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
85
Associação Ternária




Representa ligações entre 3 objetos
Não pode ser dividida em associações
binárias sem que haja perda de informações
Associações de grau maior que 3 são raras e
devem ser evitadas devido a complexidade
de entendimento e implementação
Exemplo: pessoas que são programadoras
usam linguagens de programação em
projetos
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
86
Ordenação em
Associações
Em alguns casos o conjunto de objetos
associados a um certo objeto apresenta
uma ordem
 A palavra "ordenado" deve aparecer
junto à multiplicade "muitos" de uma
associação para indicar que existe uma
ordem entre os objetos ligados
 Exemplos: as janelas visíveis em uma
tela possuem uma ordem; os vértices
de um polígono

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
87
Associação Qualificada
Relaciona dois objetos e um
qualificador
 O qualificador reduz a multiplicidade
 Exemplo: Um diretório contém muitos
arquivos, mas é o nome do arquivo
dentro do diretório que identifica o
arquivo (e identifica um único arquivo)
 Maior precisão na informação!!

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
88
Uso de Agregação
Na dúvida, use associação!
 Herança não representa o
relacionamento parte-todo
 Agregados recursivos são frequentes
 Agregação normalmente implica em
propagação de operações

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
89
Modelagem Orientada a
Objetos
Modelagem Dinâmica
Diagrama de Seqüência
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
90
Objetivos de um diagrama
de seqüência
Ilustrar como objetos interagem entre si.
 Detalhar um use case em termos de
objetos e mensagens.

– objetos de acordo com diagrama de
classes
– mensagens são mapeadas em operações
nas classes
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
91
Modelagem Orientada a
Objetos
Modelagem Dinâmica
Diagrama de Estados
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
92
Objetivos de um
diagrama de estados

Representar o comportamento dinâmico
de classes individuais

Representar o comportamento dinâmico
de colaboração entre classes
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
93
Elementos de um
diagrama de estados




os estados possíveis para os objetos de uma certa
classe
as transições de estado
os eventos que causam transições de estados
as ações decorrentes de
– uma transição de estado
– entrada em um estado
– saída de um estado

as ações realizadas por objetos enquanto estão em
um certo estado
– durante todo o tempo em que o objeto está no estado
– decorrente de algum evento
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
94
Diagramas de Estados





Relaciona eventos e estados
Um objeto muda de estado dependendo do evento
e do estado atual.
Transição: modificação de estado causada por um
evento (mesmo quando estado final e inicial
coincidem).
Um evento pode ser irrelevante para um objeto em
um certo estado.
Exemplo: linha telefônica
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
95
Diagramas de Estados
Exemplo : Linha telefônica
no-gancho
no-gancho
Inativa
fora-do-gancho
Sinal de discar
dígito( n )
Sinal de
ocupado
número
ocupado
Sinal de ocupado rápido
tronco
ocupado
queda-da-linha
dígito( n )
Discando
número válido
Quedada-linha
número Mensagem
gravada
invalido
Ligando
encaminhado
Tocando
telefone chamado atende
Mensagem
terminada
Interligando
telefone chamado desliga
Desligando
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
96
Diagramas de Estados
Exemplo : jogo de xadrez
Diagrama de estados de uma só passagem
para um jogo de xadrez
Início
Vez das
brancas
pretas
jogam
brancas
jogam
cheque-mate
Pretas
vencem
empate forçado
Empate
empate forçado
Vez das
pretas
cheque-mate
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
Brancas
vencem
97
Diagramas de Estados
Exemplo : Veículo
Diagrama de estados com transições guardadas
Norte / Sul
podem ir em frente
tempo decorrido [ carros
nas vias esquerdas N / S ]
tempo
decorrido
tempo
decorrido
Leste / Oeste
podem dobrar
à esquerda
Norte / Sul
podem dobrar
à esquerda
tempo decorrido [ carros
nas vias esquerdas L / O ]
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
Leste / Oeste
podem ir em frente
98
Tipos de diagramas de
estados



Diagrama de laço contínuo: representa um ciclo
de vida; sem estado inicial ou final. Exemplo: linha
telefônica.
Diagrama de uma só passagem: representa
objetos com vida finita; possuem um estado inicial
(criação do objeto) e um estado final (destruição
do objeto).
Exemplo: jogo de xadrez
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
99
Condições



Uma condição é uma função booleana de
valores, válida dentro de um intervalo de
tempo.
Condições funcionam como guardas nas
transições: uma transição só dispara quando
ocorre o evento e a condição de guarda for
verdadeira.
Exemplo: Pessoa com relação ao atributo
"estar de luvas".
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
100
Controle de Operações
Atividades e ações podem ser
vinculadas a estados e eventos a fim de
se especificar o que faz o objeto
quando está em um determinado
estado e o que faz em resposta a
estímulos externos.
 Definem o comportamento do objeto!

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
101
Atividade





Está sempre vinculada a um estado
Consome tempo para se completar
É executada continuamente durante o tempo em
que o objeto está num certo estado
Notação:
faça: atividade
Exemplo: Um vendedor logo após ter recebido
dinheiro para pagamento do item vendido deve
calcular o troco.
faça: calcular troco
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
102
Ação




Está normalmente vinculada a um evento, mas
também pode estar vinculada a um estado
(ações de entrada, saída e internas)
É executada "instantaneamente"
Notação:
evento / ação
Exemplo: Exibir um menu quando o botão direito
do mouse é pressionado.
botão direito pressionado / exibir menu
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
103
Controle de Operações
Ações para um menu instantâneo
botão direito pressionado /
exibir menu instantâneo
Menu
visível
Inativo
botão direito liberado /
apagar menu instantâneo
cursor movimentado /
iluminar item do menu
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
104
Diagrama de Estados com
Operações
Notação
Estado 1
faça : atividade 1
Evento 1 ( atributos )
[ condição 1 ] / ação 1
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
Estado 2
...
105
Diagramas de Estados
Nivelados




Permitem refinamentos sucessivos do modelo
dinâmico
Permitem uma descrição estruturada do sistema
Pode-se expandir:
– um evento e sua correspondente ação
– uma atividade realizada em um certo estado
Exemplo: Máquina de vender
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
106
Nivelados
Exemplo : máquina de
vender
moedas introduzidas
( quantia ) verificar saldo
Inativa
cancelar / devolver moedas
Recolhendo dinheiro
moedas introduzidas ( quantia ) /
acrescentar ao saldo
[ item vazio ]
Selecionar ( item )
[ troco < 0 ]
faça : testar item e calcular troco
[ troco = 0 ]
faça : entregar
item
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
[ troco < 0 ]
faça : preparar
troco
107
Nivelados
Exemplo : máquina de
vender
Atividade entregar item da máquina de vender
braço pronto
Faça : mover
braço para a
fileira correta
Faça : mover
braço para a
coluna correta
Transição selecionar
item da máquina de vender
faça : preparar
item
braço pronto
dígito( n )
clear
empurrado
faça : empurrar
item para fora
da prateleira
dígito( n )
Selecionar( item )
faça :
acrescentar
dígito
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
enter
108
Generalização de Estados




Os estados de um objeto podem ser organizados de forma
hierárquica, em super-estados e sub-estados.
Um sub-estado é um refinamento de um super-estado, i.e.,
um sub-estado é um dos possíveis estados do objeto
dentro daquele super-estado.
Um sub-estado herda as transições do super-estado;
transições que se aplicam ao super-estado também se
aplicam ao sub-estado.
Exemplos: linha telefônica, transmissão automática de um
automóvel
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
109
Generalização de Estados
Exemplo : transmissão de um carro
apertar R
Neutro
Ré
apertar N
apertar N
apertar F
Para a frente
sobe
pára
Primeira
sobe
Segunda
reduz
Terceira
reduz
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
110
Generalização de Eventos





Os eventos que ocorrem em um sistema podem ser
organizados de forma hierárquica, em super-eventos e
sub-eventos.
Um sub-evento herda atributos do super-evento.
Onde um evento é descrito qualquer sub-evento seu é
implicitamente descrito.
A generalização de eventos facilita a abstração e permite
concisão na representação de diagramas.
Exemplo: Entrada do usuário.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
111
Generalização de Eventos
Exemplo : eventos de
teclado
evento
tempo
Entrada do usuário
dispositivo
Botão do mouse
localização
Botão do
mouse
apertado
Hierarquia parcial de
eventos para eventos
de teclado
Botão do
mouse
liberado
caracter do teclado
caracter
controle
gráfico
espaço
alfanumérico
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
pontuação
112
Concorrência de
Agregação




O estado de um objeto composto (um agregado) é determinado
pelos estados dos objetos que o compõem.
Exemplo: O estado de um carro é determinado pelo estado da
ignição, da transmissão, do freio, do acelerador, do motor, ...
Os componentes de um agregado normalmente interagem entre si:
a mudança de estado de um componente pode disparar uma
transição em outro componente.
A interação entre diagramas de estados de componentes é
representada através de eventos compartilhados e/ou condições de
guarda.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
113
Concorrência de
Agregação
Carro
Ignição
Transmissão
Freio
Girar chave para dar partida
[ transmissão em Neutro ]
Ignição
Desligada
Partida
Acelerador
liberar
chave
Ligada
desligar a chave
Acelerador
Desligado
apertar
acelerador
Freio
Ligado
Desligado
liberar acelerador
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
apertar
freio
Partido
liberar freio
114
Concorrência Interna de
Objetos




O diagrama de estados de um objeto pode ser
particionado de acordo com atributos e ligações
em sub-diagramas.
O estado do objeto compreende um estado de
cada sub-diagrama.
Um mesmo evento pode causar transições em
mais de um sub-diagrama.
Exemplo: Jogo de bridge rubber.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
115
Concorrência Interna de
Objetos
Jogo de bridge com estados concorrentes
Jogando rubber
Vulnerabilidade N - S
Não vulnerável
jogo N - S
Vulnerável
jogo N - S
N-S vence rubber
Vulnerabilidade L - O
Não vulnerável
jogo L - O
Vulnerável
jogo L - O
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
L - O vence rubber
116
Transição Automática



Disparada quando a atividade vinculada a
um estado termina
O "evento" que causa a transição é o
término da atividade
Exemplo: Máquina de vender no estado
correspondente a atividade testar item e
calcular troco pode disparar uma de
quatro transições automáticas.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
117
Ações de Entrada e de
Saída
Ações vinculadas ao ato de entrar ou
sair de um estado
 Não adicionam poder de expressão,
mas permitem uma representação mais
concisa
 Exemplo: Controle de uma porta de
garagem

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
118
Envio de Eventos



Uma ação pode ser especificada como enviar um
certo evento para outro objeto.
Notação:
enviar E (atributos)
(palavra enviar pode ser omitida)
Exemplo: Uma linha telefônica envia o evento
ligar(número-de-telefone) para o comutador quando
um número completo é discado.
número completo / ligar(número-de-telefone)
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
119
Sincronização de Eventos
Concorrentes
Um objeto pode executar várias
atividades de forma concorrente
(paralela).
 As atividades não são necessariamente
sincronizadas, mas todas devem
terminar para que ocorra transição de
estado.
 Exemplo: Caixa automática.

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
120
Sincronização de Eventos
Concorrentes
Emitindo
Faça : entregar dinheiro
dinheiro
recolhido
Pronta para
reinicializar
Preparação
Faça : ejetar cartão
cartão
recolhido
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML
121
Download

Modelagem de Software Orientado a Objetos utilizando a