aperfeiçoamento do desenho - técnico lisboa3-3).pdf · métricas de desenho princípio do...

Post on 12-Dec-2018

213 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1

Desenho de Software 71

Aperfeiçoamento do Desenho� Desenho por contrato� Protótipos de desenho

Desenho de Software 72

Desenho por Contrato� Utiliza-se a técnica de desenho por contrato para

assegurar que o desenho satisfaz a sua especificação� Um componente, dito cliente, que necessita dos

serviços de outro componente, dito fornecedor, pelo qual celebram um contrato que especifica:� as obrigações mútuas, chamados de pré-condições� os benefícios, chamados de pós-condições� as restrições de coerência, chamadas de invariantes

� Facilitam o desenvolvimento separado, a reutilização, os testes, a verificação da coerência entre as cláusulas, a verificação da correcção da implementação, documentam o desenho, ...

2

Desenho de Software 73

Noção de contrato� Contracto escrito entre duas partes quando uma

delas (FOLHQWH) executa alguma tarefa para outra parte (IRUQHFHGRU)

� O objectivo do documento de contrato é descrever os EHQHItFLRV e REULJDo}HV de cada um dos parceiros

Fornecedor

Cliente (vai beneficiar da pós-condição)

&KHJDU�DR�GHVWLQR(tem que garantir pré-condição)

3DJDU�ELOKHWH��EDJDJHP�����(pode assumir pré-condição)

%LOKHWH�IRL�SDJR�����(tem que garantir pós-condição)

/HYDU�R�FOLHQWH�DR�GHVWLQR

BenifíciosObrigações

Desenho de Software 74

Exemplo

Fornecedor

Cliente (vai beneficiar da pós-condição)

$�WDEHOD�p�DFWXDOL]DGD�FRP�R�QRYR�HOHPHQWR�H�D�FKDYH�GDGD�

(tem que garantir pré-condição)

$�WDEHOD�QmR�HVWi�FKHLD�H�D�FKDYH�GH�DFHVVR�QmR�p�D�VWULQJ�YD]LD

(pode assumir pré-condição)

6H�D�WDEHOD�HVWi�FKHLD�RX�D�FKDYH�p�D�VWULQJ�YD]LD��QmR�p�QHFHVViULR�ID]HU�QDGD

(tem que garantir pós-condição)

$FWXDOL]D�D�WDEHOD�FRP�R�QRYR�HOHPHQWR

BenifíciosObrigações

� Inserção de um elemento de uma tabela

3

Desenho de Software 75

Desenho por Contrato� Exemplo Eiffel [Meyer1992]

put (x: ELEMENT; key: STRING)

-- Insert x so that it will be retrievable through key�����������

count <= capacity;

not key.empty� �

... Some insertion algorithm ...����������

has(x);

item(key) = x;

count = old count + 1�������� �����

0 <= count

count <= capacity��� �

Desenho de Software 76

Desenho por Contrato� Fabrica de produtos químicos � Classes TANK, PIPE, VALVE, CONTROL_ROOM

fill �

-- Fill tank with liquid �����������

������� �������! #"$��� &% '���� �������)(��� �*���+

� �

-- Implementation ����������

