浅析领域、领域模型、软件、OO 博客分类: 灵台渐明
程序员文章站
2024-03-21 20:55:46
...
也许这是高深的话题,但在这上边我有一些心得,写在这里与大家分享,高识之士万误见怪。
内容:
1.领域、领域模型、软件
领域是软件所涉及的问题空间。这话太不好懂。其实就是软件所解决问题的相关环境。比如:一个图书管里系统A,一定会涉及图书馆本身的内容。比如:书、读者、借书卡、书架、等。
领域的内容就是领域内存在的事物即领域对象。按需要抽取领域内的信息,即可得到领域模型。通常可以用类图表示。
我觉得领域是一种存在。可以是客观存在,也可能是人为创造出来的,比如:顶蘑菇中的马力。
软件必然体现领域
因为,软件解决的问题是以领域为基础的。比如说:图书管理系统中一定会涉及书这个概念。
唯物论中有物质决定意识的论断,实际上是说大脑要体现客观存在。这和软件体现领域是一个道理。
领域对象在软件中是什么形式,是和技术相关的。比较普遍的是库表...
2.OO
面向对象。我想说明的就一点。我觉得它是OO的魔力。
OO的主旨就是把数据和逻缉放到一个代表某个事物的对象中。可是这样有什么好处呢?逻缉和数据分开不是更清楚?
这个很难说清楚,我试着说一下:
因为软件的逻缉一定会用到各种概念,而和概念相关的逻缉是这个概念所固有的,当软件的不同部份用到这个概念时即达到了复用概念固有逻缉的作用, 比如:ArrayList,很多地方都会用到。如果:将ArrayList的数据和它的逻缉放到一起,当需要ArrayList对象时,就可以直接找到和它相关的逻缉。
而面向过程时,可能出现在不同的业务逻缉中嵌入属于对象的逻缉,这样就会导致重复代码。比如:ArrayList中只有数据,这时如果要在两个地方在ArrayList中增加一个元素,就需要直接将增加的逻缉写到两个地方,这时就产生了重复代码。
当然你可以说“我做个函数不就得了” 这样也能复用,但是这样却是人为设计的结果,而OO却是只要进行对象分解,也就是说实现对象的固有操作,就能自然达到的。这是有本质区别的,后者使得复用成为程序本身的特性。
而更令人惊奇的是,领域中的对象,是可以直接表式成程序中的对象的。因为领域中的对象本身就会出现在不同的业务逻缉中,这样按领域设计软件对象,直接即可达到复用。
当然,现实的软件并不一定OO,因为存在各种限制因素。
downpour 发表的言论:
我觉得楼主对OO的理解,说了等于没说。OO是软件设计模型范畴,消除重复代码只不过是一个期望达到的过程附属成果。把一个软件设计模型用来解释一个过程附属成果,这也太小家子气了。
OO讲概念没什么复杂的地方,什么封装啊继承啊多态啊在所有的教科书上都有的。只不过在实际过程中,对于这个事情的理解和运用会产生各种各样的不同的方式,进而产生各种不同的结果。有些东西,靠说是说不清楚的。所以最好不要讨论这种话题,毫无意义。
我补充的内容:
我这段又有了一些新的认识。
新认识暂记于此:
软件抽象会导致类型的抽象。但代码中又必然会用到具体的类型的逻缉,这时多态在抽象类型和具体类型间建立了联系。
对象创建是无法避免使用具体类型的,这就使得抽象逻缉不得不和具体逻缉混合,因此出现了“工厂”模式。
这样实现的代码可以减少 instanceof 的使用。
---------------------------
2013年1月4日
元旦假期一通看书,看到一句话大意是:“面向过程是从计算机的角度设计程序,面向对象是从人的思维角度设计程序”。
这是看待OO的另一个视角。
---------------------------
2015年1月25日
这几天做的端口定时扫描的工作,有点复杂,用了许多对象分解来解决问题复杂性。在实现角度上,对象分解,帮助将混合在一起的逻辑分类到不同的对象之中,从而将逻辑进行了细化分解。细化分解的逻辑,一方面,因为封装到对象之中,而使得过程表达简捷易读,没有重复且易于修改。另一方面,一部份细化的逻辑得到了重用。
因此重新思考下边的内容:
downpour 发表的言论:
我觉得楼主对OO的理解,说了等于没说。OO是软件设计模型范畴,消除重复代码只不过是一个期望达到的过程附属成果。把一个软件设计模型用来解释一个过程附属成果,这也太小家子气了。
OO讲概念没什么复杂的地方,什么封装啊继承啊多态啊在所有的教科书上都有的。只不过在实际过程中,对于这个事情的理解和运用会产生各种各样的不同的方式,进而产生各种不同的结果。有些东西,靠说是说不清楚的。所以最好不要讨论这种话题,毫无意义。
----
OO的概念表面上不复杂,但真能将它它用于实际的我现在看到的很少。不能说,会用java的人就会用OO了。简单的做一个类,和在以前在一个.c文件中写一堆函数是一样的,这样不能叫做面向对象。
消除重复代码的确只是一方面,但是也是很重要的一方面。弄不清楚OO,也不可能用好OO。
内容:
1.领域、领域模型、软件
领域是软件所涉及的问题空间。这话太不好懂。其实就是软件所解决问题的相关环境。比如:一个图书管里系统A,一定会涉及图书馆本身的内容。比如:书、读者、借书卡、书架、等。
领域的内容就是领域内存在的事物即领域对象。按需要抽取领域内的信息,即可得到领域模型。通常可以用类图表示。
我觉得领域是一种存在。可以是客观存在,也可能是人为创造出来的,比如:顶蘑菇中的马力。
软件必然体现领域
因为,软件解决的问题是以领域为基础的。比如说:图书管理系统中一定会涉及书这个概念。
唯物论中有物质决定意识的论断,实际上是说大脑要体现客观存在。这和软件体现领域是一个道理。
领域对象在软件中是什么形式,是和技术相关的。比较普遍的是库表...
2.OO
面向对象。我想说明的就一点。我觉得它是OO的魔力。
OO的主旨就是把数据和逻缉放到一个代表某个事物的对象中。可是这样有什么好处呢?逻缉和数据分开不是更清楚?
这个很难说清楚,我试着说一下:
因为软件的逻缉一定会用到各种概念,而和概念相关的逻缉是这个概念所固有的,当软件的不同部份用到这个概念时即达到了复用概念固有逻缉的作用, 比如:ArrayList,很多地方都会用到。如果:将ArrayList的数据和它的逻缉放到一起,当需要ArrayList对象时,就可以直接找到和它相关的逻缉。
而面向过程时,可能出现在不同的业务逻缉中嵌入属于对象的逻缉,这样就会导致重复代码。比如:ArrayList中只有数据,这时如果要在两个地方在ArrayList中增加一个元素,就需要直接将增加的逻缉写到两个地方,这时就产生了重复代码。
当然你可以说“我做个函数不就得了” 这样也能复用,但是这样却是人为设计的结果,而OO却是只要进行对象分解,也就是说实现对象的固有操作,就能自然达到的。这是有本质区别的,后者使得复用成为程序本身的特性。
而更令人惊奇的是,领域中的对象,是可以直接表式成程序中的对象的。因为领域中的对象本身就会出现在不同的业务逻缉中,这样按领域设计软件对象,直接即可达到复用。
当然,现实的软件并不一定OO,因为存在各种限制因素。
downpour 发表的言论:
我觉得楼主对OO的理解,说了等于没说。OO是软件设计模型范畴,消除重复代码只不过是一个期望达到的过程附属成果。把一个软件设计模型用来解释一个过程附属成果,这也太小家子气了。
OO讲概念没什么复杂的地方,什么封装啊继承啊多态啊在所有的教科书上都有的。只不过在实际过程中,对于这个事情的理解和运用会产生各种各样的不同的方式,进而产生各种不同的结果。有些东西,靠说是说不清楚的。所以最好不要讨论这种话题,毫无意义。
我补充的内容:
我这段又有了一些新的认识。
新认识暂记于此:
软件抽象会导致类型的抽象。但代码中又必然会用到具体的类型的逻缉,这时多态在抽象类型和具体类型间建立了联系。
对象创建是无法避免使用具体类型的,这就使得抽象逻缉不得不和具体逻缉混合,因此出现了“工厂”模式。
这样实现的代码可以减少 instanceof 的使用。
---------------------------
2013年1月4日
元旦假期一通看书,看到一句话大意是:“面向过程是从计算机的角度设计程序,面向对象是从人的思维角度设计程序”。
这是看待OO的另一个视角。
---------------------------
2015年1月25日
这几天做的端口定时扫描的工作,有点复杂,用了许多对象分解来解决问题复杂性。在实现角度上,对象分解,帮助将混合在一起的逻辑分类到不同的对象之中,从而将逻辑进行了细化分解。细化分解的逻辑,一方面,因为封装到对象之中,而使得过程表达简捷易读,没有重复且易于修改。另一方面,一部份细化的逻辑得到了重用。
因此重新思考下边的内容:
downpour 发表的言论:
我觉得楼主对OO的理解,说了等于没说。OO是软件设计模型范畴,消除重复代码只不过是一个期望达到的过程附属成果。把一个软件设计模型用来解释一个过程附属成果,这也太小家子气了。
OO讲概念没什么复杂的地方,什么封装啊继承啊多态啊在所有的教科书上都有的。只不过在实际过程中,对于这个事情的理解和运用会产生各种各样的不同的方式,进而产生各种不同的结果。有些东西,靠说是说不清楚的。所以最好不要讨论这种话题,毫无意义。
----
OO的概念表面上不复杂,但真能将它它用于实际的我现在看到的很少。不能说,会用java的人就会用OO了。简单的做一个类,和在以前在一个.c文件中写一堆函数是一样的,这样不能叫做面向对象。
消除重复代码的确只是一方面,但是也是很重要的一方面。弄不清楚OO,也不可能用好OO。