OOP设计思想之教学设备系统.附UML图.(一)
OOP设计思想之教学设备系统.附UML图.(一)07年,IT经理要我给开发部的新同事培训,主要是OOP及设计思想相关。
我构思了几套方案: 其一是POS零售系统,主要介绍界面设计及简单业务逻辑. 其二是汽车模型. 其三是教学设备系统 所谓教学设备系统,其实是做demo用的一套设备,包括笔记本电脑,投影仪,录音器和投影用的幕布. 为了使讲课内容通俗易懂,我选择更接近生活和日常所见的事物,于是产生教学设备系统的概念. 由于是临时想出来的方案,在上课之前没有搜集相关备课资料,难免有点心虚,在讲第一堂课仅介绍一些概念,抽象一些模型。后来在边介绍项目的同时动手建立了一个设备雏形. 定义出一组接口及介绍为什么要定义接口,讲解了接口与接口之间的藕合关系,最后由接口派生出一组类。同事们对这个话题很感兴趣,设备就在面前,看到这些设备的连接自然就理解了类之间的互动了。 接下来的工作就是逐步实现教学设备系统。 教学设备系统运行效果图: 下面的内容是定义接口,类UML图 定义两个最原始接口IDevice和ISwitchable. IDevice设备接口抽象一个方法CheckingSystem(),检查设备是否与其它设备建立联系. ISwitchable具备开关电源功能的接口,SetPower方法传入参数True表示打开电源,False关闭电源。 其实可以拆分两个方法: TurnOn()和TurnOff(). 屏幕接口,只定义一个方法Draw,在屏幕上绘制图像。 笔记本电脑接口,同时继承IDevice和ISwitchable,称为多重继承,接口可以多重继承,类也一样。 该接口负责向投影仪发送图片及向录像设备输出屏幕截图。组合了两个对象IRecorder,IProjector,这样电脑可以通过这两个接口(变量)实现通信. 简单地说,类与类之间的互动是通过组合与引用实现的。从这个UML图就能理解。 投影仪接口实现多重继承,同上。组合IScreen对象,那么投影仪可以通过IScreen对象的实例向屏幕发送图像。 Play方法:向屏幕发送图像. AcceptImage方法:接受来自笔记本电脑的输出图像。 ShowDefaultImage方法:当投影仪没有连接电脑时,屏幕上会显示投影仪的预设图像,如公司Logo. 录音设备接口实现多重继承,同上。 Content属性:存储录制内容.录音与录像的数据表达形式是帧,比如电影胶片.所以抽象出来录制内容用动态数组存储. Record方法:录制来自电脑的截图及讲课人的发声。 笔记本电脑的类图。 学习内容:实现接口,多重继承,类与接口之间关系. 投影仪类图 IProject接口派生两个类ProjectorPanasonic和ProjectorHP2500L 注意NotebookDELL类的IProjector接口,明示笔记电脑兼容任何派生自IProjector接口的类。 所以NotebookDELL类的IProjector兼容ProjectorPanasonic和ProjectorHP2500L. 从逻辑关系角度来讲,NotebookDELL类与IProjector接口有藕合关系,NotebookDELL 依赖IProjector接口,与IProjector接口派生的ProjectorPanasonic和ProjectorHP2500L类 没有直接藕合关系。这正是接口的威力所在!当ProjectorPanasonic不能工作了,可以立刻换上ProjectorHP2500L继续做demo,只需要设置NotebookDELL.Projector为ProjectorHP2500L. 使用接口的另一个好处是分离代码,解除类与类之间的依赖关系,因此你的系统不会写成天罗地网。 比如:定义一个CommonInterface的dll命名为i.dll,该模块定义一组接口.比如定义一个IProjector接口, 另外3个业务逻辑分别是a.dll, b.dll, c.dll。a模块的CProject类实现了i.dll里面的IProjector接口. 而b,c都要引用a模块的CProject类. 这样b.dll和c.dll与a.dll有依赖关系(引用关系)。 但是a.dll是系统的核心模块里面有超复杂实现,开发人员不想公开a.dll其它的类。怎么办? 很简单:b和c引用i.dll就行了, 因为a模块的CProject类实现了IProjector接口啊! 接口有转移代码的特异功能,我不需要你的类,但我需要你的接口. 最后我们的代码写成这样: IProjector p=this.GetCurrentProjector(); p.MakeSchedule(); 这样解除了b,c与a的藕合关系,b,c也看不到a模块内任何内容。 打心底佩服那些悟出来用接口抽象事物的天才们!!!! 有了接口程序才更有活力啊! 录音/录像设备,参考IRecorder描述。 幕布(投影用,有时我们直接投影在墙上,不过效果差点) 参考IScreen定义 扫一扫加作者微信
参考文档:
无线监控系统之一-------UML设计 最全C#OOP设计思想之汽车模型源代码 Winform快速开发框架之权限系统设计(2) - 功能模块介绍 软件开发与设计 - GIS-地理信息系统-配电地理信息系统 软件开发与设计 - HR-人力资源管理系统(教学管理信息) 软件开发与设计 - HR-人力资源管理系统(考试系统数据库) 软件开发与设计 - MIS-管理信息系统-XX省应急平台体系数据库 软件开发与设计 - MIS-管理信息系统-教师教学资源库管理系统 软件开发与设计 - MIS-管理信息系统-仿新浪微博的网站 软件开发与设计 - MIS-管理信息系统(财务辅助预算管理系统 数据库设计) 软件开发与设计 - OA-办公自动化-全能OA办公系统 2012 软件开发与设计 - BBS-电子布告栏系统(XX论坛数据库设计) 软件开发与设计 - MIS-管理信息系统(机电设备数据库设计) 软件开发与设计 - EMS-电子商城系统-[电子商务]网奇.NET网络商城系统 v5.1 静态版 软件开发与设计 - MIS-管理信息系统-[人才房产]惠州房产程序 v2.0数据库
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |