一个完整的面向对象分析与设计例子_第1页
一个完整的面向对象分析与设计例子_第2页
一个完整的面向对象分析与设计例子_第3页
一个完整的面向对象分析与设计例子_第4页
一个完整的面向对象分析与设计例子_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一个完整的面向对象分析与设计例子首先说明,接下来这部分内容,跟面向对象没什么关系,只是描述出我们接下来需要做什么.大家都知道电梯 是怎么回事了,所以获取需求的过程我就不啰嗦了,直接把最 后结果描述出来.(对于计算机专业学生或软件工程毕业设计 的需求分析结果应该有些参考意义起码可以看出怎么样的 结果才真正有意义)电梯楼层 1-10楼(也就是没有什么地下室也没有中间跳过某些楼层,最普通的情况),一共有 2部电梯.如果一个在n楼(1 n 3)./这里是一堆长长的代码用来发送*的短信省略,我们这里只说程序的思想.不涉及技术细节else./又是一堆长长的代码用来发送*的短信 B写一个库,定义出发送*短信

2、的函数和发送*短信的函数,还有判断的函数,假设函数原型分别是发送移动短信(st*手机号码,st*内容);发送联通短信(st*手机号码,st*内容);bool是否是移动号码(st*手机号码);然后写程序如下:if(是否是移动号码(TextBoxl.Text)发送移动短信(TextBox1.Text,TextBox2.Text);else发送联通短信(TextBox1.Text,TextBox2.Text);C定义一个抽象接口短信接收者, 由 * 和* 两个类分别实现接口.各自实现发送短信方法.然后构造一个”手机工厂”(一时想不到好的名字,暂时叫 这个吧),接收一个号码,返回一个”短信接收者”接

3、口(里面根据接收的参数,可能是*或*)然后程序如下(一 彳亍.):手机工厂.获取接受者(TextBoxl.Text)发送 (TextBox2.Text);或写成这样清晰点:st*号码=TextBox1.Text;st* 内容=TextBox2.Text;手机工厂.获取接受者(号码).发送(内容);OK,对于上面3 段伪代码大家有什么想法?第3种是不是看起来有点爽?也许把,也仅仅是看起来那么一点爽,没什么大不了.没错,面向对象是在大型的地方更能体现优势,一小堆是展现 不出来的.我们假设程序中一共有100个这样的地方(比如 一个是发短信的,一个接短信的,一个打电话的,一个上网 的.)那么对于A程序

4、,很抱歉,非常要命,要在100个地方复 制代码,复制100份,然后对其中99份做修改(或多或少,总要 改点.)B程序只是在每个调用的地方加几行,可以接受.C程序在调用点也是加1行,同样也可以接受.这个时候,结构 化和面向对象共同的优点体现出来了,复用性(教科书中讲面向对象总是说说复用是面向对象比其他方法的优势,其 实结构化本身就是可复用的)A方法差不多该抛弃了.这就是结构化发展起来以后, 非结构化很快面临淘汰地步的原因,因为在软件稍微大点,就 出麻烦,写写单片机小模块还行.软件在一天天变大变复杂, 仅仅是变大变复杂而已?当然不是.也变得多变.用户的需求时时在变.软件也容易变,.回到刚才的问题,

5、现在不是有小灵通么?你又需要多一种类型,变成小灵通移动联通3种类型.那么对于 A,灾难发生.修改程序的成本不比重新做一个少.对于B 需要去100个调用的地方多加一个if来判断,然后 多加一个对应小灵通的函数.修改量有点大,不过也不是 不行,因为毕竟现在的工具发达,你可以查找-替换.不过程序是需要测试的,你替换一个地方,就需要多测试一个 地方,成本高.对于C 多加一个实现 接口的小灵通 类 ,然后修改手机工厂的获取接受者(st*号码). 一共2处,测试也只要再测试这个新类还有一个方法.C 方法面向对象的优势在这个时候体现出来了.有人这个时候出来抗议了,如果程序写的多了,经验丰富了,有人会 看出我

6、上面那些假设的漏洞,就是B并不是最好的结构化方法,因为其实有更好的用一个函数来实现判断类型那样就跟 C一样,只要改很少的地方了.没错,那样C和B又公平平等了(还是没什么优势.请注意2点第一:面向对象不是指面向对象的编程 语法,而是一种思想.那样写其实 B已经拿到了一点面向对象的思想了只是封装在非面向对象的语法中.第二 不面向对象的确可以写出低耦合的,高效的,可维护的,很牛逼的程序. 但是那是需要很高造诣的人来做的事.因为没有类的封装 性,名字空间的隔绝还有全局性的变量在程序里走,要靠程序员自己去避免这些可以做,可以方便地做却会对未来维护带来灾难的 操作,对程序员要求很高,你要自觉不用全局变量,

7、就像以 前自觉不用goto语句.还要自觉把功能分好摆好,需要的分析设计 技术是很高的.而写出同样质量的面向对象程序,只要略知道设计模式的人就都可以了.这就是面向对象大行的 原因之一.有人说,面向对象就真的封装了?可重用了? 可 是我看见很多C#和java程序错乱复杂,根本拿不出一个 块出来用,你拿了块A 就调用到块B ,非要把块B 也拿来.然后又要用到无关的C,D,E,F.最后出来一大落,而且99.9999%是我 不需要的,我就只需要那0.00001%而已这是现实,的确, 至少我看见的代码里垃圾代码占多数(这里是指可以实现功 能却很有臭味的代码),这主要有一个很大的原因是写代码的人没有面向对象

8、的思想,有的只是面向对象 工具包装的面向过程思想,而且连结构化都说不上.不是面向对象的错.差不多,有些人现在认同面向对象了,也 知道这不是书上随便说的那些苦涩的概念了,不过还是不明 白怎么个面向对象法.我再换个话题说说,不说手机吧, 说衣服,服装厂生产衣服.衣服有颜色,有大小,有款式. 看看一个设计,在不同的人手里是什么不同的方法.现在服装厂要生产一批蓝色的,小号的,女款的的衣服A:衣服 衣服1= new 衣服();衣服1.颜色=兰;衣服1.号码=小; 衣服1.款式=女式;.然后new出好多件来.赋值好多下.现在问题是突然 说不要兰的了要红的,哎哟.改啊改.当然你可以在 循环里做这个,但是如果每件衣服除了颜色和款式一样,大小是不同的又如何?有个B想到了一个好的设计了.定义一个衣服类,然后把 大衣服 作为一个 子类,小衣 服是另外一个子类.那么方便了一些.不过又有问题,如果再改需求.要求大小跟男女固定的,颜色可以变,难道又再定义出兰衣服类和红衣服类.那还有完没完啊.依然不是好设计.C面向对象有一个利器叫设计模式,学面向对象基本上这个是必修,我们用用设计模式中的原型模式,构造出 一个原型假设是一件大的男装,然后通过Copy这 个原型就可以得到一批大的男装,然后给各种颜色就

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论