论坛首页 Java企业应用论坛

浅析领域、领域模型、软件、OO

浏览 13291 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-11-01   最后修改:2011-11-01
OO
也许这是高深的话题,但在这上边我有一些心得,写在这里与大家分享,高识之士万误见怪。

内容:
1.领域、领域模型、软件
领域是软件所涉及的问题空间。这话太不好懂。其实就是软件所解决问题的相关环境。比如:一个图书管里系统A,一定会涉及图书馆本身的内容。比如:书、读者、借书卡、书架、等。

领域的内容就是领域内存在的事物即领域对象。按需要抽取领域内的信息,即可得到领域模型。通常可以用类图表示。

我觉得领域是一种存在。可以是客观存在,也可能是人为创造出来的,比如:顶蘑菇中的马力。

软件必然体现领域
因为,软件解决的问题是以领域为基础的。比如说:图书管理系统中一定会涉及书这个概念。

唯物论中有物质决定意识的论断,实际上是说大脑要体现客观存在。这和软件体现领域是一个道理。

领域对象在软件中是什么形式,是和技术相关的。比较普遍的是库表...

2.OO
面向对象。我想说明的就一点。我觉得它是OO的魔力

OO的主旨就是把数据和逻缉放到一个代表某个事物的对象中。可是这样有什么好处呢?逻缉和数据分开不是更清楚?

这个很难说清楚,我试着说一下:

因为软件的逻缉一定会用到各种概念,而和概念相关的逻缉是这个概念所固有的,当软件的不同部份用到这个概念时即达到了复用概念固有逻缉的作用, 比如:ArrayList,很多地方都会用到。如果:将ArrayList的数据和它的逻缉放到一起,当需要ArrayList对象时,就可以直接找到和它相关的逻缉。

而面向过程时,可能出现在不同的业务逻缉中嵌入属于对象的逻缉,这样就会导致重复代码。比如:ArrayList中只有数据,这时如果要在两个地方在ArrayList中增加一个元素,就需要直接将增加的逻缉写到两个地方,这时就产生了重复代码。

当然你可以说“我做个函数不就得了” 这样也能复用,但是这样却是人为设计的结果,而OO却是只要进行对象分解,也就是说实现对象的固有操作,就能自然达到的。这是有本质区别的,后者使得复用成为程序本身的特性。

而更令人惊奇的是,领域中的对象,是可以直接表式成程序中的对象的。因为领域中的对象本身就会出现在不同的业务逻缉中,这样按领域设计软件对象,直接即可达到复用。

当然,现实的软件并不一定OO,因为存在各种限制因素。







   发表时间:2011-11-02  
支持楼主发表此主题的深入帖子。
单纯的OO其实意义并不大,而领域模型才是各领域软件的关键。从塔防游戏、RPG游戏乃至管理软件,关键都是领域模型。在管理软件领域,业务模型才是根本,业内有一个典型的案例,就是Justep X5的业务建模,这是一个将业务模型工具化和架构化的代表产品。
0 请登录后投票
   发表时间:2011-11-02  
爪哇国民 写道
支持楼主发表此主题的深入帖子。
单纯的OO其实意义并不大,而领域模型才是各领域软件的关键。从塔防游戏、RPG游戏乃至管理软件,关键都是领域模型。在管理软件领域,业务模型才是根本,业内有一个典型的案例,就是Justep X5的业务建模,这是一个将业务模型工具化和架构化的代表产品。


此为技术贴,主旨是说明软件开发的规律。

无人关注没关系,匆发广告!
0 请登录后投票
   发表时间:2011-11-09  
对于OO说懂得人,我还没有发现懂得OO的封装的,这是最重要的一条,引用《设计模式精解》这本书籍的一句话,大致是,不懂得封装,就不懂oo。
封装没有那么简单的,在国内少有人发现对oo理解很深的,不是有3-5年工作经验就能懂的。
0 请登录后投票
   发表时间:2011-11-09   最后修改:2011-11-11
redhat 写道
对于OO说懂得人,我还没有发现懂得OO的封装的,这是最重要的一条,引用《设计模式精解》这本书籍的一句话,大致是,不懂得封装,就不懂oo。
封装没有那么简单的,在国内少有人发现对oo理解很深的,不是有3-5年工作经验就能懂的。



看了看你的博客,你好象写书了。有机会我会拜读。

不过,说国人不理解OO的封装。的确不敢苟同。相信聪明人很多...

如果,您有时间,我想知到的是我写对的地方和写错的地方?如能赐教不胜感激。
0 请登录后投票
   发表时间:2012-07-26  
犀利的发现了两个广告,果断的揪了出来
0 请登录后投票
   发表时间:2012-07-27  
我觉得楼主对OO的理解,说了等于没说。OO是软件设计模型范畴,消除重复代码只不过是一个期望达到的过程附属成果。把一个软件设计模型用来解释一个过程附属成果,这也太小家子气了。

OO讲概念没什么复杂的地方,什么封装啊继承啊多态啊在所有的教科书上都有的。只不过在实际过程中,对于这个事情的理解和运用会产生各种各样的不同的方式,进而产生各种不同的结果。有些东西,靠说是说不清楚的。所以最好不要讨论这种话题,毫无意义。
0 请登录后投票
   发表时间:2012-07-27   最后修改:2012-07-27
是比较难说清。
你前一段的意见我也同意。

可是,如果不知到为什么要使用OO又怎么能用好OO呢?用什么来指导自已使用OO呢?

我这段又有了一些新的认识。
新认识暂记于此:

软件抽象会导致类型的抽象。但代码中又必然会用到具体的类型的逻缉,这时多态在抽象类型和具体类型间建立了联系。

对象创建是无法避免使用具体类型的,这就使得抽象逻缉不得不和具体逻缉混合,因此出现了“工厂”模式。

这样实现的代码可以减少 instanceof 的使用。

等我把思路理一理,回头再改改这贴子。
0 请登录后投票
   发表时间:2012-07-27  
gdpglc 写道
是比较难说清。
你前一段的意见我也同意。

可是,如果不知到为什么要使用OO又怎么能用好OO呢?用什么来指导自已使用OO呢?

我这段又有了一些新的认识。
新认识暂记于此:

软件抽象会导致类型的抽象。但代码中又必然会用到具体的类型的逻缉,这时多态在抽象类型和具体类型间建立了联系。

对象创建是无法避免使用具体类型的,这就使得抽象逻缉不得不和具体逻缉混合,因此出现了“工厂”模式。

这样实现的代码可以减少 instanceof 的使用。

等我把思路理一理,回头再改改这贴子。


你的逻辑很混乱,一会儿OO,一会儿领域,一会儿又来了设计模式,一会儿又来了语法层面的instanceof。还是恳请你有了7,8年写代码的积累再来谈,这时候逻辑思路至少会稍微好一些。

另外一个核心问题就是:为什么要使用OO?这个问题我还真想问你呢,我就一点儿都不想使用OO,写出来的程序照样漂亮。
0 请登录后投票
   发表时间:2012-07-27   最后修改:2012-07-27
“OO是软件设计模型范畴”

这个我同意。

但我关注的就是,它从最高层次到最低层次之间的联系。

我想领域、设计模式、instanceof都是在一个大的OO背景下产生的。

目前我想的有些乱这我也得承认。这个的确有些惭愧,整个链条上的关系我还没有摸清楚。

为什么要使用OO?
对我来说,就是能自然的将需求转化为设计,降低软件的复杂性,到我可以控制的范围内。用OO可以使编程变成一种艺术,代码可以体现出美感!

另外,只要你用jdk,我觉得你是不可能不用OO的。因为你不可能不用Integer Long...

希望你的书能大买!





0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics