面向对象三大特性之一-------封装的意义

思考

封装的意义:

封装从形式上来说,它将数据和操作界定在了某个圈子内,如果外界想要访问数据,或者使用某个操作,必须通过特殊的手段向这个圈子申请。 这个圈子便是类,特殊的手段就是接口。

即假如外界想要访问类中的数据或者使用类中某个方法的具体操作,必须通过这个类事先提供的接口来访问,这个接口一般就是方法名。

一开始学封装时产生的疑惑是 为什么要将数据和操作封装起来,然后想要使用的时候再通过接口访问,这不是很麻烦吗?

是的,确实很麻烦。但麻烦归麻烦,它带来的好处是这小小的麻烦无法所抵抗的。



首先把封装所带来的的优点阐述一遍:

  • 封装提高了了代码的复用性和可维护性。

    封装为编程的模块化提供了基础,封装好的每一个类相当于就是一个小的模块。而模块化的好处就是分工明确外加可以重复利用(比如一个类实现一个小功能,当某些地方需要用到这个功能的时候,就可以很方便地调用它,不同自己花大代价去实现,另外分工明确的好处就是当某一个功能出了问题时,仅需要修改它自身就好,对其他的功能并不造成影响)。

  • 封装提高了编程的安全性和灵活性。

    封装的核心在于面向接口(这里的接口指的是方法名),什么叫做面向接口呢?即对于类的编写者和类的使用者来说,唯一不变的东西便是接口,接口是两方的中介。接口让类的实现者可以根据需求动态地修改封装内的东西却不影响外部的调用者,同时接口也让外部调用者清楚地认识到这个类哪些部分是对自己开放的,哪些地方不可以碰。

  • 封装简化了编程。

    因为封装的缘故,将会有大量事先被编好的具备各种功能的类,这些类组成了一个十分丰富的类库。当我们在编程的时候,需要实现某个功能的时候,可以选择从类库中找找,有没有符合自己需求的类,而不是绞尽脑汁去想办法从零去实现一个具体功能。


举个例子来更好地理解封装带来的好处,比如假如你需要一台电脑,如果没有封装的话,你需要从零开始造一台电脑(嗯,好像玩大了)。但有了封装的话,相当于你只要把一台电脑所需要的部件都买回来(每个部件相当于一个类),零件厂家就是类的编写者,它们将各种元器件封装制造成有相对独立功能的电脑部件(比如 cpu 电源 显卡 内存条 等等),每个电脑部件都有它的插口或者连接线可以顺利地插到或者连接到主板上。

在这里需要注意一下,这些插口和连接线以及在主板上的与它们对应卡槽、插槽、或者线槽就相当于是类提供的接口。所以从这个角度我们可以看出接口有着规范和契约的作用,回到实际例子上,电脑部件厂家们都遵循着这些规范有什么好处呢?好处就是这些厂家可以专心只生产某几个他们自家工厂有优势的零部件,而不需要生产一整台电脑。而作为我们消费者(也就是类的调用者),当我们想要升级电脑上某个部件(比如内存从4G升到8G)或者某个部件坏了,只需要到市面上买一根升级或者替换用的相应内存条,装到我们电脑上就可以,而不是重新买一台电脑。

这就是封装以及面向接口带来的好处,封装让模块化成为现实,面向接口降低模块间的耦合性,提高了整个系统的灵活性和可维护性。(囧 明明是讲封装的 谈着谈着就谈到了接口.....毕竟类中提供的接口并不是真正的接口...只是在功能性质上有些接近)

---

参考链接

原文地址:https://www.cnblogs.com/Coffuture/p/8858620.html

时间: 2024-09-30 19:31:40

面向对象三大特性之一-------封装的意义的相关文章

JAVA基础——面向对象三大特性:封装、继承、多态

JAVA面向对象三大特性详解 一.封装 1.概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: 只能通过规定的方法访问数据.     隐藏类的实例细节,方便修改和实现. 3.封装的实现步骤 需要注意:对封装的属性不一定要通过get/set方法,其他方法也可以对封装的属性进行操作.当然最好使用get/set方法,比较标准. A.访问修饰符 从表格可以看出从上到下封装性越来越差. B.this关键字 1.this关键字代表当前

4月26 关于类,对象以及面向对象三大特性之封装

---恢复内容开始--- <?php//面向过程比如求一个圆的面积 $r=5; $m=3.14*$r*$r; //当直接规定半径时这是很方便的但是当变量改变时会出现代码的重复?>类和对象对象:能够见到的任何东西都可以称为对象, 也可以理解为类实例化出来的东西类: 对所有同类的对象抽象出来的东西 举例理解类和对象: 类:比如班级里面每个人相同的有学号,上课时间,休息时间,所上课程等:再比如说人所共有的姓名,性别,年龄等等,这些所公有的都可以统称为类:就像数据库没给表的第一行 对象:具体到一条具体

