面向对象漫谈 (二)

      Flash学习笔记 2006-4-2 21:54
4.什么是类?
类是对象的载体,是抽象化了的对象,通常将类的实例就称为对象。因为类是抽象化了的对象,当我们以类为关注目标时,它自身也可以看作是对象,就像我们通常将Flash的内置类称为内置对象。所以,类和对象经常是被混为一谈的。从面向对象的概念来看,类指的是事物的类别,比如猫科和鼠科,而对象是指具体的事物,比如一只具体的猫或老鼠。
类的划分方法大致有这样两种,一种是划分为系统类和用户自定义类,另一种是划分为可见类和不可见类。由软件系统提供的一些基本的类称为系统类,完全由用户定义产生的类称为自定义类。只有系统类才具有事件,用户自定义类通常只有属性和方法。但是,用户可以通过对系统类的继承得到需要的事件,Flash8中,还可以通过EventDispatcher类发送自定义事件。因此,这样的划分方法已经有些模糊。可见类和不可见类相对容易区分,Flash中用画图工具创作的各种元件就是可见类的代表,而纯代码编写的类可以看作是不可见类,系统提供的按钮类、列表框等各种组件就是可见类。
AS2.0中,类定义文件是单独写在一个与类名称相同的AS文件中,使用时通过直接与库中MC元件进行链接,或者使用Object.registerClass()方法实现与MC的链接,来完成非可视部分(AS类文件)与可视部分(MC元件)的结合。

5.对象有哪些特征?
对象具有这样几个特征:
1.封装(Encapsulation):每个对象只可以管理属于自己的数据(属性),不应该让外界直接读取或修改对象的属性。通过将自身的属性和方法指定为私有或是公有,来拒绝或接受外部的直接访问。还可以通过指定为静态属性或方法,来保证该项属性或方法只存在于类中,实例中不存在。
在类定义文件中,封装的概念体现为文件中既包含了实现某些功能的函数,同时又包含了实现这些功能所需要的一些内部参数,和内部方法。
2.重用性(Reusability):每个对象都有自己的数据(属性)及自己的程序(方法),它是一个相对独立的个体。因此,将它从一个项目转移到另一个项目中时可以直接使用,或者是可以在一个项目中的不同地方反复用到,而不需要做太多的修改。
单独的一个自定义函数也具有一定的重用性,但是类的重用性要比单个的函数要高很多,因为类定义中包含了更多的内容,更象是一个函数和参数的集合,其中还可以包含其他的类,所以,从形式到内容都更高级一些。
3.继承(Inheritance):虽然对象可以重用,但对于同一类的对象,有些细节的实现会有些许不同。针对这个问题,在面向对象编程中,将某一类对象相同的部分放在一个抽象的类中,称为父类,通过继承机制,得到子类。子类中具有父类中的属性和方法,同时又可以新增加自己的属性和方法。
子类中与父类同名的方法,将覆盖父类的方法,但仍旧可以通过super关键字调用父类方法。
封装和重用性,是类的设计时强调和追求的目标。因此,在一个小的项目中也许体现不出类的优势,但是当项目越来越大,对项目的改动越来越难时,类的优势就体现出来了。

6.面向对象编程的语法有哪些内容?
以下仅列出相关内容的条目,因为每一项内容都包含了大量的细节,超出了本人的能力范围,因此,仅当作是提供了一个学习的线索,相关的参考书目,请参阅颜金桫(suo)老师的《Flash MX 2004 ActionScript 2.0与RIA应用程序开发》,该书适合RIA(Rich Internet Application)开发人员使用,前三章的内容是对面向对象编程的一个完整的介绍,适合初学者进行阅读。
根据颜金桫老师的划分共有8项内容:
1.类、属性和方法。其中涉及类定义文件、属性和方法的书写格式。
2.隐式获取/设置方法(Getter/Setter Method),Flash中特有的定义某个方法程序的做法,格式如:function get pubName():datatype{ return priName;}以及function set pubName(xxx:datatype):void{ _xxx = xxx;}。
3.私有(Private)公共(Public)和静态(Static)的概念。
4.应用域(Scope),涉及到变量的作用范围,特别是类中的变量作用范围,公共属性与私有属性在访问上的限制等。
5.继承。关于继承的几种方式,完全继承、覆盖和扩展。
6.组合。在一个类定义中包含另一个类的实例,这样的用法称为组合,用语言来描述就是某个类具有某个类,比如桌子具有四条腿。
7.包(Package)。某个特定文件夹下,所有的类文件就称为一个"包"。
8.接口(Interface)。接口表示的是设计的类中应包含的必需的方法程序,它用于团队开发时,共同指定的类中必需有的函数。接口可以继承另一个接口,但必须在类的设计中实现相应的接口程序。
9.命名空间(Namespace)。将设计好的类按照一定的规范,以目录结构进行存放,这种存放的规范就是命名空间,用来避免不同开发人员编写的同名的类之间产生冲突。通常的存放目录为"顶级域名->域名->项目名称->程序名"。

