2009年6月9日

ActionScript3中的抽象类和接口

最近在写一个Flex的应用,免不了和ActionScript(AS)打交道,对其中的接口不是很明白。手头的书全都是Cookbook(AS3 Cookbook + Flex3 Cookbook),没有良好的理论支持,在一番google之后,对抽象类和接口略微

懂了一些,下面是我的心得,Java老手和AS专家不要BS我,感谢。

1 - 抽象类
抽象类是面向对象(OO)中实现多态性的重要基础,通常,在软件设计过程中,会将一系列事物(如Shape与Rectangle、circle、triangle间的关系)抽象出一个包含共同特征的类,这个类定义了基本的方法,但不包含实现。派

生类继承了抽象类之后会对抽象类中定义的方法进行实现,并扩展实现派生类特有的方法。在派生类实例化之后,调用抽象类中定义的方法,编译器会自动指向相应子类的实现,实现所谓的多态性。

抽象类不能够实例化,这也是它的一个重要特征。抽象类体现了一种继承的关系,也就是“is a”的关系。

2 - 接口
接口是一种抽象的类,它同样不能实例化,定义了若干未实现的方法。

接口与抽象类的关键不同在于,一个派生类只能从一个抽象类继承,而一个派生类却可以实现多个接口,从一定程度上实现了多重继承。我们知道,在Java、AS中是不支持多重继承的,因为这种特性会导致类结构的混乱,使得工

程难以维护。从AS的类图上可以大致看出,接口的实现是以功能为基础的,也就是说,某个类需要包含或实现某些功能,他就会实现这个接口,这里是“has a”的关系。接口的定义应当是专一功能的,不应是多功能的,多功能的

接口会导致“接口污染”。也就是说,某个类在实现接口的时候,只用到了该接口中的部分功能,但又不得不实现其他功能,这就造成了“接口污染”。

最后给两个形象的比喻,可以加深对于抽象类和接口的理解。

1.飞机会飞,鸟会飞,他们都继承了同一个接口“飞”;但是F22属于飞机抽象类,鸽子属于鸟抽象类。
2. 就像铁门木门都是门(抽象类),你想要个门我给不了(不能实例化),但我可以给你个具体的铁门或木门(多态);而且只能是门,你不能说它是窗(单继承);一个门可以有锁(接口)也可以有门铃(多实现)。 门(抽象

类)定义了你是什么,接口(锁)规定了你能做什么(一个接口最好只能做一件事,你不能要求锁也能发出声音吧(接口污染))。

一点心得,这里只是在AS学习中遇到的一些疑问,属于见招拆招,没有对各种语言特性做深入分析,但以上讨论中的特性在主流OO编程语言中通用。

posted @ 2009-06-09 22:28 guadan2001 阅读(273) 评论(0) 编辑

2008年7月5日

PNG in IE - 1 - pngfix.js

PNG = Portable Network Graphic

以下信息来自http://zh.wikipedia.org/wiki/PNG

文件扩展名:.png
MIME类型:image/png
开发者:W3C
格式类型:位图图像文件格式
扩展到:APNGJNGMNG

PNG是一种非失真性壓縮位图图形文件格式。PNG格式是非失真性壓縮的,允许使用类似于GIF格式的调色板技术,支持真彩色图像,并具备阿尔法通道(半透明)等特性。現在有很多人使用PNG格式於互联网及其他方面上。

PNG的的英文名称为Portable Network Graphics,即便携式网络图片。另有说法是名称来源于非官方的"PNG is Not GIF"。

  • 支持256色调色板技术以产生小体积文件
  • 最高支持48位真彩色图像以及16位灰度图像。
  • 支持阿尔法通道的半透明特性。
  • 支持图像亮度的gamma校正信息。
  • 支持存储附加文本信息,以保留图像名称、作者、版权、创作时间、注释等信息。
  • 使用无损压缩
  • 渐近显示和流式读写,适合在网络传输中快速显示预览效果后再展示全貌。
  • 使用CRC循环冗餘编码防止文件出错。
  • 最新的PNG标准允许在一个文件内存储多幅图像。

PNG的图像体积小,支持真彩图像和Alpha通道,在Web中的应用越来越广;IE占据了大量的浏览器市场,使得开发者不得不考虑IE对PNG的支持问题。IE7完成了对PNG的支持,但目前IE6的用户仍然是大多数,含有Alpha通道的PNG并不能在IE6中正常显示,透明部分通常会显示为灰色。

