PHP e Paradigmas de Programação

Introdução

PHP é uma linguagem muito flexível que suporta uma variedade de técnicas e paradigmas diferentes de programação, ou seja, é uma linguagem multi paradigma. Desde programação procedural à programação Orientada a Objetos, o PHP nos permite criar aplicações bem estruturadas, organizadas e de fácil manutenção.Como também nos permite criar códigos confusos, inseguros e cheios de más práticas. É importante que o desenvolvedor, desde do início de sua carreira, busque aprender melhores práticas de desenvolvimento. Neste artigo vamos entender quais são os principais paradigmas de programação suportadas pela linguagem.

Programação Procedural

O foco da programação procedural é dividir o desenvolvimento das tarefas entre coleção de variáveis, estruturas de dados e sub-rotinas, utilizando-as em uma ordem sistemática. Algumas linguagens consideradas procedurais: C, Go, Basic, Fortran, Pascal. À um bom tempo atrás, principalmente antes do PHP 5, era muito comum criar aplicações PHP inteiras usando somente programação procedural, o que já não é mais comum e recomendado. Ainda encontramos sistemas feitos em linguagem procedural, muitas vezes de difícil manutenção devido o uso de más práticas.
Com o suporte de Orientação a Objetos e outros recursos, o PHP se tornou uma linguagem mais flexível, com mais possibilidades. Veremos a seguir outros paradigmas importantes.

Programação Orientada a Objetos (POO)

PHP é uma linguagem Orientada a Objetos completa. O suporte de orientação a objetos foi totalmente reescrita na versão 5.0 (2004) e desde então vem evoluído e melhorado de diversas maneiras. Algumas das funcionalidades de POO no PHP: classes, classes abstratas, interfaces, herança, construtores, exceptions, namespaces, traits, etc.

A curva de aprendizado de POO normalmente é grande, principalmente para iniciantes em programação. O segredo para aprender orientação a objetos é você se aperfeiçoando com o tempo, lendo e re-lendo conceitos, aplicando e experimentando novas técnicas.

Você irá se acostumar com termos como classes, herança, polimorfismo, encapsulamento. Mas não somente isso, orientação a objetos vai além disso. Outros conceitos importantes são DDD (Domain Driven Design), Design Patterns e princípios SOLID.

Segue abaixo alguns links interessantes para aprender mais sobre POO: (* Não se prenda apenas ao PHP para aprender Orientação a Objetos. Muitos conceitos e lições, principalmente mais didáticos, sobre POO serão encontradas na linguagem Java. Lembre-se que você poderá aplicar os mesmos conceitos na linguagem PHP).

https://www.caelum.com.br/download/caelum-java-objetos-fj11.pdf
https://github.com/domnikl/DesignPatternsPHP
http://www.tutorialspoint.com/design_pattern/
https://www.brandonsavage.net/books/
https://www.alura.com.br/curso-online-php-e-orientacao-a-objetos

Programação Funcional

Muitas linguagens de programação importantes tem aderido ao paradigma de programação funcional e muito tem se falado sobre o tema nos últimos anos. Podemos citar Scala, Haskel, Java, Erlang, entre outras. PHP não ficou atrás e adotou os principais conceitos de programação funcional para dentro da linguagem já à algum tempo.

No PHP, funções podem ser atribuídas a variáveis e invocadas dinamicamente. Funções podem ser passadas como argumentos para outras funções. Lambdas e closures foram incluídas no PHP desde a versão 5.3 (2009). Objetos pode ser chamadas como função implementando o método __invoke(), entre outros recursos de programação funcional.

Atualmente programação funcional tem sido usado no PHP junto com Orientação a Objetos. Abaixo selecionei alguns links caso queira aprender mais sobre programação funcional no PHP, incluíndo um livro sobre o tema que pode ser comprado na phparch.

https://www.phparch.com/books/functional-programming-in-php/
http://code.tutsplus.com/tutorials/functional-programming-in-php–net-35043
http://www.sitepoint.com/functional-programming-and-php/
https://blog.liip.ch/archive/2014/11/05/functional-programming-in-php.html

Meta Programação

Meta Programação é uma forma de escrever programas que tem a habilidade de ler, gerar, analisar, transformar “outros” programas, até mesmo modificar seu comportamento durante a sua execução.

PHP suporta meta programação através da API de Reflection e dos métodos mágicos (__get(), __set(), __call(), __callStatic(), etc.)

Leia também sobre Overloading.

Programação Orientada a Aspecto

Aspect-Oriented Programming (AOP) é um paradigma de programação normalmente usada de forma complementar à Orientação a Objetos. Oficialmente não existe suporte nativo a AOP no PHP, mas podemos se beneficiar dele através de bibliotecas desenvolvidos por “terceiros”. Normalmente essas bibliotecas utilizam os recursos de meta programação para a implementação do AOP.

Uso muito comum em programação com aspectos é tratar geração de Logs e controle de acesso de segurança. Imagine, por exemplo, que você tenha um módulo ou classe responsável por gerenciar posts em um Fórum, onde seria necessário também implementar regras de acesso para criação, edição e exclusão de posts, etc. Com AOP você pode deixar os controles de acesso em uma classe totalmente separadas, sendo invocadas através de eventos, dessa forma, deixando a classe de Fórum limpa, contendo somente com a lógica para gerenciamento das postagens.

AOP permite que você definir funcionalidade para pontos específicos de execução do seu programa (JoinPoints). Inserindo eventos por exemplo, antes, depois ou durante execução de métodos específicos.

Um dos frameworks que implementa AOP no PHP é o Go! PHP library. Neste Link você pode encontrar um tutorial bem interessante de como usar a biblioteca. Neste projeto do git você encontra um exemplo de como usar o GO junto com Zend Framework 2.

A revista phparch tem uma matéria bem interessante sobre AOP e pode ser acessada gratuitamente.

O Flow Framework tem um módulo de AOP bem interessante e pode ser usado de forma Stand Alone.

Conclusão

O principal objetivo deste artigo foi citar alguns dos principais paradigmas de programação e como o PHP lida com esses paradigmas dentro da linguagem. Foi feito uma breve introdução sobre cada um deles e citado links caso queira aprofundar seus estudos. Bom proveito.

Deixe um comentário

Follow

Get every new post on this blog delivered to your Inbox.

Join other followers: