本人,早些年是学汇编和C语言出来的,我自己目前不是从事程序设计的,可以说目前的工作是和IT是无关联的。最近接触了一下JAVA语言,然后上了一些论坛之类的吧,然后看到一些朋友把JAVA当成C语言使用,比如很常规性地NEW一个对象出来,然后调用他的方法,然后再NEW一个别的对象出来,然后再调用等等……嗯,我就是写一下我个人对面向对象设计的理解吧,这可以某些观点是有偏的,但差不多就是这个意思,大家就随便看看吧。
所谓从面向对象设计语言的角度而言,面向对象己经不是一种站在机器的层面上考虑问题了,而是站在人的角去考虑问题。即对于这个问题的具体操作流程己经不是考虑的重点了,而是这个问题我们是如何去组织一些事物来将这一类,相同性质或者差别很少的这一类问题采用很有弹性的系统方法来处理,比如关于这一类问题,我组织了一些人,这些专家组每个人对各种问题的针对性都很不同的,只要你这个问题发生了,传过来,我们自己的专家组会选择相应的操作,哪个专家会执行,这是我们专组内部的事,一般我们不向外暴露,但你实在想知也是可以的。所以我们考虑的重点是:我给组织的专家是哪些人?专家组成员对于问题的选择是怎么分工选择的?这些专家组对外所暴露的技能是什么?总之是就是站在人的角度,站在整个现实世界去看问题,而不是站在机器层面上去想怎么解快这个问题。这就是面向对象和面向过程的最大不同。按编辑思想书上所说的:人们所能解决问题的复杂性直接取决于可抽象的类型和质量,所谓的类型是指所抽象是什么?或者说的你是对那些东西进行抽象来产生成一个类型(这句话是我自己想的,好像有点偏了)。如上面所说的,我们在机器层面上而言,我们抽象出来是问题的直接解决流程,而站在人的角度而言,或者站在宏观世界上去想,我们抽象出的是这一类问题的封装以及对于这类问题的多态解决方安(如专家组)。换句话说,人的思考更多偏向于解决问题的结构和大体,而面向对象思想是向从类靠拢的,一旦是整体设计思想偏离了人的考虑问题的方向,你就得注意些了。
在之前,一个问题发生了,作为程序员,我们必须建立起在机器模型(位于“解空间”内,这是你对问题建模的地方,比如计算机)和实际待解决问题的模型(位于“问题空间”内,这是问题存在的地方,例如一项业务)之间的关联,你要脑中相互影射过来,这是很伤大脑的。所认对于面向对象设计而言,我们把所有东西、问题都当作一个对象或者是一个类型,将问题空间中的元素和这个元素在解空间里的表示都称为对象,那么程序可以可以通过添加这些新类型对象使这个程序自身更强壮从而适用于某个特点的问题。所以我们又回来了,面向对象就是类型的设计。而我们添加进来的对象都有自己的方法和属性,能很好与解空间里面的对象相关联和消息的通迅。并且对整个程序是有很强的互补性。都是一个一个对象组合在一起的,他之间可以通过消息来协同合作。
再来举例说一个面向对象的微观理解和设计:
首先面向设计的中心思想是一切皆对象。他的最强大的地方体现在对象的封装及多态这些方面,可以说是无敌的。比如我要做一台电视,先是设计室,然后是湛江的产房,在面向对象设计中,是这样考虑的,在湛江的这个工厂里面,所有东西都是一个对象,比如工厂里面机床的轮子(假设机床是有轮子移动的)。这个轮子也是一个对象,这个轮子对象里头装着轮子的一些属性和方法。现在设计师那边传来来消息称制作环境要室外的地方制作电视,这时候机床怎么做?不用设计师怎么去想,而是只向轮子发消息说要出去就行子,轮子会根据自自所有的方法和属性,必须时实现一些接口,自己去找一条最快最近的路跑到室外。所以我们不用做其他任何额外的操作,通俗来说,大家都是对象,就用对象的沟通方式,我只告诉你要做什么,你怎么做,这完全不关我的事,我不可能再告诉你说:你应该左转再右转再左转才能出去。这不可能的,你这样烦我,我真的会揍你一顿的。总之,你做为一个对象,你里头封装的方法是你自己的方法与属性。假如在某一天,这个机床坏了,但轮子还没坏,这里我把轮子再安装在汽车上,那同样也是可以的,这个轮子就是现实中一个有生命有智慧的个体,其他对象同样如些,所以面向对象里面的都是一个一个的疯子,就看你去怎么用,怎么去组织这些疯子,组织得很变态的,你就就有做项目经理的潜能了。在设计时,我们发消息过去,消息是:机床移动到光凉的地方。我们要需要指定是那台机床吗?不需要,完全不需要,因为机床对象根据是传来消息的是一位面板设计师传来的,那么那个装有电视面板的那个机床就会根据这个消息来移动。都是一个个体,都是一个一个有脑的个体。所以我们在设计程序时,真的要想清楚这些问题!!
所谓从面向对象设计语言的角度而言,面向对象己经不是一种站在机器的层面上考虑问题了,而是站在人的角去考虑问题。即对于这个问题的具体操作流程己经不是考虑的重点了,而是这个问题我们是如何去组织一些事物来将这一类,相同性质或者差别很少的这一类问题采用很有弹性的系统方法来处理,比如关于这一类问题,我组织了一些人,这些专家组每个人对各种问题的针对性都很不同的,只要你这个问题发生了,传过来,我们自己的专家组会选择相应的操作,哪个专家会执行,这是我们专组内部的事,一般我们不向外暴露,但你实在想知也是可以的。所以我们考虑的重点是:我给组织的专家是哪些人?专家组成员对于问题的选择是怎么分工选择的?这些专家组对外所暴露的技能是什么?总之是就是站在人的角度,站在整个现实世界去看问题,而不是站在机器层面上去想怎么解快这个问题。这就是面向对象和面向过程的最大不同。按编辑思想书上所说的:人们所能解决问题的复杂性直接取决于可抽象的类型和质量,所谓的类型是指所抽象是什么?或者说的你是对那些东西进行抽象来产生成一个类型(这句话是我自己想的,好像有点偏了)。如上面所说的,我们在机器层面上而言,我们抽象出来是问题的直接解决流程,而站在人的角度而言,或者站在宏观世界上去想,我们抽象出的是这一类问题的封装以及对于这类问题的多态解决方安(如专家组)。换句话说,人的思考更多偏向于解决问题的结构和大体,而面向对象思想是向从类靠拢的,一旦是整体设计思想偏离了人的考虑问题的方向,你就得注意些了。
在之前,一个问题发生了,作为程序员,我们必须建立起在机器模型(位于“解空间”内,这是你对问题建模的地方,比如计算机)和实际待解决问题的模型(位于“问题空间”内,这是问题存在的地方,例如一项业务)之间的关联,你要脑中相互影射过来,这是很伤大脑的。所认对于面向对象设计而言,我们把所有东西、问题都当作一个对象或者是一个类型,将问题空间中的元素和这个元素在解空间里的表示都称为对象,那么程序可以可以通过添加这些新类型对象使这个程序自身更强壮从而适用于某个特点的问题。所以我们又回来了,面向对象就是类型的设计。而我们添加进来的对象都有自己的方法和属性,能很好与解空间里面的对象相关联和消息的通迅。并且对整个程序是有很强的互补性。都是一个一个对象组合在一起的,他之间可以通过消息来协同合作。
再来举例说一个面向对象的微观理解和设计:
首先面向设计的中心思想是一切皆对象。他的最强大的地方体现在对象的封装及多态这些方面,可以说是无敌的。比如我要做一台电视,先是设计室,然后是湛江的产房,在面向对象设计中,是这样考虑的,在湛江的这个工厂里面,所有东西都是一个对象,比如工厂里面机床的轮子(假设机床是有轮子移动的)。这个轮子也是一个对象,这个轮子对象里头装着轮子的一些属性和方法。现在设计师那边传来来消息称制作环境要室外的地方制作电视,这时候机床怎么做?不用设计师怎么去想,而是只向轮子发消息说要出去就行子,轮子会根据自自所有的方法和属性,必须时实现一些接口,自己去找一条最快最近的路跑到室外。所以我们不用做其他任何额外的操作,通俗来说,大家都是对象,就用对象的沟通方式,我只告诉你要做什么,你怎么做,这完全不关我的事,我不可能再告诉你说:你应该左转再右转再左转才能出去。这不可能的,你这样烦我,我真的会揍你一顿的。总之,你做为一个对象,你里头封装的方法是你自己的方法与属性。假如在某一天,这个机床坏了,但轮子还没坏,这里我把轮子再安装在汽车上,那同样也是可以的,这个轮子就是现实中一个有生命有智慧的个体,其他对象同样如些,所以面向对象里面的都是一个一个的疯子,就看你去怎么用,怎么去组织这些疯子,组织得很变态的,你就就有做项目经理的潜能了。在设计时,我们发消息过去,消息是:机床移动到光凉的地方。我们要需要指定是那台机床吗?不需要,完全不需要,因为机床对象根据是传来消息的是一位面板设计师传来的,那么那个装有电视面板的那个机床就会根据这个消息来移动。都是一个个体,都是一个一个有脑的个体。所以我们在设计程序时,真的要想清楚这些问题!!