Transações Atômicas Distribuídas1 Alcides Calsavara [C12,C13,C14,T3.4] (110 p.)
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML1 Alcides Calsavara.
Transcript of Modelagem de Software Orientado a Objetos utilizando a Linguagem UML1 Alcides Calsavara.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML 1
Modelagem de Software Orientado a Objetos
utilizando a Linguagem UML
Alcides Calsavara
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML 2
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 3
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 4
Princípios de Orientação a Objetos
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML 5
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 6
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 7
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 8
Exemplo de ADTPilha (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 9
Exemplo de ADTPrimeira Parte: Tipos
Especificação ADT para pilhas
TYPES– STACK [G]
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML 10
Exemplo de ADTSegunda 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 11
Exemplo de ADTTerceira 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 12
Exemplo de ADTQuarta 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 13
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 14
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 15
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 16
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 17
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 18
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 19
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 20
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 21
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 22
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 23
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 24
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 25
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 26
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 27
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 28
Modificadores public e private -
Exemplo 1class 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 29
Modificadores public e private -
Exemplo 2class 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 30
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 31
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 32
Modificadores package e protectedExemplo 1class Veiculo { 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 33
Modificadores package e protectedExemplo 2package Basico; // arquivo 1
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 34
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 35
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 36
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 37
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 38
Exemplo de código frágilclass 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 de código frágilclass 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 40
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 41
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 42
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 43
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 44
Hierarquia de exceções
Throwable
Error Exception
RuntimeException IOException ...
......
...
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML 45
A cláusula throwsclass 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");}
} // continua
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML 46
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 47
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 48
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 49
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 50
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 51
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 52
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 53
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 54
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 55
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 56
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 57
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 58
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 59
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 60
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 61
Sobrecarga
Atributos e operações podem ser redefinidos (sobrecarregados) por subclasses.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML 62
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 63
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 64
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 65
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; recomenda-se criar uma terceira classe (superclasse das demais)
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML 66
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 67
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 68
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 69
Modelagem Orientada a Objetos
Use-Case Modeling
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML 70
Objetivos básicos de ummodelo 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 71
Componentes de um use-case
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 72
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 73
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 74
Outros objetivos de use-case 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 75
Exemplo de diagrama use-case
Cliente
Levantamento de estatísticas de vendas
Assinatura de uma apólice de seguro
Levantamento de estatísticas sobre clientes
Corretor de seguros
Sistema de Seguros
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML 76
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 77
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 78
Modelagem Orientada a Objetos
Relacionamentos
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML 79
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 80
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 81
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 82
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 83
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 84
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 85
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 86
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 87
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 88
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 89
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 90
Modelagem Orientada a Objetos
Modelagem Dinâmica
Diagrama de Seqüência
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML 91
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 92
Modelagem Orientada a Objetos
Modelagem Dinâmica
Diagrama de Estados
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML 93
Objetivos de umdiagrama 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 94
Elementos de umdiagrama 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 95
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 96
Diagramas de EstadosExemplo : Linha telefônica
Inativa
Sinal de discar
Ligando
Tocando
Interligando
Desligando
Queda-da-linha
Mensagem gravadaSinal de
ocupado
Sinal de ocu-pado rápido
no-gancho
dígito( n )
no-gancho
Discando
Mensagemterminada
encaminhado
telefone chamado atende
telefone chamado desliga
número válido
número invalido
fora-do-gancho
dígito( n )
número ocupado
tronco ocupado
queda-da-linha
queda-da-linha
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML 97
Diagramas de EstadosExemplo : jogo de xadrez
Vez dasbrancas
Vez daspretas
brancasjogam
pretasjogam
Início cheque-mate
empate forçado
empate forçado
cheque-mate
Pretasvencem
Brancasvencem
Empate
Diagrama de estados de uma só passagem para um jogo de xadrez
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML 98
Diagramas de EstadosExemplo : Veículo
Leste / Oestepodem dobrar
à esquerda
tempodecorrido
Diagrama de estados com transições guardadas
Leste / Oestepodem ir em frente
Norte / Sulpodem ir em frente
tempo decorrido [ carrosnas vias esquerdas N / S ]
tempo decorrido [ carrosnas vias esquerdas L / O ]
tempodecorrido
tempo decorrido [ sem carros
nas vias esquerdas N / S ]
Norte / Sulpodem dobrar
à esquerda
tempo decorrido [ sem carros
nas vias esquerdas L / O ]
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML 99
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 100
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 101
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 102
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 103
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 104
Controle de Operações
Ações para um menu instantâneo
Inativo
botão direito pressionado /exibir menu instantâneo
Menu visível
botão direito liberado / apagar menu instantâneo
cursor movimentado / iluminar item do menu
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML 105
Diagrama de Estados com Operações
Notação
Estado 1faça : atividade 1
Evento 1 ( atributos )[ condição 1 ] / ação 1 Estado 2
. . .
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML 106
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 107
Diagramas de Estados Nivelados
Exemplo : máquina de vender
Inativa
moedas introduzidas( quantia ) verificar saldo Recolhendo dinheiro
moedas introduzidas ( quantia ) /acrescentar ao saldo
faça : entregaritem
faça : preparartroco
faça : testar item e calcular troco
[ troco = 0 ] [ troco < 0 ]
[ troco < 0 ]
Selecionar ( item )[ item vazio ]
cancelar / devolver moedas
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML 108
Diagramas de Estados Nivelados
Exemplo : máquina de vender
Faça : moverbraço para afileira correta
faça : prepararitem
Faça : moverbraço para a
coluna correta
faça : empurraritem para forada prateleira
braço pronto braço pronto empurrado
dígito( n )
clear
faça : acrescentar
dígito
dígito( n )
enter
Selecionar( item )
Atividade entregar item da máquina de vender
Transição selecionar item da máquina de vender
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML 109
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 110
Generalização de Estados Exemplo : transmissão de um carro
Primeira Segunda Terceira
sobe
Neutro Réapertar R
apertar N
reduz
sobe
reduz
Para a frente
pára
apertar Fapertar N
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML 111
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 112
Generalização de EventosExemplo : eventos de
teclado
evento
Entrada do usuário
Botão do mouse
apertado
controle gráfico
espaço alfanumérico pontuação
tempo
dispositivo
Botão do mouselocalização
caracter do tecladocaracter
Botão do mouse
liberado
Hierarquia parcial deeventos para eventos
de teclado
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML 113
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 114
Concorrência de Agregação
CarroIgnição Transmissão Freio Acelerador
Desligada Partida Ligada
Girar chave para dar partida[ transmissão em Neutro ]
desligar a chave
liberar chave
Ignição
Desligado Ligado
apertaracelerador
apertar freio
liberar acelerador liberar freio
Acelerador Freio
Desligado Partido
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML 115
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 116
Concorrência Interna de Objetos
Não vulnerável
Não vulnerável
Vulnerável
Vulnerável
N-S vence rubber
L - O vence rubber
Vulnerabilidade N - S
jogo N - S
Vulnerabilidade L - O
jogo L - O
jogo N - S
jogo L - O
Jogando rubber
Jogo de bridge com estados concorrentes
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML 117
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 118
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 119
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 120
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 121
Sincronização de Eventos Concorrentes
Faça : entregar dinheiro
Faça : ejetar cartão
Pronta parareinicializar
Emitindo
cartão recolhido
dinheiro recolhido
Preparação