1. Workshop Orientação a Objetos
Conceitos básicos
e
Exemplo de aplicação no
projeto Sagu
Alexandre Heitor Schmidt
Solis – Cooperativa de Soluções Livres – 2011
2. Sumário
Conceitos básicos de orientação a objetos
Métodos mágicos em PHP
Comparação entre classes em PHP
Convenções da Solis
Diagramação UML – Diagrama de classes
Mapeamento Objeto-Relacional (ORM)
Types do Sagu
3. Conceitos básicos
Classe vs. Objeto
Classe é a declaração.
Objeto é a instância.
Visibilidade (public/private/protected)
Para atributos, ”var” = ”public”
Para métodos, ”” = ”public”
Classes e métodos abstratos
Podem possuir implementação ou não
Podem ser sobrescritos
Classes abstratas não podem ser instanciadas
Exemplo: sab
4. Conceitos básicos (2)
Constantes
Úteis para configuração da classe
Campos que podem assumir um domínio
específico de valores.
Minimizam uso de hard-code.
Construtores
Declaração
public function MinhaClasse
public function __construct
5. Conceitos básicos (3)
Construtores
Executam quando uma classe é instanciada
Destrutores
Declaração
public function __destruct()
Executam quando não há mais referências à
instância.
Chamadas a exit() também executam
destrutores.
6. Conceitos básicos (4)
Herança
class MinhaClasse extends OutraClasse
Diferença entre private e protected
Forma como o Miolo explora herança
Chamada de métodos da classe filha a partir da
classe pai
$this->createFields() no MForm chama método
createFields() do formulário que estende o
MForm.
7. Conceitos básicos (5)
Métodos estáticos e não estáticos
Estáticos
Não estáticos
Não existe $this->. Usa-se ”self::”
Útil para bibliotecas de funções, ajax, sessão...
Exemplo: SAGU::getParameter()
Uso de parent:: para chamar o método estático
da classe pai.
Uso como objeto normal, com atributos, $this,
etc.
Classes podem ter métodos estáticos e não
estáticos.
MSubdetail
8. Métodos mágicos em PHP
Principais para nossa realidade
Construtores/destrutores
Getters e Setters
void __construct ([ mixed $args [, $... ]] )
void __destruct ( void )
void __set ( string $name , mixed $value )
mixed __get ( string $name )
Quebra do conceito de visibilidade.
Referência completa
http://www.php.net/manual/en/language.oop5.magic.php
9. Comparação entre classes em PHP
Operador ”==”
TRUE quando os valores dos atributos são iguais.
Nota: '01' = 1
Operador ”===”
TRUE quando os dois operandos se referem a uma
mesma instância.
Exemplo:
<?php
class MinhaClasse {}
$x = new MinhaClasse();
$y = new MinhaClasse();
echo 'x e y são ' . (($x === $y) ? 'iguais' : 'diferentes') . ”n”;
?>
10. Convenções da Solis
Coding standards
Cada classe em um arquivo
Arquivo deve conter apenas a definição da classe,
sem mais funções ou outras declarações.
25. Mapeamento Objeto-Relacional (3)
Alguns ajustes geralmente são necessários
para que o ER corresponda ao diagrama de
classes da forma como o analista deseja.
Campos ”not null”, tamanho de campos varchar,
chaves estrangeiras simples e compostas, etc.
26. Types do Sagu – Histórico
Arquivo types.class
Apenas declaravam classes com atributos,
geralmente sem métodos.
Concentravam várias classes num único arquivo.
Utilização precária dos conceitos de OO.
Diretório db (business) do Miolo
Classes viraram repositórios de funções.
Regras de negócio ficavam parte na classe, parte
no próprio formulário.
27. Types do Sagu – Histórico (2)
SDatabase
SForm e derivados
Facilitou a utilização de transações.
Facilitou a criação de interfaces.
SType
Facilitou a comunicação da aplicação com o BD.
28. Types do Sagu – Vantagens
Facilidade de uso
Diminuição da necessidade de repetição de código
Programação em camadas
Encapsulamento da comunicação com o BD
Isolamento as regras de negócio
Reutilização de código
Programação orientada a objetos*
* Métodos mágicos e iterações em objetos para
extração de valores ferem de certa forma o
conceito, mas oferecem produtividade(?).
29. Types do Sagu – Desvantagens
Can't think of any! ;-)