自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

残星说梦话

在路上...

  • 博客(22)
  • 收藏
  • 关注

原创 《大规模C++程序设计》读书笔记19

原则59:只保留一个不透明指针(指向包含一个类的所有私有成员的结构),会使一个具体的类能够将其客户程序与其实现绝缘。定义35:一个具体类如果满足下列条件,就是完全绝缘的:只包含一个数据成员,它表面上是不透明指针,指向一个定义具体类的实现的non-const struct(定义在.c文件中);不包含任何其他种类的私有的或保护的成员;不继承任何其他类;不声明任何虚拟的或内联的函数。原

2008-01-31 20:56:00 340

原创 《大规模C++程序设计》读书笔记18

定义34:满足下列条件的抽象类是一个协议类:(1)它既不包含也不继承那些包含成员数据、非虚拟函数或任何种类的私有(或保护的)成员的类;(2)它有一个非内联虚析构函数(定义了一个空实现);(3)所有成员函数(除了包含被继承函数的析构函数)都声明为纯虚函数,并任其处于未定义的状态。原则57:一个协议类几乎是一个完美的绝缘器。原则58:一个协议类可以用来消除编译时依赖和连接时依赖。

2008-01-29 20:30:00 364

原创 《大规模C++程序设计》读书笔记17

部分绝缘技术:消除私有继承即将IsA关系转换为HoldsA关系。私有继承是为了实现对基类成员的访问控制,有选择的开放基类成员。同样的功能可以通过不透明指针实现。Class2通过一个指向Class1的指针,有选择的开放Class1的成员,而不用继承Class1。注意,实质依赖于Class2的所有成员函数都应该声明为非内联函数。代价:额外的函数调用开销以及动态分配。消除嵌入数据成员即

2008-01-28 11:36:00 544

原创 天与地:Nokia与Motorola的第四季度财报

Nokia:Nokia今天发布了2007年第四季度财报。报告显示,得益于新型手机的热销,Nokia第四季度净利润同比增长44%,超过了分析师的预期。在截至12月31日的这一财季,Nokia的净利润为18.35亿欧元(约合27亿美元),每股收益47欧分。这一业绩好于去年同期,2006年第四季度,Nokia的净利润为12.73亿欧元,每股收益32欧分。Nokia第四季度运营利润为24.92亿欧元,比

2008-01-27 21:43:00 557

原创 生日,大雪

1月27日,西元生日,天降大雪。据媒体说,这场大雪为历史上所罕见。我来南京7年,这是记忆中的第三次大雪。第一次在02年圣诞前后,校园里银装素裹,到处是大大小小的雪人,有同学扮成圣诞老人,浪漫而温馨。第二次是在05年,没有02年的雪大,但也足够堆起雪人在风中矗立。今年已经下过两场雪了,从昨天凌晨开始下的这场雪是今冬的第三场雪,漫天雪花飞舞,积起十几厘米厚的积雪,整个城市白茫茫一片,南京如北国般风

2008-01-27 20:16:00 587

原创 《大规模C++程序设计》读书笔记16

定义33:一个被包含的实现细节(类型、数据或函数)如果被修改、添加或删除时不会迫使客户程序重新编译,则称这样的实现细节被绝缘了。封装:围绕一个类的实现的极薄的透明膜,用于防止只通过编程来访问类的实现。绝缘:围绕组件的无限厚的不透明的障碍,排除了与组件的实现进行直接交互的任何可能性。在下列情况下,会产生编译时耦合:继承(IsA) 基类的任何修改,都会迫使派生类以及派生类的所有客户程序重新

2008-01-24 21:16:00 484

原创 《大规模C++程序设计》读书笔记15

实现层次化的技术包括:升级:将相互依赖功能在物理层次结构中提高。降级:将共有功能在物理层次结构中降低。不透明指针:让一个对象只在名称上使用另一个对象。哑数据:使用表示对同层对象的一个依赖的数据,但只在单独的、较高层对象的上下文中。冗余:通过重复少量的代码或数据避免耦合来故意避免重用。回调:使用客户提高的函数,这些函数可以使较低层次的子系统能够在更全局的上下

