Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a...
Transcript of Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a...
![Page 1: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/1.jpg)
Programação Orientada a Objetos
Padrões de Projeto
André SantanchèInstituto de Computação – UNICAMP
Abril 2015
Pic
ture
by
Eva
n L
eeso
n [
htt
p:/
/ww
w.f
lickr
.co
m/p
ho
tos/
ecst
atic
ist/
]
![Page 2: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/2.jpg)
Padrões de Projeto
![Page 3: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/3.jpg)
Design Patterns
▪ Design Patterns: Elements of Reusable Object-Oriented Software
▫ Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
▫ Addison-Wesley, 1995.
![Page 4: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/4.jpg)
Padrões
▪ “cada padrão descreve um problema no nosso ambiente e o núcleo da sua solução, de tal forma que você possa usar esta solução mais de um milhão de vezes, sem nunca fazê-lo da mesma maneira” (Alexander, 1977)
![Page 5: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/5.jpg)
Pattern Singleton
![Page 6: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/6.jpg)
Gerador de Identificador Seqüencial
Pattern Singleton
SimpleSequenceStamp
-instance: SimpleSequenceStamp-lastId: int
+getInstance(): SimpleSequenceStamp+nextId(): String
SequenceStampTest01
![Page 7: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/7.jpg)
Pattern Facade
![Page 8: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/8.jpg)
Facade
(AG Communication Systems, 1999)
![Page 9: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/9.jpg)
Facade Pattern
Mini Framework
SimpleSequenceStamp
SequenceStamp<<interface>>
SimpleURISequenceStamp
SequenceStorage<<interface>>AbstractSequenceStamp
SequenceStorageException<<exception>>
Exception<<exception>>
SequenceStampException<<exception>>
DatabaseSequenceStorage FileSequenceStorage
![Page 10: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/10.jpg)
Facade Pattern
Interface Única
SimpleSequenceStamp
SequenceStamp<<interface>>
SimpleURISequenceStamp
SequenceStorage<<interface>>
AbstractSequenceStamp
SequenceStorageException<<exception>>
SequenceStampException<<exception>>
DatabaseSequenceStorageFileSequenceStorage
Stamp<<interface>>
+nextId(): String
StampComponent
+createInstance(stampType, storageType): Stamp+nextId(): String
AbstractSequenceStorage
StamoException<<exception>>
![Page 11: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/11.jpg)
Pattern Factory
![Page 12: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/12.jpg)
Fish DCC
▪ Goal
▫ Draw a character-based Fish and Crab
_ |\/O\ |/\_/
o o | | /-----\ | | \-----/ / / \ \
![Page 13: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/13.jpg)
Padrões de Projeto
Factory Method
(Gamma, 1995)
![Page 14: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/14.jpg)
Abstract Factory
(AG Communication Systems, 1999)
![Page 15: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/15.jpg)
Padrões de Projeto
Abstract Factory
(Gamma, 1995)
![Page 16: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/16.jpg)
Pattern Composite
![Page 17: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/17.jpg)
Alicehttp://www.alice.org
▪ Ambiente 3D para a construção de animações/aplicações com propósitos educacionais
▪ Explora hierarquia de objetos
![Page 18: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/18.jpg)
AliceObjetos da
Cena
Cena
Navegação no Espaço
Operações
Transformações com
o Objeto
![Page 19: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/19.jpg)
Alice
Scripts associados a Objetos (comporta-mento)
Tabela de Eventos
Codificação “arrastando e soltando”
![Page 20: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/20.jpg)
http://www.godotengine.org
![Page 21: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/21.jpg)
GodotComposição de Objetos 2D
![Page 22: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/22.jpg)
GodotComposição de Objetos 3D
![Page 23: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/23.jpg)
Hierarquia Gráfica
Line
draw()
graphics
Graphic
draw()add(Graphic)remove(Graphic)getChild(int): Graphic
Picture
draw()add(Graphic)remove(Graphic)getChild(int): Graphic
Rectangle
draw()
Text
draw()
![Page 24: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/24.jpg)
Composite
▪ Composição recursiva de objetos
▪ Ideal para representação parte/todo
![Page 25: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/25.jpg)
Composite 1Interface Mínima
Component
operation()
Leaf
operation()
Composite
operation()add(Component)remove(Component)getChild(int): Component
child
Client
![Page 26: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/26.jpg)
Composite 2Interface Máxima - Transparência
Leaf
operation()
Composite
operation()add(Component)remove(Component)getChild(int): Component
child
Component
operation()add(Component)remove(Component)getChild(int): Component
Client
![Page 27: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/27.jpg)
Exercício
▪ Quais as vantagens / desvantagens de usar Composite com interface Mínima ou Máxima?
▪ Sugestão: avalie aspectos de segurança e transparência
![Page 28: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/28.jpg)
CompositeSegurança x Transparência
▪ Interface Mínima - Segurança
▫ evita implementação de operações que não fazem sentido
▫ por exemplo: add, remove, getChild
▪ Interface Máxima - Transparência
▫ Cliente não precisa distinguir nós
▫ getChild pode apenas retornar vazio
▫ add e remove geram expectativa incorreta nas folhas
![Page 29: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/29.jpg)
Swing - Componentes
Componente Descrição Exemplo
Containers de alto nível
Containers intermediários
Componentes atômicos
Componente principal que irá conter os demais
Pode conter outros componentes porém tem que estar inserido em um componente superior
Componentes auto-suficientes que possuem uma apresentação e funcionalidade
JFrame
JPanel
JButton
![Page 30: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/30.jpg)
DOM - Document Object Model
▪ API de objetos para documentos XML e HTML
▪ Definido em CORBA IDL, ECMAScript e Java
▪ Organizado em níveis
▪ Nível 1:
▫ DOM Core – funcionalidades básicas para documentos XML
▫ DOM HTML – sobre o DOM Core acrescenta →funcionalidades para HTML
![Page 31: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/31.jpg)
● Cabeçalho● Galeria
● Secundário● Número da página● Navegação: próximo/anterior
● Central● Sequência de imagens
● Rodapé● Dados do autor
<header> Galeria </header><section> <aside> Página [01] … </aside> <section class="center"> ... <figure><img src="..." /></figure> ... </section></section><footer> Cabeças de Dinossauros ...</footer>
<header>
<footer>
<aside>
<section>
Galeria
Cabeças de DinossaurosAutor: *highdarktemplar
[http://highdarktemplar.deviantart.com/]
Página [01]
próxima >
< anterior
HTML
CSS
Apresentação
Plano
![Page 32: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/32.jpg)
<html>...<body>
<header> Galeria</header>
<section class="main"> … <section class="center"> <figure id="f1"><img src="images/pachycephalosaurus.png"/></figure> <figure id="f2"><img src="images/parasaurolophus.png"/></figure> <figure id="f3"><img src="images/carnotaurus.png"/></figure> </section></section>
<footer> Cabeças...</footer>
</body>
</html>Galeria
section
Cabeças...
sectionheaderfooter
img
alt
src
figure
img
figure
img
figure
id="f1" id="f3"
![Page 33: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/33.jpg)
<header> Galeria </header><section> <aside> Página [01] … </aside> <section class="center"> ... <figure><img src="..." /></figure> ... </section></section><footer> Cabeças de Dinossauros ...</footer>
<header>
<footer>
<aside>
<section>
Galeria
Cabeças de DinossaurosAutor: *highdarktemplar
[http://highdarktemplar.deviantart.com/]
Página [01]
próxima >
< anterior
HTML
CSS
AplicativoJavaScript
Galeriasection Cabeças...
sectionheader footer
img
alt
src
DOM
figure
img
figure
img
figure
![Page 34: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/34.jpg)
Navegando pelo DOM
▪ Node – genericamente qualquer nó
▪ Element – elementos HTML/XML representados por tags
▪ Attr – atributos associados a elementos.
▪ Text – conteúdo texto livre
▪ Document – Nó raiz da árvore que representa o documento completo
![Page 35: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/35.jpg)
Galeria
section
Cabeças...
sectionheaderfooter
img
alt
src
figure
img
figure
img
figure
id="f1" id="f3"
nextSibling
firstChild
nextSibling
getElementById("f1")
Navegando pelo DOM
![Page 36: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/36.jpg)
SVG – Scalable Vector Graphics
▪ Formato XML para a representação de imagens vetoriais (Dahlström et al., 2011)
▪ Suporte nativo dos navegadores
![Page 37: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/37.jpg)
Primitivas SVG
P r im it iv a D e s c r iç ã o A tr ib u to s
<rect> D e s e n h a u m re tâ n g u lo .
style E s t i lo d e a p re s e n ta ç ã o . N e s te c a s o d e f in e a c o r d e p re e n c h im e n to .
x, y C o o rd e n a d a s d o c a n to e s q u e rd o s u p e r io r .
width, height
A ltu ra e la r g u ra d o r e tâ n g u lo .
<circle> D e s e n h a u m c í r c u lo .
style E s t i lo d e a p re s e n ta ç ã o . N e s te c a s o d e f in e a c o r d e p re e n c h im e n to .
cx, cy C o o rd e n a d a s d o c e n t ro d o c í r c u lo .
r R a io d o c í r c u lo .
![Page 38: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/38.jpg)
Árvore SVG
<svg id="desenho" version="1.1" xmlns="http://www.w3.org/2000/svg" width="205" height="370">
<rect style="fill:#552200" x="77" y="179" width="50" height="190" />
<circle style="fill:#005500" cx="102" cy="106" r="95" />
</svg>
![Page 39: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/39.jpg)
Carro SVG
![Page 40: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/40.jpg)
Mais Primitivas SVG para o Carro
P r im it iv a D e s c r iç ã o A tr ib u to s
<path> D e s c r e v e u m t ra je to q u e u s u a lm e n te s e rá u s a d o p a ra a d e f in iç ã o d e c o n to rn o s d e p o l íg o n o s .
style E s ti lo d e a p re s e n ta ç ã o . N e s te c a s o d e f in e a c o r d e p r e e n c h im e n to e d o c o n to rn o e a e s p e s s u ra d o c o n to rn o .
d S e q u ê n c ia d e c o n to rn o fo rm a d a p o r le t r a s q u e r e p r e s e n ta m p r im i t iv a s d e d e s c r iç ã o d o c o n to r n o e c o o rd e n a d a s .
<text> In s e re u m te x to .
style E s t i lo d e a p re s e n ta ç ã o . N e s te c a s o d e f in e a c o r e fo n te d a le t r a .
x, y C o o rd e n a d a s d o e s q u e rd o in fe r io r d o te x to .
![Page 41: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/41.jpg)
Carro SVG
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="181" height="130">
<circle style="fill:#1a1a1a" cx="44" cy="90" r="40" /> <circle style="fill:#cccccc" cx="44" cy="90" r="20" />
<circle style="fill:#1a1a1a" cx="140" cy="102" r="28" /> <circle style="fill:#cccccc" cx="140" cy="102" r="14" />
<path style="fill:#6c5353; stroke:#000000; stroke-width:1px" d="M 180.322,82.637687 172.30769,42.566127 0.50088787,1.4927774 1.5026779,82.637677 c -2.50447,-82.14667965 178.8193221,1e-5 178.8193221,1e-5 z" />
<text style="fill:white; font-size:28px; font-family:Arial" x="9" y="30" transform="rotate(10)"> ..carSaur </text>
</svg>
![Page 42: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/42.jpg)
DOM em SVG
![Page 43: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/43.jpg)
width = “181”
height = “130”
circle
class = “tyre”
cx = “44”
cy = “90”
r = “40”
circle
class = “rim”
cx = “44”
cy = “90”
r = “20” r = “28”
cy = “102”
cx = “140”
circle
class = “tyre”
r = “14”
cy = “102”
cx = “140”
circle
class = “rim”
svg
class = “frame”
path
d = “M 180.322,...”
x = “9”
r = “20”
y = “30”
transform = “rotate(10)”
class = “nameStyle”
text
..carSaur
![Page 44: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/44.jpg)
AplicativoJavaScript
DOM
svg
text path
circle circle circle circle
![Page 45: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/45.jpg)
svg
text path
circle circle circle circle
nextSibling
firstChild
nextSibling
getElementById()
firstChild
SVG em DOM
![Page 46: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/46.jpg)
Pattern Observer
![Page 47: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/47.jpg)
Eventos
Pattern Observer
Subject
+Attach(Observer)+Detach(Observer)+Notify()
ConcreteSubject ConcreteObserver
Observer<<interface>>
+Update()
![Page 48: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/48.jpg)
Eventos e Pattern Observer
![Page 49: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/49.jpg)
Eventos e GUI
▪ Cada ação do usuário ao interagir com uma Interface produz um evento: arrastar o mouse, clicar em um botão, etc.
▪ Objetos podem ser notificados da ocorrência de um evento
![Page 50: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/50.jpg)
JavaBeans
Eventos
▪ Seguem o padrão Observer
▪ Registro de evento detectados automaticamente
▪ Registros de observadores (listeners) são “descobertos” por introspecção:
▫ add<evento>Listener( <evento>Listener )
▫ remove<evento>Listener( <evento>Listener )
![Page 51: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/51.jpg)
Os eventos em Java são representados através de objetos.
Tais objetos (eventos) podem ser capturados por objetos através de uma "escuta" (listener).
Eventos
![Page 52: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/52.jpg)
Eventos
Pattern Observer
Subject
+Attach(Observer)+Detach(Observer)+Notify()
ConcreteSubject ConcreteObserver
Observer<<interface>>
+Update()
![Page 53: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/53.jpg)
Eventos
Padrão Listener
XyzListener<<interface>>
+update(XyzEvent)
EventListener
ConcreteXyzListener
Subject<<interface>>
+addXyzListener(XyzListener)+removeXyzListener(XyzListener)
ConcreteSubject
+fireXyzEvent()
Event
XyzEvent
![Page 54: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/54.jpg)
Exemplo do Peixe
![Page 55: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/55.jpg)
Exemplo do Peixe
PeixeInterface<<interface>>
+getTamanho(): int+setTamanho(tamanho: int)+alimenta()
Peixe
-tamanho: int-comida: int
+firePeixeEvent()
PeixeSubject<<interface>>
+addPeixeListener(listener: PeixeListener)+removePeixeListener(listener: PeixeListener)
EventListener
PeixeListener<<interface>>
+novoTamanho(tamanho: int)
PeixeVisualTexto PeixeVisualImagem
![Page 56: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/56.jpg)
Estilos ArquiteturaisEstilos de Controle
Baseada em Eventos
![Page 57: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/57.jpg)
©Ian Sommerville 2006 Software Engineering, 8th edition. Chapter 11 Slide 57
Event-driven systems
Driven by externally generated events where the timing of the event is outwith the control of the sub-systems which process the event.
Two principal event-driven models▫ Broadcast models. An event is broadcast to all sub-systems. Any
sub-system which can handle the event may do so;▫ Interrupt-driven models. Used in real-time systems where
interrupts are detected by an interrupt handler and passed to some other component for processing.
Other event driven models include spreadsheets and production systems.
![Page 58: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/58.jpg)
Baseada em Eventos
▪ Componentes interagem através da difusão (broadcast) de eventos
▪ Ação inicia com um componente que 'anuncia' um evento
▪ Evento anunciado pode disparar operações em outros componentes
(Abowd, 1995)
▪ Exemplo: Publish-Subscribe
![Page 59: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/59.jpg)
Eventos na Web
<html><head> <script type="text/javascript"> function clicado() { alert("Clicou"); } </script></head>
<body> <a href="#" onclick="clicado()"> Clique aqui</a></body></html>
![Page 60: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/60.jpg)
Estilos ArquiteturaisEstilos de Controle
Baseado em Eventos
Broadcast
![Page 61: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/61.jpg)
©Ian Sommerville 2006 Software Engineering, 8th edition. Chapter 11 Slide 61
Broadcast model
Effective in integrating sub-systems on different computers in a network.
Sub-systems register an interest in specific events. When these occur, control is transferred to the sub-system which can handle the event.
Control policy is not embedded in the event and message handler. Sub-systems decide on events of interest to them.
However, sub-systems don’t know if or when an event will be handled.
![Page 62: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/62.jpg)
©Ian Sommerville 2006 Software Engineering, 8th edition. Chapter 11 Slide 62
Selective broadcasting
Sub-system1
Event and messa ge handler
Sub-system2
Sub-system3
Sub-system4
![Page 63: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/63.jpg)
Estilos ArquiteturaisEstilos de Controle
Baseado em Eventos
Interrupção
![Page 64: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/64.jpg)
©Ian Sommerville 2006 Software Engineering, 8th edition. Chapter 11 Slide 64
Interrupt-driven systems
Used in real-time systems where fast response to an event is essential.
There are known interrupt types with a handler defined for each type.
Each type is associated with a memory location and a hardware switch causes transfer to its handler.
Allows fast response but complex to program and difficult to validate.
![Page 65: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/65.jpg)
©Ian Sommerville 2006 Software Engineering, 8th edition. Chapter 11 Slide 65
Interrupt-driven control
Handler1
Handler2
Handler3
Handler4
Process1
Process2
Process3
Process4
Interrupts
Interruptvector
![Page 66: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/66.jpg)
Pattern Prototype
![Page 67: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/67.jpg)
Pattern Prototype
operation()
Client
clone()
ConcretePrototype1
clone()
ConcretePrototype2
clone()
«interface»
Prototype
return copy of self return copy of self
Object p = prototype.clone();
«import»
Imagem de Giacomo Ritucci (http://en.wikipedia.org/wiki/File:Prototype_UML.svg)
![Page 68: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/68.jpg)
Pattern Builder
![Page 69: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/69.jpg)
Builder
(AG Communication Systems, 1999)
![Page 70: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/70.jpg)
Pattern Builder
Director<<interface>>
+Construct()
Builder<<interface>>
+BuildPart()
ConcreteBuilder
+BuildPart()+ConcreteResult()
Product
![Page 71: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/71.jpg)
Pattern BuilderLivro
BuilderLivro<<interface>>
+criaTitulo(String titulo)+criaAutor(String autor)+criaDataPublicacao(Date dataPublicacao)+encerra()
ConcreteBuilderTexto ConcreteBuilderXML
DirectorLivro
![Page 72: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/72.jpg)
Deployment DCC
Digital Artifacts(physical files)
Manifest (XML)
Metadata (OWL / XML)
Interface (XML + OWL)
Organization Structure (XML)
DCC Builder
Package Reader
RASPackage Reader
IMSPackage Reader
DCC Builder
![Page 73: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/73.jpg)
DCC Builder Model
![Page 74: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/74.jpg)
SAX
▪ Tecnologia para acesso a documentos XML▪ API baseada em eventos.▪ Se tornou a mais estável API XML largamente
utilizada [DOD01].▪ Iniciou como uma solução para acesso a
documentos XML por programas Java.▪ Hoje tem sido portada para outras linguagens
de programação, tal como: C++, Pascal, Perl, Phyton, etc.
![Page 75: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/75.jpg)
SAX - Estudo de Caso
<FICHARIO> <INDIVIDUO nome="Asdrubal da Silva"> <IDADE>15</IDADE> <SEXO>masculino</SEXO> </INDIVIDUO> <INDIVIDUO nome="Quincas Borba"> <IDADE>33</IDADE> <SEXO>masculino</SEXO> </INDIVIDUO> <INDIVIDUO nome="Doriana Margarina"> <IDADE>42</IDADE> <SEXO>feminino</SEXO> </INDIVIDUO></FICHARIO>
![Page 76: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/76.jpg)
SAX - Estudo de Caso
========== Inicio do Documento ==========Inicio de elemento: DOCUMENTO Inicio de elemento: INDIVIDUO (atributos): nome=Asdrubal da Silva; Inicio de elemento: IDADE Texto: 15 Final de elemento : IDADE Inicio de elemento: SEXO Texto: masculino Final de elemento : SEXO Final de elemento : INDIVIDUO Inicio de elemento: INDIVIDUO (atributos): nome=Quincas Borba; Inicio de elemento: IDADE Texto: 33 Final de elemento : IDADE Inicio de elemento: SEXO Texto: masculino Final de elemento : SEXO Final de elemento : INDIVIDUO
Inicio de elemento: INDIVIDUO (atributos): nome=Doriana Margarina; Inicio de elemento: IDADE Texto: 42 Final de elemento : IDADE Inicio de elemento: SEXO Texto: feminino Final de elemento : SEXO Final de elemento : INDIVIDUOFinal de elemento : DOCUMENTO========== Final do Documento ==========
![Page 77: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/77.jpg)
Instanciar o parser SAX
SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser sp = spf.newSAXParser();
▪ A classe SAXParser representa o parser SAX.
▪ SAXParserFactory – fábrica de objetos SAXParser▫ define objetos capazes de construir objetos
SAXParser
![Page 78: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/78.jpg)
Objetos que manipulam os eventos
XMLReader xr = sp.getXMLReader();
xr.setContentHandler(this);
ErroSAX es = new ErroSAX();xr.setErrorHandler(es);
▪ A própria classe (this) manipula eventos de conteúdo.
▪ Um objeto da classe ErroSAX manipula eventos de erro.
![Page 79: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/79.jpg)
Eventos de conteúdopublic class SAXBasico extends org.xml.sax.helpers.DefaultHandler{
public void startDocument() ...
public void startElement(...) ...
public void characters (...) ...
public void endElement(...) ...
public void endDocument() ...
}
![Page 80: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/80.jpg)
Eventos de conteúdo
Método Acionado quando o parser encontra
startDocument início do documento
startElement início de um elemento
characters conteúdo texto
endElement final de um elemento
endDocument final do documento
![Page 81: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/81.jpg)
Iniciar processo de rastreamento
xr.parse("file:" + nomeArquivo);
▪ O método parse dispara todo o processo de rastreamento.
▪ A partir daí o documento XML será lido, analisado e os respectivos métodos serão notificados.
![Page 82: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/82.jpg)
Referências
▪ AG Communication Systems. Examples to Accompany: Design Patterns Elements of Reusable Object-Oriented Software, 1999.
▪ Abowd, G. D., Allen, R., Garlan, D. Formalizing style to understand descriptions of software architecture. ACM Trans. Softw. Eng. Methodol., ACM Press, 1995, 4, 319-364.
▪ Alexander, Christopher; Ishikawa, Sara; Silverstein, Murray. A Pattern Language: Towns, Buildings, Construction. Oxford University Press, 1977.
▪ Krueger, C. W. Software Reuse. ACM Comput. Surv., ACM Press, 1992, 24, 131-183.
▪ Mcilroy, M. D. Naur, P. & Randell, B. (ed.) Mass Produced Software Components. Software Engineering: Report of a conference sponsored by the NATO Science Committee, 1968.
![Page 83: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/83.jpg)
Referências
▪ Mili, H.; Mili, F. & Mili, A. Reusing Software: Issues and Research Directions. IEEE Transactions on Software Engineering, 1995, 21, 528-562.
▪ Shaw, M. Abstraction Techniques in Modern Programming Languages. IEEE Software, 1984, 1, 4, 10-26.
▪ Sommerville, I. (2007) Software Engineering, 8th. ed. Addison Wesley.
![Page 84: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/84.jpg)
André Santanchèhttp://www.ic.unicamp.br/~santanche
![Page 85: Programação Orientada a Objetos s c a ssantanch/teaching/oop/... · Programação Orientada a Objetos Padrões de Projeto André Santanchè Instituto de Computação – UNICAMP](https://reader030.fdocumentos.com/reader030/viewer/2022040911/5e84f5559a6b1b4bba39879a/html5/thumbnails/85.jpg)
License▪ These slides are shared under a Creative Commons License.
Under the following conditions: Attribution, Noncommercial and Share Alike.
▪ See further details about this Creative Commons license at:http://creativecommons.org/licenses/by-nc-sa/3.0/