Thinking in C++ chapter 1

这里写图片描述

第一章:对象的演化

1.1基本概念
面向对象程序设计_OOP
首个面向对面程序设计语言:60年代的Simula-67,目的:解决模拟问题;
类:描述了一组有相同特性(数据元素)和相同行为(函数)的对象;
another oop language:Smalltalk;
继承:表示基本类型和派生类型之间的相似性;
多态:
早捆绑:编译器对特定的函数名产生调用,而连接器确定调用执行代码的绝对地址;
晚捆绑:当给对象发送消息时,在程序运行之前不去确定调用的代码。编译器确保被调函数存在,并完成参数和返回值的类型检查,但它不知道将执行的准确代码。
关键字virtual表明某个函数有晚捆绑的灵活性。
virtual函数(虚函数)表示允许相同家族中的类有不同的行为。这些不同是引起多态行为的原因。

1.3方法学
复杂性分析:
程序设计制定原则:
(1)内部原则:程序自身的结构之中(通过程序设计语言的表达方式来了解。是程序的本质,让程序工作而产生);
科学工作 FORTRAN(FORmula-TRANslation);
商业 COBOL(COmmon Business-Oriented Language);
纯计算机科学 Lisp(List-Processing);
数学 APL(A Programming Language);
BASIC (Beginers All_purpose Symbolic Instruction Code);
(2)外部原则:程序的源信息中(“设计文档”,not “产品文档”。是程序的分析,为了将来维护和理解程序而产生);
FoobleBlah文档规范;
a.通讯:外部原则所产生的事物的本质
理想的外部原则目标:使关于程序分析和设计的通讯 更容易。
中心问题:产生好的设计。
成功方法的两个重要特征:
它帮助人们进行分析和设计;
没有短期回报,就不会加强投资;
b.量级:我们所需要的原则与待解决问题的量级有关。
方法学简化:代码多而文档少。
c.OOP是结构化吗
例子:改变一个问题的解描述,需要修改该问题的描述,即需要这一过程:机器模式->问题空间。过程程序最重要的方法学是结构化技术。
好的设计不仅要促进重用,而且它与各级开发者的需求是一致的。
1.2.4 对象设计的五个阶段:
对象的设计不限于写程序的时期,它出现在一系列阶段。
(1)对象发现:程序最初分析期间。
(2)对象装配:发现期未出现的需要的对象,可能要用新类支持它。
(3)系统构造:与系统中其他对象通讯和相互连接的需要,可能改变已有的类或要求新类。
(4)系统扩充:系统添加新性能时,可能需要重新构造部分系统,或增加新类。
(5)对象重用:重点测试。
对象开发原则:
(1)特殊问题生成一个类,在解决其他问题时完善它;
(2)发现所需要的类(设计系统的主要内容);
(3)逐渐了解每一件事,不断学习;
(4)开始编程,证明和反驳已生成的设计。用类分割来维护代码风格。
(5)尽量保持简单,理解充分时再扩展类接口。具有明显用途的不太清楚的对象比很复杂的接口号。
好的设计应当是首要目标,好的OOP设计也应当容易维护,但这是它的附加作用。
1.3.6 方法应当提供什么
最宝贵的资源–组员积极性。
1.通讯约定:
2.使系统结构化:
结构化是系统的核心。方法的实现基础:a.它需要什么类;b.如何把它们连接在一起,形成一个工作系统。
3.描述工具:模型不应当比它描述的系统更复杂,一种好的模型仅提供一种抽象。
符号设计原则:1)方法中不含有不需要的东西;(文中提到的“七加减二”属于认知心理学范畴)
2)通过深入到描述层,人们应当能够得到所需要的信息(高抽象层上建立隐藏层,需要时可见);
3)符号应当尽可能少;
4)系统设计和类设计是相互隔离的问题(符号应当首先集中在系统设计方面);
5)类设计符号是否必须;
6)符号应当在隐藏对象的内部实现;
7)保持符号简单。
4.不要耗尽最重要的资源:
5.“必”读:《软件的创造力》(Software Creativity,Robert Glass编,P r e n t i c e - H a l l , 1 9 9 5)
《人件》(Pe o p l e w a r e,Tom Demarco 和Timothy Lister 编,Dorset House,1987)
《复杂性》(C o m p l e x i t y, M. Mitchell Wa l d r o p编,Simon & Schuster, 1992)

