封装

封装(Encapsulation)是OOP的一大重要特性,为什么要进行封装呢?如何进行封装呢?站在用户的立场考虑,有些则需要见,有些则不需要见。而对那些要见得东西,我们要考虑用户思考、用户体验、用户习惯,总之,一切为了用户,毕竟,他们是我们的“衣食父母”。相反,对于那些不需要见得东西,我们可以设计成“黑盒子”,至于里面是些什么以及里面是如何工作的,用户不关心。而这样的“黑盒子”,就是所谓的封装。

实际上,我喜欢把封装当做一种思想来看待,在这种思想的指导下,一是可以对数据、逻辑业务等进行安保;二是便于可操控人员(架构师、开发者等)的管理;三是符合用户使用心理(简单、易用等)。Java语言中通过访问权限实现对数据成员和方法的封装,若是不需要见的东西可以设定为私有化,即用关键字private修饰;若是要见得东西就设定为公有化,即用关键字public修饰。为了方便理解,阅读如下代码:

/**
 *封装思想的展示
 */
public class Customer {
 /**
  *方法描述:默认构造方法
  *输入参数:无
  *返回类型:无
  */
 public Customer() {
 }

 /**
  *方法描述:构造方法
  *输入参数:String name,int id)
  *返回类型:无
  */
 public Customer(String name,int id) {
  this.name = name;
  this.id = id;
 }

 /**
  *方法描述:设置属性名字的方法
  *输入参数:String name
  *返回类型: void
  */
 public void setName(String name) {
  this.name = name;
 }

 /**
  *方法描述:获取属性名字的方法
  *输入参数:无
  *返回类型: String
  */
 public String getName() {
  return (this.name);
 }

  /**
  *方法描述:设置属性号码的方法
  *输入参数:int id 
  *返回类型: void
  */
 public void setId(int id) {
  this.id = id;
 }

  /**
  *方法描述:获取属性号码的方法
  *输入参数:无
  *返回类型: int 
  */
 public int getId() {
  return (this.id);
 }

  /**
  *方法描述:主方法
  *输入参数:String[] args
  *返回类型: void
  */
 public static void main(String[] args) {
  Customer tom = new Customer();
  tom.setName("Tom");
  tom.setId(1);

  Customer jack = new Customer("Jack",2);

  System.out.println("第一个客户的信息:");
  System.out.println("name=" + tom.getName() + "\tid=" + tom.getId());

  System.out.println("第二个客户的信息:");
  System.out.println("name=" + jack.getName() + "\tid=" + jack.getId());
  
 }

 //封装的数据成员,只能在该类中被使用,通过编写设置和获取方法来控制
 private String name;
 private int id;
}

运行结果如下所示:

第一个客户的信息:

name=Tom id=1

第二个客户的信息:

name=Jack id=2
总结:

1.封装不仅是OOP的重要特性之一,也是OOD的重要思想之一。

2.不管是文章所提到的“见与不见”,还是设计理念中的“开放与关闭”原则,实则都涉及到封装。

3.“站得高,看得远”,不仅从编程角度,更要从设计的角度认识封装。

你可能感兴趣的:(封装)