7.在语法学习之后还有哪些内容?
首先应该去了解一下,系统中提供了哪些类,分别实现了哪些功能,在你尝试实现某个功能的时候考虑一下,系统中是否已经有这方面的类,可以加快你的开发进度。Flash中除了可以看得见的组件之外,还提供了很多类,并且随着版本的提高,也在不断的变化,比如Color类在8.0中已经不推荐使用了,对于这样的变化,应该及时了解。
Flash8中提供了示例和教学(Samples and Tutorials)的源文件,这是一个不可多得的知识宝库,建议大家多多的去看。
在类的学习之后,进入系统级的设计时,需要了解的内容是设计模式方面的知识,Flash的大多数应用都属于图形界面应用程序,与之相应的设计模式是MVC模式,也就是将系统分为模型、视图和控制器。设计模式与面向对象是不可分割的,设计模式能够界定出应用程序中需要的对象、类和实例间的角色、责任与彼此的通信方法。因此,这也是一种更为专业的设计方法。
Flash做为未来很有发展潜力的一门技术,其中之一是体现在RIA应用方面,但这已经属于专业程序员的学习范畴,对于人数上更多的爱好者来说,学习怎样使用一个已经定义好的类,更为实际一些。在学习的过程中,通常会因为相关专业知识的欠缺,没有办法理解一些更底层的内容,从而有一些挫败感,这其实很正常。回想一下,很多人最初了解Flash时,它确实是做为一种动画创作工具来被大家接受的,随着网络应用的不断发展,它的功能更强了,AS部分的内容也更加复杂了,在AS3.0以后,简单的语句几乎都将被替换为类方法程序的调用,因此,对于普通的爱好者来说,设计一个很完美的类,相对于灵活的使用一个类来说,后者更为重要。

8.技术决定一切?
我相信有不少人对技术有一种痴迷,通过不断的实践,解决一个又一个的问题,的确让人会有一种成就感。但是这种痴迷应该有是个限度的,时常看到一些人,着迷于用纯技术的方法来实现某个效果或是功能,并且喜欢特别注明这是用纯AS代码实现的效果。我很佩服这些朋友的钻研精神,但是对这种做法不甚赞同。因为,除了学习的目的之外,这样做在很多时候是没有必要的。
首先,纯代码实现某个效果,它的重用性通常会很差,你没有办法将这种效果随时随地拿出来用,别人也没有时间来通读你的代码,拿过去用。其次,纯代码实现在效率上来讲,通常是很费时的一种做法,因此也不明智。Flash的强项并不在于它的编程能力,如果非要想在编程能力上较真,学一下C++或许收获会更大,Flash的强项在于图形界面的设计,因此,在实现效果的时候,多多利用Flash中提供的元件,用其所长,避其所短,无论从效率上还是从特色上来看,都更有特点。
技术的东西很快就会过时,随着版本的更替,很多过去复杂的用法,都通通一去不复返了,所以不要在过于复杂的内容上花去太多的时间,更重要的是理念与方法。在我看来,在Flash上想要取得更大的成绩,需要的通常是Flash之外的东西。美工人员的专业素质,程序人员的技术水准,都是Flash之外的内容,从美术的角度看,Flash只是一个简单的矢量图加动画的设计工具,从程序员角度看,Flash是一个前台应用的界面设计工具,更多的后台的内容用的是PHP,或者其它的开发工具。这就像是想要写好钢笔字,很多人会建议你学毛笔书法一样,眼光仅停留在Flash上是远远不够的。
标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}