2008-01-22 23:17:00 387

原创 《大规模C++程序设计》读书笔记14

原则45:不加选择的使用回调(callback)可能导致难以理解、调试和维护的设计。原则46:对回调的需求可能是不良的整体体系结构的一个症状。回调比传统函数更难以理解、维护和调试,应当被当作是最后的手段。原则47:建立较低层次对象的分等级的所有权,可以使一个系统更容易理解和更可维护。可以建立一个更高层的管理类来封装耦合代码。原则48:将独立可测试实现细节分解出来并降级,能够减少维护一个

2008-01-22 23:10:00 417

原创 《大规模C++程序设计》读书笔记13

原则42:与一些重用形式相关的额外耦合可能会超过从该重用获得的利益。例如:如果一个类只使用了一次String,则把这个String改成char*可以接触该类对String的依赖,当然,如果多次使用String,并且使用了String的高级功能(连接等),则需要做更多考虑。原则43:提供少量的冗余数据可以使对一个对象的使用只是在名称上,从而消除连接到那个对象类型的定义的开销。原则44:将子系

2008-01-19 19:47:00 406

原创 《大规模C++程序设计》读书笔记12

原则41:哑数据可以用来打破in-name-only依赖,促进易测试性和减少实现的大小,但是,不透明指针可以同时保持类型安全和封装;而哑数据通常是不能的。例子:用整数作为索引,而不是用迭代器访问容器内的数据。该索引只在一个有限的上下文中有意义。应用环境:某些引用在子系统的较低层次不必解释,而只在某个(通常)较高层次的对象的上下文中解释。在这种受约束的上下文中,尽管会损害类型安全和封装,但实现

2008-01-19 14:45:00 398

原创 《大规模C++程序设计》读书笔记11

定义28:如果编译函数f的函数体时要求提前看到类型T的定义,则称函数f实质(in size)使用了类型T。实质使用会导致直接的编译时依赖。定义29:如果编译函数f以及f可能依赖的任何组件时,不要求提前看到类型T的定义,则称函数f只在名称上(in name only)使用了类型T。只在名称上使用一个类型的特点在于这样的用法没有隐含的物理依赖--即使是在连接时。如果函数f只在名称上使用了类型

2008-01-16 22:36:00 423

原创 《大规模C++程序设计》读书笔记10

原则29:允许两个组件通过#include指令彼此"知道"隐含了循环物理依赖。定义26:如果一个子系统可编译,并且单个组件(包括.c文件)的包含指令隐含的依赖图是非循环的,则称这个子系统是可层次化的。原则30:相关抽象接口中的内在耦合使它们更抗拒层次分解。定义27:如果组件y处在比组件x更高的层次上,并且y在物理上依赖x,则称组件y支配(dominate)组件x。原则31:如果同层次的组

2008-01-15 23:19:00 440

原创 《大规模C++程序设计》读书笔记9

定义23:累积组件依赖(CCD,cumulative component dependency)就是在一个子系统内的所有组件Ci之上,对每个组件Ci在增量式地测试时所需要的组件数量进行求和。(即累积组件依赖就是为了增量式地测试子系统中所有组件所需的组件数量的总和)原则25:N代表系统中组件的数量。CCD循环依赖图(N)=(组件的总数)*(测试一个组件的连接时开销)=N*N=N2大型系统中连接

2008-01-14 21:34:00 496 1

原创 《大规模C++程序设计》读书笔记8

定义14:回归测试指的是这样的规程:运行一个程序(该程序被给定了一个固定期望结果集合的特定输入),比较其结果,以便检验程序从一个版本升级到另一个版本时是否能够继续如所期望的那样运行。基于启发式技术的软件、使用异步通信的系统,系统行为具有随机性,较难进行回归测试。原则15:对于测试来说,软件中的一个类类似于现实世界中的实例。原则16:对整个设计的层次结构进行分布式测试,比只在最高层接口进

2008-01-13 16:59:00 499

原创 《大规模C++程序设计》读书笔记7

