OOP (in portuguese)

51
OOP em PHP Bruno Pedro <[email protected] > PHP Summer School - 18 de Julho de 2007

description

Object Oriented Programming in PHP5

Transcript of OOP (in portuguese)

Page 1: OOP (in portuguese)

OOP em PHP

Bruno Pedro <[email protected]>

PHP Summer School - 18 de Julho de 2007

Page 2: OOP (in portuguese)

OOP em PHP

PHP Summer School

Conteúdo

• Conceitos de OOP

• Design Patterns

• Frameworks

• Exercícios

• Resumo

2

Page 3: OOP (in portuguese)

OOP em PHP

PHP Summer School

Classe

• Descrição de um conjunto de objectos semelhantes

• Identificador de objectos que partilham os mesmos atributos sobre os quais podem ser realizadas as mesmas operações

3

in Ramos, P., (2006).“Desenhar Bases de Dados com UML”. Edições Sílabo

Page 4: OOP (in portuguese)

OOP em PHP

PHP Summer School

Classe• Atributos comuns a um grupo de objectos

4

Porta

fonte: http://tinyurl.com/2yp9e7

altura

largura cor

tipo de fechadura

tipo de puxadorestado

Page 5: OOP (in portuguese)

OOP em PHP

PHP Summer School

Classe

5

altura

largura

cor

tipo de fechadura

tipo de puxador

estado

Porta nome da classe

atributos

• Notação UML

Page 6: OOP (in portuguese)

OOP em PHP

PHP Summer School

Atributos• Podem ser públicos, privados ou protegidos

• Podem ter valores pré-definidos

6

+altura = 200

+largura = 150

+cor = 'azul'

-tipo de fechadura

+tipo de puxador

+estado

Porta

atributo público

atributo privado

valor pré-definido

Page 7: OOP (in portuguese)

OOP em PHP

PHP Summer School

Classe em PHP

7

início descript PHP

fim descript PHP

definição da classe

atributos

Page 8: OOP (in portuguese)

OOP em PHP

PHP Summer School

Classe• Operações realizáveis por ou sobre um

grupo de objectos

8

Porta

fonte: http://tinyurl.com/2lgamj

abre

fecha

tranca

encosta

bate

destranca

Page 9: OOP (in portuguese)

OOP em PHP

PHP Summer School

Classe• Notação UML

9

nome da classe

atributos

abre()

fecha()

tranca()

destranca()

encosta()

bate()

altura

largura

cor

tipo de fechadura

tipo de puxador

estado

Porta

operações ou métodos

Page 10: OOP (in portuguese)

OOP em PHP

PHP Summer School

Métodos• Podem ser públicos, privados ou protegidos

• Podem ter parâmetros e devolver resultados

10

+abre()

+fecha()

+tranca()

-destranca(chave)

+encosta()

+bate()

altura

largura

cor

tipo de fechadura

tipo de puxador

estado

Porta

método público

método privado parâmetro

Page 11: OOP (in portuguese)

OOP em PHP

PHP Summer School

Classe em PHP

11

nome da classe

atributos

métodos

atributo privado

Page 12: OOP (in portuguese)

OOP em PHP

PHP Summer School

Classe em PHP

12

métodos

método privado

Page 13: OOP (in portuguese)

OOP em PHP

PHP Summer School

Objecto• Instanciação da classe

• Define uma entidade com características e comportamentos próprios

13

Page 14: OOP (in portuguese)

OOP em PHP

PHP Summer School

Objecto em PHP

14

definição da classe

instanciação

Page 15: OOP (in portuguese)

OOP em PHP

PHP Summer School

Constructor

15

• Método especial

• É executado quando o objecto é instanciado

constructor

Page 16: OOP (in portuguese)

OOP em PHP

PHP Summer School

Constructor (cont.)

16

parâmetrode entrada

lógica

gravaçãodo estado

instanciaçãocom parâmetro

Page 17: OOP (in portuguese)

OOP em PHP

PHP Summer School

Herança• Especialização de uma classe de objectos

17

Page 18: OOP (in portuguese)

OOP em PHP

PHP Summer School

Herança• Notação UML

18

PortaDeComboioPortaDeElevadorPortaDeCarro

Porta

Page 19: OOP (in portuguese)

OOP em PHP

PHP Summer School

Herança em PHP

19

classe base

herança

método só disponívelna classe herdada

Page 20: OOP (in portuguese)

OOP em PHP

PHP Summer School

Interface

• Não implementa métodos

• Define métodos que serão utilizados em implementações

• Obriga classes herdadas a seguirem a definição

20

Page 21: OOP (in portuguese)

OOP em PHP

PHP Summer School

Interface em PHP

21

definiçãode interface

implementação

Page 22: OOP (in portuguese)

OOP em PHP

PHP Summer School

Classe abstracta

• Não pode ser instanciada

• Serve para ser herdada por outras classes

• Contém código que poderá ser reutilizado

• Código poderá ser sobreposto pela classe herdada

22

Page 23: OOP (in portuguese)

OOP em PHP

PHP Summer School

Classe abstracta em PHP

23

definição daclasse abstracta

sobreposiçãode um método

Page 24: OOP (in portuguese)

OOP em PHP

PHP Summer School

Sobrecarga (Overloading)

• De atributos e métodos

• Executado sempre que um atributo ou método não existem

• Possibilidade de execução de código arbitrário

• Possibilidade de criar default methods

24

Page 25: OOP (in portuguese)

OOP em PHP

PHP Summer School

Sobrecarga de atributos

void __set ( string $name, mixed $value )

