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 danecessidade 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;•…  Dado...
Como invalidar um objetoTrecho de um escopo qualquer     “Produto precisará ter nome e custo. Descrição e imagens     serã...
Como invalidar um objetoTrecho de um escopo qualquer     “Produto precisará ter nome e preço. Descrição e imagens     serã...
Consigo criar um objeto sem   os itens obrigatórios !
O objeto entrou em estado inválido!
Como NÃO invalidar um objetoTrecho de um escopo qualquer     “Produto precisará ter nome e preço. Descrição e imagens     ...
Ciclo de vida de um objeto                Nasce  Morre                           Consulta                        n vezes  ...
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 colunaO objeto é pego em uma coleção!                       Esqueça linha
Não importa aonde ele foi salvo!
Alterar um objeto
Deletar um objetounset(), 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 serindividualizado em seu domínio
Factory code: 1206af38c27                            Factory code: a64c1d3913
Ciclo de vida dos objetos              Nasce                                NasceMorre                     Consulta   Morr...
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 ...
O ciclo de vida de Image depende de               Product!
Road to hellGoogle 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      ...
http://github.com/hlegius                                                http://programe.me                               ...
Definir classe não é programar com orientação a objetos
Definir classe não é programar com orientação a objetos
Definir classe não é programar com orientação a objetos
Definir classe não é programar com orientação a objetos
Definir classe não é programar com orientação a objetos
Definir classe não é programar com orientação a objetos
Definir classe não é programar com orientação a objetos
Definir classe não é programar com orientação a objetos
Definir classe não é programar com orientação a objetos
Próximos SlideShares
Carregando em…5
×

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

1.563 visualizações

Publicada em

Palestra apresentada na PHP Conference Brasil 2011.

Aborda como criar um software orientado a objetos puro.

Publicada em: Tecnologia
1 comentário
8 gostaram
Estatísticas
Notas
Sem downloads
Visualizações
Visualizações totais
1.563
No SlideShare
0
A partir de incorporações
0
Número de incorporações
5
Ações
Compartilhamentos
0
Downloads
24
Comentários
1
Gostaram
8
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

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

  1. 1. Definir classe não é programar com orientação a objetos! Hélio Costa e Silva (@hlegius)
  2. 2. Oh oh! Eu já sei o que é!
  3. 3. “Getters” e “Setters” burros
  4. 4. $ make clean
  5. 5. Software aos pedaços UI DB necessidade APIs Recursos externos
  6. 6. Para pensar em orientação a objetos, esqueça tudo que não faz parte danecessidade de negócio do software!
  7. 7. Oh oh! Eu já sei o que é!• Criar usuário;• Adicionar endereço ao usuário;• Adicionar telefone, contato ao usuário;•… Dados + comportamento
  8. 8. Como invalidar um objetoTrecho de um escopo qualquer “Produto precisará ter nome e custo. Descrição e imagens serão úteis também!”
  9. 9. Como invalidar um objetoTrecho de um escopo qualquer “Produto precisará ter nome e preço. Descrição e imagens serão úteis também!”
  10. 10. Consigo criar um objeto sem os itens obrigatórios !
  11. 11. O objeto entrou em estado inválido!
  12. 12. Como NÃO invalidar um objetoTrecho de um escopo qualquer “Produto precisará ter nome e preço. Descrição e imagens serão úteis também!”
  13. 13. Ciclo de vida de um objeto Nasce Morre Consulta n vezes Consulta Altera
  14. 14. Criando um objeto
  15. 15. Consultar um objeto
  16. 16. O objeto é pego em uma coleção!
  17. 17. O objeto é pego em uma coleção! Esqueça linha
  18. 18. Esqueça colunaO objeto é pego em uma coleção! Esqueça linha
  19. 19. Não importa aonde ele foi salvo!
  20. 20. Alterar um objeto
  21. 21. Deletar um objetounset(), garbage collector, …
  22. 22. E quando eu modifico no meio de persistência ?
  23. 23. A persistência é um necessidade de infraestrutura
  24. 24. Horas depois…
  25. 25. Separation of Concerns (SoC)Edsger W. Dijkstra (1930-2002)
  26. 26. Negócio - domínio Pivô – Domínio <-> Infraestrutura Separando interesses
  27. 27. Objeto em sociedade
  28. 28. Cada tipo de objeto tem seus limites e responsabilidades!
  29. 29. Entidade
  30. 30. Entidade é o objeto que possui atributos que o permita serindividualizado em seu domínio
  31. 31. Factory code: 1206af38c27 Factory code: a64c1d3913
  32. 32. Ciclo de vida dos objetos Nasce NasceMorre Consulta Morre Consulta Consulta Altera Consulta Altera Product Category
  33. 33. Eles estabeleceram uma relação de agregação!
  34. 34. Value Object
  35. 35. Value Object !=Data Transfer Object (DTO)
  36. 36. Single Responsibility Principle (SRP) Robert C. Martin (@unclebob)
  37. 37. Cada parte deve ter SOMENTE uma responsabilidade!
  38. 38. Por que não um: ?
  39. 39. Pois trata-se de uma composição!
  40. 40. ShoppingCart Category Product X Image
  41. 41. Ciclo de vida dos objetos Nasce Morre Consulta Image Consulta Altera Product
  42. 42. O ciclo de vida de Image depende de Product!
  43. 43. Road to hellGoogle it: S.O.L.I.D design principles
  44. 44. Evitar as más práticas!
  45. 45. OH NOES!Google it: c2.com God Class
  46. 46. Foco em orientação a objetos NÃO em design patterns
  47. 47. Composite Strategy Decorator Adapter ObserverService 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 FactoryData Mapper
  48. 48. http://github.com/hlegius http://programe.me hlegius@gmail.com @hlegiusjobs@vexcorp.com Programador PHP Slides http://slideshare.net/hlegius/ Avalie http://joind.in/4454 Obrigado!

×