Board logo

标题: 信息隐蔽与封装 [打印本页]

作者: liweiwei0808    时间: 2004-9-22 21:34     标题: 信息隐蔽与封装

各位:谁能给我解释一下信息隐蔽和封装的详细区别?并且举个例子,在例子里边只用到 了信息隐蔽,没用到封在装。给我发邮件liweiwei0808@126.com

[此贴子已经被作者于2004-09-22 21:35:53编辑过]


作者: yms123    时间: 2004-9-22 23:10

隐藏封装?是指类的隐藏和封装?类隐藏和封装只对外部访问而言,一般类内部的成员是自由访问。至于封装举个例子,就好比一台电视机,你只用遥控器遥控就可以操作电视机。而电视机出厂后你是看不到他里面的零件的,被外壳封起来了。而且你就操作遥控器就可以了,不必说你还得了解电视机电路开电视还得去接通电视机里面的线头(再说这样也不安全漏了电就麻烦了)。同理类的封装就是把它私有的一套属性和方法封装,用公开的函数或方法访问私有属性和方法。这些公开函数就象电视机遥控器一样,而那些私有的属性和方法就是电视机里面的零件。通过公开方法访问,私有属性和方法就象拿遥控器开电视的道理一样。这样就解释了数据的安全性。
作者: live41    时间: 2004-9-22 23:16

隐蔽 - 不可见调用类内变量

封装 - 指整个为你的目的所设计的算法,用一个完整的类实现,封装,如其名。


作者: liweiwei0808    时间: 2004-9-23 11:12

谢谢各位!
作者: skay    时间: 2004-9-24 22:06

我还是看不明白阿!~~  请那位高手帮忙取个例子。也许会更好的理解,我更注重实践。
作者: live41    时间: 2004-9-24 22:59     标题: [转帖]

封装   封装(Encapsulation)是把对象的属性和服务结合成一个独立的系统单位,并尽可能隐藏对象的内部细节。   封装是面向对象方法的一个重要原则,系统中把对象看成是属性和对象的结合体,使对象能够集中而完整地描述一个具体事物。封装的信息隐蔽作用反映了事物的相对独立性,当我们从外部观察对象时,只需要了解对象所呈现的外部行为(即做什么),而不必关心它的内部细节(即怎么做)。   举例:电视机包括外形尺寸、分辨率、电压、电流等属性,具有打开、关闭、调谐频道、转换频道、设置图象等服务,封装意味着将这些属性和服务结合成一个不可分的整体,它对外有一个显示屏、插头和一些按钮等接口,用户通过这些接口使用电视机,而不关心其内部的实现细节。   与封装密切相关的概念是可见性,它是指对象的属性和服务允许对象外部存取和引用的程度。   在软件上,封装要求对象以外的部分不能随意存取对象的内部数据(属性),从而有效地避免了外部错误对它的"交叉感染",使软件错误能够局部化,大大减少了查错和排错的难度。另外,当对象内部需要修改时,由于它只通过少量的服务接口对外提供服务,便大大减少了内部修改对外部的影响,即减少了修改引起的"波动效应"。   封装也有副作用,如果强调严格的封装,则对象的任何属性都不允许外部直接存取,因此就要增加许多没有其他意义、只负责读或写的服务,从而为编程工作增加了负担,增加了运行开销。为了避免这一点,语言往往采取一种比较灵活的做法,即允许对象有不同程度的可见性。

信息隐蔽 – 也称封装。 – 模块内部的实现细节与外界隔离 面向对象技术充分体现了分解,抽象,模块化,信息隐蔽等思想,可以有效地 – 提高软件生产率 – 缩短软件开发时间 – 提高质量 面向对象技术的优势

[此贴子已经被作者于2004-09-24 23:04:13编辑过]


作者: live41    时间: 2004-9-24 23:05


封装是一个很长的过程,我写实例的话要写很久,反正你不用太明白,词语名字而已,关键是怎样编好的代码而不是了解概念。
作者: yms123    时间: 2004-9-25 13:30

以下是引用skay在2004-09-24 22:06:11的发言: 我还是看不明白阿!~~ 请那位高手帮忙取个例子。也许会更好的理解,我更注重实践。

我已经举过例子了,封装就是为了数据的安全性,把一些私有属性或方法封装。你可以把类看成你家,你在家里使用你家里的东西没有任何限制,你可以随便使用。外人是无法使用的,而且外人也进不去你家除非你同意(否则那就叫小偷了)。而外人要进你家或使用你家的物品必须你同意才行,你不同意他就进不去。所以说你就好比那个公开的函数或方法,因为你出了你家的门别人能够看见你,别人不会说还能看见你家的东西吧?别人也只能看见你。你家里有什么别人是看不见的,刚才说了别人要想使用你家里的东西只能管你借或让你同意。比如

class 你家

private:

//你家里的东西(家俱和物品等)比如有椅子钢笔;

钢笔;

public:

//你可以把东西借给人家

借的东西 你借东西()

借给谁某某东西

};

void main()

{

你家 你;

//这就好比你从家里出来了

外人 小王;

小王=你.你借东西()

//小王管你借东西,比如你同意把钢笔借给小王,那小王就得到了钢笔

}


作者: yms123    时间: 2004-9-25 13:35

上面的例子已经够明白的了吧。

同样如果

小王=你.钢笔;

就是小王直接拿了你的钢笔没向你借,那你肯定不干。

所以你在c++里直接用对象访问类的私有变量编译器就会报错就是这个问题。


作者: kuangjingbo    时间: 2004-9-25 21:10

一些软件的词汇都是从硬件上来的,比如你买一个cpu ,你看到的只是看到cpu的管脚 ,你不需要知道cpu怎么制造,你只要通过这些管脚向cpu来传递信号就可以了

一个软件模块,你不必要知道它是怎么写的代码,你知道知道它完成哪些功能就可以了,你通过它给你的函数调用来跟它进行访问






欢迎光临 编程论坛 (https://bbs.bccn.net/) Powered by Discuz! 6.1.0