Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners)...

30
Programação Orientada a Objetos Interfaces Gráficas André Santanchè Instituto de Computação – UNICAMP Maio 2015 Picture by Asbestos [http://commons.wikimedia.org/wiki/File:MokaCoffeePot.svg]

Transcript of Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners)...

Page 1: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

Programação Orientada a Objetos

Interfaces Gráficas

André SantanchèInstituto de Computação – UNICAMP

Maio 2015

Pic

ture

by

Asb

esto

s [h

ttp

://c

om

mo

ns.

wik

imed

ia.o

rg/w

iki/F

ile:M

oka

Co

ffee

Po

t.sv

g]

Page 2: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

Interfaces Gráficas

Page 3: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

AWT

▪ Abstract Window Toolkit (AWT)

▫ biblioteca de classes do Java

▫ responsável pela elaboração da Interface Gráfica

▪ Lowest-common Denominator (LCD)

▫ componentes visuais compartilhados por todas as plataformas

▪ GUI peer controls

▫ cada componente tem um par na interface nativa

Page 4: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

JFC e Swing

▪ Java Foundation Classes (JFC)

▫ biblioteca de classes lançada em 1997

▫ superconjunto da AWT

▪ Componentes Swing

▫ parte da JFC

▫ estende a AWT com mais recursos para GUI

▫ não há peer controls

Page 5: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

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 6: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

Eventos e Pattern Observer

Page 7: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

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 8: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

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 9: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

Pattern Observer

Page 10: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

Eventos

Pattern Observer

Subject

+Attach(Observer)+Detach(Observer)+Notify()

ConcreteSubject ConcreteObserver

Observer<<interface>>

+Update()

Page 11: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

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 12: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

Eventos

Pattern Observer

Subject

+Attach(Observer)+Detach(Observer)+Notify()

ConcreteSubject ConcreteObserver

Observer<<interface>>

+Update()

Page 13: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

Eventos

Padrão Listener

XyzListener<<interface>>

+update(XyzEvent)

EventListener

ConcreteXyzListener

Subject<<interface>>

+addXyzListener(XyzListener)+removeXyzListener(XyzListener)

ConcreteSubject

+fireXyzEvent()

Event

XyzEvent

Page 14: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

Exemplo do Peixe

Page 15: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

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 16: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

Estilos Arquiteturais

Page 17: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

Estilos Arquiteturais

Model-View-Controller (MVC)

Page 18: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

Model-View-Controller

▪ Observações no contexto do Smalltalk demonstraram as vantagens de dividir uma aplicação em três partes:

▫ modelo subjacente do domínio da aplicação

▫ forma como o modelo é apresentado ao usuário

▫ forma como o usuário interage com o modelo

(Krasner, 1988)

Page 19: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

MVCModel-View-Controller

▪ Estilo arquitetural cujos componentes são divididos em três grupos:

▫ Model: modelo subjacente da aplicação◦ representada como estruturas de dados ou de classes

▫ View: lida com a parte de apresentação visual (gráfica)

▫ Controller: interface entre Model e View e com os dispositivos de entrada

Page 20: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

Model-View-Controller

(?)

Page 21: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

Model-View-Controller

(Krasner, 1988)

Page 22: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

MVC

J2EE MVC

(?)

Page 23: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

MVC

Apache Struts

(?)

Page 24: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

Arquiteturana

Prática

Page 25: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

Openbravo

Arquitetura

Page 26: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

Openbravo

Arquitetura

Page 27: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

Openbravo

Arquitetura

Page 28: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

Referências

▪ Krasner, G., Pope, S. A Description of the Model-View-Controller User Interface Paradigm in the Smalltalk-80 system. Journal of Object Oriented Programming, 1988, 1, 26-49.

Page 29: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

André Santanchèhttp://www.ic.unicamp.br/~santanche

Page 30: Programação Orientada a Objetos · Componentes Swing ... Registros de observadores (listeners) são ... +Notify() ConcreteSubject ConcreteObserver Observer

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/