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

下载本文档

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

文档简介

一个完整的面向对象分析与设计例子首先说明,接下来 这部分内容,跟面向对象没什么关系,只是描述出我们接下来 需要做什么 .大家都知道电梯是怎么回事了,所以获取需求的过程我就不啰嗦了,直接把最后结果描述出来.(对于计算机专业学生或软件工程毕业设计的需求分析结果应该有些参考意义.起码可以看出怎么样的结果才真正有意义)电梯楼层 1-10 楼(也就是没有什么地下室也没有中间跳过某些楼层,最普通的情况),一共有2部电梯. 如果一个在n楼(1 n 3)./这里是一堆长长的代码用来发送*的短信.省略,我们这里只说程序的思想.不涉及技术细节 else./又是一堆长长的代码用来发送*的短信B 写一个库,定义出发送*短信的函数和发送*短信的函数,还有判断的函数,假设函数原型分别是 发送移动短信(st*手机号码,st*内容);发送联通短信(st*手机号码,st*内容);bool 是否是移动号码(st*手机号码);然后写程序如下:if(是否是移动号码(TextBox1.Text) 发送移动短信(TextBox1.Text,TextBox2.Text);else 发送联通短信(TextBox1.Text,TextBox2.Text);C 定义一个抽象接口 短信接收者 , 由 * 和 * 两个类分别实现接口. 各自实现发送短信方法. 然后构造一个 手机工厂 (一时想不到好的名字,暂时叫这个吧) , 接收一个号码,返回一个 短信接收者 接口(里面根据接收的参数,可能是*或*)然后程序如下(一行.):手机工厂.获取接受者(TextBox1.Text).发送(TextBox2.Text);或写成这样清晰点: st*号码 = TextBox1.Text;st*内容 = TextBox2.Text;手机工厂.获取接受者(号码).发送(内容);OK,对于上面3段伪代码 大家有什么想法? 第3种是不是看起来有点 爽? 也许把,也仅仅是看起来那么一点爽,没什么大不了. 没错,面向对象是在大型的地方更能体现优势,一小堆是展现不出来的. 我们假设程序中一共有100个这样的地方(比如一个是发短信的,一个接短信的,一个打电话的,一个上网的.)那么对于A程序,很抱歉,非常要命,要在100个地方复制代码,复制100份,然后对其中99份做修改(或多或少,总要改点.)B程序只是在每个调用的地方加几行,可以接受.C程序在调用点也是加1行,同样也可以接受.这个时候,结构化和面向对象共同的优点体现出来了,复用性 (教科书中讲面向对象总是说说复用是面向对象比其他方法的优势,其实结构化本身就是可复用的)A方法差不多该抛弃了.这就是结构化发展起来以后, 非结构化很快面临淘汰地步的原因,因为在软件稍微大点,就出麻烦,写写单片机小模块还行.软件在一天天变大变复杂,仅仅是变大变复杂而已? 当然不是. 也变得多变. 用户的需求时时在变.软件也容易变,.回到刚才的问题, 现在不是有小灵通么? 你又需要多一种类型,变成 小灵通移动联通 3种类型.那么对于 A ,灾难发生.修改程序的成本不比重新做一个少.对于B 需要去100个调用的地方多加一个if来判断,然后多加一个对应小灵通的函数. 修改量有点大,不过也不是不行,因为毕竟现在的工具发达,你可以查找-替换.不过程序是需要测试的,你替换一个地方,就需要多测试一个地方,成本高.对于C 多加一个实现 接口的 小灵通 类 , 然后修改 手机工厂 的 获取接受者(st*号码) . 一共2处,测试也只要再测试 这个新类 还有一个方法.C 方法 面向对象的优势在这个时候体现出来了.有人这个时候出来抗议了,如果程序写的多了,经验丰富了,有人会看出我上面那些假设的漏洞,就是B 并不是最好的结构化方法, 因为 其实有更好的用一个函数来实现判断类型那样就跟 C 一样,只要改很少的地方了. 没错, 那样C和B又公平平等了,C还是没什么优势. 请注意2点 第一: 面向对象 不是指 面向对象 的 编程语法, 而是一种思想. 那样写其实 B 已经拿到了一点面向对象的思想了只是封装在非面向对象的语法中. 第二 不面向对象的确可以写出低耦合的,高效的,可维护的,很牛逼的程序. 但是那是需要很高造诣的人来做的事. 因为没有类的封装性,名字空间的隔绝还有全局性的变量在程序里走, 要靠程序员自己去避免这些 可以做,可以方便地做 却 会对未来维护带来灾难 的操作, 对程序员要求很高,你要自觉不用全局变量,就像以前自觉不用goto语句.还要自觉把功能分好摆好, 需要的分析设计技术是很高的. 而写出同样质量的面向对象程序,只要略知道设计模式的人就都可以了. 这就是面向对象大行的原因之一.有人说,面向对象就真的封装了?可重用了? 可是我看见很多C#和java程序错乱复杂, 根本拿不出一个 块 出来用,你拿了 块A 就调用到 块B , 非要把 块B 也拿来.然后又要用到无关的C,D,E,F.最后出来一大落,而且99.9999%是我不需要的,我就只需要那0.00001%而已. 这是现实,的确,至少我看见的代码里垃圾代码占多数(这里是指可以实现功能却很 有臭味 的代码), 这主要有一个很大的原因是写代码的人没有面向对象的思想,有的只是面向对象工具包装的面向过程思想,而且连结构化都说不上. 不是面向对象的错.差不多,有些人现在认同面向对象了,也知道这不是书上随便说的那些苦涩的概念了,不过还是不明白怎么个面向对象法. 我再换个话题说说,不说手机吧,说衣服,服装厂生产衣服. 衣服有颜色,有大小,有款式. 看看一个设计,在不同的人手里是什么不同的方法.现在服装厂要 生产一批 蓝色的, 小号的, 女款的.的衣服.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

提交评论