请问有多少是用面向对象的方法?

topic:请问有多少是用面向对象的方法?
newtomme:
现在大家做系统分析的时候,是用什么方法来,有多少是用面向对象的方法呀,还是都在用老方法?!
我在一些模块(一个项目里的几部分)里用以前的什么数据流图等方法分析后发现不能清晰、很好的解释系统,但整个大项目是用数据流来表示的,怎么办呢?我对OO的分析不懂呀!
还有就是,大部分软件开发都不是按照软件工程的方法来做,都是简单的分析后写好一些文档就开始CODE,那么这里的兄弟们,你们开发的时候是不是按照软件工程的开发规律来呀,先分析,完了有个很好的文档,程序员通过它和一些简单的沟通就可以把事情搞定!测试有测试记录,完了还有每部分的质量监控?!
你们大概都是怎么做的呀?
本人这方面很差,还情多指教,对了,在整个开发过程中,ROSE等起了什么作用,你们是不是把它用到了真正的开发过程中了呢?!

potian:
据我所知,现在国内真正在用面向对象方法开发的任何公司少之又少,有几种情况:
1。不知面向对象为何物:这并不一定就是坏事,姑且不论C开发了多少至今仍被奉为经典的操作系统、编译系统,我认为在某些情况下,非面向对象的方法也可以极完美地解决问题。如Apache。但是,我也不是说,面向对象在这方面(系统软件)就差,Ralph Johnson领导的CHOOSE小组在性能上大约能够达到C的80%,而灵活性和适配性方面的收获就不用说了。
2。使用面向的编程语言,但没有使用任何面向对象的特征。譬如,现今的delphi,vb,pb等等都是或者号称面向对象,但其实语言本身的特征完全没有被使用,我在1995年编写的一套系统获得了省科技进步奖,但老实地说,没有半点面向对象的思路。
3。使用了面向对象的语言和面向对象的工具,但其实还是假对象。这种公司和个人现在是主流。我一个以前的同僚在一个很大的中国公司工作,他们全套使用RUP,也有所谓的对象的概念,但是它们的对象绝大多数之不过是传统程序的一个简单包装,根本没有考虑到面向对象的目地:可靠性、灵活性、更好的体系结构、更快的客户响应。
从我本人的观点来说,面向对象的开发应该具有以下几个基本特点:
1。面向对象的思想:注意,我没有使用面向对象的方法学,如果你认为用一种面向对象的方法学,就可以称得上你使用面向对象的思想,我看不见得。面向对象的思想,首先是你如何来看待这个世界,小一点,就是你怎样来看待你要解决的问题,你认为要解决的问题是所有线和上面的点组成,譬如输入、修改、删除,还是有一些相互作用着的对象合作来完成任务?这个世界存在着一个“上帝“统管一切还是这个世界是其中具有自生自灭,自我行为的能力的这些对象共同协作的结果。
2。面向对象的软件工程:如果你没有使用任何一种面向对象的方法学,我不会断然否决你。但是,方法学毕竟是前人经验的积累,如何获取需求,如何进行建模、设计、如何开始编码(详尽设计)、如何文档、如何测试、如何组织你的开发团队。都是必须实践的问题,也是必须从各种各样方法学进行学习的问题。
在需求方面,根据不同情况,Use case ,Use Map,CRC都是可以利用的,但我实际中用得最多是草图加上Alistair Cockburn的模版。
在建模方面,UML是标准,但是分析模式是我经常借鉴的内容,我不会傻到去画详细对建模没有用处地东西。分析模式当然是无穷的。需要积累,但是对诸如party,business rule, invantory, account这样的东西,借鉴的东西太多太多了。
在设计时,通过我建立的模型从而应用设计模式是我最常用的方法,我发觉设计模式社团是如此丰富,以至于几乎你很难再去构造出新的模式,当然我不排除有时候有小的发现。譬如,我几乎在每一个系统里使用factoryMethod用于创建对象,Observer,stragy实现MVC,用command加上memoto来实现undo,redo,facade来包装子层,state模式的应用也极其广泛,包括医院病人的病人(登记、入院、预出院、出院),EOSP2P的P2P底层协议实现。这些系统都在使用,不同的医院、不同的P2P之上的服务,效果是明显的。Singleton就不用说了。
模式的使用你地设计如此灵活、有效,我觉得它们能解决设计中80%的问题。
测试有两个阶段,对于单元测试来讲,我极力主张有程序员自己来做,当然是xunit系列,这也是refactoring的必要条件。功能测试方面我没有太多地研究,一般来说有人工完成,rational的测试好像也比是太好。
3。应用软件工程的前提:之所以把这一点放在后面。是因为,如果你不了解软件工程,没有实践过,其实这个前提很难看到。这个前提就是面向接口而不是实现编程,没有接口编程,你的小组没办法组织,人员没办法分配。接口意味着一部分人可以实现接口,而另外一部分人可以使用接口。如果实现变化,对使用者没有任何影响,所以设计的关键是接口。人员组织,进程控制的关键也是接口。
人员组织和进度控制我经常参考Jim Coplien
的主页,获益匪浅,但是从我目前来说,主要使用的方法就是kent beck门的任务卡
4.语言,我喜欢Java甚于其他面向对象语言,当然,有很多争论,我不讲了。
5。成熟阶段。面向对象的成熟阶段是框架。关于框架的设计、开发对设计建模和白箱开发的人员要求很高,我在这里就不多说了。我的主页上正在研究的框架可以看出我们的思想方法。
其它的包括一些面向对象的基本技巧如idiom,refactoring等等非常重要,但在这里就不详述了。
有兴趣的人可以到我的erptao.org进行讨论。

