SlideShare una empresa de Scribd logo
1 de 40
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
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
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
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
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.
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.
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
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
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”;
?>
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.
Diagramação UML – Diagrama de Classes
Diagramação UML – Diagrama de Classes (2)
Diagramação UML – Diagrama de Classes (3)
Diagramação UML – Diagrama de Classes (4)
Diagramação UML – Diagrama de Classes (5)
Diagramação UML – Diagrama de Classes (6)
Diagramação UML – Diagrama de Classes (7)
Diagramação UML – Diagrama de Classes (8)
Diagramação UML – Diagrama de Classes (9)
Diagramação UML – Diagrama de Classes (10)
Diagramação UML – Diagrama de Classes (11)
Mapeamento Objeto-Relacional
Mapeamento Objeto-Relacional (1)
Criação dos ids com
nomes intuitivos.
Cada id vira um atributo
da classe.
Mapeamento Objeto-Relacional (2)
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.
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.
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.
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(?).
Types do Sagu – Desvantagens


Can't think of any! ;-)
Construtor
Método de carga do objeto
Método de busca

Iterações
perigosas.

Problemas de
performance
Busca específica para grid
Métodos de
busca ficam
na classe por
conveniência.
Método único para salvar
Usuário da classe não
precisa se preocupar se
está inserindo um novo
registro ou atualizando um
registro existente.
Método privado para inserção
Método privado para atualização
Métodos auxiliares
Problemas comuns


Performance






Problema dos processos seletivos do cliente
FAMETRO.
Já contornado com a carga sob demanda.

Regras de negócio fora da classe


Vem sendo trabalhado.
Referências


Manual do PHP




http://www.php.net/manual/pt_BR/language.oop5.php

Projeto Sagu


http://www.solis.coop.br/sagu
Fim!
Obrigado!
Alexandre Heitor Schmidt
Solis – 2011
alexsmith@solis.coop.br
alexandre.schmidt@gmail.com

Más contenido relacionado

La actualidad más candente

Curso : Introdução Orientação a Objetos
Curso : Introdução Orientação a ObjetosCurso : Introdução Orientação a Objetos
Curso : Introdução Orientação a Objetosdanielrpgj30
 
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...Manuel Menezes de Sequeira
 
TDC2018SP | Trilha UX - Agucando o olfato, como identificar code smells?
TDC2018SP | Trilha UX - Agucando o olfato, como identificar code smells?TDC2018SP | Trilha UX - Agucando o olfato, como identificar code smells?
TDC2018SP | Trilha UX - Agucando o olfato, como identificar code smells?tdc-globalcode
 
4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de ProgramaçãoManuel Menezes de Sequeira
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Adriano Teixeira de Souza
 
O paradigma da orientação a objetos
O paradigma da orientação a objetosO paradigma da orientação a objetos
O paradigma da orientação a objetosNécio de Lima Veras
 
Programação Orientada A Objectos (Poo)
Programação Orientada A Objectos (Poo)Programação Orientada A Objectos (Poo)
Programação Orientada A Objectos (Poo)guest18b3c00
 
Engenharia de Software II - Atividade: Diagramas da UML
Engenharia de Software II - Atividade: Diagramas da UMLEngenharia de Software II - Atividade: Diagramas da UML
Engenharia de Software II - Atividade: Diagramas da UMLAlessandro Almeida
 
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...Manuel Menezes de Sequeira
 
Conceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosConceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosLeonardo Melo Santos
 
Introdução a C# 4.0 (Revisão)
Introdução a C# 4.0 (Revisão)Introdução a C# 4.0 (Revisão)
Introdução a C# 4.0 (Revisão)Waldyr Felix
 

La actualidad más candente (20)

Padrões de design orientado a objetos
Padrões de design orientado a objetosPadrões de design orientado a objetos
Padrões de design orientado a objetos
 
Diagrama classes
Diagrama classesDiagrama classes
Diagrama classes
 
