二.系统分析与设计:
采用OOP分析的关键就是要对问题的对象空间的分类(类的分析与设计,这一点跟面向过程的流程图设计不太一样),也就是在整个系统中包括那几个类,每个类包含那些属性特征和行为特征。对于上面的电梯问题,很明显有两个类:即电梯类和乘客类(从所设计到的对象描述可以观察到,但是有的问题即使这一步也要仔细分析)。电梯类应该反映所有关于电梯状态和行为的信息,而乘客类也应该反映这些信息。综合上面问题的表述,现在将分析结果整理如下:
乘客类:
Cpassenger { bool bInLift; //是否在电梯里 bool bSignal; //发出请求标志 bool bStart; //仿真启动标志(false标志仿真结束) Cstring flag; //标识每个人得序号以及需求层数 Int iAtFloor; //所在楼层 Int iToFloor; //要去得楼层 Int iLifts; //已经乘坐电梯得次数了 Int number; //乘客得序号 } |
电梯类:
Celevator { bool bStart; //仿真开始标志 int iAtFloor; //当前所处得层数得起点 int iToFloor; //即将去得层数 int iPassengers; //电梯里得人数 bool bStop; //电梯停止标志 bool bIsEmptyOperation; //电梯是否空载运行 CArray<CPassenger,CPassenger&> m_passengers; //存放载处于电梯里面得乘客 } |
这里说明一下,CArray<CPassenger,CPassenger&>是MFC里面的一个模板集合类,第一个参数表示该集合所存储的类别,第二个参数表示对该集合里面的元素所采取的访问方式,这里采用的是引用的访问方式,这种方式通过传递32位指针来进行访问,它同时兼有地址访问(效率高)和值传递的双重优势,现在一般对大的对象的存取一般提倡使用这种方式。
另外,这里也引用了view类,定义如下:
class CLiftsimulationView : public CFormView { UINT m_nTimer; int k; int n; int l; int s; int t; int floor; CPassenger m_passenger[100]; //最大为100个乘客 CElevator m_elevator; //一个电梯 int iSrcFloor,iDesFloor; //分别代表载客时得起始楼层和终结楼层,用在ontimer中 int iEmptySrcFloor,iEmptyDesFloor; //分别代表空载时得起始楼层和终结楼层,用在ontimer中 int itimes[41]; DWORD ElapseTime; void DeleteColor(int src); void DrawColor(int src,int increment); }; |
这里大致把各个对象的成员设定出来了,为了方便存储,将所有的变量定义为public的类型,这样可以提高存储的效率,当然了,它也破坏了OOP封装的思想,降低了对象与对象之间的隔离性。这里因为问题不是很复杂,所以我们采用前面的方法。至此,类设计基本结束了,当然了,很多时候不是一开始就可以把类设计得很好,往往都是要先设计一部分,然后在后面得问题得处理中,还要对原来设计的类结构进行添加和删除工作的。这里要特别注意的是类设计的最终目的是降低系统的耦合,达到程序逻辑与数据之间的分离,更有利于代码的编制和维护。 
说明:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
2/2 首页 上一页 1 2 |