1/26/2009 1 Como é feito › Análise de um problema/processo/sistema › Desenvolvimento de uma solução Software + não-software › Testes/validação Problema Solução
1/26/2009
1
� Como é feito› Análise de um problema/processo/sistema› Desenvolvimento de uma solução
� Software + não-software
› Testes/validação
Problema
Solução
1/26/2009
2
Problema
Solução
Implementação
� Arquitetos (algumas vezes) usam UML para criar modelos de alto nível› São usados em um primeiro momento› Discussões, idéias, etc (análise)
� Porém logo são inúteis› Programadores criam código manualmente› Manutenção é feita diretamente no código› Modelos perdem a consistência
� Mesmo com engenharia reversa, ainda é um artefato desnecessário
� Qual o problema com a modelagem?� Por que descartamos logo os modelos?
1/26/2009
3
� Considere os seguintes requisitos para um software:› Preciso escrever “Alô mundo!” na tela
public static void main(String args[]) {
System.out.println(“Alô mundo!”);
}
� Considere os seguintes requisitos para um software:› Preciso escrever “Alô mundo!” na tela› No futuro, deve ser possível utilizar outras
mensagens, além de “Alô mundo!”
1/26/2009
4
public static void main(String args[]) {
if(args.length > 0)
imprimeMensagem(args[0]);
else imprimeMensagem(“Alô mundo!”);
}
public static void imprimeMensagem(String
mensagem) {
System.out.println(mensagem);
}
� Considere os seguintes requisitos para um software:› Preciso escrever “Alô mundo!” na tela› No futuro, deve ser possível utilizar outras
mensagens, além de “Alô mundo!”› Deve ser possível usar diferentes cores
Alô mundo!
1/26/2009
5
� Considere os seguintes requisitos para um software:› Preciso escrever “Alô mundo!” na tela› No futuro, deve ser possível utilizar outras
mensagens, além de “Alô mundo!”› Deve ser possível usar diferentes cores› Deve ser possível usar diferentes dispositivos
(celular, monitor, projetor, palm, etc.)
MensagemAbstrataFabricaDeMensagemAbstrata
FabricaDeMensagemDesktop
FabricaDeMensagemPalm
FabricaDeMensagemCelular Mensagem
Desktop
MensagemPalm
MensagemCelular
� Considere os seguintes requisitos para um software:› Preciso escrever “Alô mundo!” na tela› No futuro, deve ser possível utilizar outras
mensagens, além de “Alô mundo!”› Deve ser possível usar diferentes cores› Deve ser possível usar diferentes dispositivos
(celular, monitor, projetor, palm, etc.)› Deve ser possível enviar a mensagem
remotamente, pela Internet
1/26/2009
6
Adapter
Adapter
AdapterProtocolo
CriptografiaInternacionalização
Base de Dados
Controle de acesso
Tarifação
Finanças
Jogos
Alimentos
Turismo
Aeronáutica
Economia
Domínio do problema Domínio TI
OO
Padrões
Linguagens
Métodos ágeis
Banco de dados
Trabalho mental dos
desenvolvedores
� Complexidade inerente vs complexidade acidental
� Ex:
Diferentes dispositivos (desktop, celular, palm, etc...)
Classes abstratas, herança, polimorfismo, constantes, programação reflexiva, métodos da classe String, ...
1/26/2009
7
� Complexidade inerente› Impossível descartar› ... a menos que você tenha uma boa lábia...› Resolver é sua obrigação
� Complexidade acidental› É possível contornar/reduzir
� Frameworks, padrões, etc...
› São problemas que você mesmo criou
Problema
Solução
Implementação
Complexidade acidental
� Entrevistar cliente� Fazer documento de requisitos� Abrir ferramenta de modelagem (UML)� Aprender UML� Representar o problema em UML� Aprender UML� Discutir problema em cima dos modelos� Projetar solução� Representar solução em UML� Aprender UML� Gerar protótipos automaticamente� Adaptar protótipos� Completar protótipo com regras de negócio� Testar e implantar
1/26/2009
8
� Entrevistar cliente� Fazer documento de requisitos� Abrir ferramenta de modelagem (UML)� Aprender UML� Representar o problema em UML� Aprender UML� Discutir problema em cima dos modelos� Projetar solução� Representar solução em UML� Aprender UML� Gerar protótipos automaticamente� Adaptar protótipos� Completar protótipo com regras de negócio� Testar e implantar
In Ac
� Reduzir o “fardo” da modelagem› Dificuldades da linguagem (UML)› Inconsistências entre modelo-código› Necessidade de ferramentas caras› Modelo é algo desnecessário
� Conhecimento fica criptografado no código
public static void main(String args[]) {
if(args.length > 0)
imprimeMensagem(args[0]);
else imprimeMensagem(“Alô mundo!”);
}
public static void imprimeMensagem(String
mensagem) {
System.out.println(mensagem);
}
1/26/2009
9
public void abriu() {
estado = ABERTO;
timer =
new Timer(10000);
}
public void fechou() {
if(estado == ABERTO) {
estado = FECHADO;
timer = null;
}
}
public void fimTimer() {
if(estado == ABERTO) {
estado = DISPARANDO;
tocaAlarme();
timer =
new Timer(20000);
}
else {
estado = ABERTO;
desligaAlarme();
timer =
new Timer(10000);
}
}
Fechado
Aberto
Disparandoalarme
Inicial
Abriu porta
10 segundos
Fechou porta
20 segundos
Java
C#Lisp
Prolog
ASM
1/26/2009
10
� Reduzir o “fardo” da modelagem� Facilitar o reuso do conhecimento› Formas mais eficientes para representar o
conhecimento› Menos dependentes do código final› Mais próximas do domínio do problema› Diferente da documentação
� Um elemento do modelo corresponde a vários elementos do código› Diferença no nível de abstração› Mapeamento problema / solução
Fechado
Aberto
Disparandoalarme
Inicial
Abriu porta
10 segundos
Fechou porta
20 segundos
public void abriu() {
estado = ABERTO;
timer = new Timer(10000);
}
public void fechou() {
if(estado == ABERTO) {
estado = FECHADO;
timer = null;
}
}
public void fimTimer() {
if(estado == ABERTO) {
estado = DISPARANDO;
tocaAlarme();
timer = new Timer(20000);
}
else {
estado = ABERTO;
desligaAlarme();
timer = new Timer(10000);
}
}
1/26/2009
11
Fechado
Aberto
Disparandoalarme
Inicial
Abriu porta
10 segundos
Fechou porta
20 segundos
public void abriu() {
estado = ABERTO;
timer = new Timer(10000);
}
public void fechou() {
if(estado == ABERTO) {
estado = FECHADO;
timer = null;
}
}
public void fimTimer() {
if(estado == ABERTO) {
estado = DISPARANDO;
tocaAlarme();
timer = new Timer(20000);
}
else {
estado = ABERTO;
desligaAlarme();
timer = new Timer(10000);
}
}
Fechado
Aberto
Disparandoalarme
Inicial
Abriu porta
10 segundos
Fechou porta
20 segundos
public void abriu() {
estado = ABERTO;
timer = new Timer(10000);
}
public void fechou() {
if(estado == ABERTO) {
estado = FECHADO;
timer = null;
}
}
public void fimTimer() {
if(estado == ABERTO) {
estado = DISPARANDO;
tocaAlarme();
timer = new Timer(20000);
}
else {
estado = ABERTO;
desligaAlarme();
timer = new Timer(10000);
}
}
1/26/2009
12
� Muitas tarefas de implementação são repetitivas e exaustivas› EJB 2.0› CORBA› Struts› Hibernate
� Perde-se tempo precioso em trabalho braçal› Poderia ser usado em tarefas mais
conceituais
� Reduzir o “fardo” da modelagem� Facilitar o reuso do conhecimento� Aproveitar o trabalho de forma mais
produtiva› Foco em tarefas conceituais› Evitar tarefas repetitivas
� Correções› Erros› Melhorias
� Evolução› Novas funcionalidades
� Exigem nova análise, projeto, implementação, testes, etc...
� Normalmente o tempo é curto
1/26/2009
13
Fechado
Aberto
Disparandoalarme
Inicial
Abriu porta
10 segundos
Fechou porta
20 segundos
public void abriu() {
estado = ABERTO;
timer = new Timer(10000);
}
public void fechou() {
if(estado == ABERTO) {
estado = FECHADO;
timer = null;
}
}
public void fimTimer() {
if(estado == ABERTO) {
estado = DISPARANDO;
tocaAlarme();
timer = new Timer(20000);
}
else {
estado = ABERTO;
desligaAlarme();
timer = new Timer(10000);
}
}
� Modificar um campo de um registro em uma aplicação baseada em Struts› Tabela, índices, visões, consultas, etc. (SQL)› Ação (classe Java)› Mapeamento (XML)› Formulário (XML)› Bean de dados (Java/XML)› DAO - Data Access Objects (Java)› Página (HTML)› Regras de validação (Javascript)› Arquivo de mensagens (.properties)› etc.
1/26/2009
14
� Trabalho braçal para construir› Re-trabalho braçal para modificar
� Rastreabilidade› Um elemento conceitual› Diversos artefatos de implementação
� Consistência das mudanças› Entre os diversos artefatos
� Erros de programação podem ser facilmente encontrados› Compilador / IDE› Checagens simples (método privado nunca
é chamado, etc.)
� Erros conceituais› Difíceis de identificar no código› Conhecimento está “criptografado”
public void abriu() {
estado = ABERTO;
timer =
new Timer(10000);
}
public void fechou() {
if(estado == ABERTO) {
estado = FECHADO;
timer = null;
}
}
public void fimTimer() {
if(estado == ABERTO) {
estado = DISPARANDO;
tocaAlarme();
timer =
new Timer(20000);
}
else {
estado = ABERTO;
desligaAlarme();
timer =
new Timer(10000);
}
}
1/26/2009
15
Fechado
Aberto
Disparandoalarme
Inicial
Abriu porta
10 segundos
Fechou porta
20 segundos
Fechado
Aberto
Disparandoalarme
Inicial
Abriu porta
10 segundos
Fechou porta
20 segundos
Fechou porta
� Uma vez realizada a alteração› Atualizar os modelos
� (Quase) nunca acontece› Faz parte da complexidade acidental› Uma vez que os desenvolvedores tenham
um modelo mental...� ... começam a descartar o modelo físico
(documentação)
� Resultado = modelos desatualizados› Faz parte do “fardo” da modelagem
1/26/2009
16
� Reduzir o “fardo” da modelagem� Facilitar o reuso do conhecimento� Aproveitar o trabalho de forma mais
produtiva� Facilitar a manutenção› Aproveitar o re-trabalho de forma mais
produtiva› Possibilitar que mudanças sejam realizadas no
nível conceitual› Facilitar a localização de erros e falhas› Manter a consistência entre modelo e código
� Verificações automáticas de restrições de alto nível› Difíceis de se realizar diretamente no código
� Exemplos (máquina de estados):› Estados inalcançáveis› Transições infinitas› Estados “mortos”
� Facilita manutenção› Evitando introdução de erros
Estado “morto”
Estado inalcançavel
Transição infinita
1/26/2009
17
� Nível de código› Pré-calcular expressões› Utilização de macros› Remoção de expressões redundantes
� Em nível mais alto não é possível sem a existência de um modelo› Remover estados redundantes› Normalizar base de dados› Indexar tabelas de acordo com as consultas
existentes
� Reduzir o “fardo” da modelagem� Facilitar o reuso do conhecimento� Aproveitar o trabalho de forma mais
produtiva� Facilitar a manutenção� Validação / otimização› Fazer uso de checagem automática› Utilizar o conhecimento de especialistas do
domínio
� Acompanhar a evolução das plataformas de hardware/software
� Novas tecnologias surgem› Aumenta a pressão para a migração
� Custo do porte:› Esforço gasto em tarefas específicas da
plataforma
1/26/2009
18
Software dependente da
plataforma
Software independente da
plataforma
•Requisitos•Modelos•Regras de negócio•Otimizações•Código multi-plataforma (Java)
•Arquivos de configuração•Scripts (sql, make, etc)•Código específico da plataforma•Bibliotecas da plataforma
Software dependente da
plataforma
Software independente da
plataforma
•Requisitos•Modelos•Regras de negócio•Otimizações•Código multi-plataforma (Java)
•Arquivos de configuração•Scripts (sql, make, etc)•Código específico da plataforma•Bibliotecas da plataforma
1 mês
6 meses
Software dependente da
plataforma
Software independente da
plataforma
•Requisitos•Modelos•Regras de negócio•Otimizações•Código multi-plataforma (Java)
•Arquivos de configuração•Scripts (sql, make, etc)•Código específico da plataforma•Bibliotecas da plataforma
1/26/2009
19
Software dependente da
plataforma
Software independente da
plataforma
•Requisitos•Modelos•Regras de negócio•Otimizações•Código multi-plataforma (Java)
•Arquivos de configuração•Scripts (sql, make, etc)•Código específico da plataforma•Bibliotecas da plataforma
1 mês
3 meses
� Reduzir o “fardo” da modelagem� Facilitar o reuso do conhecimento� Aproveitar o trabalho de forma mais
produtiva� Facilitar a manutenção� Validação / otimização� Portabilidade› Reduzir o esforço específico de plataforma› Concentrar no tabalho conceitual
� Exemplo: › LBS – Location-Based Systems› GIS – Geographical Information Systems
� Múltiplas plataformas� Múltiplas interfaces� Diversas fontes de dados� Interoperabilidade� Usuário final leigo
1/26/2009
20
http://www.3wt.com.br/3wt/pr_sigame.shtml
• Rastreamento (rádio-frequecia, GPRS)• Visualização (Java SWING, Web, JME, Palm)• Localização• Roteamento• Telemetria• Acionamento remoto
� Hardware dedicado (veículos)› GPS, sensores, atuadores
� Software embarcado (C)› Geoposicionamento› Leitura/escrita sinais› Protocolo de comunicação› Transmissão› Criptografia
� Central (C++)› Armazenamento dos dados› Autenticação
� Monitoramento/rotas (Java/SWING)› Visualização dos veículos› Sobreposição no mapa› Cálculo de rotas
� Servidor de mapas (Java)› http://geoserver.org› Visualização em camadas› Caching
� Base de dados› PostgreSQL + PostGIS› Funções de consulta / geometria› Diferentes fornecedores de mapas
1/26/2009
21
� Dispositivos móveis› Celular (JME)› PND – Personal Navigation Device (C# /
.NET)
� Visualização Web› Portal de mapas (Javascript)› http://openlayers.org
� Edição de mapas (Java/SWING)› Nomes de ruas› Sentido/mão de direção
� Complexidade exige› Diversos profissionais› Diversos especialistas› Comunicação é crítica
� Especialistas em TI x Especialistas no domínio› Cada um em seu território!
� Porém, com a alta complexidade› Torna-se uma tarefa difícil
� Além disso› Constantes mudanças nas
plataformas/requisitos/tecnologias disponíveis
http://www.3wt.com.br/3wt/pr_sigame.shtml
• Rastreamento (rádio-frequecia, GPRS)• Visualização (Java SWING, Web, JME, Palm)• Localização• Roteamento• Telemetria• Acionamento remoto
1/26/2009
22
� Reduzir o “fardo” da modelagem� Facilitar o reuso do conhecimento� Aproveitar o trabalho de forma mais
produtiva� Facilitar a manutenção� Validação / otimização� Portabilidade� Lidar com a alta complexidade do
software atual› Diferentes especialistas (TI vs domínio)› Necessidade de integração /
interoperabilidade
ModelagemReutilização
ProdutividadeManutenibilidade
Validação / otimizaçãoPortabilidade
•(MDD) Model-Driven Development•(MDSD) Model-Driven Software Development
•(MDE) Model-Driven Engineering
Alta complexidade
Desenvolvimento Orientado a Modelos
1/26/2009
23
import java.util.*;
public synchronizedreplicateData() {...
}
<%@ page language="java“><%@taglib prefix="c“
uri="jsp/jstl/core“ %>
<html> <head> ...
<struts-config><form-bean> ...<action> ...
</struts-config>
# include "demoextension.h"
int AEEClsCreateInstance(void**ppObj) {
*ppObj = NULL;if( ClsId == AEECLSID)
...
jnz Rx 00#add b, 0F#add c, 0E#mov A, 00#
CREATE TABLE Map(id INTEGER PK....
)
Finanças
Jogos
Alimentos
Economia
import java.util.*;
public synchronizedreplicateData() {...
}
<%@ page language="java“><%@taglib prefix="c“
uri="jsp/jstl/core“ %>
<html> <head> ...
<struts-config><form-bean> ...<action> ...
</struts-config>
# include "demoextension.h"
int AEEClsCreateInstance(void**ppObj) {
*ppObj = NULL;if( ClsId == AEECLSID)
...
jnz Rx 00#add b, 0F#add c, 0E#mov A, 00#
CREATE TABLE Map(id INTEGER PK....
)
Finanças
Jogos
Alimentos
Economia
� Modelos fazem parte do softwareimport java.util.*;
public synchronizedreplicateData() {...
}
<%@ page language="java“><%@taglib prefix="c“
uri="jsp/jstl/core“ %>
<html> <head> ...
<struts-config><form-bean> ...<action> ...
</struts-config>
# include "demoextension.h"
int AEEClsCreateInstance(void**ppObj) {
*ppObj = NULL;if( ClsId == AEECLSID)
...
jnz Rx 00#add b, 0F#add c, 0E#mov A, 00#
CREATE TABLE Map(id INTEGER PK....
)
Finanças
Jogos
Alimentos
Economia
1/26/2009
24
� Os modelos não são somente “papel”› São entradas para transformadores e
geradores
� Desenvolvedor é protegido das complexidades› Inerente e acidental
� Em alguns casos, o desenvolvedor nem precisa visualizar código!
71
public int soma (int a, int b) {
int resultado = a + b;
return resultado;
}
72
public int soma (int a,
int b) {
int resultado = a + b;
return resultado;
}
public int soma (int a,
int b) {
int resultado = a + b;
return resultado;
} .java
PUSH AX
MOV AL, char
MOV AH, 0Eh
INT 10h
POP AX .asm
000100010010100010011100
100101010001011010111000
101001001111001001001110
101001010101000010100101
010111101010011111100010
010010110100101100010100
1111101101010101 .bin
1/26/2009
25
73
000100010010100010011100100101010001011010111000101001001111001001001
110101001010101000010100101010111101010011111100010010010110100101100
010100111110110101010100010001001010001001110010010101000101101011100
010100100111100100100111010100101010100001001011110101001111110001001
001011010010110001010011111011010101010001000100101000100111001001010
100010110101110001010010011110010010011101010010101010000101010111101
010011111100010010010110100101100010100111110110101010100010001001010
001001110010010101000101101011100010100100111100100100111010100101010
100001010101111010100111111000100100101101001011000101001111101101010
101000100010010100010011100100101010001011010111000101001001111001001
001110101001010101000010110010101011110101001111110001001001011010010
110001010011111011010101011001010010110010001011111000101010100101111
100001010010100010011101010101100111111010101000001001010100010101010
100101010101010101110100101010100001010101111010100111111000100100101
101001011000101001111101101010101000100010010100010011100100101010001
011010111000101001001111001001001110101001010101000010110010101011110
101001111110001001001011010010110001010011111011010101011001010010110
010001011111000101010100101111100001010010100010011101010101100111111
010101000001001010100010101010100101010101010101110100101010100001010
101111010100111111000100100101101001011000101001111101101010101000100
010010100010011100100101010001011010111000101001001111001001001110101
001010101000010110010101011110101001111110001001001011010010110001010
011111011010101011001010010110010001011111000101010100101111100001010
010100010011101010101100111111010101000001001010100010101010100101010
1010101011111100101
PUSH AX
MOV AL, char
MOV AH, 0Eh
INT 10h
POP AX
ADD AX,BX
INT 10h
POP AX
JNZ R1, 1Eh
public int soma (int a, int b) {
int resultado = a + b;
return resultado;
}
5392
145
+
74
public int soma (int a,
int b) {
int resultado = a + b;
return resultado;
} .java
PUSH AX
MOV AL, char
MOV AH, 0Eh
INT 10h
POP AX .asm
0001000100101000100111001
0010101000101101011100010
1001001111001001001110101
0010101010000101001010101
1110101001111110001001001
0110100101100010100111110
1101010101 .bin
5392
145
+
.math
Domínio TI(solução)
Domínio problema
75
Microsoft Access
1/26/2009
26
76
http://www.gamemaker.nl/
� Netbeans› UML› Matisse› Mobility
� Demonstração
1/26/2009
27
� Exemplo do Netbeans› Não é possível alterar a ferramenta de
modelagem› Não é possível alterar a transformação
� Tecnologias atuais MDD› Permitem a construção/edição destes
artefatos
Especialista do domínio
Especialista em TI
Compra
Venda
Cotação
Aluguel
Contrato Fiador
Classe
Objeto
Padrões
Métodos
Atributos
1/26/2009
28
� Um único modelo pode dar origem a diferentes implementações, linguagens ou plataformas
� Permite capturar o conhecimento do domínio de forma clara› Ficando disponível para os desenvolvedores
� Esconde detalhes de implementação durante o desenvolvimento de soluções
� Um único modelo pode gerar uma grande quantidade e diversidade de código
� Especialistas do domínio têm um papel mais ativo no processo
� Maior eficiência no desenvolvimento� Maior qualidade no produto/processo� Geradores não produzem erros
acidentais� Modelos estão sempre atualizados
� Maior rigidez no software produzido� Alta complexidade dos artefatos
necessários (transformadores, etc)� Questão do desempenho› Otimização automática vs código escrito
manualmente
� Exige habilidades específicas e pessoas altamente especializadas em MDD
1/26/2009
29
http://www.voelter.de/services/mdsd-tutorial.html
http://www.voelter.de/services/mdsd-tutorial.html
http://www.voelter.de/services/mdsd-tutorial.html
1/26/2009
30
� Nokia reporta que consegue desenvolver novos celulares até 10 vezes mais rápido
� Lucent relata ganhos de produtividade de 3 a 10 vezes, dependendo do produto
� Redução de 50 para 1 em termos de linha de especificação/código
• Juha-Pekka Tolvanen. Making model-based code generation work. Embedded Systems Europe, 8(60):3638, Aug/Sept 2004.• David Wile. Lessons learned from real dsl experiments. Sci. Comput. Program., 51(3):265-290, 2004.
� MDD são os princípios› Desenvolvimento orientado a modelos› Elevação da importância do modelo no
processo
� Existem diversas frentes› Cada uma baseada em padrões,
ferramentas e processos específicos
1/26/2009
31
� OMG› MDA (Model-Driven Architecture)
� Vanderbilt University› MIC (Model Integrated Computing)
� Microsoft› Software Factories
� Eclipse› Modeling
� Model-Driven Architecture� Surgiu em 2001� Baseada em padrões (standards)� Objetivo› Especificar um sistema de forma independente
de plataforma› Especificar plataformas› Escolher uma plataforma para o sistema› Transformar a especificação genérica em uma
especificação específica de plataforma
1/26/2009
32
� CIM – Computation Independent Model� PIM – Platform Independent Model� PSM – Platform Specific Model� Modelo de plataforma� Transformação de modelos
1/26/2009
33
� UML› Unified Modeling Language
� MOF› Meta-Object Facility
� CWM› Common Warehouse Metamodel
� XMI› XML Metadata Interchange
� QVT› Query / Views / Transformations
MOF
UML CWMOutros
metamodelos
Modelos UML
Modelos de dados
Outros modelos
XMI
Formato XML
ModeloUML1.xmi
ModeloUML2.xmi
ModeloDados1.xmi
ModeloQualquer1.xmi
ModeloQualquer2.xmi
MOF
Metamodelo A
Metamodelo B
Modelos A Modelos BQVT
Consultas Transformações
1/26/2009
34
� Uma série de especificações› Foco em portabilidade, independência de
plataforma� Voltadas à implementação e
padronização – é uma referência› Fabricantes podem optar por aderir aos
padrões� Não define uma metodologia� Não define ferramentas� Porém foi uma das iniciativas fundamentais
para o surgimento do paradigma
� Model Integrated Computing� Pesquisa da Vanderbilt University� Três elementos principais› Tecnologia para modelagem específica de
domínio› Conjunto de ferramentas para modelagem› Framework para análise formal, verificação
e transformação de modelos
� GME – Generic Modeling Environment
� Jack Greenfield, Keith Short, Steve Cook, and Stuart Kent. Software Factories: Assembling Applications with Patterns, Models, Frameworks and Tools. Wiley, 2004.
� Abordagem para desenvolvimento de software› Reutilização sistemática› MDD tem um papel importante
1/26/2009
35
� Pense em uma fábrica tradicional› Estrutura projetada para produzir uma
determinada família ou linha de produtos
� Três elementos› Esquema da fábrica de software: descreve o
que é necessário para construir os produtos da fábrica› Template da fábrica: é uma instância do
esquema› Ambiente extensível: ferramentas utilizadas para
a produção, configuradas através do template
� Modelos são usados para› Capturar especificações em alto nível
(intenção)
� Transformações são usadas para› Gerar implementação automaticamente
� Outras checagens realizadas em modelos� Diferentemente da MDA› Menos interesse em portabilidade e
independência de plataforma› Maior foco em produtividade e reutilização
� Microsoft Visual Studio� DSL Tools› Ferramenta para definição de linguagens
específicas de domínio› Geração de código› Outras funções
1/26/2009
36
� Série de ferramentas e protótipos� Origem e influência do MOF� Linha própria› INRIA – Institut National de Recherche en
Informatique et en Automatique – França› Universidade de Nantes – França› Borland› IBM
� Eclipse Modeling Framework� Graphical Modeling Framework� Textual Modeling Framework› Xtext› TCS
� UML2 Tools
� Model to Model Transformation› Atlas Transformation Language
� Model to Text Transformation› Java Emitter Templates› Xpand
� Generative Modeling Technologies› Incubadora de projetos inovadores
relacionados a modelagem› AM3, AMW, MOFScript, etc.
1/26/2009
37
Problema
Solução
ImplementaçãoSolução
Complexidade acidental
CompiladoresDesenvolvedor
Ferramenta de modelagem
Transformações Produto
Benefícios
1/26/2009
38
MDA
UMLMIC
DSL
Software factories
Eclipse
TMF
Sugestões:
• Qual a relação MDD / métodos ágeis?• Se a modelagem é acidental, porque precisamos dela?• E quanto à gerência de configuração?• Como são realizados os testes no MDD?• Quanto tempo ainda vai demorar?• Vai ter coffee break?• O que vai cair na prova?• Quem ganhou a corrida de F1?• O que pesa mais? 1 Kg de penas ou 1 Kg de chumbo?