注册 登录
编程论坛 C++教室

抽象 封装

wsaaa 发布于 2007-07-03 22:17, 1237 次点击
c++是如何实现抽象与封装的
13 回复
#2
aipb20072007-07-03 22:26
oop & class……
#3
wsaaa2007-07-03 23:26
回复:(aipb2007)oop & class……

什么意思啊,我是个新手,刚学c++,能说的明白一点吗?

#4
aipb20072007-07-03 23:28
既然是新手,就不应该问的这么笼统。
自己好好体会。等你有一定基础了,自然会明白。
GOOD LUCK……
#5
wsaaa2007-07-03 23:35
回复:(aipb2007)既然是新手,就不应该问的这么笼统...

关键这是个考试的题目啊,没有办法啊,老师用90分钟就把类 这一张讲完了啊,出的考试题目也不懂,而且在书上也找不到啊,急啊,不然就不会再论坛上问了,自己可以 慢慢的看,在慢慢的理解啊。

#6
yushui2007-07-03 23:59
怎么考概念啊 网上查的
封装是人们对现实世界中解决问题时,为了进行简化问题,对研究的对象所采用的一种方法,一种信息屏蔽技术。例如:打电话的时候,我们只需简单的按几个按钮就可以了,我们没有必要去了解电话内部的线路、网络的连接,这样一来通过对实现细节的封装,就使得本身很复杂的问题变得非常简单,容易操作,并且出错的几率大大减小

封装的主要目的:
就是达到接口和实现的分离。通过封装,对内我们将实现细节隐藏起来,对外我们则通过接口向客户提供相应的服务。将接口和实现分离是避免所谓的“涟漪现象”的关键(涟漪现象,即“一石激起千层浪”。在软件开发过程中,经常会出现为了某个目的,修改一个文件A,结果必须修改与之相关的其他文件B、C,修改文件B、C就要修改相关的文件D、E、F、G,如此循环往复,就会造成大规模的修改,最终会以瀑布式扩散到系统的各个地方。就象在湖中央投下了一颗石子,造成整个湖面的波动,“涟漪现象”由此而得名)。
将接口和实现分离是软件重复使用的一个手段,其作用主要体现在以下4个方面:
1、降低了系统内部各个模块之间的耦合,使系统更有弹性。
2、将软件中的BUG精确定位到较小的模块,有助于软件的调试工作。
3、降低系统的复杂性
#7
yushui2007-07-04 00:03

抽象是对象的最简化的接口,他向客户提供了所期望的服务。理解抽象的关键,在于接口,抽象是对象接口的抽象,对于特定的对象,抽象就是一个明确的接口,对于电话,按钮就是他的接口(抽象)。

用好抽象的关键在于对所研究问题的深刻理解。设计的比较好的抽象可以把说明从实现中分离出来,通过提供必备的信息,隐藏起实现的细节,让客户以较为安全和客预测的方式使用对象,同时通过降低复杂性,以简单接口的方式降低学习难度,提高学习效率。

好的抽象,应该使客户打消“偷窥”的念头(不过总是有些人想方设法去窥视具体的实现),按照抽象编程,使得最终的客户代码更加的简单、安全和稳定,在这方面,标准程序库和各种准标准程序库做得最为出色。

一个好的抽象必须提供明确的、完整的、易于理解的说明,依赖抽象编程,实际上就是依赖这些说明进行编程,他比依赖实现编程有很大的优势:

1、阅读说明比阅读源代码容易得多,时间节省了很多,也更容易理解。

2、通过说明的完整性(例如先置条件、后置条件、适用范围等),我们可以很清楚的了解一个类的完整性。

3、通过说明,我们的接口具有更大的弹性和可扩展性(例如我们可以采用更加有效的方法实现sort接口)。

4、规定接口必须有说明,把那些没有相应说明的接口定义为错误,使得类的维护更加容易。

一个好的说明应该是规定接口必须提供的服务,必须完成的任务,而不是已经做过的事情。

#8
yushui2007-07-04 00:04
封装通过提供抽象,隐藏了实现的细节,通知客户那些是可以随便使用的稳定的服务,那些是随着版本的更新有可能发生变动的细节,例如有一个接口:void sort();通过接口的说明,客户可以知道这个接口用来进行排序,具体的排序方法是什么,客户无需关心,可能在版本1中,采用的是冒泡排序,在升级的版本2中,采用的则是快速排序。客户既然不用关心细节,那么使用什么方法对客户的代码不会带来任何影响。对于一个已经公布的接口/抽象,我们不能够随意更改,例如在版本1中提供了sort接口,那么在升级的版本2中必然也要有这个接口,因为版本公布之后,我们就无法知道,这个接口是不是有人在使用,如果我们在版本2中禁止了sort接口,那么所以使用版本1的客户代码无法升级,若强行升级,势必带来客户代码的中断,这个特点在COM中尤为明显。
#9
zkkpkk2007-07-04 08:19
以下是引用wsaaa在2007-7-3 23:35:48的发言:

关键这是个考试的题目啊,没有办法啊,老师用90分钟就把类 这一张讲完了啊,出的考试题目也不懂,而且在书上也找不到啊,急啊,不然就不会再论坛上问了,自己可以 慢慢的看,在慢慢的理解啊。

大学就是这样的啦,自己去看呗

#10
yuyunliuhen2007-07-04 09:42
那确实
#11
anthony6342007-07-04 13:49

我最讨厌考试问这个问题!!!为什么要封装?为什么要抽象,根据什么来分装,根据什么来抽象?学校里做的小东西,能实现就不错了,变动很少,结果乱封装的人一堆,要真正理解面向对象的好处,就找个同学,自己出一个题目,代码量在5000~1万左右,做好之后叫他来找毛病,提需求,然后你就会把那些经常被人蹂躏的部分用和函数或类包起来,以后他再变也就是改一点而已,这样再多叫5、6个同学来折腾你的软件,直到他们觉得没什么好改了,知道你要修改一样东西的时候不会涉及到很多乱七八糟的,自己都搞不清楚的东西的时候,直到你里面做的东西人家随手就可以拿来用的时候,那时我想你会明白封装是什么意思,根据什么来封装,该怎么封装, 如果你有别的方法能让代码更好的修改,更好的重用,就用那个,管他什么方法呢?
考试制度约等于垃圾。

#12
野比2007-07-04 14:09

简单点说...C++是通过类(Class)来实现抽象和封装的

具体你要复习关于类的那几章了... 继承, 多态, 抽象...
不会找不到的... 书上不可能写"这题答案如下.."这样的内容吧?..
如果你学了90分钟还一点头绪没有的话, 说明你听课的认真程度还有待加强...

-------------

呵... LS这么愤慨干啥...
考试的好处在于让自己获得一个资格..
如果完全看能力来决定成绩... 哪里又能有个定量的标准呢? 人各有所长.. 还是不公平嘛..
还有..封装不仅仅是可重用..

#13
aipb20072007-07-04 15:58
11楼说的不无道理,要自己去实践才体会的到啊。

光问答式的完全没用。
#14
zkkpkk2007-07-04 20:07
11楼口锋犀利,我不能及
1