- UID
- 30376
- 帖子
- 527
- 精华
- 1
- 积分
- 6520
- 来自
- 湖南湘潭
|
在算法代码 Mandbrot 中,有三个功能模块:iterator(迭代)、setColor(着色)和transPlane(变换)。无论是哪个模块,理论上讲,都有着无数的可能性。由于采用的是传统的结构化编程,继续往下扩展遇到了瓶颈,所以,我们必须引入面向对象的编程机制。
纯粹的面向对象编程其实是蛮吓人的,吓退了为数不少的编程爱好者。 所以,我们这里只能就程序的需要初浅的认识一下:
function Mandbrot(p,c,mC,M)//定义了一个 Mandbrot 函数
{
var iterator=function(x,y,a,b){} //Mandbrot内嵌函数
var transPlane=function(){} //Mandbrot内嵌函数
var setColor=function(e){} //Mandbrot内嵌函数
var scanCplane=function(){} //Mandbrot内嵌函数
var scanZplane=function(){} //Mandbrot内嵌函数
if(is_M)scanCplane();
else scanZplane();
} // Mandbrot 能完成一系列的功能,可以有返回值,也可以没有
function formSetup()
{
Mandbrot(p,c,mC,M);//调用 Mandbrot 函数
//这里的 Mandbrot 是一个完成特定功能的程序模块
//这就是结构化编程
}
=========================================
将代码调整为:
function Mandbrot()//定义了一个 Mandbrot 类(对象模板)
{
var iterator=function(x,y,a,b){} //Mandbrot私有方法
var transPlane=function(){} //Mandbrot私有方法
var setColor=function(e){} //Mandbrot私有方法
var scanCplane=function(){} //Mandbrot私有方法
var scanZplane=function(){} //Mandbrot私有方法
var showSet=function(p,c,mC,M) //Mandbrot私有方法
{
if(is_M)scanCplane();
else scanZplane();
}
return {show:showSet}//返回一个对象,该对象有一个名为 show 的属性
//其属性值为该类的私有方法 showSet
}//Mandbrot 类和 Mandbrot 函数很相似,但不完成任何操作,只是
//定义了一个对象模板
//定义类时,必须以对象的形式提供返回值,这个返回值就是所谓
//的接口或入口。
function formSetup()
{
var Mj=new Mandbrot();//创建一个名为 Mj 的 Mandbrot 实例对象
//所以,Mj 就是一个 Mandbrot 对象,Mj 的
//所有功能都必须通过接口才能实现
Mj.show(p,c,mC,M); //调用 show 属性所指向的方法:showSet
//这里的 Mandbrot 是一个类模板
//这里的 Mj 是一个 Mandbrot 实例
//这里的 Mj 是一个对象
//Mandbrot 类定义的所有功能都必须通过接口
//由其实例对象 Mj 来实现
//这就是面向对象编程
}
这里的讨论很不专业,甚至有点谐虐,没关系,我们不想把“面向对象”作为一个包袱来背,只是使用“面向对象”编程中的一些便利机制,来增强程序代码的可扩展性能。如是,我们对代码作出了调整,使其看起来像面向对象编程的样子。虽然现在还看不出这有什么好处,但在后续的编程中,这种调整给编程带来的便利将会越来越明显。
htm0302.rar (2.57 KB)
|
|