Escolar Documentos
Profissional Documentos
Cultura Documentos
E LTRICA E DE C OMPUTAO
DCA/FEEC/UNICAMP
Objetivos
ilmr 3
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Pblico-alvo
Viso geral
Desenvolvimento de software
Estratgias bsicas
ilmr 5
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Desenvolvimento
Slide 5
de
software
ilmr 7
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 9
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Qualidade de software
Slide 9 Ferramentas
Mtodos
Processo
ilmr 11
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 13
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
OI-4: meta-ignorncia
no sabe sobre as cinco ordens de ignorncia
ilmr 15
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Modelos
Abstrao de um sistema semanticamente fechada
ilmr 17
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 19
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Ms experincias
Antipadres: enganos usuais
ilmr 21
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 23
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 25
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Eliminao condicional
ilmr 27
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Abstrao agregada
Antipadro: A Bolha
ilmr 29
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 31
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Antipadro: Poltergeists
Forma geral: Classes com ciclo de vida breve, que aparecem brevemente e
depois desaparecem
Slide 31
Sintomas e conseqncias: Objetos e classes temporrios, com
associaes transientes, levando a modelos de objetos
desnecessariamente complexos
Solues: aes associadas a poltergeists devem ser movidas para as
classes que elas referenciavam, removendo as classes fantasmas do
modelo
ilmr 33
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 35
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 37
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Padres de projeto
Slide 37
ilmr 39
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Projeto
Cdigo
ilmr 41
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Derivao vs delegao
Window
ilmr 43
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Agregao vs associao
Slide 44
Assume compromisso com uma implementao em particular, podendo
comprometer futuras modificaes
ilmr 45
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Objetivo: Definir uma interface para criar um objeto, mas deixar que as
subclasses decidam qual classe instanciar
Motivao: o sistema sabe que ser preciso criar um objeto, mas naquele
Slide 45 ponto do cdigo no sabe que tipo de objeto ser criado
Conseqncias: isola classes especficas da aplicao do cdigo do
sistema; oferece um ponto de extenso (hook) para subclasses
Estrutura:
Criador
metodoFabrica()
Produto umaOperacao() produto = metodoFabrica()
Slide 46
ProdutoConcreto CriadorConcreto
ilmr 47
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Estrutura:
Cliente Fbr icaAbs tr ata
P r odutoAAbs tr ato criaProdutoA()
criaProdutoB()
ProdutoA1 ProdutoA2
F bricaConcreta2 F bricaConcreta1
Slide 48
criaProdu toA() criaProdu toA()
P r odutoBAbs tr ato criaProdu toB() criaProdu toB()
ProdutoB1 ProdutoB2
ilmr 49
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Padro: Prottipo
Objetivo: Especificar o tipo de objeto que deve ser criado usando uma
instncia de prottipo e criar novos objetos copiando este prottipo
Aplicabilidade: sistema deve ser independente de como objetos devem ser
criados, compostos ou representados, e
Slide 49 classes a serem instanciadas so conhecidas apenas no momento da
execuo, ou
para evitar construir uma hierarquia de fbricas paralela hierarquia de
classes de produtos
Estrutura:
Cliente prototype
Prototipo
clone()
operacao()
Slide 50
clone() clone()
ilmr 51
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Slide 51
Assume compromisso com uma forma de atender a uma requisio;
seria melhor no ter essa definio amarrada ao cdigo
Padres de projeto associados: Cadeia de responsabilidade, Comando
ilmr 53
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Estrutura:
ConcreteHandler1 ConcreteHandler2
handleRequest( ) handleRequest( )
Padro: Comando
ilmr 55
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Estrutura:
Invoker Command
Client
ex ecute( )
Slide 55
receiver
Receiver ConcreteCommand
action( ) ex ecute( ) receiver > action( );
state
Slide 56
Usar diretamente APIs e interfaces para sistemas externos que
dependem da plataforma de execuo torna portabilidade e mesmo
atualizao na prpria plataforma difceis
Padres de projeto associados: Fbrica abstrata, Ponte
ilmr 57
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Padro: Ponte
Estrutura:
Client
impl Implementor
Abstraction
operation( ) operationImp( )
Slide 58 impl > operationImpl( );
RefinedAbstraction ConcreteImplementorA
usesOperation( ) operationImpl( )
ilmr 59
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Slide 59
Clientes que sabem como um objeto representado, armazenado,
localizado ou implementado podem ter que sofrer modificaes quando
o objeto muda.
Padro: Memento
ilmr 61
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Estrutura:
memento
Originator M emento Caretaker
Padro: Proxy
ilmr 63
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Estrutura:
Client Sub ject
request( )
Slide 63 ...
real
R ealSub ject P roxy
...
request( ) request( ) real>request( );
...
Slide 64
Algoritmos podem ser estendidos, otimizados ou substitudos durante
desenvolvimento ou reuso; se objeto depender de um algoritmo
especificamente, tambm dever ser alterado nesses casos
Padres de projeto associados: Estratgia, Mtodo Gabarito, Iterador
ilmr 65
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Padro: Estratgia
Estrutura:
Context Strateg y
contextInterface( ) algorithmInterface( )
Slide 66
ConcreteStrategyA ConcreteStrategyB
algorithmInterface( ) algorithmInterface( )
ilmr 67
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Estrutura:
AbstractClass
templateMethod( ) ...
primitiveOperation1( ) primitiveOperation1( );
primitiveOperation2( ) ...
primitiveOperation2( );
Slide 68 ...
ConcreteClass
primitiveOperation1( )
primitiveOperation2( )
ilmr 69
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Padro: Iterador
Estrutura:
Iterator
Agg reg ate Cliente
first( )
createIterator( )
next( )
current( )
Slide 70 isDone( )
ConcreteAggregate ConcreteIterator
createIterator( )
ilmr 71
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Slide 71
Classes fortemente acopladas so difceis de reutilizar isoladamente,
levando a sistemas monolticos e de difcil manuteno
Padres de projeto associados: Fbrica Abstrata, Ponte, Cadeia de
Responsabilidade, Comando, Fachada, Mediador, Observador
Padro: Fachada
ilmr 73
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Estrutura:
F acade
Slide 73
Padro: Mediador
ilmr 75
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Estrutura:
m ediator
Mediator Colleag ue
Slide 75
ConcreteMediator ConcreteColleague1 ConcreteColleague2
Padro: Observador
ilmr 77
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Estrutura:
Subject observers
Observer
attach(Observer)
update( )
detach(Observer)
notify( )
return observerState =
subjectState subject>getState();
ilmr 79
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Padres e frameworks
ilmr 81
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Frameworks e reuso
Reuso de projeto
um framework define um esqueleto de aplicao que pode ser adaptado por
um desenvolvedor de aplicao
Slide 81
um tipo de arquitetura voltada para um domnio
Reuso de cdigo
frameworks so expressos em linguagens de programao so programas
facilita uso de componentes que se conformem s interfaces do framework
tornam-se dependentes das linguagens
Caractersticas de frameworks
ilmr 83
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Xk X1 Xk
Xn
ilmr 85
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Tipos de frameworks
ilmr 87
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 89
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 91
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Metapadres
Metapadres de unificao
U nificao U nificao
Slide 92 U nificao
recursiva 1: 1 recursiva 1: n
*
thRef thList
TH TH
TH
ilmr 93
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Metapadres de conexo
* hRef hList
H H T T
ilmr 95
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
cliente Bas e
Slide 96
C oncreta1 C oncreta2
ilmr 97
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
1
cliente Bas e
Slide 97
C oncreta1 C oncreta2
*
cliente Bas e
Slide 98
C oncreta1 C oncreta2
ilmr 99
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Uso do framework
ilmr 101
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Manuteno de frameworks
ilmr 103
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 105
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Slide 106
ilmr 107
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
O conceito da herana
Mecanismos de derivao
Slide 108 Implementando hierarquias IS-A
Lidando com excees nas hierarquias
Herana de interfaces vs herana de implementaes
separao de interface e implementao
redefinies de mtodos
ilmr 109
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 111
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 113
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 115
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 117
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Interfaces e implementaes
class Pessoa {
public:
Pessoa(string& nome, Data& aniv, Endereco& end, Pais& p);
virtual ~Pessoa();
string nome() const;
Slide 118 string dataNascimento() const;
string endereco() const;
string nacionalidade() const;
private:
string name_;
Data birthday_;
Endereco address_;
Pais nation_;
};
ilmr 119
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Destrutor virtual
Por qu?
class Base { public: ~Base(); ... };
class Derivada: public Base { public: ~Derivada(); ... };
Slide 119 Base *p = new Derivada;
delete p; // comportamento indefinido
Se destrutor na classe base for declarado como virtual, ambos sero
invocados
Deve estar presente em qualquer classe que sirva de base para outras
Mesmo que virtual puro, deve ter implementao
ilmr 121
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
#include <string>
class Data; class Endereco; class Pais;
class PessoaImpl;
class Pessoa {
public:
Slide 122 Pessoa(string& nome, Data& aniv, Endereco& end, Pais& p);
virtual ~Pessoa();
string nome() const;
string dataNascimento() const;
string endereco() const;
string nacionalidade() const;
private:
PessoaImpl *parte_impl;
};
ilmr 123
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
#include "Pessoa.h"
#include "PessoaImpl.h"
Pessoa::Pessoa(string& n, Data& d, Endereco& e, Pais& p) {
Slide 123 parte_impl = new PessoaImpl(n, d, e, p);
}
string Pessoa::nome() const {
return parte_impl -> getNome();
}
...
Qual padro de projeto est presente nesta abordagem?
ilmr 125
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
class Pessoa {
public:
Slide 125 virtual ~Pessoa();
virtual string nome() const = 0;
virtual string dataNascimento() const = 0;
virtual string endereco() const = 0;
virtual string nacionalidade() const = 0;
};
ilmr 127
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 129
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 131
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 133
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 135
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 137
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 139
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 141
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 143
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Herana ou templates
ilmr 145
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 147
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 149
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 151
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 153
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Herana mltipla
Ambigidade potencial
Base1 Base2
D erivada
ilmr 155
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Derivada d;
d.faz(); // erro de compilao
Slide 156
class Derivada: public Base1, public Base2 {
... // sem faz()
};
Derivada d;
int i = d.faz(); // continua erro de compilao
ilmr 157
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 159
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 161
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
C om um
Slide 161
Base1 Base2
D erivada
Slide 162
Classe base virtual impe penalidades de acesso (tipicamente,
implementao por ponteiros na estrutura interna)
Mas e se Comum, Base1 e Base2 existissem antes e independentemente
de Derivada (por exemplo, em uma biblioteca)?
bom projeto requer viso proftica. . .
ilmr 163
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 165
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 167
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Atividades
ilmr 169
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
Slide 170 2. Phillip G. Armour. The Five Orders of Ignorance. Communications of the ACM
43(10), pp.1720, October 2000.
3. William H. Brown, Raphael C. Malveau, Hays W. McCormick III, and Thomas
J Mowbray. Antipatterns: Refactoring software, architectures, and projects in
crisis. John Wiley & Sons, 1998.
4. Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. Design
Patterns: Elements of reusable object-oriented software. Addison-Wesley,
1995.
ilmr 171
FACULDADE DE E NGENHARIA
E LTRICA E DE C OMPUTAO
ilmr 171