指导方针7:避免把(远距离的)友元关系授权给定义在另一个组件中的一个逻辑实体。原则10:一个组件内部的友元关系是该组件的一个实现细节。定义13:若通过一个组件的逻辑接口不能通过程序访问或探测到该组件包含的一个实现细节(类型、数据或函数),则称这些实现细节被该组件封装了。原则11:为定义在同一个组件内的类授予(局部的)友元关系不会破坏封装。从组件的角度来说,一个操作(函数、运算符重载

2008-01-12 22:04:00 519

原创 《大规模C++程序设计》读书笔记6

定义10:如果编译或连接组件y时需要组件x,则组件y DependsOn组件x。DependsOn关系是一种物理关系,而IsA、Uses等关系是逻辑关系。物理关系作用于物理实体(文件、组件、包)之间,逻辑关系作用于逻辑实体(类、函数)之间。定义11:如果编译y.c时需要x.h,那么组件y展示了对组件x的编译时依赖。定义12:如果对象文件y.o(通过编译y.c产生)包含未定义的符号,

2008-01-10 22:55:00 469

原创 《大规模C++程序设计》读书笔记5

原则2:逻辑设计只研究体系结构问题;物理设计研究组织问题。定义5:一个组件(component)就是物理设计的最小单位。一个组件包含一组逻辑设计的子集,类、函数、枚举等等都是构成组件的逻辑实体。每个类定义都应该严格的只驻留在一个组件中。一般的,一个组件由一个头文件和一个实现文件组成。原则3:一个组件就是设计的适当的基本单位。定义6:一个组件的逻辑接口就是可被客户通过编程

2008-01-09 22:25:00 713

原创 《大规模C++程序设计》读书笔记4

主要设计规则3:在.h文件的文件作用域内避免使用自由函数(运算符函数除外);在.c文件中避免使用带有外部连接的自由函数(包括运算符函数)。(同主要设计规则2)自由函数应该包含在一个结构中,这样只有结构名可能会有冲突危险。自由运算符重载函数不能放在结构中。主要设计规则4:在.h文件的文件作用域内避免使用枚举类型、typedef和常量数据。C++支持嵌套类型,因此可以在结构中定义枚举类

2008-01-08 21:11:00 775

原创 《大规模C++程序设计》读书笔记3

主要设计规则1:保持类数据成员的私有性。定义4:若不能通过某个类的逻辑接口编程访问或检测到其包含的实现细节(类型、数据或函数),则称这些实现细节被该类封装了。如果认为数据成员不需要被封装,可以通过使用关键字struct来表示不需要封装的结构。应该将protect接口看成和public接口一样,只不过增加一个派生工作,即可将protect接口转换为public接口。主要设计规则2

2008-01-07 23:09:00 601

原创 《大规模C++程序设计》读书笔记2

定义1:一个声明将一个名称引入一个程序;一个定义提供了一个实体(例如,类型、实例、函数)在一个程序中的唯一描述。在给定作用域中,声明可以重复,定义只能有一个。例外:类的成员函数和静态数据成员,虽然不是定义,但在一个类声明中也不可以重复。Class NoGood {static int i; // declarationstatic int i; // illegal in

2008-01-07 22:39:00 597

原创 《大规模C++程序设计》读书笔记1

C++在C的基础上更加强了重用,但重用是有开销的,而且重用蕴含耦合,而耦合是我们不希望看到的,没有保障的重用应该避免。 质量的衡量标准有多个方面:可靠性、功能性、可用性、可维护性以及性能。我认为:这指的是狭义的质量,广义的质量应该包括三个方面:软件产品的质量(即狭义的质量)、流程的质量(CMMI,SixSigma,etc)、团队的质量。平时提到的质量,大多指的是狭义的软件产

2008-01-07 22:09:00 625

原创 开始用Zoundry

其实很早就申请了blog空间,但一直没有坚持耕耘,一方面是自己水平太菜,写出来的文字贻笑大方,另一方面是因为在线编辑器不太好使,有时候码字辛辛苦苦,浏览器一出错,所有东西game over。现在决定重新拾起blog,第一步就是找一个好用的离线工具。google了一把,Windows Live Writer和Zoundry看来人气较旺,由于平时就在Windows平台,就先下个WLW试试,结果下了

2008-01-07 21:44:00 460

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除