java 面向对象三大特性(封装,继承,多态)以及抽象、接口的介绍

封装: 1.定义:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别. 2.封装的目的是:增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的访问权限来使用类的成员. 3.封装的基本要求是:把所有的属性私有化,对每个属性提供getter和setter方法,如果有一个带参的构造函数的话,那一定要写一个不带参的构造函数.在开发的时候经常要对已经编写的类进行测试,所以在有的时候还有重写toString方法,但这不是必须的. 继承: 1.目的:实

面向对象三大特性之封装与多态

一 .封装 最主要的作用:隐藏对象的属性和实现细节,仅对外提供公共访问方式 封装原则 将不需要对外提供的内容都隐藏起来 把属性都隐藏,提供公共方法对其访问 在python中用双下划线开头的方式将属性隐藏起来(设置成私有的) #其实这仅仅这是一种变形操作 #类中所有双下划线开头的名称如__x都会自动变形成:_类名__x的形式: class A: __N=0 #类的数据属性就应该是共享的,但是语法上是可以把类的数据属性设置成私有的如__N,会变形为_A__N def __init__(self):

C# 面向对象三大特性:封装、继承、多态

面向对象有封装.继承.多态这三个特性,面向对象编程按照现实世界的特点来管理复杂的事物,把它们抽象为对象,具有自己的状态和行为,通过对消息的反应来完成任务.这种编程方法提供了非常强大的多样性,大大增加了代码的重用机会,增加了程序开发的速度,将具备独立性特制的程序代码包装起来,修改部分程序代码时不至于会影响到程序的其他部分. 1.封装 每个对象都包含它进行操作所需要的所有信息,封装只公开代码单元的对外接口,而隐藏其具体实现,尽量不对外公开代码.使用封装有很多好处,从设计角度来讲,封装可以对外屏蔽一些

java面向对象三大特性之封装

 其实以前一直在做Java开发的过程中或者刚开始初学的时候没有想那么多,都是单纯的一直去做,但是自从做了某个项目之后也慢慢发现很多时候,人的精力和脑力是有限的,总是会忘记以前做过或者学过的东西,慢慢就开始了写博客的习惯,一是可以自己加强一下,二是可以分享给别人可以和大家一起讨论一下,因为每个人的见解都会让你从中获得不同的东西,就想以前遇见的一个老师一样,他说他每讲一次讲面向对象都有着不同的感觉,所以也是对自己和还奋斗在一线程序员的一种鼓励吧,希望多少年后的我们回想起来,我们曾经也是那么的拼过.

Python面向对象三大特性之封装

面向函数的编程和面向对象编程对比 vim day7-2.py #!/usr/bin/python # -*- coding:utf-8 -*- def Bar(): print 'Bar' def Hello(name): print 'I am %s' %name class Foo: def Bar(self): print 'Bar' def Hello(self,name): print 'I am %s' %name Bar() Hello('liuyueming') obj = Fo

面向对象三大特性之封装

1.定义 [封装] 隐藏对象的属性和实现细节,仅对外提供公共访问方式. 广义上的封装 : 属于一个类的静态和动态属性 总是出现在一个类中 使用时永远用类名或者对象名调用 狭义上的封装 : 就是把变量\方法私有化,在类的外部以及子类中不能直接使用了 [好处] 1. 将变化隔离: 2. 便于使用: 3. 提高复用性: 4. 提高安全性: [封装原则] 1. 将不需要对外提供的内容都隐藏起来: 2. 把属性都隐藏,提供公共方法对其访问. 2.私有变量和私有方法 1).私有变量 在python中用双下划

Objective-C----MRC内存管理 、 自动释放池 、 面向对象三大特性及封装 、 继承 、 组合与聚合

1 MRC练习 1.1 问题 引用计数是Objective-C语言采用的一种内存管理技术,当一个对象被创建在堆上后,该对象的引用计数就自动设置为1,如果在其它对象中的对象成员需要持有这个对象时,则该对象的引用计数被加上1,此时如果该对象被释放,内存管理程序将首先把该对象的引用计数减1,然后判断该对象的引用计数是否为0,由于其它对象在持有该对象时将引用计数加了1,所以此时该对象的引用计数减1后不为0,则内存管理程序将不会释放该对象.直到持有该对象的其它对象也被释放时,该对象的引用计数再次减1,变为