OOP编程:Perl封装详细指南

2021年3月20日14:00:10 发表评论 1,176 次浏览

Perl中的封装是包装数据的过程, 以保护数据免受外部源的侵害, 这些外部源不需要访问代码的那部分。封装是其中的一部分

面向对象编程

, 它用于绑定数据和用于处理该数据的子例程。

以另一种方式, 封装是一种保护性屏蔽, 可防止该屏蔽之外的代码访问数据。

  • 从封装技术上讲, 一个类的变量或数据对任何其他类都是隐藏的, 并且只能通过声明了它们的自身类的任何成员函数来访问。
  • 与封装一样, 一个类中的数据对其他类是隐藏的, 因此也称为数据隐藏.
  • 封装可以通过以下方式实现:通过导入用于设置和获取变量值的包, 将类中的所有变量声明为类的局部和获取方法。
OOP编程:Perl封装详细指南

考虑一个封装的真实示例, 在公司中, 有不同的部分, 例如帐户部分, 财务部分, 销售部分等。财务部分处理所有财务交易并保留与财务相关的所有数据的记录。同样, 销售部门处理所有与销售有关的活动, 并保留所有销售记录。现在可能会出现这样的情况:出于某种原因, 财务部门的官员需要特定月份的所有销售数据。在这种情况下, 不允许他直接访问销售部分的数据。他将首先必须联系销售部门的其他人员, 然后要求他提供特定数据。这就是封装。在这里, 销售部门和可以操纵它们的员工的数据被包装在一个单独的名称"销售部门"下。

例子:

# 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();

输出如下:

Name is: Rahul
Age is: 25
Roll_no is: 12

在上面的代码中, 如果需要访问类的数据进行任何修改或仅打印类的数据, 则无法直接完成。需要创建该类的对象, 然后使用get_details()方法访问数据。此过程称为数据封装.

封装的优点:

  • 资料隐藏:用户将不了解类的内部实现。用户将看不到类如何在变量中存储值。他只知道我们正在将值传递给访问器, 并且变量已被初始化为该值。
  • 更高的灵活性:我们可以根据需要将类的变量设置为只读或只写。如果我们希望将变量设置为只读, 则只需在代码中使用Get Accessor。如果我们希望将变量设置为只写, 则只需要使用Set Accessor。
  • 可重用性:封装还提高了可重用性, 并易于根据新要求进行更改。
  • 测试代码很容易:封装的代码易于进行单元测试。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: