OOP编程(Perl封装详细指南)

Perl中的封装是包装数据的过程, 以保护数据免受外部源的侵害, 这些外部源不需要访问代码的那部分。封装是其中的一部分
面向对象编程
【OOP编程(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。
  • 可重用性:封装还提高了可重用性, 并易于根据新要求进行更改。
  • 测试代码很容易:封装的代码易于进行单元测试。

    推荐阅读