📜  D编程-封装

📅  最后修改于: 2020-11-04 05:20:38             🧑  作者: Mango


所有D程序均由以下两个基本元素组成-

  • 程序语句(代码) -这是执行动作的程序的一部分,它们称为功能。

  • 程序数据-是受程序功能影响的程序信息。

封装是一种面向对象的程序设计概念,它将数据和将数据操作在一起的功能绑定在一起,并确保不受外界干扰和滥用。数据封装导致了重要的OOP概念:数据隐藏

数据封装是捆绑数据的机制,使用它们的功能和数据抽象是仅公开接口并向用户隐藏实现细节的机制。

D通过创建称为的用户定义类型来支持封装和数据隐藏的属性。我们已经研究过,一个类可以包含私有成员,受保护成员和公共成员。默认情况下,一个类中定义的所有项目都是私有的。例如-

class Box { 
   public: 
      double getVolume() { 
         return length * breadth * height; 
      } 
   private: 
      double length;      // Length of a box 
      double breadth;     // Breadth of a box 
      double height;      // Height of a box 
};

变量length,宽度和height是private 。这意味着它们只能由Box类的其他成员访问,而不能由程序的任何其他部分访问。这是实现封装的一种方式。

为了使类的各个部分公开(即,程序的其他部分可以访问),必须在public关键字之后声明它们。程序中的所有其他函数都可以访问在公共说明符之后定义的所有变量或函数。

使一个类成为另一个类的朋友可以暴露实现细节并减少封装。理想的是使每个类别的尽可能多的细节对所有其他类别隐藏。

D中的数据封装

在其中使用公共成员和私有成员实现类的任何D程序都是数据封装和数据抽象的一个示例。考虑以下示例-

import std.stdio;
  
class Adder { 
   public: 
      // constructor 
      this(int i = 0) { 
         total = i; 
      } 
      
      // interface to outside world 
      void addNum(int number) { 
         total += number; 
      } 
      
      // interface to outside world 
      int getTotal() { 
         return total; 
      }; 
   
   private: 
      // hidden data from outside world 
      int total; 
}
 
void main( ) { 
   Adder a = new Adder(); 
   
   a.addNum(10); 
   a.addNum(20); 
   a.addNum(30);  
   writeln("Total ",a.getTotal()); 
} 

编译并执行上述代码后,将产生以下结果-

Total 60

上一类将数字相加,然后返回总和。公共成员addNumgetTotal是与外界的接口,用户需要了解它们才能使用该类。私人成员总数是对外界隐藏的东西,但对于班级正常运转而言是必需的。

D类设计策略

除非我们真的需要公开他们,否则我们大多数人都通过痛苦的经验中学到了默认情况下将班级成员设为私有的方法。那只是很好的封装

这种常识最常应用于数据成员,但同样适用于所有成员,包括虚拟功能。