SlideShare uma empresa Scribd logo
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
Definir classe não é programar com orientação a objetos
Horas depois…
Definir classe não é programar com orientação a objetos
Separation of Concerns
                              (SoC)


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




                       Separando interesses
Objeto em sociedade
Definir classe não é programar com orientação a objetos
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
Definir classe não é programar com orientação a objetos
Factory code: 1206af38c27




                            Factory code: a64c1d3913
Definir classe não é programar com orientação a objetos
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)
Definir classe não é programar com orientação a objetos
Definir classe não é programar com orientação a objetos
Single Responsibility Principle
            (SRP)




                                  Robert C. Martin (@unclebob)
Cada parte deve ter SOMENTE uma
        responsabilidade!
Definir classe não é programar com orientação a objetos
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!
Definir classe não é programar com orientação a objetos
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!

Mais conteúdo relacionado

PPTX
Framework Entities - Apresentação da Defesa da Dissertacao
PPTX
Domain-Driven Design
PDF
DDD agile rio
PPT
DDD > Experiências
PDF
DCI com PHP
PDF
Qualificação MACC- Entities
PDF
MVC já era! O negócio é DCI!
PPTX
Domain-Driven Design
Framework Entities - Apresentação da Defesa da Dissertacao
Domain-Driven Design
DDD agile rio
DDD > Experiências
DCI com PHP
Qualificação MACC- Entities
MVC já era! O negócio é DCI!
Domain-Driven Design

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

PDF
Design Pattern for Data Source
ODP
Arquitetura web para sistemas de negócio
PDF
Análise de sistemas oo 1
PDF
Design patterns
PPTX
Dev rioclaro gerenciando o ciclo de vida das suas aplicações em larga escal
PDF
Artigo c#
PPTX
PPTX
Arquitetura mix thiagoboufleuhr
PDF
Orientacao a Objetos
PDF
Curso de OO com C# - Parte 01 - Orientação a objetos
PPTX
Aprensentacao oo-trincheiras
PPTX
Aula 8 - DDD - Domain Driven Design.pptx
PDF
Clean Code
PPTX
Análise Orientada a Objetos - resumo.pptx
PPTX
Introdução ao Domain-Driven Design
PDF
It skills para rh aprender e contratar
PDF
Domain-Driven-Design
PDF
Domain-Driven-Design
PPTX
Webcast MSDN - Enterprise Library
PPTX
Extreme 360 Arquitetura para Aplicações Delphi Spring4D - OOP e RAD
Design Pattern for Data Source
Arquitetura web para sistemas de negócio
Análise de sistemas oo 1
Design patterns
Dev rioclaro gerenciando o ciclo de vida das suas aplicações em larga escal
Artigo c#
Arquitetura mix thiagoboufleuhr
Orientacao a Objetos
Curso de OO com C# - Parte 01 - Orientação a objetos
Aprensentacao oo-trincheiras
Aula 8 - DDD - Domain Driven Design.pptx
Clean Code
Análise Orientada a Objetos - resumo.pptx
Introdução ao Domain-Driven Design
It skills para rh aprender e contratar
Domain-Driven-Design
Domain-Driven-Design
Webcast MSDN - Enterprise Library
Extreme 360 Arquitetura para Aplicações Delphi Spring4D - OOP e RAD
Anúncio

Mais de Hélio Costa e Silva (6)

PPTX
Annotation Sniffer Hotspots implementation
PPTX
Chain of Responsibility Pattern
PPTX
Lightning talk - Framework Architecture: Hotspots
PPTX
Vex 2009-2011
PPSX
WebVibe Barueri 2011 - "PHP por quê ?"
PPTX
Test-Driven Development - Introdução
Annotation Sniffer Hotspots implementation
Chain of Responsibility Pattern
Lightning talk - Framework Architecture: Hotspots
Vex 2009-2011
WebVibe Barueri 2011 - "PHP por quê ?"
Test-Driven Development - Introdução
Anúncio

Último (19)

PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PDF
Processos na gestão de transportes, TM100 Col18
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PPTX
Aula 18 - Manipulacao De Arquivos python
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
Apple Pippin Uma breve introdução. - David Glotz
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Aula04-Academia Heri- Tecnologia Geral 2025
Custos e liquidação no SAP Transportation Management, TM130 Col18
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Processos na gestão de transportes, TM100 Col18
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Aula 18 - Manipulacao De Arquivos python
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
COBITxITIL-Entenda as diferença em uso governança TI
Apple Pippin Uma breve introdução. - David Glotz

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