O encapsulamento em Perl é o processo de agrupamento de dados para protegê-los de fontes externas que não precisam ter acesso a essa parte do código. O encapsulamento é uma parte da programação orientada a objetos , é usado para vincular os dados e as sub-rotinas que são usadas para manipular esses dados.
De uma maneira diferente, o encapsulamento é uma blindagem de proteção que evita que os dados sejam acessados ​​pelo código fora dessa blindagem.

  • Tecnicamente no encapsulamento, as variáveis ​​ou dados de uma classe são ocultados de qualquer outra classe e só podem ser acessados ​​por meio de qualquer função-membro da própria classe em que são declarados.
  • Como no encapsulamento, os dados em uma classe são ocultados de outras classes, por isso também é conhecido como ocultação de dados .
  • O encapsulamento pode ser alcançado: Declarando todas as variáveis ​​na classe como locais e métodos de busca da classe importando pacotes para definir e obter os valores das variáveis.

Considere um exemplo da vida real de encapsulamento, em uma empresa, existem diferentes seções como a seção de contas, seção de finanças, seção de vendas, etc. A seção de finanças lida com todas as transações financeiras e mantém registros de todos os dados relacionados a finanças. Da mesma forma, a seção de vendas lida com todas as atividades relacionadas a vendas e mantém registros de todas as vendas. Agora, pode surgir uma situação em que, por algum motivo, um funcionário da seção de finanças precise de todos os dados sobre as vendas de um determinado mês. Neste caso, ele não tem permissão para acessar diretamente os dados da seção de vendas. Ele primeiro terá que entrar em contato com algum outro executivo na seção de vendas e, em seguida, solicitar que ele forneça os dados específicos. Isso é o encapsulamento.

Exemplo:

# Declaration and definition of Base class 
use strict; 
use warnings; 
   
package Student;
sub new 
{ 
    
    # shift will take package name 'Student'  
    # and assign it to variable 'class' 
    my $class = shift; 
        
    my $self = { 
                'name'=> shift, 
                'age'=> shift,
                'roll_no' => shift
               }; 
        
    # Bless function to bind object to class 
    bless $self, $class; 
        
    # returning object from constructor 
    return $self; 
} 
    
# Method for displaying the details
sub get_details 
{ 
    my $self = shift; 
       
    print "Name is: $self->{'name'}\n"; 
    print "Age is: $self->{'age'}\n"; 
    print "Roll_no is: $self->{'roll_no'}"; 
} 
     
# Object creation and calling
my $obj1 = Student->new("Rahul", 25, 12);
$obj1->get_details();
Saída:
O nome é: Rahul
Idade é: 25
Roll_no é: 12

No código acima, se houver necessidade de acessar os dados da classe para alguma modificação ou apenas para imprimir os dados da classe então isso não pode ser feito diretamente. É necessário criar um objeto dessa classe e então acessar os dados usando o método get_details(). Este processo é denominado como Encapsulamento de Dados .

Vantagens do encapsulamento:

  • Ocultação de dados: O usuário não terá nenhuma ideia sobre a implementação interna da classe. Não será visível para o usuário como a classe são armazenados os valores nas variáveis. Ele sabe apenas que estamos passando os valores para os acessadores e que as variáveis ​​estão sendo inicializadas para esse valor.
  • Maior flexibilidade: podemos tornar as variáveis ​​da classe somente leitura ou somente gravação, dependendo de nossos requisitos. Se desejarmos tornar as variáveis ​​somente leitura, devemos usar apenas Get Accessor no código. Se quisermos tornar as variáveis ​​somente para escrita, então temos que usar apenas Set Accessor.
  • Reutilização: O encapsulamento também melhora a reutilização e é fácil de alterar com novos requisitos.
  • O código de teste é fácil: o código encapsulado é fácil de testar para teste de unidade.