下面介绍一些PNG在IE6中的透明实现方案。

1 - pngfix.js

用google搜一下PNG在IE6中透明方案,得到的答案大多数是这个。pngfix是一段小巧的js脚本,其首页为http://drupal.org/project/pngfix,采用的技术是DXImageTransform.Microsoft.AlphaImageLoader这个CSS滤镜,从名字上就可以看出,这是MS的独有的滤镜,在IE5.5+中有支持,当应用的图片为PNG格式时,能够设定PNG图片的透明度(0%~100%)。

使用时,只需将pngfix.js引入到页面中,js就会检索页面中所有的png图片,为它们应用MS.AlphaImageLoader,以达到透明的效果。应用滤镜的特点就是慢,还记得5.12全国哀悼日的时候,所有的网站都应用了滤镜,页面的渲染速度慢了很多。

pngfix应用起来简单,但性能实在不能恭维,给我唯一的收获就是知道了MS.AlphaImageLoader这个滤镜的用法,当页面中有少量PNG图片时可以考虑应用,如果将PNG作为系统中的主要图片格式,则会给性能造成很大影响。

预告:下一个方案:PNGPong

posted @ 2008-07-05 13:27 guadan2001 阅读(881) 评论(0) 编辑

2008年6月28日

Linux下的短信开发(一) - 我的方案选择

关键字:SMS LINUX GPRS MODEM

和很多新手一样,初次接触这个领域的我在开始的时候也觉得无从下手,短信开发大多数是将现有应用系统与SMS整合在一起,实现短信提示,让用户能够及时获取信息或者直接利用手机完成业务。短信的实现有两个途径,一是根据中国移动、联通提供的开发接口,通过互联网实现短信,另一条路就是自己买个手机或者更强大的GPRS MODEM实现短信的发送、接收,这里探讨的是后者。

通过GPRS MODEM发送短信,说到底就是一个典型的串口通信应用,有很多这方面的文档可以学
,但要很快进入状态,还是要选取一些方案,毕竟有句名言说得好:不要重新发明轮子。经过google,看到一个国内叫做“金笛”(www.sendsms.cn)的公司,从网站上看还不错,提供了各种短信群发设备,还对各种平台的开发提供了支持,这让人很“震撼”,随即下载试用版,并从另外一个渠道订购了GPRS MODEM,开发就此开始。

金笛提供的开发包使用JAVA实现的,还有完整的文档和实例,貌似质量上乘,但在开发时发现,接收短信无法将SIM卡中的信息转化为一个Message实例,也就是说,无法根据应用需要提取短信的内容,开发包已经把短信格式化了,输出的都是一个固定格式的字符串,呵呵,给人的感觉是想要得到Message还是买我的正式版吧,试用版里删掉几个关键方法是正常滴。

在网上找替代方案,source-forge上找,社区里找,知道了一个叫smslib的项目,smslib.org上不去,smslib.source-forge.net没了,人家不在SF玩了,只好code.google.com,终于找到src package,打开后大吃一惊。