mixed __get ( string $name )

bool __isset ( string $name )

void __unset ( string $name )

25

Page 26: OOP (in portuguese)

OOP em PHP

PHP Summer School

Sobrecarga de atributos

26

array de atributos

métodos desobrecarga

código de teste

Page 27: OOP (in portuguese)

OOP em PHP

PHP Summer School

Sobrecarga de métodosmixed __call ( string $name, array $arguments )

27

método desobrecarga

código de teste

Page 28: OOP (in portuguese)

OOP em PHP

PHP Summer School

Associação

• Associa vários objectos

• Permite referenciar objectos a partir de outros

28

FechaduraPorta

Page 29: OOP (in portuguese)

OOP em PHP

PHP Summer School

Associação em PHP

29

classe a serassociada

associação

Page 30: OOP (in portuguese)

OOP em PHP

PHP Summer School

Iteração

• Percorre todos os atributos públicos de um objecto

• Utiliza statements básicos de PHP

• Permite alterar o comportamento da iteração através do Interface Iterator

30

Page 31: OOP (in portuguese)

OOP em PHP

PHP Summer School

Iteração em PHP

31

atributos

escreve nomee valor dos

atributos públicos

Page 32: OOP (in portuguese)

OOP em PHP

PHP Summer School

Design Patterns

• Singleton

• Factory Method

32

Page 33: OOP (in portuguese)

OOP em PHP

PHP Summer School

Singleton

• Garante que só existe uma única instância de uma classe

• A instanciação faz-se de um modo diferente

• O objecto instanciado tem todas as características de um objecto normal

33

Page 34: OOP (in portuguese)

OOP em PHP

PHP Summer School

Singleton

34

...

-__construct()

+getInstance() : Porta

...

-instance = null

Porta

atributo estáticoque guardará o objecto

o constructor é privado

devolve sempre a mesmainstância do objecto

Page 35: OOP (in portuguese)

OOP em PHP

PHP Summer School

Singleton

35

atributo estáticoque guardará o objecto

o constructor é privado

devolve sempre a mesmainstância do objecto

Page 36: OOP (in portuguese)

OOP em PHP

PHP Summer School

Factory Method

• Gere a instanciação de objectos

• O programador não precisa saber qual a classe que deve instanciar

• Produz objectos de acordo com parâmetros de entrada

36

Page 37: OOP (in portuguese)

OOP em PHP

PHP Summer School

Factory Method• Notação UML

37

devolveinstância de

uma das classes

PortaDeCasa

PortaDeElevador

PortaDeComboio

+factory()

Porta

Page 38: OOP (in portuguese)

OOP em PHP

PHP Summer School

Factory Method

38

verifica se a classeexiste e devolveuma instância

Page 39: OOP (in portuguese)

OOP em PHP

PHP Summer School

Frameworks

39

• Conjuntos de classes

• Oferecem funcionalidades importantes

• autenticação

• acesso a bases de dados

• cache

• Implementam Design Patterns

Page 40: OOP (in portuguese)

OOP em PHP

PHP Summer School

Frameworks• PEAR - http://pear.php.net/

• Zend Framework - http://framework.zend.com/

• Symfony - http://www.symfony-project.com/

• CakePHP - http://www.cakephp.org/

40

Page 41: OOP (in portuguese)

OOP em PHP

PHP Summer School

Exercício 1

• Implementação de uma Calculadora

• operações aceitam 2 operandos: (x,y)

• últimos valores (x,y) são guardados em memória

• últimos valores podem ser obtidos através de método específico

41

Page 42: OOP (in portuguese)

OOP em PHP

PHP Summer School

UML

42

+soma(x, y)

+multiplica(x, y)

+ultimosValores()

-x

-y

Calculadora

últimos valores utilizados

operações

obtenção dosúltimos valores

Page 43: OOP (in portuguese)

OOP em PHP

PHP Summer School

Implementação

43

Page 44: OOP (in portuguese)

OOP em PHP

PHP Summer School

Exercício 2

• Estender a Calculadora

• permitir N operações

• iniciar a calculadora indicando quais as operações pretendidas

44

Page 45: OOP (in portuguese)

OOP em PHP

PHP Summer School

UML

45

+gravaValores(x, y)

+ultimosValores()

-x

-y

Calculadora

+calcula(x, y)

<<interface>>

Operacao

+calcula(x, y)

Soma

+calcula(x, y)

Multiplicacao

0..1*

Page 46: OOP (in portuguese)

OOP em PHP

PHP Summer School

Implementação

46

interface

implementação deduas operações

Page 47: OOP (in portuguese)

OOP em PHP

PHP Summer School

Implementação

47

associação a Noperações

instanciação dasoperações

instanciação dacalculadora

(...)

Page 48: OOP (in portuguese)

OOP em PHP

PHP Summer School

Implementação

48

sobrecarga de métodos

invocação da operaçãopretendida

Page 49: OOP (in portuguese)

OOP em PHP

PHP Summer School

Resumo

• Classe e Objecto

• Atributos e Métodos

• Herança, interface e classe abstracta

• Sobrecarga, associação e iteração

• Singleton e Factory Method

49

Page 50: OOP (in portuguese)

OOP em PHP

PHP Summer School

Questões?

50

Page 51: OOP (in portuguese)

OOP em PHP

PHP Summer School

Mais informação

51

• O meu blog: http://unfoldingtheweb.com/

• PHP Manual: http://www.php.net/

• UML: http://tinyurl.com/yohpad

• Gamma, E., (1995). Design Patterns. Boston: Addison-Wesley.