PLP – Paradigma de Programação Orientado a
Modelos
Prof. Franklin RamalhoUniversidade Federal de Campina Grande -
UFCG
PLP- UFCG2
Agenda
- Introdução- DDM- Modelos- UML- Diagramas UML- OCL
- Exemplos
PLP- UFCG3
Desenvolvimento de Software Tradicional
• Desenvolvimento de Software x Desenvolvimento de Hardware
– Progressos em Desenvolvimento de Hardware tem sido exponencial ao contrário do desenvolvimento de software
• Desenvolver software é uma tarefa laboriosa– Sistemas grandes e complexos– Requisitos mudam constantemente– Novas tecnologias– Falta de documentação, etc
PLP- UFCG4
Ciclo de Vida em Desenvolvimento de Software tradicional
requisitos
análise
projeto
implementação
testes
Texto
Diagramas etexto
Diagramas etexto
códigoAtalho
Processo iterativoEm teoria
PLP- UFCG5
Desenvolvimento de Software Tradicional
• Principais problemas:
– Produtividade
– Portabilidade
– Interoperabilidade
– Documentação
PLP- UFCG6
O que é DDM?
• DDM (Desenvolvimento Dirigido a Modelos)– MDA (Model-Driven Arquitecture)– MDD (Model-Driven Development)– MDE (Model-Driven Engineering)
• É uma iniciativa da OMG (Object Management Group) com o intuito de prover toda uma infra-estrutura para desenvolvimento de software– Iniciada em 1997, definida em 2000, correntemente sendo melhorada– Almeja solucionar os problemas presentes em desenvolvimento de
software tradicional (produtividade, portabilidade interoperabilidade, documentação, etc.)
– OMG oferece padrões (linguagens, plataformas, etc)
PLP- UFCG7
MDA - Princípios
• Modelos passam a ser a força motriz no processo de desenvolvimento de software– Diferentes níveis de abstração– Diferentes fases do ciclo de desenvolvimento de uma aplicação– Apresentação visual amigável– Formais– Persistentes
• Meta-modelos descrevendo modelos
• Transformações definem como mapear modelos
• Engenhos de transformação executam definições de transformações
• Alto grau de automação do código
PLP- UFCG8
MDA - Ciclo de Vida
requisitos
análise
projeto
implementação
testes
Texto + modelos
modelos
modelos
código
Processo DDM
PLP- UFCG9
MDA - Ciclo de Vida
requisitos
análise
testes
CIM
PIM
código
PSM
TransformaçõesPIMPSM
TOOL
TransformaçõesPSMcódigo
TOOL
AUTOMAT ICA
ProcessoIterativo
PIM parcial TransformaçõesCIMPIM
TOOL
PLP- UFCG10
Tipos de Modelos
Modelo de requisitos:Define o domínio onde o sistema será desenvolvido, serviços e entidades envolvidas
Modelo de análise e Projeto: define a arquitetura do sistema
Modelo de realização: define como o sistema é desenvolvido
Código do sistema
[Fig. Blanc]
PLP- UFCG11
Arquitetura MDA
Aplicação
Engenho de transformação
Engenho de transformação
Engenho de transformação
Definições de transformação
Rule X{...}
Definições de transformação
Rule X{...}
Definições de transformação
Rule X{...}
PIM PSM CódigoCIM
Metamo delo
Metamo delo
MOF
PLP- UFCG12
Visão Desenvolvimento de Software Tradicional
Abstração
Executabillidade
RequisitosUML + LN
ModeloUML
CódigoFonte
MáquinaVirtual
CódigoBinário
Desenvolvimento Orientado a Objetos
PLP- UFCG13
Visão MDA corrente
Abstração
Executabillidade
MáquinaVirtual
CódigoBinário
CIMUML/OCL
PIMUML/OCL
(Especificação)
PIMUML/OCL (Realização)
PSMProfiled
UML/OCLCódigoFonte
Extreme Modeling
PLP- UFCG14
Visão MDA no futuro
Abstração
Executabilidade
MáquinaVirtual
CódigoBinário
CIMUML/OCL
PIMUML/OCL
(Especificação)
CódigoFonte
PSMProfiled
UML/OCL
PIMUML/OCL(Realização)
PadrõesTransformação
Modelos
PadrõesRefinamento
Modelo
UML Programming
PLP- UFCG15
Modelos
• Empresa de desenvolvimento de software de sucesso desenvolve software de qualidade e atende aos usuários
• Modelagem é uma tarefa fundamental nas atividades iniciais do desenvolvimento do software– Comunicar a estrutura e comportamento desejados para o sistema– Visualizar e controlar a arquitetura do software– Melhor entendimento do sistema– Gerenciar os riscos– Etc, ...
• É preciso utilizar uma linguagem expressiva, simples e padrão
PLP- UFCG16
UML
• UML é uma linguagem para especificação, visualização, construção e documentação de artefatos de sistemas de software.
• Linguagem padrão adotada e recomendada pela OMG.
PLP- UFCG17
UML - Características
• Sub-dividida em diagramas
• Abrange modelagem estrutural e comportamental
• Várias ferramentas CASE
• Amplamente utilizada pelo mercado e pela academia
• Inter-disciplinar
PLP- UFCG18
UML - Diagramas
• Parte estrutural
– Diagrama de classes
– Diagrama de objetos
– Diagrama de Componentes
– Diagrama de Desenvolvimento
Classes, interfaces e relacionamentos
Objetos e relacionamentos
Componentes e dependências
Nodos e configurações
PLP- UFCG19
UML - Diagramas
• Parte comportamental
– Diagrama de Comunicação
– Diagrama de Seqüência
– Diagrama de Casos de Uso
– Diagrama de estados
– Diagrama de atividades
Diagramas de Interação: Objetos, relacionamentos
e mensagens}Casos de uso, atores e
relacionamentos
Máquina de estados: Estados, transições, eventos e atividades}
PLP- UFCG20
Diagrama de Classes
• É um diagrama que mostra um conjunto de classes, interfaces e relacionamentos.
• Responsável por modelar a parte estática do sistema
• Contém:- Classes- Atributos- Operações- Interfaces- Relacionamentos- Portas- Pacotes- Notas, restrições, etc.
PLP- UFCG21
Atributos
• Propriedades:– Derivado– Visibilidade
• (public, protected, private)– Nome– Multiplicidade– Tipo– Valor inicial default– Estereótipo– Escopo
• Instance (default)• Classifier (propriedade
sublinhada)
PLP- UFCG22
Atributos
• Propriedades pré-definidas:– changeable– addOnly– frozen
• O tipo de um atributo deve ser necessariamente:– Primitivo– Enumeração
Propriedades sobre atributos
PLP- UFCG23
Operações
• Assinatura comum de serviços fornecidos por membros da uma classe
• Propriedades:– Visibilidade– Nome– parâmetros
• Direção• nome• Tipo• Multiplicidade• Valor default
– Tipo de retorno
• Escopo:– Instance– Classifier
Poligono
compativel(in pol : Poligono) : Booleandesenhar() : voidgetContador() : Integer___________________
PLP- UFCG24
Poligono
compativel(in pol : Poligono) : Boolean {isQuery}getContador() : Integerdesenhar() : void {concurrent}
Operações
• Propriedades pré-definidas:– leaf– isQuery– sequential– guarded– concurrent
Propriedades sobre atributos
PLP- UFCG25
Pacotes
• Agrupa um conjunto de elementos UML– namespace
• Cada elemento do modelo deve pertencer, no máximo, a um pacote
• Relações entre pacotes:– Generalização– Dependências
• Aninhamento (sub-pacotes)• Import• access (private import)• Merge
PLP- UFCG26
Pacotes
PLP- UFCG27
Máquina de estados
• Expressar Comportamento– Máquina de estados comportamental– Classes
• Expressar protocolo de uso do sistema– Máquina de estados de protocolo– Classes realizando interfaces e portas
PLP- UFCG28
Máquina de estados comportamental
• Uma máquina de estados é um comportamento que especifica uma seqüência de estados durante o tempo de vida de um objeto
• Modela o comportamento de um único objeto
• Formado por:– Estado– Transição– Evento– Ação– Guardas
PLP- UFCG29
Máquina de estados comportamental
PLP- UFCG30
Diagrama de Atividades
• Modela aspectos dinâmicos do sistema– Modelagem Seqüencial – Modelagem concorrente
• Modela fluxo de atividades e sua interação com sociedades de objetos e unidades organizacionais– Fluxo de controle de atividade para atividade
• Modela mudança de estados de objetos ao longo do fluxo de controle de uma atividade
PLP- UFCG31
Diagrama de Atividades
• Um diagrama de atividade é um tipo especial de máquina de estados comportamental
• Estados são atividades
• Transições são chamadas pontes de atividade– Pontes de atividade são disparadas a partir da finalização de uma
atividade fonte– Pontes de atividade alcançam uma atividade destino
PLP- UFCG32
Diagrama de Atividades
• Uma atividade é uma execução não atômica dentro de uma máquina de estado
• Atividades são formadas por ações atômicas– Resulta em mudança de estado do sistema ou– Retorna um valor
• Atividades podem possuir outras atividades detalhadas em outro diagrama de atividades
• Ajuda a quebrar computações complexas em sub-atividades
PLP- UFCG33
Diagrama de Atividades
PLP- UFCG34
Diagramas de Interação
• Diagramas de interações podem ser usados para modelar o fluxo de controle dentro de:– Uma operação– Uma classe– Um componente– Um caso de uso– Um sistema como um todo
• Diferentes ênfases podem ser dadas
PLP- UFCG35
Diagramas de Interação
• Uma interação é um comportamento que envolve um conjunto de mensagens entre um conjunto de objetos dentro de um contexto
• Uma mensagem é uma especificação de uma comunicação entre objetos que transportam informações
PLP- UFCG36
Diagramas de Interação
• Tipos de diagramas de interação
– Diagrama de Seqüência
– Diagrama de comunicação
– Diagrama de overview de Interação
– Diagrama de tempo
PLP- UFCG37
Diagrama de Seqüência
• Diagrama de interação mais comum
• Foca na troca de mensagens entre vários objetos– Seqüência de mensagens trocadas– Enfatiza a ordem (tempo) em que ocorre a troca de mensagens
• Graficamente:– Eixo x: objetos organizados em linhas de vida– Eixo y: ordem em que mensagens são trocadas ao longo do tempo
PLP- UFCG38
Diagrama de Seqüência
Fragmento laço
PLP- UFCG39
Diagrama de Seqüência
PLP- UFCG40
OCL
• UML não provê todos aspectos relevantes da especificação do sistema.– Restrições adicionais são escritas em linguagem natural– Ao longo de todos os diagramas
• Modelos precisam ser completos
• Modelos precisam ser precisos
• Modelos precisam ser testados
• PIMs precisam ser detalhados ao extremo para permitir completa geração de código
• Idem para PSMs
PLP- UFCG41
programa
Credito Debito
Transacaopontos : Integerdata : Data
programa() : ProgramFidelidade
Clientenome : StringpronomeTratamento : Stringmasculino : BooleandataAniversario : Datarg : String
idade()
ParceiroProgramaquantidadeDeClientes : Integer
Contapontos : Integer
creditar(pts : Integer)debitar(pts : Integer)estaVazia() : Boolean
0..*transacoes 0..*
Cartaovalido : BooleanvalidoDesde : Datavencimento : Datacor : TipoDeCornomeTratamentoCliente : String
0..*
transacoes
0..*
cartao
0..* cartoes0..*
proprietario
Servicocondicao : BooleanpontosADebitar : IntegerpontosACreditar : Integerdescricao : String
0..*
transacoes
0..*
0..* servicosOferecidos0..*
ProgramaFidelidade
cadastrar(c : Cliente)obtemServicos() : Set(Servicos) 0..*0..* 0..*0..*1..*
1..*
1..*
parceiros1..*
Socio
0..10..1
cartaoNivelServiconome : Stringcor : TipoDeCor
0..*
servicosDisponiveis
0..*
1..*1..*
{ordered}0..*0..*
nivelDoServico
TipoDeCorouropratabronze
<<enumeration>>
PLP- UFCG42
Enriquecendo o modelo
• O cartão de um sócio deve apresentar o seguinte tratamento: “ Sr. Fulano” ou “ Sra. Sicrana”
• Um cliente deve ser maior de idade• Número de pontos gastos em transações de crédito deve
ser maior que em transações de débito• Transações devem ser realizadas com um número mínimo
de 100 pontos• Dois clientes diferentes não podem ter o mesmo rg• Quantos clientes um parceiro possui no programa de
fidelidade?• Deve-se especificar as operações:
– obtemServiço(), estaVazia(), cadastrar(), etc.
• Muitas outras
PLP- UFCG43
OCL - Características
• OCL - Linguagem para escrita de restrição sobre objetos, que pode ser aplicada em um ou mais valores de um (ou parte de) sistema ou modelo orientado a objetos.
• Criada originalmente na IBM (Insurance Division)
• Integra construtores da lógica de primeira ordem e algorítmica.
• Apresenta sintaxe mais intuitiva para o desenvolvedor, mais próxima da implementação em linguagens OO.
• Complementar a UML
PLP- UFCG44
OCL - Características
UML OCL
Credito Debito
ParceiroProgramaquantidadeDeClientes : Integer
Transacaopontos : Integerdata : Data
programa() : ProgramFidelidade
Clientenome : StringpronomeTratamento : Stringmasculino : BooleandataAniversario : Data
idade()
Contapontos : Integer
creditar(pts : Integer)debitar(pts : Integer)estaVazia() : Boolean
0..*transacoes 0..*
Cartaovalido : BooleanvalidoDesde : Datavencimento : Datacor : enum{prata, ouro}nomeTratamentoCliente : String
0..*
transacoes
0..*
cartao
0..* cartoes0..*
proprietario
Servicocondicao : BooleanpontosADebitar : IntegerpontosACreditar : Integerdescricao : String
0..*
transacoes
0..*
0..* servicosOferecidos0..*
ProgramaFidelidade
cadastrar(c : Cliente)0..*0..* 0..*
programa
0..*1..*
1..*
1..*
parceiros1..*
Socio
0..10..1
cartaoNivelServico
nome : String
0..*
servicosDisponiveis
0..*
1..*1..*
{ordered}0..*0..*
nivelDoServico
8: fecha
Joao:Passageiro
Maria:Passageiro
a3:BotaoDeAndar
a5:BotaoDeAndar
cont:Controlador
elevador:Elevador
porta:Porta
1: aperta
2: atualiza
3: ilumina
7: desilum ina
9: aperta
10: atualiza
11: desi lumina
4: mova
5: chegou6: abre
esperando funcionandoatualiza / mova, ilumine
chegou / desilumine
atualiza / mova, iluminecontJoao Maria a3 a5 elevador
aperta atualize
mova
ilumina
aperta
chegou
abra
mova
atualize
ilumina
PLP- UFCG45
OCL - Características
UML OCL
Corpo de operações
Précondições
Póscondições
Regras de derivaçãoEspecificações
deInicialização
Invariantes
PLP- UFCG46
context ParceiroPrograma inv:self.servico.transacao->iterate(
t: Transacao; acum: Integer = 0 | if t.isTypeOf(Debito) then
acum + pontos else
acum endif
)<=
self.servico.transacao->iterate( t: Transacao; acum: Integer = 0 | if t.isTypeOf(Credito) then
acum + pontos else
acum endif
)
ParceiroProgramaquantidadeDeClientes : Integer
0..* servicosOferecidos
Servicocondicao : BooleanpontosADebitar : IntegerpontosACreditar : Integerdescricao : String
transacoes
Transacaopontos : Integerdata : Data
programa() : ProgramFidelidade
0..*0..*
Operação iterate
PLP- UFCG47
Navegações x Multiplicidades
context ParceiroPrograma inv:quantidadeDeClientes = programaFidelidade.cliente
->asSet()->size()
Clientenome : Stringpronom eTratamento : Stringmasculino : BooleandataAniversario : Datarg : String
idade()
ParceiroProgramaquantidadeDeClientes : Integer
parceiros1..*
1..*
1..*
1..*
ProgramaFidel idade
cadastrar(c : Cliente)programa
0..* 0..*0..*
PLP- UFCG48
OCL – oclIsNew()
context cadastrarECriarCliente(n: String, d: Data):Clientepost: result.oclIsNew() and
result.nome = n and result.dataAniversario = d and clientes->includes(result)
ProgramaFidelidade
cadastrar(c : Cliente)obtemServicos() : Set(Servicos)
0..*0..*0..*
programa
0..*
Cl ientenome : StringpronomeTratamento : Stringmasculino : BooleandataAniversario : Datarg : String
idade()
PLP- UFCG49
OCL – Variáveis locais
context ProgramaFidelidade inv:let potuacao : Integer =
self.parceiros.servicosOferecidos.transacoes.pontos in
if pontuacao > 100then …else if pontuacao > 50
then …else if pontuacao > 30
then …
ParceiroProgramaquantidadeDeClientes : Integer
0..*0..* servicosOferecidosServico
condicao : BooleanpontosADebitar : IntegerpontosACreditar : Integerdescricao : String
0..*
transacoes
0..*
Transacaopontos : Integerdata : Data
programa() : ProgramFidelidade
parceiros1..*
1..*
1..*
ProgramaFidelidade
cadastrar(c : Cl iente)obtemServicos() : Set(Servicos)1..*
PLP- UFCG50
Desenvolvimento Dirigido a Modelos
• Total especificação do software através de modelos
• UML + OCL capazes de realizar tal descrição
• UML e OCL ainda não são 100% executáveis
• A cada dia surgem novos compiladores para UML e OCL
• Linguagens independentes de plataformas
• Em breve: Programadores UML e OCL
• Mais: Semântica de Ações, ATL, QVT, MOF, KM3, Kermeta, Ecore, EMF, MODELOG, ADT, etc (Vejam na disciplina DDM!)