1.4 起草:最小的方法
经济的使用时间,放弃不能带来重要成果的方法。
1.4.1 进行方法描述的前提:1)C++语言和语言性能中有许多防护,程序员可自建防护;
2)快速通过分析过程和设计过程以实现目标系统的测试是重要的(例子:wild-card 变体问题,不同于DBMS)。
wild-card变体问题:通过建议解处理该问题,得到最快的开发结果,使设计尽早的被证明或反证。
1.4.2 高概念:使用纯描述来概括简单和直接的核心。
1.4.3 论述(treatment):初始对象发现的起点和设计的第一个雏形。
1.4.4 结构化:
1)组织系统
从“高概念”、“论述”、“对象”和“设计”的第一层开始,被发现对象放在第二层子段中,放在“对象”下面。增加对象接口作为第三层子段,放在对象的特殊类下面。若基本表述文本产生,就在相应的子段下面作为标准文本。
2)特征:发现初始对象
名词作为类,动词或者变为这些类的方法或者变为系统设计的进程。这是一个反复过程,可能需要修改。
始于简单的论述检查,为每个已找出的唯一名称创建对象中的第二层子段。取明显作用于对象的动词,置于相应名词下的第三层方法子段。为每个方法增加参数表(可空)和返回类型。
若类继承与其他类,则该类第二层子段应尽可能靠近放在基类之后。
该过程只是创建类及其公共接口,没必要设置系统表示从公共接口继承来的方法,若必须,则作为相应的类下面的文本层注解出现。
简单的类几乎总是最好的,因为向类添加元素容易,随着时间推移,丢弃元素越来越困难。
分析论述时,应当在对象和系统设计之间来回运动。
3)情节:初始系统设计(如“输入、过程、输出”,“用户界面、活动”)
可将情节置于“设计”下的第二层子段。这个过程可以参考oop设计模式。
1.4.5 开发
1.初始翻译
根据“对象”,“设计”产生文件头;
“对象”中的第二层段,在段名(类名、基类名)中产生类声明,每个第三子段,段名(成员函数名、参数表、返回类型)产生成员函数声明;
2.代码产生
1)为“对象”段中每个类创建一个声明(产生一个头文件),带有公共接口函数和与之相联系的描述块,并附上供分析的专门标号;
2)为每个子情节产生头文件,并将它的描述拷贝在文件开头,作为注释块,之后是函数声明;
3)标记每个子情节、类和方法,形成加标号的、被注释的标识符(Rich Text Format(RT F ) 描述语言);
4)做语法检查,使之可编译(但不可连接),保证设计的高度完整性;
5)继续加工文档或开始编码。
1.4.6 重写
在设计文档中对设计有任何改变,头文件也必须完全重建。头文件表达了镭射机而我们必须能够由设计文档重新产生头文件。
1.4.7 逻辑
单个文档比由某些分析、设计和实现方法而产生的所有文档更合理。

1.5 其他方法
1.5.1 Booch:焦点在OOP的类、方法和继承的单独性能上。
1.在抽象的特定层上确定类和对象;
2.确定它们的语义;
3.确定它们之间的关系(类,责任,协作( Class, Responsibility, Collaboration,CRC)卡片);
4.实现类;
5.反复设计;
1.5.2 责任驱动的设计(RDD):CRC卡片的重点在于责任的授权而不是外观。
包含以下内容:1)数据和状态;
2)池和源:数据池和源的标识;处理或产生数据的类;
3)观察者或观点:观点或观察者类,用以隔离硬件依赖;
4)辅助工具或帮助器;

 1.5.3 对象建模技术(OMT):对过程增加一个或多个复杂层。对象、动态、功能模型。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值