C++必知必会-第1章-数据抽象

fiftymetre 2006-04-04 11:07:05
条款1

数据抽象


“类型”是一组操作,“抽象数据类型”则是一组具有某种实现在的操作。当我们在某个问题领域中识别对象时,首选考虑的问题是“可以用这个对像来做什么”而不是“这个对象是如何实现的”。因此,如果某个问题的自然描述涉及的雇员、合同和薪水记录,那么用来解决该问题的编程语言就应该包含Employee、Contract和PayrollRecord类型。这样就允许在问题领域和解决方案领域之间进行双向、高效地转换,用这种方式编写的软件才能尽量避免产生“转换噪音”,从而达到更简洁、更准确。

在C++这样的通用编程语言中,不会有像Employee这样特定于应用程序的类型,我们有更好的东西:C++为创建复杂的抽象数据类型提供了便利。从本质上说,抽象数据类型的用途在于将编程语言扩展到一个特写的问题领域。

C++中不存在针对抽象数据类型设计的公认方案,这方面的编程依然需要灵感和艺术才能,不过许多成功的途径都遵循下面这组类似的步骤。

(1) 为类型选择一个描述性的名字。如果难以为这个类型命名,那就说明你还不知道你想要实现什么,你需要开动脑筋。一个抽象数据类型应该表示一个单纯的、有着良好定义的概念,而且为该概念所取的名字应该是显而易见的。


(2) 列出类型所能执行的操作。定义一个抽象数据类型的依据是能用它做什么。不要忘了初始化(构造函数)、清理(析构函数)、复制(复制操作)以及转换(不带explicit关键字修饰的单参数构造函数和转换操作符)。要避免在实现时简单地为数据成员提供一串get/set(获取/设置)操作-----那不叫数据抽象,而是懒惰且缺乏想象力的表现。


(3) 为类型设计接口。正如Scott Meyers告诉我们的那样,一个类型应该做到“易于正确使用、难以错误使用”。既然抽象数据类型是对语言的扩展,那么务必要正确地进行语言设计。你要为类型的用户设身处地地想一想,并且编写一些使用类型接口的代码。良好的接口设计除需考虑技术的威力外,心理学和情感方面的问题同样需要加以考虑。


(4) 实现类型。不要让实现影响类型的接口。要实现类型的接口所承诺的约定。记住,在大多数情况下,对抽象数据类型的实现和改动,远比对其接口的改动来的频繁。


Fiftymetre 打于2006-4-4 凌晨1.26  书的名字叫做”C++必知必会”我会每天打一章出来的,一共63章。 ^_^表怀疑偶是托啊。。。。您就当我只是为了实现我申请版主时的承诺吧。。。 祝大家可以学到东西


PS:到现在才发上来,是因为昨天上不了网上ADSL出问题了呵呵,上午刚让电信的GG来修好了。^_^
...全文
4322 82 打赏 收藏 转发到动态 举报
写回复
用AI写文章
82 条回复
切换为时间正序
请发表友善的回复…
发表回复
陈硕 2006-04-13
  • 打赏
  • 举报
回复
请问,我损了谁?
不利己倒是真的。
EnginePlus 2006-04-13
  • 打赏
  • 举报
回复
to Solstice(大佛) ( )

你不如让 优点出版社的人来说几句

你这么说也是损人不利己



discory 2006-04-07
  • 打赏
  • 举报
回复
都是高手
  • 打赏
  • 举报
回复
学好C++不容易啊!
liaoliao4481 2006-04-07
  • 打赏
  • 举报
回复
楼主你是刚学C++的还是在这里灌水哦
parallel2005 2006-04-06
  • 打赏
  • 举报
回复
支持中。。。
luvybird 2006-04-06
  • 打赏
  • 举报
回复
支持mm
romanticlife 2006-04-06
  • 打赏
  • 举报
回复
这里不光学了C++,还有法律,生活。这么多东西!
生活是有意思的。
umbrella1984 2006-04-06
  • 打赏
  • 举报
回复
goodluckyxl(被人遗忘的狗) ( ) 信誉:166 2006-4-6 9:09:15 得分: 0



荣耀是我上司以前的同事
距说 c/c++烂的很是写delphi出生的

那你老板是不是也一样啊?你老板一样那你是不是也....嘿嘿,^0^~



ps:Solstice(大佛) 说的对,楼主还是不要继续贴了,一码归一码,要帮助大家学习还有其他方法,抄的话又累自己又可能成被告的风险,有时间还是去翻译一些好文来给大家,更有价值,有时候是需要认真的,大家也是写程序的,正因为现在大家的版权意识不强,所以我们都是穷光蛋^0^。

r_mosaic 2006-04-06
  • 打赏
  • 举报
回复
美女是不能抽象的……
goodluckyxl 2006-04-06
  • 打赏
  • 举报
回复
荣耀是我上司以前的同事
距说 c/c++烂的很是写delphi出生的
howyougen 2006-04-06
  • 打赏
  • 举报
回复
可否加上楼主对每片文章的理解
我觉得这个也很有用
BluntBlade 2006-04-05
  • 打赏
  • 举报
回复
仿佛样稿还在我的硬盘上……

仿佛CSDN的某台服务器上也有……

仿佛……
陈硕 2006-04-05
  • 打赏
  • 举报
回复
没看过,在哪?
Wolf0403 2006-04-05
  • 打赏
  • 举报
回复
没看过……
BluntBlade 2006-04-05
  • 打赏
  • 举报
回复
放心,我是那种连引用标点符号后都会加上脚注滴淫……

PS:难道楼上没看过我03年的文章?
陈硕 2006-04-05
  • 打赏
  • 举报
回复
写书评是好事,不过请注意“适当引用”。

根据《著作权法》第二十二条,在下列情况下使用作品,可以不经著作权人许可,不向其支付报酬,但应当指明作者姓名、作品名称,并且不得侵犯著作权人依照本法享有的其他权利:

(二)为介绍、评论某一作品或者说明某一问题,在作品中适当引用他人已经发表的作品;

如果整本书都被你引用了,还声称这是“写书评”,不免显得有点掩耳盗铃。
Wolf0403 2006-04-05
  • 打赏
  • 举报
回复
我决定,给刀子的书评提序。。。


有国人就有江湖,有江湖的地方就不要计较版权了——那不符合侠义精神 -_-
BluntBlade 2006-04-05
  • 打赏
  • 举报
回复
50米,你的行为的确有侵权的嫌疑,下次还是不要这样原封不动地搬上来了。

PS:为了避免这种形式的侵权,我决定--写书评。
wwwxdwww 2006-04-05
  • 打赏
  • 举报
回复
对偶 满有帮助地~~

顶上去~~~
加载更多回复(62)

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