������� �������)(��� �*���+-, &% '���� �������)(��� �*���+.,��*�/�%����

0 ������� �����

isFull = (0.95 * capacity <= gauge) and(gauge <= 1.05 * capacity)

��� �

4

Desenho de Software 77

Protótipos de Desenho� Permitem verificar se a solução de

desenho vai de facto resolver o problema

� O protótipo deve focar apenas no aspecto de desenho sobre o qual existem dúvidas

� Frequentemente são descartáveis

Desenho de Software 78

Validação e Verificação� 9DOLGDomR – certificar se o desenho satisfaz

todos os requisitos do utilizador� 9HULILFDomR – certificar se a solução

incorpora as qualidades de desenho requeridas

� Existem várias técnicas:1 Validação Matemática pode ser difícil mas muito

útil para alguns aspectos críticos1 Métricas de Desenho permitem quantificar a

qualidade1 Comparação de Desenhos para avaliar os

compromissos

5

Desenho de Software 79

Validação Matemática� Método B

2 Metodologia e ferramenta de desenvolvimento formal

2 Um sistema é definido por uma composição de abstract machines

2 Refinamento3 No inicio considera-se uma abstração do

sistema3 Em cada refinamento são adicionados detalhes3 No final é gerado código C+ + ou Java

Desenho de Software 80

Métricas de Desenho� Não se pode gerir aquilo que não se controla

e não se pode controlar aquilo que não se consegue medir. Tom DeMarco

� As seguintes métricas propostas por Robert Martin medem a qualidade do desenho com objectos. Considera módulos reutilizáveis de componentes:� Ligação de Fora/Dentro (LFD): número de classes de fora

do módulo que dependem de classes de dentro do módulo� Ligação de Dentro/Fora (LDF): número de classes de dentro

do módulo que dependem de classes fora do módulo� Instabilidade (I): I = LDF / (LFD + LDF), I=0 indica

estabilidade e I=1 indica instabilidade do módulo

6

Desenho de Software 81

Métricas de Desenho� Princípio do Aberto/Fechado

1 Um sistema não pode ter todos os módulos estáveis

1 Um módulo deve ser aberto à extensão e fechado à modificação

1 Desta forma, os módulos estáveis devem ser muito abstractos enquanto que os módulos instáveis devem ser muito concretos

� Uma medida de abstracção:1 Abstracção (A): A = número de classes abstractas

do módulo / número total de classes do módulo, A= 0 significa que é concreto e A= 1 que é abstracto

Desenho de Software 82

Métricas de Desenho� Relacionamento

entre a medida de abstracção e a instabilidade de um modulo:1 A = 1 e I = 01 A = 0 e I = 11 A = 0 e I = 01 A = 1 e I = 1

1 A = 0.5 e I = 0.5instabilidade

abst

rac ç

ã o

1

1(0,1)

(1,0)

sequência principal

7

Desenho de Software 83

Métricas de Desenho� É desejável que os

módulos estejam próximos da sequência principal1 Distância (D):

D = | (A+ I-1) / 2|

instabilidadeab

stra

c çã o

1

1(0,1)

(1,0)

sequência principal

Desenho de Software 84

Comparação de Desenhos� Uma especificação possibilita muitos

desenhos2 Deve-se construir diversas soluções para o

problema usando diferentes estilos arquitecturais

2 Decidir qual o melhor desenho para os objectivos do sistema

2 Tabelas de Comparação3 Facilidade de alteração do algorítmo3 Performance3 Facilidade na reutilização3 Modularidade3 ...

8

Desenho de Software 85

Comparação de Desenhos� Tabelas de comparação definem para

cada atributo de qualidade se um particular estilo arquitectural o suporta ou não

� Tabela de pesos indica qual a prioridade que cada atributo de qualidade tem para o sistema a desenvolver, permite calcular um valor para cada estilo arquitectural

Desenho de Software 86

Documentação do Desenho� Devem ser apresentadas quais as

razões do desenho que indiquem os aspectos críticos e os compromissos da solução

� Utilizar as notações necessárias para exprimir o desenho e as suas propriedades, por exemplo, UML

9

Desenho de Software 87

Revisão do Desenho4 Este processo tem por objectivo garantir que

se está a desenvolver o sistema/programa que o cliente pretende

4 Faz-se detecção erros4 Revisão Preliminar

1 Clientes e utilizadores validam o desenho conceptual

4 Revisão Principal/Crítica1 Analistas, desenhadores validam o desenho

técnico1 Discutir desenhos alternativos

4 Revisão do Programa1 Realizada depois do desenho do sistema estar

concluído, mas antes da implementação

Desenho de Software 88

Casos Notáveis5 Padrão Data Access Object

6 http:/ / java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html

5 Padrão Intercepting Filter 6 http:/ / java.sun.com/blueprints/corej2eepatterns/Patterns/ In

terceptingFilter.html5 Moldura de Objectos JUnit

6 Erich Gamma and Kent Beck6 http:/ / junit.sourceforge.net/doc/cookstour/cookstour.htm

5 Padrão Arquitectural Modelo-Vista-Controlador6 In Pattern-Oriented Software Architecture: A System of

Patterns. Frank Buschmann et al.

10

Desenho de Software 89

Padrão Data Access Object� &RQWH[WR

7 Acesso aos dados depende da fonte dos dados8 tipo de armazenamento8 implementação do vendedor

Desenho de Software 90

Problema4 As aplicações podem usar a API JDBC mas

mesmo num SGBD relacional a sintaxe e o formato dos comando SQL pode variar devido ao produto usado

4 Existe ainda maior variação quando se usam diferentes tipos de SGBD

4 Cria-se uma dependência entre o código da aplicação e o código de acesso aos dados que dificulta a migração entre diferentes tipos de SGBD e diferentes produtos de um mesmo tipo

11

Desenho de Software 91

Forças� Componentes aplicacionais necessitam

de obter/guardar informação de/para um suporte persistente

� As APIs dos suportes persistentes variam dependendo do vendedor do produto e do tipo do produto

� Componentes aplicacionais usualmente usam APIs proprietárias

� A portabilidade dos componentes aplicacionais é afectada

Desenho de Software 92

Solução� Utilizar um objecto de acesso aos

dados (DAO) para abstrair e encapsular todos os acessos à fonte de dados

� O DAO gere a ligação à fonte de dados para obter e guardar dados

� O DAO funciona como um adaptador entre o componente e a fonte de dados

12

Desenho de Software 93

Estrutura

Desenho de Software 94

Participantes e Colaborações

13

Desenho de Software 95

Estratégia� Factory Method

Desenho de Software 96

Estratégia� Abstract Factory e Factory Method

14

Desenho de Software 97

Estratégia

Desenho de Software 98

Código: Fábrica Abstractapackage ServidorPersistente;

public interface ISuportePersistente {

public void iniciarTransaccao()

throws ExcepcaoPersistencia;

public void confirmarTransaccao()

throws ExcepcaoPersistencia;

public void cancelarTransaccao()

throws ExcepcaoPersistencia;

public IItemPersistente

getIItemPersistente();

public ISeccaoPersistente

getISeccaoPersistente();

public ISitioPersistente

getISitioPersistente();

}

15

Desenho de Software 99

Código: Fábrica Concretapackage ServidorPersistente.OJB;

public class SuportePersistenteOJB

implements ISuportePersistente {

Implementation _odmg = null;

Database _db = null;

...

public IItemPersistente

getIItemPersistente()

{ return new ItemOJB(); }

public ISeccaoPersistente

getISeccaoPersistente()

{ return new SeccaoOJB(); }

public ISitioPersistente

getISitioPersistente()

{ return new SitioOJB(); }

}

Desenho de Software 100

Código: Interface DAOpackage ServidorPersistente;

import Dominio.ISitio;

public interface ISitioPersistente {

ISitio readByNome(String nome)

throws ExcepcaoPersistencia;

void write(ISitio sitio)

throws ExcepcaoPersistencia;

void delete(ISitio sitio)

throws ExcepcaoPersistencia;

void deleteAll()

throws ExcepcaoPersistencia;

}

16

Desenho de Software 101

Código: Implementação OJBpackage ServidorPersistente.OJB;

public class SitioOJB

extends ObjectFenixOJB

implements ISitioPersistente {

public SitioOJB() { }

...

public void deleteAll()

throws ExcepcaoPersistencia {

String oqlQuery = "select all from " +

Sitio.class.getName();

super.deleteAll(oqlQuery);

}

}

Desenho de Software 102

Código: Objecto Valor package Dominio;

public class Sitio implements ISitio {

private String _nome;

private int _anoCurricular;

private int _semestre;

private String _departamento;

private String _curso;

private List _seccoes;

// códigos internos da base de dados

private int _codigoInterno;

...

// getter e setter methods

...

}

17

Desenho de Software 103

Consequências� Permite a transparência� Facilita a migração� Reduz a complexidade do código do

componente aplicacional� Centraliza os acessos a dados numa

camada separada� Acrescenta uma camada adicional� Necessita do desenho de uma

hierarquia de classes

Desenho de Software 104

Padrão Intercepting Filter� O mecanismo de tratamento de

pedidos da camada de apresentação trata pedidos muito diferentes entre si, o que implica tratamento especializado para cada um deles

� Alguns pedidos têm tratamento imediato, enquanto outros necessitam de ser modificados ou verificados antes de serem processados

18

Desenho de Software 105

Problema� É necessário haver pré- e pós-

processamento dos pedidos feitos por um cliente Web e das respectivas respostas7 O cliente foi autenticado?7 A sessão do cliente é válida?7 O tipo de browser do cliente é suportado?7 ...

Desenho de Software 106

Forças� Deve haver processamento comum a

todos os pedidos e respostas� Centralização da lógica comum� A adição e remoção dos componentes

de processamento deve ser independente

19

Desenho de Software 107

Solução� Criar filtros para processar os serviços

comuns de forma que:7 Interceptem os pedidos que chegam e as

respostas que são enviadas7 Seja possível adicionar ou remover os

filtros de forma discreta sem ser necessário modificar o código já existente

Desenho de Software 108

Estrutura

20

Desenho de Software 109

Colaboração

Desenho de Software 110

Participantes4 GestorFiltros

9 Gere o processamento dos filtros 9 Cria a CadeiaFiltros com os filtros apropriados, na

ordem correcta, e inicia o processamento: CadeiaFiltros

9 Conjunto ordenado de filtros independentes: Filtro1, Filtro2, Filtro3

9 Filtros individuais que são mapeados para um alvo

9 A CadeiaFiltros coordena o seu processamento: Alvo

9 Consiste no recurso pedido pelo cliente

21

Desenho de Software 111

Custom Filter (1/4)� Custom Filter

7 Definido pelo programador7 Menos flexível e menos poderoso que o

Standard Filter7 Exemplos:

8 Utilização do Decorator para encapsular o processamento dos pedidos dentro dos filtros

8 Utilização de Gestor de Filtros e Cadeia de Filtros para coordenar o processamento dos filtros

Desenho de Software 112

Custom Filter (2/4)9 Exemplo – Utilização do Decorator

; Problema; Se alterarmos a forma de tratar o pedido, tem que se

alterar também o código dos filtros e do processamento principal

22

Desenho de Software 113

Custom Filter (3/4)9 Exemplo – Utilização do Decorator

Desenho de Software 114

Custom Filter (3/4)9 Exemplo – Utilização de Gestor e Cadeia de Filtros

; Problema; Filtros adicionados ou removidos programaticamente

23

Desenho de Software 115

Standard Filter (1/2)� Standard Filter

9 Os filtros são controlados declarativamente, utilizando um ficheiro de configuração; Este ficheiro inclui o mapeamento dos filtros para URL’s

específicos; Quando um cliente faz um pedido a que corresponde

aquele URL mapeado, os filtros são processados por ordem antes que o alvo do pedido seja invocado

<filter> <filter-name> StandardEncodeFilter </filter-name>...

</filter>...

<filter-mapping><filter-name> StandardEncodeFilter </filter-name><url-pattern> /EncodeTestServlet </url-pattern>

</filter-mapping>

Desenho de Software 116

Standard Filter (2/2)

24

Desenho de Software 117

Intercepting Filter: Os filtros em geral não alteram o fluxo

de execução

Desenho de Software 118

Intercepting Filter: Filtro com alteração do fluxo de Execução

25

Desenho de Software 119

Outras Estratégias� Base Filter

7 Superclasse comum a todos os filtros utilizados

7 Partilhada por todos os filtros7 Encapsula funcionalidades comuns

� Template Filter7 Base Filter que contém uma estrutura fixa

a que todos os filtros têm que obedecer7 Cada subclasse filtro implementa a sua

funcionalidade para essa estrutura

Desenho de Software 120

Consequências� Centraliza o controlo com fraca ligação

entre filtros� Promove a reutilização� Configuração independente e

declarativa� A partilha de informação é ineficiente

26

Desenho de Software 121

Padrão Adapter� Permite ultrapassar incompatibilidades

entre interfaces � Converte a interface de uma classe

noutra interface (esperada pelos clientes)

� Existem dois tipos de adaptadores: de classes e de objectos

Desenho de Software 122

Padrão Adapter� Adaptador de Objectos (composição)

27

Desenho de Software 123

Padrão Adapter� Adaptador de Classes (herança)

Java não permite herança multipla

Desenho de Software 124

Padrão Composite� Permite compor objectos em estruturas� Trata objectos individuais e objectos

estruturados uniformemente� Em geral são usados para representar

estruturas de dados recursivas

28

Desenho de Software 125

Padrão Composite

Desenho de Software 126

Padrão Arquitectural MVC

29

Desenho de Software 127

Padrão Arquitectural MVC: O padrão arquitectural Modelo-Vista-

Controlador (MVC) divide uma aplicação interactiva em três componentes: modelo, vista e controlador9 O modelo contém o núcleo da funcionalidade e

dos dados9 As vistas mostram a informação ao utilizador9 Os controladores tratam das entradas dos

utilizadoresAs vistas e os controladores formam a interface. Um mecanismo de propagação das alterações assegura a coerência entre a interface utilizador e o modelo

Desenho de Software 128

Exemplo

30

Desenho de Software 129

Problema: As interfaces utilizador são muito passíveis

de sofrerem pedidos de alteração : Diferentes utilizadores têm requisitos

diferentes, e por vezes conflituosos, sobre como deve ser a interface utilizador

: Um sistema que satisfaça os requisitos acima deve permitir:< A mesma informação ser apresentada de forma diferente

em distintas janelas< A visualização e comportamento da aplicação reflecte

imediatamente as alterações aos dados< Alterações à interface são fáceis e possíveis em tempo de

execução< O suporte de diferentes look and feel não deve afectar o

núcleo da aplicação

Desenho de Software 130

Solução: Existem três tipos de componentes: modelo,

vista e controlador< O modelo encapsula o cerne dos dados e da funcionalidade,

é independente das representações de saída e do comportamento associado às entradas

< A vista mostra os dados ao utilizador, obtém os dados do modelo e permite a existência diferentes vistas do modelo

< O controlador recebe os eventos de entrada que converte para pedidos de serviços ao modelo e às vistas

: A separação entre o modelo a vista e o controlador permite múltiplas vistas do mesmo modelo

31

Desenho de Software 131

Estrutura

=?>#@BA#C

coreData : undefined

attach()detach()notify()getData()service()

D�EBF A!G HIA#G

update()

J�K AML

initialize()makeController()activate()display()update()

N >BOQP GR>BC C A#G

initialize()handleEvent()update()

update()

initialize()makeController()activate()display()update()

initialize()handleEvent()update()

coreData : undefined

attach()detach()notify()getData()service()

1 *

1 0..1

Desenho de Software 132

Dinâmica: Propagação:C o n t r o lle r :M o d e l :V ie w

h a n d le E v e n t

s e r v ic e

n o t i f y

u p d a t e

g e t D a t a

u p d a t e

g e t D a t a

32

Desenho de Software 133

Dinâmica: Inicialização:M o d e l

:V i e w

: C o n t r o l l e r

m a in p r o g r a m :

c r e a t e

c r e a t e

i n i t ia l iz e

a t t a c h

m a k e C o n t r o l l e rc r e a t e

in i t ia l i z e

a t t a c h

s t a r t E v e n t P r o c e s s in g

Desenho de Software 134

Exemplo (1/2)

33

Desenho de Software 135

Exemplo (2/2)

Desenho de Software 136

ConsequênciasS Vantagens

< Múltiplas vistas do mesmo modelo< Sincronização das vistas< Troca dinâmica de vistas e controladores < Alteração do look and feel< Potencial para moldura de objectos

S Desvantagens< Aumento da complexidade< Possível excesso do número de propagação de alterações< Ligação forte entre as vistas e os respectivos controladores< Ligação forte das vistas e controladores com o modelo< Ineficiência dos acessos aos modelos por parte dados das

vistas< Alteração da vista e do controlador quando é necessário

portar

34

Desenho de Software 137

Exemplo

InterfaceDocente

ServidorAlunoInterfaceAluno

ServidorDocente

Dominio ServidorDados

top related