Como começar a programar emPerl da maneira correta.(Diferente de mim)
Perl Orientado a Objeto Part I
Perl Orientado a Objeto Part II
Perl Orientado a Objeto Part III
Moo - Orientação de objeto minimalista
Os 4 pilares da Programação Orientada a Objetos
Abstração, encapsulamento, herança e polimorfismo são os quatro pilares de qualquer linguagem orientada a objetos. E como aprendemos nopost passado o Perl é uma linguagem que da suporte a orientação a objeto a partir da sua versão 5. A seguir vou dar exemplos a vocês de como podemos implementar esses pilares.
⚠️ Este post não tem como objetivo definir orientação a objeto com Perl, mas sim aprofundar conhecimentos prévios que você tenha baseando-se na linguagem. por tanto ele leva em consideração que você, leitor, tenha conhecimento de lógica e linguagem e programação e saiba algumas definições de orientação a objeto.
Abstração
O primeiro pilar fala sobre como vamos representar os objetos dentro no nosso programa, é o que Moose é uma extensão do sistema de objetos da linguagem de programação Perl . Seu propósito declarado [1] é trazer recursos modernos de linguagem orientada a objetos para o Perl 5 e tornar a programação Perl orientada a objetos mais consistente e menos tediosa.vai também facilitar a leitura do nosso código por terceiro. É importante ter clareza ao dar nome a nossas Classes, Atributos e Métodos.
Encapsulamento
O encapsulamento trata da segurança das partes do seu programa. Quem implementa suas classes com seus atributos e usa seus métodos não precisa saber de tudo que se passa dentro da sua construção a não ser o que está na sua API.
Polimorfismo
O polimorfismo é referente a capacidade que a linguagem tem de identificar e diferenciar entidades, métodos ou atributos com mesmo nome de maneira eficiente.
A seguir irei mostrar os principais polimorfismos em Perl:
Substituição
#!/usr/bin/perlusestrict;# Error readabilityusewarnings;packagecontroller::Calculation;usemodel::Performances;# We declare entity and assign the value of tragedy with its attributesmy$entity=model::Performances::Tragedy->new('othelo',55);# Then we replace entity with the value returned from one of its methodsmy$entity=$entity->amount_for();
Sobrecarga
#!/usr/bin/perlusestrict;# Error readabilityusewarnings;packagemodel::Performances::Tragedy;# Child Classuseparent'Performances';# Parent Classsubnew{# writing over the Performances buildermy$this=shift;my$class=ref($this)||$this;my$name=shift;my$audience=shift;my$self=newPerformances($name,$audience,TYPE_PLAY->{tragedy});returnbless$self,$class;}
Inclusão
Que é o tipo de polimorfismo de herança que veremos a seguir.
Herança
E é aqui onde o POO ganha meu coração🥰
É com a herança que podemos aplicar a abstração e o encapsulamento para melhorar nossos códigos.
- Evitando repetições “herdando” métodos semelhantes ou re-escrevendo os mesmos;
- Utilizando os mesmos atributos para diferentes classes (não tão diferentes assim) para evitar classes de linhas quilométricas;
A herança no Perl pode ser implementada com o uso de pacotes no seu código, que como aprendemos anteriormente, os pacotes serão as classes. Cada pacote em perl tem um array especial chamado@isa que guarda toda a hierarquia de classes pai daquela classe. Veja o código a seguir, continuando a linha de raciocínio anterior:
#!/usr/bin/perlusestrict;# Error readabilityusewarnings;useconstant# Creating constants for play typesTYPE_PLAY=>{"tragedy"=>40,};packagemodel::Performances::Tragedy;# Child Class@Performances::Tragedy::ISA=('Performances');# Parent Class
A atribuição feita na linha “@Performances::Tragedy::ISA = ('Performances');” indica que a classe Tragedy é uma filha da classe Perfomances, por tanto herda todos seus atributos e sub-rotinas.
Entretanto não existe a necessidade de atribuirmos diretamente ao array@isa todas as heranças de nossas classes, dado que em um sistema mais complexo que possa envolver enrança múltipla ou que a arvore de herança fique muito grande, possamos encontrar dificuldades. Mas ainda podemos encontrar essas atribuições em códigos antigos.
Além de atribuir diretamente ao@isa, podemos encontrar o uso debase para indicar herança dentro do Perl. Porém esse uso não é mais aconselhado a partir do momento que foi criado oparent, que é uma versão dobase mais limpa. A seguir podemos observar um exemplo de como usar oparent na classe Comedy:
#!/usr/bin/perlusestrict;# Error readabilityusewarnings;useconstant# Creating constants for play typesTYPE_PLAY=>{"tragedy"=>40,"comedy"=>60};packagemodel::Performances::Comedy;# Classuseparent'Performances';# sets @Performances::Comedy::ISA = ('Performances');
Principais características debase eparent:
O base faz as seguintes coisas:
- Adiciona o pacote nomeado a@isa;
- Carrega o módulo com o mesmo nome do pacote nomeado usando require (a menos que detecte que o pacote já foi carregado);
- Não falhará se um módulo com o mesmo nome do pacote não existir;
- Morre se não houver símbolos no pacote nomeado;
- Inicializa o[fields]http://perldoc.perl.org/fields.html) do pacote nomeado se eles existirem;
Oparent faz as seguintes coisas:
- Adiciona o pacote nomeado a@isa;
- carrega o módulo com o mesmo nome do pacote nomeado usando require (a menos que detecte que o pacote já foi carregado)
- Não chama a função de importação do pacote nomeado;
- A opção norequire diz para não fazer o require (então a classe já deve estar carregada). Isso significa que ele não precisa interceptar erros e decidir se eles devem ser suprimidos ou não.
👋🏻 Então pessoal, esses foram os pilares da Programação Orientada a Objetos no perl. Continuem de olho que logo mais farei publicações sobre o Moose e o Moo, suas diferenças e outras aplicações voltadas a essa linguagem de programação tão abrangente. Até a próxima.
Top comments(0)
For further actions, you may consider blocking this person and/orreporting abuse