手抄报 安全手抄报 手抄报内容 手抄报图片 英语手抄报 清明节手抄报 节约用水手抄报

面向对象编程思维的进化

时间:2025-01-17 10:57:29

1、1.为了重用而发明了函数首先你要知道:一个main方法就可以实现世界上所有的程序,但是其存在着固有的缺陷eg:doublex1=1,y1=1;doublex2=2,y2=2;double=....(略1)此处是一个很复杂的求两点之间距离的算法;printf(“%lf\n”,d);以上就是求出(x1,y1)和(x2,y2)两点之间的距离,如果求(x3,y3)和(x4,y4)两点之间的距离呢?则仍要编写一次(略1)之处的代码,那么如果是(x1,y1)和(x4,y4)之间呢,当然你还是要写一次,要知道:(1)重写三遍,意味着出错的概率要增加三遍,(2)而且也太麻烦了,main函数中N个地方需要,则你要写N遍,好吧,如果是粘贴复制的话,那也很麻烦。(3)而且万一哪天你要重新更改算法,你的麻烦来了,每一处都要修改,因此函数被设计了出来,为的就是代码的重用以及一改全改,比如上面,你就可以设计一个开平方的函数:以后求两点之间的距离,只要传入参数,获得的返回值就是函数的处理结果比如: doubled=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));复杂的开平方算法就被封装到了sqrt函数之中。好吧,函数似乎诞生了:但是需要注意的是:(1)注意一点,设计一个函数的功能,远远比实现一个函数要有价值的多,这是码农和工程师之间的区别(2)函数的设计,一定要遵循函数功能单一的原则,一个函数只干一件事。哪天,你如果你设计了一个:一个函数就可以实现让飞船去月球的复杂函数,我会很开心,因为我会再让你设计飞船去火星的程序,那你就惨了,似乎函数几乎还要再写一遍,重用性太差了,而我则偷偷看你笑话。。。。而另一个家伙设计的函数只能算出两个参数之和并返回,我会和开心的请他喝茶。。。(3)总有些算法是我们所不能写出来的,不过安心,因为函数的存在,很多大牛已经帮我们实现了函数,你需要做的就是使用它们,比如:sqrt这个开平方函数(4)在看一个程序时:顺着往下看时,遇到一个函数,请你不要关心他是怎么实现的,你只要知道,他能干什么就行,不要深入研究。。。等你将这个程序的流程搞清楚了,熟练的明白这个程序是怎么运转的了,再回过头研究函数的实现,于是这样就出现了函数的分层现象

2、2:抽象的数据类型我设计了一个很难看的函数:doubledistance(doublex1,doubley1,doublex2,doubley2){ returnsqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));}之所以我说他难看,是因为doublex1,doubley1,doublex2,doubley2这四个参数,实际上仅仅描述了两个点的信息,及(x1,y1)和(x2,y2)这两个点,真是讨厌,明明x1和y1是一个点的信息,却写成了两个参数,不合理呀所以出现了抽象数据类型:typedefstructpoint{ doublex;doubley; }Point;这是C语言的抽象类型,这样省事好多了Pointp1={2.0,2.0};Pointp2={1.0,1.0};这样就可以用p1和p2代表两个点。。。当然啦,java类似的是publicclassPoint{doublex;doubley;}

3、3.面向对象是抽象的数据类型的进化呀。。。publicclassPoint{ doublex; doubley; publicPoint(doublex,doubley){ this.x=x; this.y=y; }}有了抽象类型之后,一个点的信息可以这样表示Pointp1=newPoint(1.0,1.0);很方便吧,p1就是原来doublex1,doubley1两个参数所代表的信息,可是麻烦又来了,如何求两点之间的距离呢?比如p1到原点之间的距离。。。。。。求两点之间的距离函数是对p1所指向的(1.0,1.0)这个点与原点(0.0,0.0)这两个点之间的距离运算。。。。函数所要操作的是p1所封装的数据x和y与原点之间的距离,是专门为p1所封装的x和y而存在的。。。那么这样,干脆把函数也封装到这个抽象类型里面吧,这样又方便了好多publicclassPoint{ doublex; doubley; publicPoint(doublex,doubley){ this.x=x; this.y=y; } publicdoubledistance(){ returnMath.sqrt(x*x+y*y); }}这样Pointp1=newPoint(1.0,1.0);只要p1.distance()就可以调用封装的函数。。。返回值就是函数的返回值。所以喽,一个点被设计成一个类型,他所封装的信息是x和y。。。另外这个类型封装的函数是为了操作x和y而设计存在的。。。

© 手抄报圈