Palestra proferida na Uniritter em Porto Alegre sobre a implementação de traits no PHP 5.4 que possibilita ao programador vencer a limitação de reuso da orientação a objetos.
Traits no PHP 5.4: muito além da herançaFlávio Lisboa
Este documento discute como os traits no PHP 5.4 resolvem problemas da herança em orientação a objetos ao permitir o reuso flexível de código através da composição de comportamentos. Os traits fornecem unidades de código reutilizável que podem ser compostas em classes para estender seu comportamento sem os problemas da herança múltipla.
Seminário PHP São Paulo 2013 - traits no PHP 5.4 - muito além da herançaFlávio Lisboa
Este documento discute o recurso de traits introduzido no PHP 5.4 como uma forma de melhorar o reuso de código além da herança. Traits resolvem problemas da herança simples e múltipla ao permitir que classes compartilhem métodos de maneira seletiva de unidades de comportamento chamadas traits.
Padrões de Projeto e Boas Práticas em PHP - PHP Conference Brasil 2010Flávio Lisboa
O documento resume uma apresentação sobre padrões de projeto e boas práticas em PHP. Ele discute padrões de criação como Abstract Factory, Factory Method e Singleton, padrões estruturais como Adapter, Decorator e Proxy, e fornece exemplos de como implementá-los. O documento também menciona o livro "Padrões de Projeto" de Gamma et al como uma referência sobre o assunto.
El documento ofrece consejos para tener un buen año en 2007, sugiriendo olvidar las desilusiones del pasado, sonreír y soñar con un mejor futuro, pasar tiempo con seres queridos, disfrutar la vida y desear prosperidad, salud y amor para el nuevo año.
El documento describe el Festival de Hielo y Nieve anual que se celebra en la ciudad de Harbin, China. El festival presenta elaboradas esculturas de hielo y nieve creadas por equipos competitivos de todo el mundo. El festival atrae a más de un millón de visitantes cada invierno y cuenta con impresionantes esculturas y estructuras de varios metros de altura iluminadas de forma colorida.
Cecile Tanael is the president of Rural Bank of Mabitac, which has been providing microfinance services in Laguna and Quezon provinces since 1974. The bank joined the MABS microfinance capacity building program in 2003. This helped the bank develop their KABALIKAT microloan product and reduce delinquency rates. Some factors that helped keep delinquency low included sound credit policies for client selection and loan appraisal, frequent backups of data, restructuring loans when necessary, writing off hard loans, and maintaining financial stability. The bank has seen steady growth between 2003 and 2008 in areas such as number of branches, staff, assets, portfolio size, deposits, income, and net worth.
Traits no PHP 5.4: muito além da herançaFlávio Lisboa
Este documento discute como os traits no PHP 5.4 resolvem problemas da herança em orientação a objetos ao permitir o reuso flexível de código através da composição de comportamentos. Os traits fornecem unidades de código reutilizável que podem ser compostas em classes para estender seu comportamento sem os problemas da herança múltipla.
Seminário PHP São Paulo 2013 - traits no PHP 5.4 - muito além da herançaFlávio Lisboa
Este documento discute o recurso de traits introduzido no PHP 5.4 como uma forma de melhorar o reuso de código além da herança. Traits resolvem problemas da herança simples e múltipla ao permitir que classes compartilhem métodos de maneira seletiva de unidades de comportamento chamadas traits.
Padrões de Projeto e Boas Práticas em PHP - PHP Conference Brasil 2010Flávio Lisboa
O documento resume uma apresentação sobre padrões de projeto e boas práticas em PHP. Ele discute padrões de criação como Abstract Factory, Factory Method e Singleton, padrões estruturais como Adapter, Decorator e Proxy, e fornece exemplos de como implementá-los. O documento também menciona o livro "Padrões de Projeto" de Gamma et al como uma referência sobre o assunto.
El documento ofrece consejos para tener un buen año en 2007, sugiriendo olvidar las desilusiones del pasado, sonreír y soñar con un mejor futuro, pasar tiempo con seres queridos, disfrutar la vida y desear prosperidad, salud y amor para el nuevo año.
El documento describe el Festival de Hielo y Nieve anual que se celebra en la ciudad de Harbin, China. El festival presenta elaboradas esculturas de hielo y nieve creadas por equipos competitivos de todo el mundo. El festival atrae a más de un millón de visitantes cada invierno y cuenta con impresionantes esculturas y estructuras de varios metros de altura iluminadas de forma colorida.
Cecile Tanael is the president of Rural Bank of Mabitac, which has been providing microfinance services in Laguna and Quezon provinces since 1974. The bank joined the MABS microfinance capacity building program in 2003. This helped the bank develop their KABALIKAT microloan product and reduce delinquency rates. Some factors that helped keep delinquency low included sound credit policies for client selection and loan appraisal, frequent backups of data, restructuring loans when necessary, writing off hard loans, and maintaining financial stability. The bank has seen steady growth between 2003 and 2008 in areas such as number of branches, staff, assets, portfolio size, deposits, income, and net worth.
The document discusses the major bodies of water on Earth including the four oceans - Pacific, Atlantic, Indian, and Arctic. It notes that the Pacific Ocean is the largest and deepest. It also mentions the delimitation of the Southern Ocean in 2000. Additionally, it provides details on coral reefs, how they form in warm, shallow seas from coral polyps' skeletons and grow upon old skeletons. Finally, it outlines the different ocean zones from the sunlit zone near the surface to the twilight and sunless zones at greater depths.
The document discusses using LinkedIn for job searching and professional branding. It provides an overview of how employers find applicants, with referrals and company websites being top sources. The presentation then covers setting up a LinkedIn profile, networking features, and tools for branding and finding job leads. Attendees are encouraged to complete their profiles, build their networks through groups, and search for contacts at target companies.
The document discusses a partnership between GCASH REMIT and the DSWD CCT Program Pantawid Pamilyang Pilipino Program. The key points are:
1) GCASH REMIT provides domestic cash remittance services nationwide with a large network of over 18k outlets and competitive low fees.
2) The DSWD CCT Program provides conditional cash grants to extremely poor households to improve health, nutrition and education with objectives of short-term poverty alleviation and breaking the intergenerational poverty cycle.
3) GCASH REMIT will enable cash payouts for the DSWD CCT Program participants in many provinces across the Philippines through participating rural banks.
El documento presenta la actualización del inventario turístico del municipio para 2011. Incluye la descripción de los atractivos naturales y culturales más importantes de la región, así como datos sobre la infraestructura, servicios y planta turística disponibles. Finalmente, se entregan conclusiones y recomendaciones para mejorar la oferta turística local.
The slides (minus the cool effects from Keynote) from my session on using social media for business at Meredith College. All of the media dropped out due to the file size, but it is linked in the comments.
Apologies for it not being consolidated, it was a three hour session with a large Keynote file.
To successfully manage projects, thoroughly research and plan all tasks with realistic timelines and costs. As the project leader, closely track the progress of each task and ensure responsibilities are being met regularly to keep the project on schedule and within budget. Proper preparation through contingency planning and clear expectations set between the client and project team lead to meeting clearly defined measures of success.
This document appears to be in Arabic. As an AI system, I do not have the capability to read or understand Arabic. I am unable to provide a meaningful summary.
El documento describe el Convento de Santa María Magdalena en Cuitzeo, México. El convento fue iniciado en 1550 por la orden de los agustinos y tomó 100 años en completarse. Contiene 24 celdas para monjes, un órgano funcional en el coro, y frescos originales en las paredes. El convento sirvió como cuartel imperialista entre 1864-1867 antes de convertirse en un museo que atrae a muchos visitantes atraídos por su arquitectura, historia y ambiente espiritual.
Bring-a-friend sessie - De waarde van online conversatiesLECTRIC
De return on investment van social media is een veel besproken onderwerp binnen organisaties overal ter wereld. Het belang van een gedegen inzet van social media is aantoonbaar. De ROI ervan is echter een gecompliceerder verhaal. Toch wil menig manager weten; wat levert social media op? Daarom gingen we tijdens deze bring-a-friend sessie georganiseerd door LECTRIC op 10 oktober 2012 dieper in op dit populaire onderwerp.
Sanne Heerink en Hidde Tuinstra van Social Inc. spraken over de 'Word Of Mouth- value' en de ontwikkelingen op gebied van de waarde van online conversaties.
This document provides information about blood pressure, including how it is measured, normal and abnormal blood pressure readings, categories of blood pressure in adults, symptoms of high blood pressure, and tips for preventing hypertension such as maintaining a healthy diet, exercising regularly, and controlling weight. Key details are given on taking blood pressure readings, the systolic and diastolic pressure numbers, and definitions of normal, prehypertension, and hypertension blood pressure levels in adults.
Social media: Should I friend my boss on FacebookCheryl Lawson
The Tulsa Young Professionals asked me to speak at one of their luncheons about Social Media. The questions was. Should I friend my boss on facebook. I answer the question, and share the idea of creating a social media strategy and the need for personal branding.
Cooperativas de Software Livre: Uma comparação entre Brasil e ArgentinaFlávio Lisboa
Este documento discute as cooperativas de software livre no Brasil e na Argentina, comparando o ecossistema de cooperativas de tecnologia da informação nos dois países. Apresenta o conceito de cooperativismo e como ele oferece uma alternativa ao emprego e ao empreendedorismo individual, permitindo que trabalhadores assumam o controle coletivo de suas atividades por meio da autogestão e do trabalho em benefício comum. Destaca exemplos de cooperativas de software livre no Brasil e na Argentina.
The document discusses the major bodies of water on Earth including the four oceans - Pacific, Atlantic, Indian, and Arctic. It notes that the Pacific Ocean is the largest and deepest. It also mentions the delimitation of the Southern Ocean in 2000. Additionally, it provides details on coral reefs, how they form in warm, shallow seas from coral polyps' skeletons and grow upon old skeletons. Finally, it outlines the different ocean zones from the sunlit zone near the surface to the twilight and sunless zones at greater depths.
The document discusses using LinkedIn for job searching and professional branding. It provides an overview of how employers find applicants, with referrals and company websites being top sources. The presentation then covers setting up a LinkedIn profile, networking features, and tools for branding and finding job leads. Attendees are encouraged to complete their profiles, build their networks through groups, and search for contacts at target companies.
The document discusses a partnership between GCASH REMIT and the DSWD CCT Program Pantawid Pamilyang Pilipino Program. The key points are:
1) GCASH REMIT provides domestic cash remittance services nationwide with a large network of over 18k outlets and competitive low fees.
2) The DSWD CCT Program provides conditional cash grants to extremely poor households to improve health, nutrition and education with objectives of short-term poverty alleviation and breaking the intergenerational poverty cycle.
3) GCASH REMIT will enable cash payouts for the DSWD CCT Program participants in many provinces across the Philippines through participating rural banks.
El documento presenta la actualización del inventario turístico del municipio para 2011. Incluye la descripción de los atractivos naturales y culturales más importantes de la región, así como datos sobre la infraestructura, servicios y planta turística disponibles. Finalmente, se entregan conclusiones y recomendaciones para mejorar la oferta turística local.
The slides (minus the cool effects from Keynote) from my session on using social media for business at Meredith College. All of the media dropped out due to the file size, but it is linked in the comments.
Apologies for it not being consolidated, it was a three hour session with a large Keynote file.
To successfully manage projects, thoroughly research and plan all tasks with realistic timelines and costs. As the project leader, closely track the progress of each task and ensure responsibilities are being met regularly to keep the project on schedule and within budget. Proper preparation through contingency planning and clear expectations set between the client and project team lead to meeting clearly defined measures of success.
This document appears to be in Arabic. As an AI system, I do not have the capability to read or understand Arabic. I am unable to provide a meaningful summary.
El documento describe el Convento de Santa María Magdalena en Cuitzeo, México. El convento fue iniciado en 1550 por la orden de los agustinos y tomó 100 años en completarse. Contiene 24 celdas para monjes, un órgano funcional en el coro, y frescos originales en las paredes. El convento sirvió como cuartel imperialista entre 1864-1867 antes de convertirse en un museo que atrae a muchos visitantes atraídos por su arquitectura, historia y ambiente espiritual.
Bring-a-friend sessie - De waarde van online conversatiesLECTRIC
De return on investment van social media is een veel besproken onderwerp binnen organisaties overal ter wereld. Het belang van een gedegen inzet van social media is aantoonbaar. De ROI ervan is echter een gecompliceerder verhaal. Toch wil menig manager weten; wat levert social media op? Daarom gingen we tijdens deze bring-a-friend sessie georganiseerd door LECTRIC op 10 oktober 2012 dieper in op dit populaire onderwerp.
Sanne Heerink en Hidde Tuinstra van Social Inc. spraken over de 'Word Of Mouth- value' en de ontwikkelingen op gebied van de waarde van online conversaties.
This document provides information about blood pressure, including how it is measured, normal and abnormal blood pressure readings, categories of blood pressure in adults, symptoms of high blood pressure, and tips for preventing hypertension such as maintaining a healthy diet, exercising regularly, and controlling weight. Key details are given on taking blood pressure readings, the systolic and diastolic pressure numbers, and definitions of normal, prehypertension, and hypertension blood pressure levels in adults.
Social media: Should I friend my boss on FacebookCheryl Lawson
The Tulsa Young Professionals asked me to speak at one of their luncheons about Social Media. The questions was. Should I friend my boss on facebook. I answer the question, and share the idea of creating a social media strategy and the need for personal branding.
Cooperativas de Software Livre: Uma comparação entre Brasil e ArgentinaFlávio Lisboa
Este documento discute as cooperativas de software livre no Brasil e na Argentina, comparando o ecossistema de cooperativas de tecnologia da informação nos dois países. Apresenta o conceito de cooperativismo e como ele oferece uma alternativa ao emprego e ao empreendedorismo individual, permitindo que trabalhadores assumam o controle coletivo de suas atividades por meio da autogestão e do trabalho em benefício comum. Destaca exemplos de cooperativas de software livre no Brasil e na Argentina.
Aprenda a afiar suas garras com LaminasFlávio Lisboa
Nesta palestra apresento a trajetória do meu trabalho de instrutor e promotor do Zend Framework, agora Laminas, culminando com o lançamento do livro PHP Web Development with Laminas, pela Packt Publishing. Apresento os tópicos de uma formação completa de desenvolvedor web PHP trabalhando com aplicações orientadas a objeto usando padrões de projeto e desenvolvimento orientado a testes.
Ciência e software livre: desenvolvendo com métodoFlávio Lisboa
Esta palestra visa mostrar como o software livre se beneficia do paradigma do método científico e quais as vantagens de times de desenvolvimento de assimilarem as boas práticas desse método e a vantagem de manter sempre uma atitude crítica na busca de soluções de problemas.
Tópicos abordados:
* O método científico e os paradigmas da ciência
* Como o software livre aplica o método científico
* Como assimilar isso em sua empresa
Flávio Gomes da Silva Lisboa apresenta suas qualificações e experiência, incluindo doutorando na UTFPR, mestre em Tecnologia e Sociedade, especialista em Java, instrutor de cursos de desenvolvimento de software e professor universitário. Ele também fala sobre seu trabalho atual com software para PaaS e como autor.
O documento apresenta a história do framework Zend Framework e sua transição para o framework Laminas. Descreve a compra do Zend Framework pela RogueWave e a saída de seus principais desenvolvedores em 2018, levando à criação do projeto Laminas sob a Linux Foundation. Também discute as perspectivas para a ferramenta de migração entre os frameworks e os próximos passos do projeto Laminas.
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019Flávio Lisboa
Da Teoria da Evolução para a solução de problemas baseada em busca, com provocações para quem não gosta de pensar.
O componente usado na demonstração está disponível em https://github.com/fgsl/geneticalgorithm.
O documento discute a arquitetura de microsserviços em PHP, comparando arquiteturas monolíticas e distribuídas. Ele também cobre tópicos como disponibilidade, centralização vs descentralização, frameworks para criação de microsserviços em PHP e exemplos básicos de implementação.
Como se tornar o pior programador PHP do mundoFlávio Lisboa
O documento fornece sete lições para se tornar o pior programador PHP do mundo, focando em aspectos técnicos como usar apenas processos síncronos e não se preocupar com codificação de caracteres, e aspectos sociais como não seguir bons exemplos e ignorar outras linguagens de programação.
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHPFlávio Lisboa
O documento discute a necessidade de ambientes integrados de desenvolvimento (IDEs) para projetos de software. Ele descreve as vantagens de usar o Eclipse PHP Development Tools, incluindo integração com controle de versão, bancos de dados e ferramentas PHP. Também fornece dicas sobre depuração, desempenho e técnicas para descoberta de bugs.
Comunicação e padrões em código aberto: quando convergente e divergente cooperamFlávio Lisboa
O documento discute como conciliar as demandas de clientes com as demandas da comunidade em projetos de código aberto. Sugere que a comunicação eficaz e o uso de padrões de projeto e arquitetura podem ajudar a fazer com que a comunidade aceite alterações necessárias para atender às demandas dos clientes.
Criação de robôs em PHP para raspagem de dadosFlávio Lisboa
Este documento discute raspagem de dados usando robôs em PHP. Ele fornece exemplos de como criar robôs para capturar código-fonte de páginas web e dados inseridos via JavaScript. O documento também responde perguntas sobre como lidar com cookies, manter dados atualizados e quebrar CAPTCHAs usando PHP.
A história conta a jornada de um piloto de testes, Martin Jordan, que enfrenta seus medos após um acidente aéreo. Ele é escolhido para ser o novo Lanterna Verde depois que o alienígena moribundo que ocupava o cargo o escolhe. Apesar de receoso no início, Martin aprende a usar o anel de poder e assume a responsabilidade de proteger a galáxia.
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de DadosFlávio Lisboa
[1] O documento discute o uso de PHP no Serviço Federal de Processamento de Dados (SERPRO)
[2] O SERPRO desenvolve diversos sistemas utilizando a linguagem PHP, como o software livre SAGUI
[3] Entre 2009-2016, o SERPRO implementou 1221 projetos utilizando PHP, correspondendo a 83 sistemas diferentes.
Arquitetura PHP para um mundo orientado a microsserviçosFlávio Lisboa
Nesta palestra abordaremos diversos aspectos da arquitetura de software contextualizados para o cenário de aplicações PHP construídas a partir da integração de microsserviços integrados. Dentro desse cenário, iremos separar o que é responsabilidade do PHP e o que não é, mas com o que ele pode contribuir (ou como ele pode evitar que seus parceiros tornem sua vida difícil). Abordaremos motivações, boas práticas e orientações para lidar com transações, manipulação de erros, execução de código lento, execução em linha de comando, coleta de dados de usuário, análise e business intelligence.
Semeando Liberdade: Como (e onde) o software livre inclui as pessoasFlávio Lisboa
O documento discute como o software livre e a tecnologia social podem promover a inclusão digital e social. Apresenta o conceito de software livre e como ele garante a liberdade e autonomia dos usuários. Também define tecnologia social como aquela adaptada para pequenos grupos e que promova a criatividade dos usuários. Por fim, discute como o acesso à tecnologia e a alfabetização digital podem levar à apropriação das ferramentas tecnológicas e sua utilização para fins sociais.
Programar computadores envolve escrever instruções claras e objetivas em linguagens de programação para ensinar máquinas a realizar tarefas. Ao longo da história, as linguagens evoluíram de códigos binários para linguagens de alto nível mais próximas da linguagem humana, à medida que computadores se tornaram mais poderosos e acessíveis. Programadores memoráveis contribuíram para o desenvolvimento da computação.
O documento discute a importância das comunidades e da economia colaborativa. Aponta exemplos como a Corporação Mondragón e o kernel Linux que ilustram como modelos cooperativos e colaborativos podem ser bem-sucedidos. Também descreve estratégias para empresas se adaptarem à economia colaborativa, como manter baixos custos fixos, buscar parcerias, e focar no relacionamento de longo prazo com clientes.
Aplicações Corporativas em PHP (CRM e ERP)Flávio Lisboa
This document discusses technology choices for corporate applications like CRM and ERP. It recommends open-source stacks for building portals, e-commerce sites, and CRM systems using frameworks like Drupal, Joomla, Magento, Prestashop, SugarCRM, and platforms like Zend, OroCRM, and Tine20. It also mentions ERP options like Marello and Inoideas that use open-source technologies.
A linguagem C# aproveita conceitos de muitas outras linguagens,
mas especialmente de C++ e Java. Sua sintaxe é relativamente fácil, o que
diminui o tempo de aprendizado. Todos os programas desenvolvidos devem
ser compilados, gerando um arquivo com a extensão DLL ou EXE. Isso torna a
execução dos programas mais rápida se comparados com as linguagens de
script (VBScript , JavaScript) que atualmente utilizamos na internet
As classes de modelagem podem ser comparadas a moldes ou
formas que definem as características e os comportamentos dos
objetos criados a partir delas. Vale traçar um paralelo com o projeto de
um automóvel. Os engenheiros definem as medidas, a quantidade de
portas, a potência do motor, a localização do estepe, dentre outras
descrições necessárias para a fabricação de um veículo
Seminário PHP em Porto Alegre. Traits no PHP 5.4: muito além da herança
1. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Traits no PHP 5.4:
muito além da herança
Flávio Gomes da Silva Lisboa
@fgsl
5. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Especialista em história em
quadrinhos http://perse.doneit.com.br
romocavaleirodoespaco.blogspot.com
6. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Não seria maravilhoso se existisse uma maneira de
criar um software de modo que quando
precisássemos alterá-lo, pudéssemos fazer isso
com o menor impacto possível no código existente?
Poderíamos perder menos tempo retrabalhando o
código e mais tempo para permitir que o programa
faça coisas mais legais...
7. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Princípio de Design
“Identifique os aspectos de seu aplicativo que
variam e separe-os do que permanece igual”.
Eric e Elisabeth Freeman
8. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Resumo
Esta palestra mostra como traits resolvem um
problema relativo à limitação do reuso por
herança em orientação a objetos e como são
implementados no PHP 5.4.
9. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Tudo começou aqui
European Conference on
Object-Oriented Programming
10. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Paper
Traits: “unidades de comportamento
que podem compor algo”
Schärli, Ducasse, Nierstraz e Black
11. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Fato: “A herança é o mecanismo de
reuso fundamental nas linguagens de
programação orientadas a objetos”
12. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Fato: “Todas as variantes de herança
sofrem de problemas conceituais e
práticos”
13. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Fato: “A herança é um mecanismo com
muitos significados e interpretações
conflitantes”
14. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
A programação de computadores se
apropria de termos de outras áreas
de conhecimento fazendo analogias
16. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Seria a herança genética?
17. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Na herança genética, cada filho
recebe uma combinação de
características do pai e da mãe... e
isso é naturalmente probabilístico
18. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Existem dois tipos de herança na
programação orientada a objetos
● Simples: uma classe herda TODAS
as características herdáveis de outra
● Múltipla: uma classe herda TODAS as
características herdáveis de mais de
uma classe.
19. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Esses dois tipos são determinísticos
● Em ambos os tipos, existe uma forma
de dizer o que será ou não herdado,
que é o escopo de visibilidade de
atributos e métodos.
20. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
A herança em orientação a objetos
seria um testamento, em que as
classes pais transmitem todos os
seus bens (atributos e métodos)
para as classes filhas?
21. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Mas esta não é a
herança simples
da orientação a objetos
23. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
O problema com a analogia do
testamento, é que nesse caso cada
herdeiro leva uma parte da
herança.
E não é isso que acontece com a
orientação a objetos, na qual a cada
classe filha leva toda a herança.
24. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
A herança simples da
orientação a objetos, então, é esta:
25. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Na herança simples, várias classes
podem reutilizar atributos e métodos
de uma classe ancestral.
Mas o reuso não é pleno, já que, por herdar de
apenas uma classe, você pode acabar “copiando”
atributos e métodos de outra classe, gerando
código duplicado.
E o código duplicado é mutante: você não tem
um controle fácil sobre implementações.
26. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Herança simples e código duplicado
27. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Nem pense nisso!
Criar dependências implica
em diminuir a flexibilidade
28. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Na arquitetura do software é
necessário encontrar um ponto de
equilíbrio entre instabilidade e
abstração
29. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
E a herança múltipla?
Animal
Cavalo Pássaro
Pégaso
30. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Seria isto?
Animal
31. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Seria isto?
Animal
NÃO!
32. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Seria mais parecido com isso:
Homem
33. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
“A herança múltipla é boa, mas não
há um bom modo de fazê-la”
Steve Cook
A herança múltipla permitiria combinar atributos
e métodos de várias classes em uma nova
classe.
Mas existem vários problemas decorrentes da
herança múltipla... por isso PHP não a
implementa.
34. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Ah, mas eu posso usar interfaces...
35. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Sim, mas interfaces não tem
implementação. O problema não
é padronizar a comunicação,
mas reutilizar código.
36. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Existe um problema:
o Diamante da Morte
37. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Problema do Diamante
38. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Problema do Diamante
Conflito de nomes:
Se existem atributos
ou métodos
com nomes iguais,
mas contextos diferentes,
qual deve ser herdado?
39. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Problema do Diamante
Implementação:
Se um método de uma
classe ancestral for
sobrescrito pelas classes
herdadas, qual
implementação será
usada?
40. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Herança múltipla não é genética...
Herança múltipla traz tudo de todos os pais.
E nem sempre (talvez na maioria dos casos)
queremos combinar tudo de todos, mas algumas
coisas de todos.
Não queremos gerar um clone (até porque não dá
pra gerar um clone de mais de um original) mas
uma combinação de traços (atributos e métodos).
41. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Composição de classes é um
paliativo
Você pode contornar a inexistência de herança
múltipla fazendo com que uma classe contenha
outra, em vez de estendê-la.
Com essa abordagem, uma classe pode
artificialmente herdar tanto atributos quanto
métodos de múltiplas classes.
Mas persiste o problema de que é tudo ou nada.
42. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Composição de classes é um
paliativo
<?php
namespace DCComicsCharacters;
class Amazo
{
private $decorators = array();
public function __construct()
{
$this->decorators[] = new Superman();
$this->decorators[] = new MartianManhunter();
}
}
43. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Composição de classes é um
paliativo
44. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Composição de classes é um
paliativo
45. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Paradoxo da Herança de Classes
Uma classe tem um papel primário de geradora
de instâncias, logo ela deve ser completa.
Mas como unidade de reuso, uma classe deve
ser pequena, com a menor implementação
possível.
Isso é contraditório!
46. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Separação de papéis
Se a classe deve ser a geradora de instâncias,
alguém tem de assumir o papel de unidade de
reuso. É aí que entram os traits.
Traits são unidades primitivas de reuso de código.
47. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Traits
►Um trait provê um conjunto de métodos que
implementam comportamento.
►Classes e traits podem ser compostos por outros traits.
►Métodos conflitantes devem ser explicitamente
resolvidos.
►A composição com traits não afeta a semântica da
classe. É como se os métodos fossem declarados nela.
48. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Classes e Verbos
►Herança de classe: Ser
►Composição de classe: Ter (ter é melhor que ser)
►Traits: Usar (usar é melhor que ter)
49. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Declarando um trait em PHP
trait GenericTrait
{
public function doSomeSingle()
{
echo 'something single';
}
}
Traits não podem ser instanciados, apenas usados!
50. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Usando um trait em PHP
class ClassC
{
use SpecialTrait;
}
Se uma classe herda um método que tem o
mesmo nome de um método contido em um trait, o
trait sobrescreve o método herdado.
Tesoura corta papel. Trait corta classe mãe.
51. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Usando vários traits em PHP
class Amazo
{
use Aquaman, Flash;
}
52. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Sobrescrevendo um trait em PHP
class ClassB
{
use GenericTrait;
public function doSomeSingle()
{
echo 'Something single in
fact';
}
}
O método da classe tem precedência sobre o trait!
53. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Resolução de conflitos
trait Fifer
{
public function buildHouse()
{
echo 'building a straw
house';
}
}
54. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Resolução de conflitos
trait Fiddler
{
public function buildHouse()
{
echo 'building a stick
house';
}
}
55. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Resolução de conflitos
trait Practical
{
public function buildHouse()
{
echo 'building a brick
house';
}
}
56. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Resolução de conflitos
class PerfectPig
{
use Fifer, Fiddler, Practical;
}
57. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Resolução de conflitos
class PerfectPig
{
use Fifer, Fiddler, Practical
{
Practical::buildHouse insteadof
Fifer, Fiddler;
}
}
58. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Resolução de conflitos
class PerfectPig
{
use Fifer, Fiddler, Practical
{
Practical::buildHouse insteadof
Fifer, Fiddler;
Fifer::buildHouse as buildShitHouse;
}
}
59. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Trait > (Interface + Implementação)
● Uma classe não pode implementar duas
interfaces que tenham métodos com mesmo
nome.
● Interfaces não suportam atributos, apenas
constantes.
● Os métodos de uma interface tem de ser
públicos.
60. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Traits suportam atributos
● Você pode definir atributos, inclusive estáticos,
da mesma forma como faz em classes.
trait StaticTrait
{
public static $instances;
public $description;
}
61. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Traits podem usar variáveis
estáticas
● Só não podem defini-las.
trait StaticTrait
{
public function $playDice()
{
static $side = 1;
$side++;
if ($side > 6) $side = 1;
return $side;
}
}
62. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Classes podem alterar a visibilidade
de métodos de traits
● Métodos públicos podem se tornar privados ou
protegidos.
class ClassC
{
use SpecialTrait
{
doSomeSpecial as protected;
}
}
63. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Traits podem declarar métodos
abstratos
● Dessa forma, um trait pode também se tornar
um contrato, como uma interface
trait BaseTrait
{
public function doSomeAbstract();
}
64. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Traits podem usar traits
● Métodos públicos podem se tornar privados ou
protegidos.
trait OneTrait
{
use OtherTrait;
}
65. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Existem funções para Traits
● class_uses: retorna os traits usados pela
classe dada.
● get_declared_traits: retorna os array de todos
os traits declarados.
● trait_exists: verifica se o trait existe.
66. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
http://www.treinaweb.com.br
15 de junho
67. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
É isso aí, pessoal!
● www.fgsl.eti.br
● flavio.lisboa@fgsl.eti.br
● @fgsl
68. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Referências
● Schärli, N. et alli. Traits: Composable Units of
Behaviour.
http://scg.unibe.ch/archive/papers/Scha03aTraits.pdf
● Weldon, G. PHP 5.4: Begin your love affair with Traits.
http://www.slideshare.net/predominant/php-54-begin-your-
love-affair-with-traits-10118525