Movatterモバイル変換


[0]ホーム

URL:


Skip to content
DEV Community
Log in Create account

DEV Community

Victoria Ricarte Bispo Beserra
Victoria Ricarte Bispo Beserra

Posted on • Edited on

     

Perl Orientado a Objeto Part II


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();
Enter fullscreen modeExit fullscreen mode

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;}
Enter fullscreen modeExit fullscreen mode

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
Enter fullscreen modeExit fullscreen mode

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');
Enter fullscreen modeExit fullscreen mode

Principais características debase eparent:

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)

Subscribe
pic
Create template

Templates let you quickly answer FAQs or store snippets for re-use.

Dismiss

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment'spermalink.

For further actions, you may consider blocking this person and/orreporting abuse

NodeJS | Perl | PostgreSQL | ElasticSearch
  • Location
    Juazeiro do Norte - CE
  • Education
    Sistemas de Informação - IFCE - Cedro
  • Work
    Analista de Desenvolvimento PL em Venturus
  • Joined

More fromVictoria Ricarte Bispo Beserra

DEV Community

We're a place where coders share, stay up-to-date and grow their careers.

Log in Create account

[8]ページ先頭

©2009-2025 Movatter.jp