美文网首页
面向对象之封装

面向对象之封装

作者: 依旧丶森 | 来源:发表于2017-07-26 21:06 被阅读10次

        封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。系统的其他对象只能通过包裹在数据外面的已经授权的操作来与这个封装的对象进行交流和交互。也就是说用户是无需知道对象内部的细节,但可以通过该对象对外的提供的接口来访问该对象。

       比如你的手机,手机的键盘,屏幕,听筒等,就是其对外接口。你只需要知道如何按键就可以使用手机,而不需要了解手机内部的电路是如何工作的。封装机制就像手机一样只将对外接口暴露,而不需要用户去了解其内部实现。细心观察,现实中很多东西都具有这样的特点。

对于封装而言,一个对象它所封装的是自己的属性和方法,所以它是不需要依赖其他对象就可以完成自己的操作。

为什么要封装?因为对象也是隐私的,没有人希望外界能知道自己的隐私,所以为了确保对象(爱人)在外界的良好形象就要保护好对象的隐私(对于人来说),那么对于程序来说,让别人知道的隐私越少,暴露出来的bug也能越少。当然隐私有时候也不是绝对的,比如有些事情对于家人就不算隐私,对同事,同学就完全算是隐私(身体上的特征)。

程序设计要追求“高内聚、低耦合

·高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;

·低耦合:仅暴露少量的方法给外部使用

所以要封装,隐藏对象的属性和实现细节,仅对外提供公共访问方式。

封装带来的好处

1.封装使得对代码的修改更加安全和容易。将代码分成了一个个相对独立的单元。将变化隔离;提高安全性;

2.便于使用隐藏对象内部的复杂性,只对外公开简单的接口,便于外界调用,从而提高系统的可拓展性、可维护性。封装使整个软件开发复杂度大大降低。 能很好的使用别人的类(class),而不必关心其内部逻辑是如何实现的。你能很容易学会使用别人写好的代码,这就让软件协同开发的难度大大降低。

3.封装还避免了命名冲突的问题。

4.提高复用性;

5.类内部的结构可以自由修改。

6.可以对成员进行更精确的控制

【封装原则】

1.将不需要对外提供的内容都隐藏起来;

2.把属性都隐藏,提供公共方法对其访问

注意:

封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果不想被外界方法,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。

封装实现的步骤

完成一个类的定义

所有属性私有化

给每个属性提供set/get方法

相关文章

  • 面向对象之封装

    面向对象之封装 封装是面向对象最重要的特征之一,封装就是指隐藏。 对象隐藏了数据(例如priv...

  • Java之面向对象的特征

    面向对象的特征之封装性 举例

  • Java进阶 | 从整体上观察面向对象

    一、面向对象 面向对象是Java编程中最核心的思想,基本特征:继承、封装、多态。 1、特征之封装 将结构、数据、操...

  • Java进阶 | 从整体上观察面向对象

    一、面向对象 面向对象是Java编程中最核心的思想,基本特征:继承、封装、多态。 1、特征之封装 将结构、数据、操...

  • 那些年出现的作业

    Java面向对象之类的练习之模拟计算器 demo Java面向对象之类的练习之ArrayBox封装 demo

  • python 面向对象封装案例

    面向对象封装案例 目标 封装 小明爱跑步 存放家具 01. 封装 封装 是面向对象编程的一大特点 面向对象编程的 ...

  • 14.Python对象封装

    面向对象封装案例 目标 封装 小明爱跑步 存放家具 01. 封装 封装 是面向对象编程的一大特点 面向对象编程的 ...

  • 营销比赛二三事

    Python面向对象编程三大特性调研 Python面向对象之封装 在Python中,没有类似 private 之类...

  • 面试 | java基础

    面向对象 1、面向对象特征? 封装封装是面向对象的特征之一,是对象和类概念的主要特性。封装,也就是把客观事物封装成...

  • 面向对象之封装

    什么时候应该封装类 当项目中出现一些零散的、有关系的基本类型数据时,考虑通过类型将这些数据统一组织起来管理。定义一...

网友评论

      本文标题:面向对象之封装

      本文链接:https://www.haomeiwen.com/subject/fnaokxtx.html