摘要:
4.1 尽量减少类的协作的数量,即减少使用者和被使用者的数量。 协作意味着一定程度的耦合,但是完全没有协作的类也是没有意义的,最多只能作为一个库使用。 通过抽象,依赖接口,可以最大程度减少依赖的实现类,对使用者来说,只看到接口的依赖,而具体的实现的依赖可以通后后期绑定来配置依赖关系。 如 菜单 --... 阅读全文
摘要:
使用关系对象A的方法MethodA使用了B的方法MethodB,则表示A对B存在使用关系 使用关系的最关键问题在于,A如何找到B,存在6种方案方案一: A包含了B,B作为一个成员定义在A的类中,那么在MethodA中可以直接调用B.MethodB() 如汽车可以包含车轮。 如果汽车需要加油,那么就需... 阅读全文
摘要:
3.7 从设计中取出不需要的类 只有Get/Set方法的类不算是一个必要的类,Get/Set方法也不算是有意义的行为。这种类降级为属性更加合适。3.8 去除系统外部的类 如果一个类只调用系统领域的方法,而系统没有向该类调用,则可以认为这个类并不属于系统。可能只是系统的使用者,我们没必要去为此建模。 ... 阅读全文
摘要:
面向过程的软件开发通过非常集中化的控制机制来分解功能,在程序设计中表现就是大量的条件判断,深层次的循环嵌套等。这种模式下,我们可以通过分析方法的参数,局部变量及其访问的全局变量来得到方法对数据的依赖性,但是我们只有分析整个项目代码才能得到数据对方法的依赖性。 面向对象的软件开发主要关注在非常分布的环... 阅读全文
摘要:
一,继承只应被用来为特化层次结构建模 实际上也就是要满足LSP原则,水果类<-榴莲的继承是特化二,派生类必须知道他们的基类,基类不应当知道他们的派生类 复用的前提三,基类中的所有数据都应该是私有的,不要使用保护数据(方法不在此原则约束下) 数据封装,物体的重量看起来可以用一个保护数据来表达,而不是g... 阅读全文
摘要:
一个对象一定会有如下4个属性: 1,它的身份标示,可能只是它在内存中的地址; 2,它的类的属性(通常是静态属性)和这些属性的值(通常是动态的); 3,它的类的行为(从实现者的角度看); 3,它的公开接口(从用户的角度看).2.1 所有数据都应该隐藏在它所在的类内部. 考虑最简单的点Point类(X,... 阅读全文
摘要:
为了理解ActiveX事件的运作原理,特意做了如下实验 初试化过程:try{ CLSID clsid; HRESULT hr=::CLSIDFromProgID(L"MSWinsock.Winsock",&clsid); if(FAILED(hr)) throw "获得对象的CLSID失败... 阅读全文
摘要:
为了弄清楚COM库的运行原理,特意做了这个实验: #include "stdafx.h"#include "objbase.h"#include "atlcomcli.h"#include "limits"//#include "commctrl.h"#import "msscript.ocx" n... 阅读全文
摘要:
题目大概是这样的:有两个数组a[N],b[N],求构造 b[i]=a[0]*a[1]*a[2]*...a[N-1]/a[i], 要求:1、不能使用除法。2、空间复杂度O(1),时间复杂度O(n)。3、除循环计数器和a[N]、b[N],不能使用其他变量。 个人看法: 与N有关,又要求空间复杂度O(1)... 阅读全文
摘要:
DH 请教下大家一个设计模式的问题 业务: 有多种短信指令,系统会根据接收到的指令进行相应的业务处理,处理完成后,系统会回复一条短信 这种业务处理,可以用哪个设计模式来做? QX 状态模式 DH 小雪,短信指令可能会增加,也可能会减少 QB 命令模式 DH 用命令模式更合适? QB 命令模式看起来挺奇怪的。 QB interface ICommand{IComm... 阅读全文