ITPUB??ì3
新一届的微软MVP评选已经开始,欢迎各位推荐!
ITPUB论坛 » 系统分析与UML » 面向对象的困惑(新手)

标题: 面向对象的困惑(新手)
离线 karlineo
初级会员



精华贴数 0
个人空间 0
技术积分 10 (89841)
社区积分 0 (760405)
注册日期 2006-2-13
论坛徽章:0
      
      

发表于 2008-1-19 17:17 
面向对象的困惑(新手)

下面是个人对于面向对象的理解,请各位大虾指正。我现在的问题是:虽然我知道了一些概念,对面向对象有些
粗浅的理解,但是遇上了一个业务,发现往往很难用面向对象的方法和方式来去分析和设计,真的是无从下手,我
也知道这种东西很讲经验,但是有没有一些良好的设计思路了,对于我来说如何去突破呢?希望各位指导
1,面向对象一些理念的理解
        面向对象是一种方法,我觉得这种方法的主要作用是管理软件的复杂度。面向对象几个重要的理念是
抽象、封装、层次结构(hierarchy)、模块、继承等。其中我觉得前面四个最重要。
        抽象就是使得你能够以一种简化的观点去处理复杂的事务和概念。通过抽象,你看到的是事物的轮廓
,看到的是整体的印象,就像你从很远的大厦去望一座地标,上海的东方明珠塔、广州的中信等等。你看到的
可能是他的轮廓,他大体是什么形状的,你看不到他的很具体的一些东西,他的外墙使用了什么材料,用了
什么玻璃等等。通过抽象使得人们关注于一些整体的东西,而不涉及细节。所以你在处理的是整体的复杂度,
而细节的复杂度被忽略了。所以抽象使人们关注于他们在做什么(what they are doing)。
        封装是很重要的,复杂事物总会隐藏很多细节,但是人的理解能力是有限的,我希望在一个事物的变化
不会或者尽可能少地受到别的事物的内部细节影响。使得事物内部的变化所带来的影响最少,所以必须要把一些
经常变化的部分和另外一些不变的东西区分开来。系统最经常变化的东西往往是他内部的一些细节,实现细节。
如果广州的新地标“珠江新城西塔”建成了之后,要调整他的钢筋结构是不可能的。或者说一幢大厦(酒店),
十三楼一个房间的窗户坏了,他影响了这个房间的客户,你总不能希望这个坏的窗户会影响到十三楼其他房间的
客户,或者是14楼的客户,这时候你就把这个窗户的细节给封装在13楼的这个房间里面,14楼的用户感觉不到13
楼这个房间的窗户坏了。把问题的影响降到最低的范围,使得内部的变化不影响到外部。
        模块化就是分而治之的又一使用(一个人的精力有限)。模块内部的交互比模块间来得频繁,而任何
一个复杂的系统之所以能够运行良好,都会有一个良好的组织。宇宙之所以运作良好,主要是他有一个很好的组织。
而我们理解这个宇宙,人们引入了星座之类,就是划分模块,太阳系就是一个模块。模块具有高内聚、低耦合的特
点,他们都是围着太阳转,彼此之间运行在不同的轨道。我觉得这是一个良好的模块的划分。
        层次结构是很重要的,复杂的事物都是hierarchic的,Grady Booch的书告诉我们,复杂系统都是hierarchic,
从一层跳到另一层,你是在翻开不同的复杂度,当把复杂系统组织成一个具有多个良好hierarchy的结构时,会使得
复杂系统运转自如。事物总是有相似性的,抽取事物相同的东西(共性),归纳到较高的层次,使得在较高的层次只
关注于共性的东西。中国人去设计汽车的发动机,关键是在发动机动力学的层面上去设计他,而不是在零件的材料的层
面上。同时因为事物具有相似性,所以对他进行分类,就能够更好地举一反三,掌握了一个东西就很容易掌握一个相似
的,网球打好了,反过来会发现你的乒乓球水平提高了,因为他们的打法有很多共性,所以我们把他们都归入小球类。类
结构是一种hierarchy(is-a),对象的结构也是(has-a)。
这是我对面向对象某些概念的理解。只能说我知道某些东西的meaning。但是怎么样用这种方法呢?这又是我所没掌握的,
和现在一直思考和希望提高的地方。

2,面向对象的一些概念(接口,对象,对象关系等等)...
3,面向对象的分析和设计方法...


只看该作者    顶部
离线 karlineo
初级会员



精华贴数 0
个人空间 0
技术积分 10 (89841)
社区积分 0 (760405)
注册日期 2006-2-13
论坛徽章:0
      
      

发表于 2008-1-19 17:24 
很多时候是打着面向对象的大旗,不知不觉就用了面向过程的那种分解方法。数据是数据,方法是方法。有时一些特殊的功能,如一个多表汇总(选不同的表,选了之后有不同的查询字段,又有不同的汇总方式,都用同一个模块来处理)的查询,怎么去设计一些类阿,对象阿,可能要很多次重构才能出现比较好的结构。


只看该作者    顶部
离线 bucher
初级会员



精华贴数 0
个人空间 0
技术积分 2 (191843)
社区积分 1 (40212)
注册日期 2006-1-23
论坛徽章:0
      
      

发表于 2008-1-31 16:17 
面向对象分析刚开始的时候也是要写需求用例,我觉得也是流程的东西。面向对象设计和面向过程不同的是它的操作和数据联系很紧密,各个对象的“职责”很明确,还有多态继承等方法支持抽象。


只看该作者    顶部
离线 karlineo
初级会员



精华贴数 0
个人空间 0
技术积分 10 (89841)
社区积分 0 (760405)
注册日期 2006-2-13
论坛徽章:0
      
      

发表于 2008-2-1 15:42 
恩,数据和操作紧密结合,这个是很重要。但是有的时候,为了能够分离变化,还是要引入帮助类之类的


只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问