金笛太无耻了,它的开发包就是smslib编译成jar后的版本,怪不得文档是英文呢。通过核对文档,不但找到了缺少的方法,完全开源还能更好地学习,方案就此确定,山寨GPRS MODEM+smslib(http://code.google.com/p/smslib/)

posted @ 2008-06-28 20:51 guadan2001 阅读(212) 评论(0) 编辑

2008年4月28日

Flash CS3 Demo 01 - Crystal Star



这个Demo是把自己以前用Flash画的一个水晶五角星拿出来,结合一个取色器组件,写了一点点
AS,完成的一个Demo。

实例名示意图:

 

这个Demo中的AS部分只写了一帧,AS如下:

//引入需要的类
import fl.events.ColorPickerEvent;
import fl.controls.ColorPicker;
import flash.filters.GlowFilter;
import flash.geom.ColorTransform;

//为comColorPicker注册事件侦听器
comColorPicker.addEventListener(ColorPickerEvent.CHANGE, processing);

//为mcStar建立用于存储滤镜效果的数组
var arrayFilters:Array = new Array();

function processing(event:ColorPickerEvent)
{
       //删除上次应用的效果
       arrayFilters.pop();
       //新建一个“发光”滤镜,设置滤镜参数
       var filterGlowFilter:GlowFilter = new GlowFilter();
       filterGlowFilter.blurX = 5;
       filterGlowFilter.blurY = 5;
       filterGlowFilter.quality = 15;
       filterGlowFilter.strength = 1;
       //新建一个“颜色”变换,改变五角星的颜色,翻得比较生硬,但是做Flash的都知道这个是怎么回事

       var DefaultColorTransform:ColorTransform = new ColorTransform();
       if(ColorPickerEvent.CHANGE)
       {
              //获得颜色
              filterGlowFilter.color = comColorPicker.selectedColor;
              DefaultColorTransform.color = comColorPicker.selectedColor;
              arrayFilters.push(filterGlowFilter);
              //应用滤镜和颜色变换
              mcStar.filters = arrayFilters;
              mcStar.transform.colorTransform = DefaultColorTransform;
       }
}


五角星上层的高光部分是“静态”的,这样的方法有些投机取巧,在应用一些冷色的时候,高光部分显得有些生硬,暖色的效果相对较好。这也是为了性能考虑,写程序的都知道,时空不可兼得。对于五角星的颜色变换还可以使用绘画的方式,填充渐变,这样效果较好,但是代码量较大,取色器得到一种颜色,如何计算出另外一种颜色,我还没有找到答案。

在processing()运行的时候,一定要执行arrayFilters.pop();,否则,五角星周围的光会像浆糊一样越糊越厚。

最后说一下Flash CS3 Pro,Adobe可一定要为开发者多想想啊,这样的开发环境可真的是说不过去,每次都要“艰难”地输入长长的变量(对象)名,提示少的可怜,相较之下,SilverLight就成熟许多。


 

posted @ 2008-04-28 23:26 guadan2001 阅读(75) 评论(0) 编辑

minicom的配置与使用

关键字:cisco console linux minicom

minicom是linux平台下的一款实现“超级终端”功能的软件,配置简单,操作方便,下面简单介绍安装、配置方法。

测试环境:SUSE Linux Server 10 Enterprise
连接设备:Cisco ASA 5505
用户:root

1 - 下载,地址如下:
http://alioth.debian.org/frs/download.php/2332/minicom-2.3.tar.gz
我这里下载的是最新的版本,在download.chinaunix.net上拿到的版本较低,在我的环境当中不能正常编译,具体原因我没有深究,建议使用最新版本。

2 - 编译、安装
在alioth.debian.org下载到的是源码包,编译、安装和一般的Linux软件相同,这里的安装目录选择/usr/local。命令如下:
./configure --prefix=PATH_OF_INSTALLATION
make
make install

很简单,具体的编译选项可以查看程序文档,但一般使用默认设置就可以了。

3 - 配置、使用
进入/usr/local/minicom/bin,执行./minicom -s,进入配置界面
……………[configuration]……………………………………

…… Filename and paths ………………………
…… File transfer and protocols ………………
…… Serial port setup …………………
…… Modem and dialing …………………………
…… Screen and keyboard …………
…… Save setup as df1 …………………
…… Save setup as…… …………………………
…… Exit …………………………
…… Exit from minicom …………………………
选择Serial port setup,出现以下界面:
A — Serial Device : /dev/ttyS0
B — lockfile Location : /var/lock
C — Calling Program :
D — Callout Program:
E — Bps/par/Bits : 9600 8N1
F — Hardware Flow Control : YES
G — Software Flow Control : NO
Change with setting?

将选项A的值设置为/dev/ttyS0 表示是串口1,将选项E的值设置为9600,更改完毕后,回车退出。当然,此处的设置是按照实际情况来定的,设置前请阅读一下设备文档。

接下来,将配置选项保存,下次使用时就不用再配置了。选择Save as df1,如果系统提示无法创建配置文件,只需要在/usr/local/minicom/下建立etc目录即可,当然目录权限也要设置。

最后,在主界面选择“Exit”开始连接,如果正常的话,多按几下回车就可以看见设备的提示符了。

这个东东适合在机房干活儿的时候用,因为鄙人的本本没有串口,而旁边的服务器有串口,就用这个办法迂回一下。

 

posted @ 2008-04-28 22:24 guadan2001 阅读(802) 评论(0) 编辑

导航

<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

公告

昵称:guadan2001
园龄:3年9个月
粉丝:0
关注:0

搜索

 
 

常用链接

随笔分类

随笔档案

最新评论