SlideShare une entreprise Scribd logo
1  sur  57
Definir classe não é programar com
        orientação a objetos!




                          Hélio Costa e Silva (@hlegius)
Oh oh! Eu já sei o que é!
“Getters” e “Setters” burros
$ make clean
Software aos pedaços

           UI




 DB   necessidade   APIs




        Recursos
        externos
Para pensar em orientação a objetos,
 esqueça tudo que não faz parte da
necessidade de negócio do software!
Oh oh! Eu já sei o que é!




• Criar usuário;
• Adicionar endereço ao usuário;
• Adicionar telefone, contato ao usuário;
•…


  Dados + comportamento
Como invalidar um objeto
Trecho de um escopo qualquer

     “Produto precisará ter nome e custo. Descrição e imagens
     serão úteis também!”
Como invalidar um objeto
Trecho de um escopo qualquer

     “Produto precisará ter nome e preço. Descrição e imagens
     serão úteis também!”
Consigo criar um objeto sem
   os itens obrigatórios !
O objeto entrou em estado inválido!
Como NÃO invalidar um objeto
Trecho de um escopo qualquer
     “Produto precisará ter nome e preço. Descrição e imagens
     serão úteis também!”
Ciclo de vida de um objeto

                Nasce



  Morre                           Consulta

                        n vezes




     Consulta              Altera
Criando um objeto
Consultar um objeto
O objeto é pego em uma coleção!
O objeto é pego em uma coleção!
                       Esqueça linha
Esqueça coluna




O objeto é pego em uma coleção!
                       Esqueça linha
Não importa aonde ele foi salvo!
Alterar um objeto
Deletar um objeto




unset(), garbage collector, …
E quando eu modifico no meio de
         persistência ?
A persistência é um necessidade de
           infraestrutura
Horas depois…
Separation of Concerns
                              (SoC)


Edsger W. Dijkstra
  (1930-2002)
Negócio - domínio   Pivô – Domínio <-> Infraestrutura




                       Separando interesses
Objeto em sociedade
Cada tipo de objeto tem seus limites
        e responsabilidades!
Entidade
Entidade é o objeto que possui
   atributos que o permita ser
individualizado em seu domínio
Factory code: 1206af38c27




                            Factory code: a64c1d3913
Ciclo de vida dos objetos

              Nasce                                Nasce



Morre                     Consulta   Morre                        Consulta




   Consulta           Altera            Consulta              Altera



        Product                                    Category
Eles estabeleceram uma relação de
            agregação!
Value Object
Value Object
            !=
Data Transfer Object (DTO)
Single Responsibility Principle
            (SRP)




                                  Robert C. Martin (@unclebob)
Cada parte deve ter SOMENTE uma
        responsabilidade!
Por que não um:




      ?
Pois trata-se de uma composição!
ShoppingCart                 Category



                   Product
               X

                    Image
Ciclo de vida dos objetos
                 Nasce


   Morre                      Consulta
                 Image




      Consulta             Altera

                 Product
O ciclo de vida de Image depende de
               Product!
Road to hell




Google it: S.O.L.I.D design principles
Evitar as más práticas!
OH NOES!




Google it: c2.com God Class
Foco em orientação a objetos NÃO
       em design patterns
Composite
   Strategy                 Decorator
                                                               Adapter
                                        Observer
Service Layer
                                                                         Repository
                                               Template View
       Unit of Work

                            Type Object                                  Active Record


 Mediator                   Front Controller                      Query Object


                                               Plugin                    Selfish Class
              Null Object
                                                        Chain of Responsibility
                            Abstract Factory
Data Mapper
http://github.com/hlegius

                                                http://programe.me

                                                hlegius@gmail.com

                                                         @hlegius

jobs@vexcorp.com
 Programador PHP



                   Slides http://slideshare.net/hlegius/
                         Avalie http://joind.in/4454




                                                         Obrigado!

Contenu connexe

Similaire à Definir classe não é programar com orientação a objetos

Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonIgor Sobreira
 
Domain Driven Design com Python
Domain Driven Design com PythonDomain Driven Design com Python
Domain Driven Design com PythonFrederico Cabral
 
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven DesignAndré Borgonovo
 
Implementando enterprise patterns com PHP
Implementando enterprise patterns com PHPImplementando enterprise patterns com PHP
Implementando enterprise patterns com PHPPablo Dall'Oglio
 
Aula1 - Modelagem de Sistemas Orientada a Objetos
Aula1 - Modelagem de Sistemas Orientada a ObjetosAula1 - Modelagem de Sistemas Orientada a Objetos
Aula1 - Modelagem de Sistemas Orientada a ObjetosLeandro Rezende
 
Conceitos de Orientação A Objeto
Conceitos de Orientação A ObjetoConceitos de Orientação A Objeto
Conceitos de Orientação A ObjetoLuciano Almeida
 
Entity Framework 4
Entity Framework 4Entity Framework 4
Entity Framework 4CDS
 
Protótipos Mobile na Prática
Protótipos Mobile na PráticaProtótipos Mobile na Prática
Protótipos Mobile na PráticaMergo
 
Analise e projetos orientados a objetos
Analise e projetos orientados a objetosAnalise e projetos orientados a objetos
Analise e projetos orientados a objetosSliedesharessbarbosa
 
