plp – paradigma de programação orientado a modelos

50
PLP – Paradigma de Programação Orientado a Modelos Prof. Franklin Ramalho Universidade Federal de Campina Grande - UFCG

Upload: elliando-dias

Post on 18-Dec-2014

2.868 views

Category:

Technology


5 download

DESCRIPTION

 

TRANSCRIPT

Page 1: PLP – Paradigma de Programação Orientado a Modelos

PLP – Paradigma de Programação Orientado a

Modelos

Prof. Franklin RamalhoUniversidade Federal de Campina Grande -

UFCG

Page 2: PLP – Paradigma de Programação Orientado a Modelos

PLP- UFCG2

Agenda

- Introdução- DDM- Modelos- UML- Diagramas UML- OCL

- Exemplos

Page 3: PLP – Paradigma de Programação Orientado a Modelos

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

Page 4: PLP – Paradigma de Programação Orientado a Modelos

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

Page 5: PLP – Paradigma de Programação Orientado a Modelos

PLP- UFCG5

Desenvolvimento de Software Tradicional

• Principais problemas:

– Produtividade

– Portabilidade

– Interoperabilidade

– Documentação

Comment on Text
Interoperabilidade é a capacidade de um sistema(informatizado ou não) de se comunicar de forma transparente(ou o mais próximo disso) com outro sistema (semelhante ou não). Para um sistema ser considerado interoperável é muito importante que ele trabalhe com padrões abertos. Seja um sistema de portal, seja um sistema educacional ou ainda um sistema de e-commerce, hoje em dia se caminha cada vez mais para a criação de padrões para sistemas. http://www.webphp.com.br/docs/art_inter.html
Page 6: PLP – Paradigma de Programação Orientado a Modelos

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)

Page 7: PLP – Paradigma de Programação Orientado a Modelos

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

Page 8: PLP – Paradigma de Programação Orientado a Modelos

PLP- UFCG8

MDA - Ciclo de Vida

requisitos

análise

projeto

implementação

testes

Texto + modelos 

modelos

modelos

código

Processo DDM

Page 9: PLP – Paradigma de Programação Orientado a Modelos

PLP- UFCG9

MDA - Ciclo de Vida

requisitos

análise

testes

CIM

PIM

código

PSM

TransformaçõesPIM­PSM

TOOL

TransformaçõesPSM­código

TOOL

AUTOMAT ICA

ProcessoIterativo

PIM parcial TransformaçõesCIM­PIM

TOOL

Page 10: PLP – Paradigma de Programação Orientado a Modelos

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]

Page 11: PLP – Paradigma de Programação Orientado a Modelos

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

Meta­mo delo

Meta­mo delo

MOF

Page 12: PLP – Paradigma de Programação Orientado a Modelos

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

Page 13: PLP – Paradigma de Programação Orientado a Modelos

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

Page 14: PLP – Paradigma de Programação Orientado a Modelos

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

Page 15: PLP – Paradigma de Programação Orientado a Modelos

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

Page 16: PLP – Paradigma de Programação Orientado a Modelos

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.

Page 17: PLP – Paradigma de Programação Orientado a Modelos

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

Page 18: PLP – Paradigma de Programação Orientado a Modelos

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

Page 19: PLP – Paradigma de Programação Orientado a Modelos

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}

Page 20: PLP – Paradigma de Programação Orientado a Modelos

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.

Page 21: PLP – Paradigma de Programação Orientado a Modelos

PLP- UFCG21

Atributos

• Propriedades:– Derivado– Visibilidade

• (public, protected, private)– Nome– Multiplicidade– Tipo– Valor inicial default– Estereótipo– Escopo

• Instance (default)• Classifier (propriedade

sublinhada)

Page 22: PLP – Paradigma de Programação Orientado a Modelos

PLP- UFCG22

Atributos

• Propriedades pré-definidas:– changeable– addOnly– frozen

• O tipo de um atributo deve ser necessariamente:– Primitivo– Enumeração

Propriedades sobre atributos

Page 23: PLP – Paradigma de Programação Orientado a Modelos

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___________________

Page 24: PLP – Paradigma de Programação Orientado a Modelos

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

Page 25: PLP – Paradigma de Programação Orientado a Modelos

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

Page 26: PLP – Paradigma de Programação Orientado a Modelos

PLP- UFCG26

Pacotes

Page 27: PLP – Paradigma de Programação Orientado a Modelos

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

Page 28: PLP – Paradigma de Programação Orientado a Modelos

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

Page 29: PLP – Paradigma de Programação Orientado a Modelos

PLP- UFCG29

Máquina de estados comportamental

Page 30: PLP – Paradigma de Programação Orientado a Modelos

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

Page 31: PLP – Paradigma de Programação Orientado a Modelos

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

Page 32: PLP – Paradigma de Programação Orientado a Modelos

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

Page 33: PLP – Paradigma de Programação Orientado a Modelos

PLP- UFCG33

Diagrama de Atividades

Page 34: PLP – Paradigma de Programação Orientado a Modelos

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

Page 35: PLP – Paradigma de Programação Orientado a Modelos

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

Page 36: PLP – Paradigma de Programação Orientado a Modelos

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

Page 37: PLP – Paradigma de Programação Orientado a Modelos

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

Page 38: PLP – Paradigma de Programação Orientado a Modelos

PLP- UFCG38

Diagrama de Seqüência

Fragmento laço 

Page 39: PLP – Paradigma de Programação Orientado a Modelos

PLP- UFCG39

Diagrama de Seqüência

Page 40: PLP – Paradigma de Programação Orientado a Modelos

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

Page 41: PLP – Paradigma de Programação Orientado a Modelos

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>>

Page 42: PLP – Paradigma de Programação Orientado a Modelos

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

Page 43: PLP – Paradigma de Programação Orientado a Modelos

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

Page 44: PLP – Paradigma de Programação Orientado a Modelos

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

Page 45: PLP – Paradigma de Programação Orientado a Modelos

PLP- UFCG45

OCL - Características

UML OCL

Corpo de operações

Pré­condições

Pós­condições

Regras de derivaçãoEspecificações 

deInicialização

Invariantes

Page 46: PLP – Paradigma de Programação Orientado a Modelos

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

Page 47: PLP – Paradigma de Programação Orientado a Modelos

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..*

Page 48: PLP – Paradigma de Programação Orientado a Modelos

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()

Page 49: PLP – Paradigma de Programação Orientado a Modelos

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..*

Page 50: PLP – Paradigma de Programação Orientado a Modelos

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!)