Curso : Introdução Orientação a Objetos
Curso : Introdução Orientação a ObjetosCurso : Introdução Orientação a Objetos
Curso : Introdução Orientação a Objetos
 
Aula orientação a objetos
Aula orientação a objetosAula orientação a objetos
Aula orientação a objetos
 
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
 
Programação Orientado a Objetos
Programação Orientado a ObjetosProgramação Orientado a Objetos
Programação Orientado a Objetos
 
Modelo caso uso
Modelo caso usoModelo caso uso
Modelo caso uso
 
TDC2018SP | Trilha UX - Agucando o olfato, como identificar code smells?
TDC2018SP | Trilha UX - Agucando o olfato, como identificar code smells?TDC2018SP | Trilha UX - Agucando o olfato, como identificar code smells?
TDC2018SP | Trilha UX - Agucando o olfato, como identificar code smells?
 
4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação
 
Aula 7 pc - estrutura
Aula 7   pc - estruturaAula 7   pc - estrutura
Aula 7 pc - estrutura
 
Orientação a objetos (tecnologias)
Orientação a objetos (tecnologias)Orientação a objetos (tecnologias)
Orientação a objetos (tecnologias)
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
 
Aula diagrama de classes
Aula diagrama de classesAula diagrama de classes
Aula diagrama de classes
 
O paradigma da orientação a objetos
O paradigma da orientação a objetosO paradigma da orientação a objetos
O paradigma da orientação a objetos
 
Programação Orientada A Objectos (Poo)
Programação Orientada A Objectos (Poo)Programação Orientada A Objectos (Poo)
Programação Orientada A Objectos (Poo)
 
Engenharia de Software II - Atividade: Diagramas da UML
Engenharia de Software II - Atividade: Diagramas da UMLEngenharia de Software II - Atividade: Diagramas da UML
Engenharia de Software II - Atividade: Diagramas da UML
 
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
 
Conceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosConceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetos
 
SCJA
SCJASCJA
SCJA
 
Introdução a C# 4.0 (Revisão)
Introdução a C# 4.0 (Revisão)Introdução a C# 4.0 (Revisão)
Introdução a C# 4.0 (Revisão)
 

Similar a Orientação a Objetos e Sagu

Apresentação versão 1.5
Apresentação   versão 1.5Apresentação   versão 1.5
Apresentação versão 1.5oliveiraprog
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 
Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1Marcelo Zeferino
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projetoejdn1
 
Revisão 1º bimestre - Casos de Usos e Classes
Revisão 1º bimestre - Casos de Usos e ClassesRevisão 1º bimestre - Casos de Usos e Classes
Revisão 1º bimestre - Casos de Usos e ClassesMaria Alice Jovinski
 
Umlv4 090813182632-phpapp02
Umlv4 090813182632-phpapp02Umlv4 090813182632-phpapp02
Umlv4 090813182632-phpapp02Jhonefj
 
Php Conf08 Refactoring
Php Conf08 RefactoringPhp Conf08 Refactoring
Php Conf08 RefactoringWildtech
 
pec-12-patterns-intro.ppt
pec-12-patterns-intro.pptpec-12-patterns-intro.ppt
pec-12-patterns-intro.pptssuser7025cf
 
Curso de java - Antonio Alves - aula 04
Curso de java - Antonio Alves -  aula 04Curso de java - Antonio Alves -  aula 04
Curso de java - Antonio Alves - aula 04Antonio Alves
 
Padrões de projeto - Martin Fowler - P of EAA
Padrões de projeto - Martin Fowler - P of EAAPadrões de projeto - Martin Fowler - P of EAA
Padrões de projeto - Martin Fowler - P of EAAAricelio Souza
 
Aula 1 - Linguagem III
Aula 1 - Linguagem IIIAula 1 - Linguagem III
Aula 1 - Linguagem IIIJuliano Weber
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaFernando Camargo
 
Apostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a ParteApostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a ParteIlton Barbosa
 

Similar a Orientação a Objetos e Sagu (20)

Apresentação versão 1.5
Apresentação   versão 1.5Apresentação   versão 1.5
Apresentação versão 1.5
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Artigo c#
Artigo c#Artigo c#
Artigo c#
 
Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projeto
 
Revisão 1º bimestre - Casos de Usos e Classes
Revisão 1º bimestre - Casos de Usos e ClassesRevisão 1º bimestre - Casos de Usos e Classes
Revisão 1º bimestre - Casos de Usos e Classes
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Umlv4 090813182632-phpapp02
Umlv4 090813182632-phpapp02Umlv4 090813182632-phpapp02
Umlv4 090813182632-phpapp02
 
Php Conf08 Refactoring
Php Conf08 RefactoringPhp Conf08 Refactoring
Php Conf08 Refactoring
 
pec-12-patterns-intro.ppt
pec-12-patterns-intro.pptpec-12-patterns-intro.ppt
pec-12-patterns-intro.ppt
 
Java7
Java7Java7
Java7
 
JAVA REFLETCION
JAVA REFLETCIONJAVA REFLETCION
JAVA REFLETCION
 
Poo padadigmas
Poo padadigmasPoo padadigmas
Poo padadigmas
 
Curso de java - Antonio Alves - aula 04
Curso de java - Antonio Alves -  aula 04Curso de java - Antonio Alves -  aula 04
Curso de java - Antonio Alves - aula 04
 
Padrões de projeto - Martin Fowler - P of EAA
Padrões de projeto - Martin Fowler - P of EAAPadrões de projeto - Martin Fowler - P of EAA
Padrões de projeto - Martin Fowler - P of EAA
 
Aula 1 - Linguagem III
Aula 1 - Linguagem IIIAula 1 - Linguagem III
Aula 1 - Linguagem III
 
Aula01-IntroducaoOO.pptx
Aula01-IntroducaoOO.pptxAula01-IntroducaoOO.pptx
Aula01-IntroducaoOO.pptx
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em Java
 
UMLIntro.pptx
UMLIntro.pptxUMLIntro.pptx
UMLIntro.pptx
 
Apostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a ParteApostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a Parte
 

Orientação a Objetos e Sagu

  • 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.
  • 11. Diagramação UML – Diagrama de Classes
  • 12. Diagramação UML – Diagrama de Classes (2)
  • 13. Diagramação UML – Diagrama de Classes (3)
  • 14. Diagramação UML – Diagrama de Classes (4)
  • 15. Diagramação UML – Diagrama de Classes (5)
  • 16. Diagramação UML – Diagrama de Classes (6)
  • 17. Diagramação UML – Diagrama de Classes (7)
  • 18. Diagramação UML – Diagrama de Classes (8)
  • 19. Diagramação UML – Diagrama de Classes (9)
  • 20. Diagramação UML – Diagrama de Classes (10)
  • 21. Diagramação UML – Diagrama de Classes (11)
  • 23. Mapeamento Objeto-Relacional (1) Criação dos ids com nomes intuitivos. Cada id vira um atributo da classe.
  • 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! ;-)
  • 31. Método de carga do objeto
  • 33. Busca específica para grid Métodos de busca ficam na classe por conveniência.
  • 34. Método único para salvar Usuário da classe não precisa se preocupar se está inserindo um novo registro ou atualizando um registro existente.
  • 35. Método privado para inserção
  • 36. Método privado para atualização
  • 38. Problemas comuns  Performance    Problema dos processos seletivos do cliente FAMETRO. Já contornado com a carga sob demanda. Regras de negócio fora da classe  Vem sendo trabalhado.
  • 40. Fim! Obrigado! Alexandre Heitor Schmidt Solis – 2011 alexsmith@solis.coop.br alexandre.schmidt@gmail.com