newtomme:
多谢!
你看来是很有经验的系统分析员了,不错,以后可以向你请教问题吗?

对了,还想请教的是,你觉得是不是做面向对象的分析使用于任何项目(我觉得还有两种不同的项目:给客户定
制软件的项目,和做有自主产权的商品软件)。

potian:
这两者看起来是有区别的,但实际上是同一个问题:哪些是相对稳定的,哪些是可变的,变化的频率如何?
面向对象的分析方法第一个问题就是要把这两部分的内容分开。如果你给客户订制的项目是从来没有接触过的领域,那么一开始的抽象和隔离是比较困难的。但是,从我的经验来看,从来都没接触过的问题可能会很少,譬如你的系统不需要处理人员,单位,组织机构,量(金额、换算)?你的系统不要处理时间相关的问题?你的系统处理属性可能动态发生变化的问题?诸如此类的问题,如果有很好的框架,实现、扩展和修改都是很方便的。
问题可能在于时间、资金、压力在采用面向对象的方式时可能在一开始会有些困难。一个新的领域可能需要长时间的磨合才能了解地更深刻。如果时间等因素显得非常重要,你可以先实现,当然还要采用面向对象的方法。一开始的抽象可能较差,但这并不是问题。如果一开始就是用面向对象的方法设计和实现,以后慢慢地用refactory改进你的分析和设计。这个时候,refactoring可能非常重要,Extreme programming在这方面有突出的特长。我现在主要学习martin fowler的《refactoring》,和ralph johnson几个弟子的phd论文,我觉得改进已存在的代码是可行的,而且必须做的,效果也很明显。因为面向对象不管是何种方法学,都要求你iterator,而refactoring是反复的最佳方法。
但是即使是面向定制地开发全新的领域,面向对象的思想也是极其有用的。譬如,接口的分离,质量的控制,MVC模式更彻底的应用。你可以把模型和视图分开,两批不同的专家,好的接口,分开的测试。
BTW,很多系统看起来需要定制,但其实并非如此,如很多ERP系统不需要定向开发就能实施,你可以使用Business Rule来解决这些问题。

互相学习,有空访问我的主页erptao.org

newtomme:
我看了,还可以,不过我对好多理论都不知道,其实我对系统分析的经验和理论都只能算是个入门的,我写了近两年的软件,现在想转向DBA或系统设计,而在这过程中,我觉得比做程序员对系统分析、软件工程方面的知识要求要更高,所以,我觉得我都不知从何下手了,只听说过UML和ROSE,但实在不理解怎么利用这些规范和工具来适用于形形色色的软件项目,我想顶多只能规范文档、开发过程、测试、实施过程,但在前期的系统构架过程中,特别现在的ERP、CRM等软件的开发,还有和我关系很大的数据仓库的设计工作中,分析时候,这些的方法是否都很具体和可行,而且,现在有什么IMM,质量控制,它对前期的分析也有比较抽象的要求,所以,要具体做下来,什么方法和工具,什么做法才比较好,我觉得我心理都没底。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值