代码大全第六章摘抄

1.抽象数据类型定义:是指一些数据以及对这些数据所进行操作的集合。

 

2.抽象数据类型的好处:1.可以隐藏实现细节。2.修改一处代码而不会影响整个程序。3.让接口能够提供更多信息,而不是全局变量进行控制。4.更容易提高系统性能,只需要修改单独的一个子程序即可。5.让程序的正确性更加显而易见。6.程序更加有说明性,让人更为直观知道接口和变量的意义和作用。7.无需在程序内部到处传递数据。8.更容易实现底层隔离,更容易像现实中操作实体。

 

3.类接口为其后具体试下提供了一种抽象,类接口应能提供一组明显相关的子程序,每个子程序为一个一致的目标而工作。

 

4. 类接口应该展现一致的抽象层次。(OrderMgr负责订单管理和状态维护,订单如何操作是上一级的事情。撤单重下不应该是OrderMgr负责的事情,这样OrderMgr展现一致的抽象层次,职责明确,有2中的各项好处。)

 

5.有些类非常相像,编写代码前需要理解类到底抽象的内容。

 

6. 提供成对的服务。在实际编程过程中,存在大量响应的相等,成对的操作,需要思考是否真的需要相反的操作,为其他接口提供这些服务。

 

7.把不相关的信息转移到其他类中。如CTP1.0合约列表,潜在的要求是MD和Exc合约要完全一致,实际上只需要保留一份合约列表即可,更合理的做法是只由MD去管合约列表,EXC有权访问这些变量即可。

 

8.尽可能让接口可编程,而不是表达语义。如,Monitor需要依赖于OrderMgr启动,假设Monitor在OrderMgr前启动,可能导致Monitor崩溃。在接口编程中需要处理这个情况,将Monitor检查OrderMgr是否准备完成放在Monitor自身逻辑之中,让调用者无需关心这些“潜在的规则”。

 

9. 谨防在修改时破坏接口的抽象,也不要添加与接口抽象不一致的共用成员。

 

10. 抽象和封装往往是高度相关的概念,没有良好的封装,抽象概念往往很容易被破坏掉。

 

11. 尽可能限制类和成员的可访问性,不要公开暴露成员数据。这个是封装的重要概念,防止其他人调用你的类时,随意修改你的类的数据。IntraTrading如果没写好,存在一定可能修改MD原始数据,MD需要做好数据保护,防止其他类随意修改,每次调用时,返回原始数据的拷贝。

 

12. 避免把私用的实现细节放入类的接口中。没有体会到好处,暂时没有理解。

 

13. 不要对类使用者做出任何假设。如,初始化MD需要填入账号和密码,最好在实现上(初始化)把这些要求的数据,强制让使用者提供,而不是让使用者逐个填写。

 

如上图,CTP接口需要让使用者关系每个事物的调用和调用顺序,GTA接口需要使用者关心上海涨跌停数据获取,而不是自己接口直接提供。

 

14.不要因为一个子程序仅适用公用子程序就把他归入公开接口。

 

15. (尽量)避免使用友元类。他会破坏封装。我认为,除非能够非常提高效率的事情,尽量不要使用,书中直接说避免不太可取。

 

16. 让阅读代码更方便,而不是让编写更方便。阅读代码的次数比编写代码的次数要多的多。如果为了开发方便,而破坏了程序的抽象性,降低了代码的可阅读性,是这段代码质量走下坡路的开始。

 

17.警惕语义上破坏封装。暂时没有get到点上。

 

18. 留意过于紧密的耦合关系。如AlgoMgr和OrderMgr。

 

19. 包含是“有一个...”的关系。如电话,姓名等。

 

20. 万不得已采用私有继承去实现有一个的关系。

 

21. 警惕超过7个的数据成员类,一般情况下该类可以分成多个子类。

 

22.继承“是一个。。。”关系。准确来说是特化的关系。

 

23. 继承是一个添加复杂度的技术,需要有详细说明,要么就不要使用。

 

24. 遵循里式替换原则。使用者无需关系继承类和基类的差异。

 

25. 不要覆盖一个不可覆盖的成员函数。如基类中已经实现了一个私用的成员函数,如果在实现类中去创建同名的成员函数,会使得阅读代码的人产生困惑。

 

26. 把共用接口数据和操作放入继承树尽可能高的位置。

 

27.只有一个实例类的继承是值得怀疑的,如果只有一个继承为什么不直接实现。

 

28.只有一个派生类基类也值得怀疑。如果看到只有一个派生类基类,要怀疑是否提前设计。因为试图去预测未来需求,常常没有真正了解未来到底需要什么。应对未来的工作,最好的方法是,让眼下的工作成果尽可能的清晰,简单、直截了当,不要创建非绝对必要的继承结构。

 

29.派生后覆盖了某个子程序,但在其中没有做任何操作,这种情况也值得怀疑。这条我能够理解,但还没有体会重要性。

 

30.避免让继承过深,继承的深度超过2到3层,人就会难于理解。

 

31.尽量使用多态,避免大量类型检查。

 

32.多个模块需要共享数据,应该创建这些类包含的公共对象(数据中心),如果多个类共享行为,应该使用继承在基类定义好公共子程序(Exc和MD)。

 

33.当你想用基类控制接口用继承,自己控制接口用包含。

 

34.让类中的子程序尽量少,类中子程序数量越多,出错率也越高。

 

35. 禁止隐式产生不需要的成员函数和运算符。

 

36. 减少类调用不同子程序的数量。

 

37. 根据迪特米法则,对于程序间间接调用也要尽可能少。

 

38. 减少类和类之间相互合作的范围。

 

39. 如果可能,在构造函数初始化所有数据成员,是一个不难做到的防御式编程。

 

40. 用私用构造函数强制实现单件属性。

 

41. 优先采用深拷贝,除非论证可行,才会使用浅拷贝。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值