Sitemap: A Beleza da Informação Organizada
Sitemap: A Beleza da Informação OrganizadaSitemap: A Beleza da Informação Organizada
Sitemap: A Beleza da Informação OrganizadaAlexandre Horbach
 
Banco de dados orientados a objetos
Banco de dados orientados a objetos Banco de dados orientados a objetos
Banco de dados orientados a objetos Raquel Machado
 

Similaire à Definir classe não é programar com orientação a objetos (20)

Treinamento DDD .Net
Treinamento DDD .NetTreinamento DDD .Net
Treinamento DDD .Net
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com Python
 
Domain Driven Design com Python
Domain Driven Design com PythonDomain Driven Design com Python
Domain Driven Design com Python
 
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven Design
 
Web components
Web componentsWeb components
Web components
 
Implementando enterprise patterns com PHP
Implementando enterprise patterns com PHPImplementando enterprise patterns com PHP
Implementando enterprise patterns com PHP
 
Aula1 - Modelagem de Sistemas Orientada a Objetos
Aula1 - Modelagem de Sistemas Orientada a ObjetosAula1 - Modelagem de Sistemas Orientada a Objetos
Aula1 - Modelagem de Sistemas Orientada a Objetos
 
Padrões de projeto
Padrões de projetoPadrões de projeto
Padrões de projeto
 
Conceitos de Orientação A Objeto
Conceitos de Orientação A ObjetoConceitos de Orientação A Objeto
Conceitos de Orientação A Objeto
 
Entity Framework 4
Entity Framework 4Entity Framework 4
Entity Framework 4
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
Aula01-IntroducaoOO.pptx
Aula01-IntroducaoOO.pptxAula01-IntroducaoOO.pptx
Aula01-IntroducaoOO.pptx
 
Protótipos Mobile na Prática
Protótipos Mobile na PráticaProtótipos Mobile na Prática
Protótipos Mobile na Prática
 
Analise e projetos orientados a objetos
Analise e projetos orientados a objetosAnalise e projetos orientados a objetos
Analise e projetos orientados a objetos
 
Sitemap: A Beleza da Informação Organizada
Sitemap: A Beleza da Informação OrganizadaSitemap: A Beleza da Informação Organizada
Sitemap: A Beleza da Informação Organizada
 
Introdução a: Frameworks front end web
Introdução a: Frameworks front end webIntrodução a: Frameworks front end web
Introdução a: Frameworks front end web
 
Banco de dados orientados a objetos
Banco de dados orientados a objetos Banco de dados orientados a objetos
Banco de dados orientados a objetos
 
Artoolkit
ArtoolkitArtoolkit
Artoolkit
 
Suporte à Programação Orientada a Objetos
Suporte à Programação Orientada a ObjetosSuporte à Programação Orientada a Objetos
Suporte à Programação Orientada a Objetos
 
Orientação a Objetos (1)
Orientação a Objetos (1)Orientação a Objetos (1)
Orientação a Objetos (1)
 

Plus de Hélio Costa e Silva

Annotation Sniffer Hotspots implementation
Annotation Sniffer Hotspots implementationAnnotation Sniffer Hotspots implementation
Annotation Sniffer Hotspots implementationHélio Costa e Silva
 
Lightning talk - Framework Architecture: Hotspots
Lightning talk  -  Framework Architecture: HotspotsLightning talk  -  Framework Architecture: Hotspots
Lightning talk - Framework Architecture: HotspotsHélio Costa e Silva
 
WebVibe Barueri 2011 - "PHP por quê ?"
WebVibe Barueri 2011 - "PHP por quê ?"WebVibe Barueri 2011 - "PHP por quê ?"
WebVibe Barueri 2011 - "PHP por quê ?"Hélio Costa e Silva
 
Test-Driven Development - Introdução
Test-Driven Development - IntroduçãoTest-Driven Development - Introdução
Test-Driven Development - IntroduçãoHélio Costa e Silva
 

Plus de Hélio Costa e Silva (6)

Annotation Sniffer Hotspots implementation
Annotation Sniffer Hotspots implementationAnnotation Sniffer Hotspots implementation
Annotation Sniffer Hotspots implementation
 
Chain of Responsibility Pattern
Chain of Responsibility PatternChain of Responsibility Pattern
Chain of Responsibility Pattern
 
Lightning talk - Framework Architecture: Hotspots
Lightning talk  -  Framework Architecture: HotspotsLightning talk  -  Framework Architecture: Hotspots
Lightning talk - Framework Architecture: Hotspots
 
Vex 2009-2011
Vex 2009-2011Vex 2009-2011
Vex 2009-2011
 
WebVibe Barueri 2011 - "PHP por quê ?"
WebVibe Barueri 2011 - "PHP por quê ?"WebVibe Barueri 2011 - "PHP por quê ?"
WebVibe Barueri 2011 - "PHP por quê ?"
 
Test-Driven Development - Introdução
Test-Driven Development - IntroduçãoTest-Driven Development - Introdução
Test-Driven Development - Introdução
 

Dernier

ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 

Dernier (6)

ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 

Definir classe não é programar com orientação a objetos