ivaneeo's blog

自由的力量,自由的生活。

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

#

大家如果需要gmail,只要发邮件给我.
地址:ivannwan@gmail.com.
posted @ 2005-09-13 10:05 ivaneeo 阅读(431) | 评论 (3)编辑 收藏

两个classes都需要使用对方特性,但其间只有一条单向连接(one-way link)。

添加一个反向,并使修改函数(modifiers)能够同时更新两条连接。(注译:这里的指针等同于句柄(handle),修改函数(modifier)指的是改变双方关系者)

Change Unidirectional Association to Bidirectional.png
posted @ 2005-09-12 13:53 ivaneeo 阅读(250) | 评论 (0)编辑 收藏

我有这样一句sql语句:select ${ 0},${ 1},${2 },${2 } from t where ${0}='${2}'。

我的目的是先找出所有的变量,并把变量的值替换为: V变量名。

        String statement = "select ${ 0},${ 1},${2 },${2 } from t where ${0}='${2}'";
        System.out.println(statement);
        Matcher m = Pattern.compile("(\\$\\{\\s*(\\d+)\\s*\\})").matcher(statement);
        StringBuffer buffer = new StringBuffer();
        while(m.find()) {
            System.out.println("Matched:'" + m.group(1) + "' at position " + m.start());
            System.out.println("Matched:'" + m.group(2) + "' at position " + m.start());
            int temp = Integer.parseInt(m.group(2));
            if(temp == 0)
                m.appendReplacement(buffer, "V0");
            else if(temp == 1)
                m.appendReplacement(buffer, "V1");
            else if(temp == 2)
                m.appendReplacement(buffer, "V2");
        }
        m.appendTail(buffer);
        System.out.println(buffer.toString());

输出结果:
select ${ 0},${ 1},${2 },${2 } from t where ${0}='${2}'
Matched:'${ 0}' at position 7
Matched:'0' at position 7
Matched:'${ 1}' at position 13
Matched:'1' at position 13
Matched:'${2 }' at position 19
Matched:'2' at position 19
Matched:'${2 }' at position 25
Matched:'2' at position 25
Matched:'${0}' at position 44
Matched:'0' at position 44
Matched:'${2}' at position 50
Matched:'2' at position 50
select V0,V1,V2,V2 from t where V0='V2'

这里要逐个替换就要使用类Matcher的appendReplacement()和appendTail()方法。
posted @ 2005-09-12 13:31 ivaneeo 阅读(466) | 评论 (0)编辑 收藏

如果你爱编程,请你爱C语言;
如果你爱C语言,请你爱指针;
如果你爱指针,请你爱指针的指针!



计算机学的许多知识都具有相通性,因而,不断追赶时髦技术而忽略基本功的做法是徒劳无意的。我们最多需要"精通"三种语言,最佳拍档是汇编、C、C++(或JAVA),很显然,如果你"精通"了这三种语言,其它语言你应该是可以很快"熟悉"的,否则你就没有"精通"它们。  


在性能优化方面永远注意80-20准备,不要优化程序中开销不大的那80%,这是劳而无功的。除了编程上的技巧外,为提高系统的运行效率,我们通常也需要最大可能地利用各种硬件设备自身的特点来减小其运转开销。
posted @ 2005-09-08 15:40 ivaneeo 阅读(271) | 评论 (0)编辑 收藏

有的程序员这样写:

for(;;)
{
}

  这个语法没有确切表达代码的含义,我们从for(;;)看不出什么,只有弄明白for(;;)在C语言中意味着无条件循环才明白其意。

  下面是几个"著名"的死循环:

  (1)操作系统是死循环;

  (2)WIN32程序是死循环;

  (3)嵌入式系统软件是死循环;

  (4)多线程程序的线程处理函数是死循环。
posted @ 2005-09-08 15:37 ivaneeo 阅读(509) | 评论 (0)编辑 收藏

下面列举了网络的消息种类,它包含有分布于每个消息地点( site)
的"官方(official)"Usenet分级系统(hiearchy)的最高级(top- level)
的名称:

分级 所处理的内容主题

comp 有关计算机的主题。其中有许多相当重要的讨论
misc 其它主题。(最大的其它消息组为misc.misc。)
news 有关网络消息的主题。 尽管每个人都应该检查包含有介绍资料和临
     时的重要通告等这几个消息组,但是一般说来,这些消息组并不怎么有趣
     ——除非用户是一位新闻工作者
rec  有娱乐方面的主题(包括运动、业余爱好、艺术及其它有趣活动)
sci  有关科学研究的主题——也相当重要
soc  社会组织——社会公益行业和现实社会化
talk 长久的争论,常常与政治有关。 它广泛地被认为是十分令人生厌的
     主题,但要排除那些议员

    还有更多种类的消息分布没有这么广泛; 我们将在这个附录的后面
列举一些。

计算机组

名称                              描述
comp.admin.policy                 有关地点管理策略的讨论
comp.ai                           人工智能
comp.ai.fuzzy                     模糊集理论(模糊逻辑)
comp.ai.genetic                   计算的遗传算法
comp.ai.jair.announce             《AI研究杂志》的预告和摘要(有改动)
comp.ai.jair.papers               《AI研究杂志》出版的论文(有改动)
comp.ai.nat-lang                  自然语言处理
comp.ai.neural-nets               神经网络
comp.ai.nlang-know-rep            自然语言、知识表示(有改动)
comp.ai.philosophy                人工智能的哲学观点
comp.ai.shells                    应用于外壳(shell)的AI
comp.answers                      Usenet的文章库(有改动)
comp.apps.spreadsheets            各种平台上的展开式表格
comp.arch                         计算机结构
comp.arch.bus.vmebus              VME总线系统(硬件与软件)
comp.arch,.storage                存储系统期刊(硬件与软件)
comp.archives                     公用存取文档的描述(有改动)
comp.archives.admin               有关计算机文档管理的期刊
comp.archives.msdos.announce      有关MS—DOS文档中的预告(有改动)
comp.archives.msdos.d             MS—DOS文档中的资料
comp.bbs.misc                     广告栏系统
comp.bbs.waffle                   所有平台上的Waffle BBS和USENET系统
comp.benchmarks                   基准测试技术和结果
comp.binaries.acorn               适用于Acorn机器的仅二进制形式的邮寄(有改动)
comp.binaries.amiga               公用领域中的二进制加密程序(有改动)
comp.binaries.apple2              适用于Apple Ⅱ的仅二进制形式的邮寄
comp.binaries.atari.st            适用于Atari ST的仅二进制形式的邮寄(有改动)
comp.binaries.cbm                 Commodore 8比特二进制文件的传送(有改动)

comp.binaries.ibm.pc              适用于IBM PC/MS—DOS的仅二进制形式的邮寄(有改动)
comp.binaries.ibm.pc.d            有关IBM PC二进制邮寄的讨论
comp.binaries.ibm.pc.wanted       申请获得IBM PC及与其兼容的程序
comp.binaries.mac                 加密过的二进制Macintosh程序(有改动)
comp. binaries.ms-windows         Microsoft Windows的二进制程序(有改动)

comp.binaries.os2                 可在OS/2 ABI环境下使用的二进制文件(有改动)
comp.bugs.2bsd                    有关UNIX 2BSD版本的故障报告
comp.bugs.4bsd                    有关UNIX 4BSD版本的故障报告
comp.bugs.4bsd.ucb-fixes          BSD UNIX的故障报告/修理(有改动)
comp.bugs.misc                    一般UNIX的故障报告和修理(包括V7、UUCP)
comp.bugs.sys5                    USG(系统Ⅲ、Ⅴ等)的故障报告
comp.cad.cadence                  Candence设计系统产品的用户
comp.cad.compass                  Compass自动设计的EDA工具
comp.cad.pro-engineer             参量(数)制造技术的能手/工程设计包
comp.cad.synthesis                逻辑合成的研究和产品
comp.client-server                主题、客户/服务器技术
comp.cog-eng                      认知工程
comp.compilers                    编译器设计、理论等等(有改动)
comp.compression                  数据压缩算法与理论
comp.compression.research         数据压缩的研究(有改动)
comp.databases                    数据库和数据管理——观点和理论
comp.databases.informix           Informix数据库管理软件
comp.databases.ingres             有关INGRES产品的探讨
comp.databases.ms-access          有关Microsoft Access、Microsoft
Windows的关系型数据库系统的探讨
comp.databases.object             数据库系统中的面向对象变化表
comp.databases.oracle             Oracle公司的SQL数据库产品
comp.databases.paradox            有关Paradox、Borland公司所开发的适用于DOS和Microsoft Windows的数据库的探讨
comp.databases.pick               同类挑选、相关邮寄的数据库系统
comp.databases.rdb                DEC开发的关系型数据库工具Rdb
comp.databases.sybase             工具,SQL服务器
comp.databases.theory             高级数据库技术的讨论
comp.databases.xbase.fox          FOX软件公司的Xbase(类似dBASE)及兼容产品
comp.databases.xbase.misc         Xbase产品
comp.dcom.cell-relay              基于信元中继的产品
comp.dcom.fax                     Fax的硬件、软件和协议
comp.dcom.isdn                    综合业务数字网(ISDN)
comp.dcom.lans.ethernet           Ethernet/IEEE802.3协议的讨论
comp.dcom.lans.fddi               FDDI协议序列的讨论
comp.dcom.lans.misc               局域网(硬件与软件)
comp.dcom.lans.token-ring         令牌环网络
comp.dcom.modems                  数据通信(硬件与软件)
comp.dcom.servers                 选择和执行数据通信服务器
comp.dcom.sys.cisco               Cisco网路与网桥
comp.dcom.sys.wellfleet           Wellfleet的网桥与网络系统(硬件与软件)

comp.dcom.telecom                 无线通信的摘要(有改动)
comp.dcom.telecom.tech            无线电话的技术特点
comp.doc                          公共域的归档后的文档(有改动)
comp.doc.techreports              技术报告的清单(有改动)
comp.dsp                          使用计算机的数字信号处理(DSP)
comp.edu                          计算机科学的教育
comp.emacs                        EMACS编辑器
comp.fonts                        类型字体——设计、转换、使用等等
comp.graphics                     计算机图形学、艺术、动画、图像处理
comp.graphics.algorithms          生成计算机图形的算法
comp.graphics.animation           计算机动画的技术特点
comp.graphics.avs                 应用可视系统
comp.graphics.data-explorer       IBM的可视数据开发器、a.k.a.DX
comp.graphics.explorer            开发器的模块可视环境(MVE)
comp.graphics.gnuplot             GNUPLOT接口函数绘制器
comp.graphics.opengl              Open GL三维应用程序设计接口
comp.graphics.research            计算机图形学的高级技术探讨(有改动)
comp.groupware                    共享接口环境(硬件与软件)
comp.human-factors                有关人机接口(HCI)的探讨
comp.infosystems                  信息系统
comp.infosystems.announce         Internet信息业务的预告(有改动)
comp.infosystems.gis              地理信息系统
comp.infosystems.gopher           Gopher信息系统
comp.infosystems.wais             基于Z39.50的WAIS全文本字符搜索系统
comp.infosystems.www              全球宽带网(WWW)
comp.internet.library             电子库(有改动)
comp.ivideodisc                   交互式的视频录像盘
comp.lang.ada                     Ada语言
comp.lang.apl                     APL语言
comp.lang.basic.misc              其他BASIC语言、特征
comp.lang.basic.visual            Microsoft的Visual Basic和Applications
Basic(Windows和DOS)
comp.lang.c                       C语言
comp.lang.c++                     C++(面向对象语言)
comp.lang.clos                    Common Lisp目标系统
comp.lang.dylan                   Dylan(语言)
comp.lang.eiffel                  Eiffel(面向对象语言)
comp.lang.forth                   FORTH语言
comp.lang.fortran                 FORTRAN语言
comp.lang.functional              功能语言
comp.lang.hermes                  Hermes(分布式应用的语言)
comp.lang.idl-pvwave              IDL和PV—WAVE语言
comp.lang.lisp                    LISP语言
comp.lang.lisp.mcl                Apple的Macintosh Common Lisp语言
comp.lang.logo                    LOGO(教学语言)
comp.lang.misc                    其它计算机语言
comp.lang.ml                      ML语言、包括标准的ML、CAML、Lazy ML等(有改动)
comp.lang.modula2                 Modula-2
comp.lang.modula3                 Modula-3
comp.lang.oberon                  Oberon语言和系统
comp.lang.objective-c             目标C语言与环境
comp.lang.pascal                  Pascal语言
comp.lang.perl                    Larry Wall的Perl系统
comp.lang.pop                     Popll和Plug用户组
comp.lang.postscript              PostScript(页面描述语言)
comp.lang.prolog                  Prolog语言
comp.lang.sather                  Sather(面向对象语言)
comp.lang.scheme                  Scheme(程序设计语言)
comp.lang.sigplan                 来自ACM SIGPLAN的信息与预告(有改动)
comp.lang.smalltalk               Smalltalk 80
comp.lang.tcl                     Tcl(程序设计语言与有关工具)
comp.lang.verilog                 Verilog与PLI
comp.lang.vhdl                    VHSIC硬件描述语言,IEEE1076/87
comp.laser.printers               激光打印机(硬件与软件)(有改动)
comp.lsi                          大规模集成电路(LSI)
comp.lsi.testing                  电子电路的测试
comp.mail.elm elm mail            系统的讨论与修复
comp.mail.headers                 来自Internet高级领导人清单中的网关
comp.mail.maps                    各种图片,包括UUCP图片(有改动)
comp.mail.mh                      随机消息处理系统的UCI版本
comp.mail.mime                    Internet中REC1341的多目标扩展
comp.mail.misc                    计算机邮件的讨论
comp.mail.mush                    Mail用户的外壳(shell)(MUSH)
comp.mail.sendmail                BSD发送邮件局
comp.mail.uucp                    UUCP环境下的mail
comp.misc                         有关计算机的一般性主题
comp.multimedia                   交互式多媒体技术
comp.newprod                      新产品的预告(有改动)
comp.object                       面向对象程序设计
comp.object.logic                 集成化的面向对象与逻辑程序设计
comp.org.acm                      有关计算机器协会的主题
comp.org.decus                    数据设备计算机用户协会的消息组
comp.org.eff.news                 来自电子前沿基地的消息(有改动)
comp.org.eff.talk                 EFF的目标、策略等
comp.org.fidonet                  FidoNews摘要、FIDONET公司的官方消息(有改动)
comp.org.ieee                     有关IEEE及其成员的期刊与预告
comp.org.issnnet                  神经网络的国际学生协会
comp.org.lisp-users               LISP用户协会
comp.org.sug                      SUN用户组织
comp.org.usenix                   USENIX协会的活动和预告
comp.org.usenix.roomshare         在USENIX会议期间的住宿
comp.os.386bsd.announce           有关386bsd操作系统的预告(有改动)
comp.os.386bsd.apps               386bsd环境下运行的应用程序
comp.os.386bsd.bugs               有关386bsd OS与客户的故障和修复
comp.os.386bsd.development        有关386bsd内部的研究
comp.os.386bsd.misc               其它组不讨论的386bsd特点
comp.os.386bsd.questions          有关386bsd的问题
comp.os.cohernent                 Coherent(操作系统)
comp.os.cpm                       CP/M(操作系统)
comp.os.geos                      GEOS(由GeoWorks开发的PC机OS)
comp.os.linux.admin               安装与管理Linux系统
comp.os.linux.announce            对Linux团体很重要的预告(有改动)
comp.os.linux.development         正进行的Linux开发
comp.os.linux.help                有关Linux问题与建议
comp.os.linux.misc                Linux的其它特定主题
comp.os.lynx                      Lynx OS和Lynx实时系统
comp.os.mach                      来自MACH和其它方面的MACHOS
comp.os.minix                     Andrew Tannenbaum的MINIX系统
comp.os.misc                      有关OS的一般讨论
comp.os.ms-windows.advocacy       有关Microsoft Windows的思考与讨论
comp.os.ms-windows.announce       有关Microsoft Windows的预告(有改动)
comp.os.ms-windows.apps           MS—Windows的应用程序
comp.os.ms-windows.misc           Microsoft Windows的一般讨论
comp.os.ms-windows.nt.misc        Microsoft Windows NT的一般讨论
comp.os.ms-windows.nt.setup       Microsoft Windows NT系统的配置
comp.os.ms-windows.programmer.misc
                                  Microsoft Windows的程序设计
comp.os.ms-windows.programmer.tools
                                  Microsoft Windows的开发工具
comp.os.ms-windows.programmer.win32
                                  Microsoft Windows的32位程序设计接口
comp.os.ms-windows.setup          Microsoft Windows的安装与配置
comp.os.msdos.apps                MS—DOS环境下的应用程序
comp.os.msdos.desqview            QuarterDeck的DESQview及其相关产品
comp.os.msdos.mail-news           MS—DOS管理的邮件和网络消息系统
comp.os.msdos.misc                有关MS—DOS机器的其它主题
comp.os.msdos.pcgeos              GeoWorks PC/GEOS与其它PC/GEOS的软件包

comp.os.msdos.programmer          MS—DOS机器上的程序设计
comp.os.msdos.programmer.turbovision
                                  Borland公司的文本应用程序库
comp.os.os2.advocacy              支持与钟爱OS/2
comp.os.os2.announce              有关OS/2的消息和预告(有改动)
comp.os.os2.apps                  OS/2的应用程序
comp.os.os2.beta                  OS/2的β版
comp.os.os2.bugs                  OS/2的故障报告、修复和工作状况
comp.os.os2.misc                  OS/2的其它主题
comp.os.os2.multimedia            OS/2系统上的多媒体
comp.os.os2.networking            OS/2的环境下的联网
comp.os.os2.programmer.misc       OS/2的机器上的程序设计
comp.os.os2.programmer.porting    移植软件到OS/2上
comp.os.os2.setup                 OS/2的安装与配置
comp.os.os2.verlx                 OS/2(1.0~1.3版)
comp.os.os9                       OS/9(类似UNIX的实时操作系统)
comp.os.qnx                       QNX OS下的使用与开发
comp.os.research                  操作系统及其相关领域(有改动)
comp.os.vms                       DEC公司的VAX计算机系列与VMS
comp.os.vxworks                   VxWorks(实时OS)
comp.os.xinu                      XINU(由Purdue大学、D.Comer开发的OS)
comp.parallel                     大规模并行硬件/软件(有改动)
comp.parallel.pvm                 PVM多个计算机并行化系统
comp.patents                      计算机技术的专利(有改动)
comp.periphs                      外部设备
comp.periphs.scsi                 基于SCSI的外部设备
comp.programming                  脱离于语言和OS的程序设计讨论
comp.programming.literate         能阅读的程序和程序设计工具
comp.protocols.appletalk          Apple总线的硬件、软件
comp.protocols.dicom              医学数字图像和通信
comp.protocols.ibm                连网、IBM主机
comp.protocols.iso                ISO协议堆栈
comp.protocols.kerberos           Kerberos(确认服务器)
comp.protocols.kermit             Kermit(有改动)
comp.protocols.misc               各种类型的协议
comp.protocols.nfs                网络文件系统(NFS)的协议
comp.protocols.ppp                Internet的点对点(对等)协议
comp.protocols.tcp-ip             TCP/IP网络协议
comp.protocols.tcp-ip.ibmpc       PC机及其兼容机的TCP/IP
comp.pubish.cdrom.hardware        由CD—ROM公布的硬件
comp.pubish.cdrom.multimedia      多媒体创作和出版的软件
comp.pubish.cdrom.software        由CD—ROM公布的软件
comp.realtime                     实时计算机的探讨
comp.research.japan               日本的研究(有改动)
comp.risks                        来自计算机和用户的大众风险(有改动)
comp.robotics                     机器人及其应用
comp.security.misc                有关计算机和网络的安全保密讨论
comp.security.unix                UNIX安全保密性
comp.simulation                   模拟方法、问题、用法(有改动)
comp.society                      技术对社会的影响(有改动)
comp.society.cu-digest            未公开的计算机摘要(有改动)
comp.society.development          发展中国家的计算机技术
comp.society.folklore             计算机的历史与文化、过去与现在(有改动)

comp.society.futures              影响未来计算机技术的大事
comp.society.privacy              技术对个人的影响(有改动)
comp.soft-sys.khoros              Khoros X11(可视化系统)
comp.soft-sys.matlab              MathWorks(计算与可视化软件包)
comp.soft-sys.sas                 SAS(统计学软件包)
comp.soft-sys.shazam              SHAZAM(计量经济学的计算机程序)
comp.soft-sys.spss                SPSS(统计学软件包)
comp.soft-sys.wavefront           波前(Wavefront)软件产品、问题等
comp.software-eng                 软件工程及其相关主题
comp.software.licensing           软件许可技术
comp.software.testing             测试计算机系统
comp.sources.3bl                  只适用于AT&T 3b1的源代码邮寄(有改动)
comp.sources.acorn                只适用于Acorn的源代码邮寄(有改动)
comp.sources.amiga                只适用于Amiga的源代码邮寄(有改动)
comp.sources.apple2               Apple Ⅱ的源代码和讨论(有改动)
comp.sources.atari.st             只适用于Atari ST的源代码邮寄(有改动)
comp.sources.bugs                 有关邮寄的源代码的故障报告、修复与探讨

comp.sources.d                    源代码邮寄的讨论
comp.sources.games                游戏软件的邮寄(有改动)
comp.sources.games.bugs           有关游戏软件邮寄的故障报告与修复
comp.sources.hp48                 用于HP48和HP28计算机的程序(有改动)
comp.sources.mac                  用于Macintosh的软件(有改动)
comp.sources.misc                 软件的邮寄(有改动)
comp.sources.postscript           适用于用PostScript编写的程序的源代码(有改动)
comp.sources.reviewed             由同等刊物评价的源代码(有改动)
comp.sources.sun                  Sun工作站上的软件(有改动)
comp.sources.testers              寻找测试软件的人员
comp.sources.unix                 完全面向UNIX源代码的邮寄(有改动)
comp.sources.wanted               软件需求和修复
comp.sources.x                    适于X Windows系统的软件(有改动)
comp.specification                正式规范的语言和方法学
comp.specification.z              Z(正式规范的符号)
comp.speech                       语音科学和技术的研究与应用
comp.std.c                        C语言标准
comp.std.c++                      C++语言、库、标准
comp.std.internet                 国际标准
comp.std.lisp                     支持标准的用户组织(ALU)(有改动)
comp.std.misc                     有关各种标准的讨论
comp.std.mumps                    MUMPS领域的X11.1委员会(有改动)
comp.std.unix                     UNIX的P1003委员会(有改动)
comp.std.wireless                 无线网络技术的测试标准(有改动)
comp.sw.components                软件单元及其相关技术
comp.sys.3b1                      AT&T7300/3B1/UNIX PC
comp.sys.acorn                    基于Acorn和ARM的计算机
comp.sys.acorn.advocacy           为何Acorn计算机和程序的性能更好
comp.sys.acorn.announce           对Acorn与ARM用户的预告(有改动)
comp.sys.acorn.tech               Acorn和ARM的产品(硬件与软件)
comp.sys.alliant                  Alliant计算机
comp.sys.amiga.advocacy           为何Amiga比XYZ的性能更好
comp.sys.amiga.announce           有关Amiga的预告(有改动)
comp.sys.amiga.applications       其它的应用
comp.sys.amiga.audio              音乐、MIDI、语言合成及其它声音
comp.sys.amiga.datacomm           传送和接收字节数据的方法
comp.sys.amiga.emulations         各种硬件和软件的仿真器
comp.sys.amiga.games              有Amiga上游戏的讨论
comp.sys.amiga.graphics           表格、图形、图片等等
comp.sys.amiga.hardware           Amiga计算机的硬件、问题与解答、期刊等等
comp.sys.amiga.introduction       Amiga的新成员
comp.sys.amiga.marketplace        寻找Amiga、价格等的场所
comp.sys.amiga.misc               其它Amiga消息组未包含的主题
comp.sys.amiga.multimedia         动画、视频信号及多媒体
comp.sys.amiga.programmer         讨论代码的开发者和业余爱好者
comp.sys.amiga.reviews            有关Amiga的硬件和软件的刊物(有改动)
comp.sys.appleo                   Appllo计算机系统
comp.sys.apple2                   AppleⅡ微机
comp.sys.apple2.comm              AppleⅡ数据通信
comp.sys.apple2.gno               AppleⅡ和GNO多任务环境
comp.sys.apple2.marketplace       AppleⅡ设备的买、卖及交易
comp.sys.apple2.programmer        AppleⅡ的程序设计
comp.sys.apple2.usergroups        有关AppleⅡ用户组的详细情况
comp.sys.atari.8bit               8位Atari微机
comp.sys.atari.advocacy           Atari计算机上的病毒侵袭和防御
comp.sys.atari.st                 16位的Atari微机
comp.sys.atari.st.tech            Atari ST的硬件与软件
comp.sys.att                      AT&T微机
comp.sys.cbm                      Commordore微机
comp.sys.concurrent               计算机的并行/大规模计算线路
comp.sys.convex                   Convex计算机系统的硬件与软件
comp.sys.dec                      DEC计算机系统
comp.sys.dec.micro                DEC微机(Rainbow,专用350/380)
comp.sys.encore                   Encore的MultiMax计算机
comp.sys.harris                   Harris计算机系统、特别是实时系统
comp.sys.hp                       HP(惠普)设备
comp.sys.hp.apps                  所有HP平台上的软件和应用程序
comp.sys.hp.hardware              HP系统硬件
comp.sys.hp.hpux                  有关HP—UX和9000系列计算机的观点
comp.sys.hp.misc                  其它HP消息组没有包含的观点
comp.sys.hp.mpe                   有关MPE和3000系列计算机的观点
comp.sys.hp48                     HP48和HP28的计算器
comp.sys.ibm.pc.demos             表现case程序员技巧的演示程序
comp.sys.ibm.pc.digest            IBM PC、PC/XT及PC/AT机(有改动)
comp.sys.ibm.pc.games.action      PC机上的Arcade风格的游戏
comp.sys.ibm.pc.games.adventure   PC机上的探险(non-prg)游戏
comp.sys.ibm.pc.games.announce    对所有PC机游戏者的预告(有改动)
comp.sys.ibm.pc.games.flight-sim  PC机上的飞行模拟
comp.sys.ibm.pc.games.misc        其它PC消息组不包含的游戏
comp.sys.ibm.pc.games.rpg         PC机上自己充当角色的游戏
comp.sys.ibm.pc.games.strategic   PC机上的策略/计划游戏
comp.sys.ibm.pc.hardware          XT/AT/EISA硬件、任何买主
comp.sys.ibm.pc.hardware.cd-rom   PC机上的CD—ROM驱动器和接口
comp.sys.ibm.pc.hardware.chips    处理器、cache(高速缓冲存)、内存条等等

comp.sys.ibm.pc.hardware.comm     PC机的调制解调器和通信卡
comp.sys.ibm.pc.hardware.misc     其它PC机硬件的主题
comp.sys.ibm.pc.hardware.networking
                                  PC机的网络硬件和设备
comp.sys.ibm.pc.hardware.storage  硬盘驱动器和其它PC机存储设备
comp.sys.ibm.pc.hardware.system   整个IBM—PC计算机和无性(clone)系统
comp.sys.ibm.pc.hardware.video    PC机的视频卡和监视系统
comp.sys.ibm.pc.misc              IBM—PC机的讨论
comp.sys.ibm.pc.rt                有关IBM RT计算机的主题
comp.sys.ibm.pc.soundcard         PC机的声音卡(硬件和软件)
comp.sys.ibm.pc2.hardware         微通道硬件、任何卖主
comp.sys.intel                    Intel系统和部件
comp.sys.isis                     ISIS分布系统(Cornell大学)
comp.sys.laptops                  Laptop计算机(便携式)
comp.sys.m6809                    6809
comp.sys.m68k                     68K
comp.sys.m68k.pc                  基于68K的PC机(有改动)
comp.sys.m88k                     基于88K的PC机
comp.sys.mac.advocacy             Macintosh机与其它计算机的比较
comp.sys.mac.announce             Macintosh用户的注意事项(有改动)
comp.sys.mac.apps                 Macintosh机的应用软件
comp.sys.mac.comm                 Macintosh通信
comp.sys.mac.databases            Macintosh数据库系统
comp.sys.mac.digest               Macintosh的信息和使用(不包括程序(有改动))
comp.sys.mac.games                Macintosh机上的游戏
comp.sys.mac.graphics             Macintosh图形系统:着色、绘图、三维、CAD和动画
comp.sys.mac.hardware             有关Macintosh硬件的观点
comp.sys.mac.hypercard            Macintosh超级卡的信息和应用
comp.sys.mac.misc                 有关Macintosh的一般讨论
comp.sys.mac.oop.macapp3          Macintosh,3版(面向对象系统)
comp.sys.mac.oop.misc             Macintosh机上的面向对象程序设计
comp.sys.mac.oop.tcl              用于对象程序设计的Symantec的THINK类库

comp.sys.mac.portables            Laptop的Macintosh机
comp.sys.mac.programmer           对Macintosh机的程序设计
comp.sys.mac.scitech              科技工作中所使用的Macintosh机
comp.sys.mac.system               Macintosh系统软件
comp.sys.mac.wanted               "I want XYZ for my Mac."邮寄
comp.sys.mentor                   Mentor图形产品和Silicon编译器系统
comp.sys.mips                     基于MIPS芯片的系统
comp.sys.misc                     对所有种类计算机的讨论
comp.sys.ncr                      NCR计算机
comp.sys.newton.announce          Newton信息邮寄(有改动)
comp.sys.newton.misc              有关Newton系统的讨论
comp.sys.newton.programmer        Newton软件开发
comp.sys.next.advocacy            NeXT信仰/主张
comp.sys.next.announce            有关NeXT的预告(有改动)
comp.sys.next.bugs                对已知的NeXT故障的讨论和解决方法
comp.sys.next.hardware            NeXT计算机的物理特性
comp.sys.next.marketplace         NeXT硬件、软件和任务
comp.sys.next.misc                NeXT的一般讨论
comp.sys.next.programmer          有关NeXT的程序设计观点
comp.sys.next.software            NeXT程序的功能、应用和适用性
comp.sys.next.sysadmin            NeXT系统管理
comp.sys.novell                   Novell Netware产品
comp.sys.nsc.32k                  国家半导体32000系统芯片
comp.sys.palmtops                 掌上功能强大的计算器
comp.sys.pen                      通过笔划与计算交流
comp.sys.powerpc                  PowerPC机
comp.sys.prime                    Prime计算机产品
comp.sys.proteon                  Proteon网关产品
comp.sys.psion                    PSION个人计算机和创办者
comp.sys.pyramid                  Pyramid 90x计算机
comp.sys.ridge                    Ridge 32计算机与ROS
comp.sys.sequent                  Sequent系统(平衡和对称式)
comp.sys.sgi.admin                SGI系统管理
comp.sys.sgi.announce             向SGI团体的预告(有改动)
comp.sys.sgi.apps                 Iris上运行的应用程序
comp.sys.sgi.bugs                 IRIX操作系统中发现的故障
comp.sys.sgi.graphics             SGI图形上的图形包和讨论
comp.sys.sgi.hardware             Iris计算机的基本系统和外设
comp.sys.sgi.misc                 有关Silicon图形机器的一般讨论
comp.sys.sinclair                 Sinclair计算机——例如,ZX81、Spectrum和QL
comp.sys.stratus                  Stratus产品,包括System/88、CPS—32、VOS和FIX
comp.sys.sun.admin                Sun系统管理
comp.sys.sun.announce             Sun的预告和Sunergy邮件(有改动)
comp.sys.sub.apps                 Sun计算机系统的软件应用
comp.sys.sun.hardware             Sun微机系统的硬件
comp.sys.sun.misc                 有关Sun产品的讨论
comp.sys.sun.wanted               寻找Sun产品支持的人员
comp.sys.tahoe                    CCI6/32、Harris SCX/7和Sperry 7000计算机
comp.sys.tandy                    Tandy计算机,新式的和老式的
comp.sys.ti                       TI(德克萨斯设备公司)
comp.sys.transputer               Transputer计算机和Occam语言
comp.sys.unisys                   Sperry、Burroughs、Convergent和Unisys系统
comp.sys.xerox                    Xerox 1100工作站和协议
comp.sys.zenith.z100              Zenith Z-100(Heaty H-100)计算机系列
comp.terminals                    终端
comp.text                         正文处理观点和方法
comp.text.desktop                 桌面排版技术和技巧
comp.text.frame                   FrameMaker(桌面排版)
comp.text.interleaf               Interleaf软件、应用和使用
comp.text.sgml                    ISO8879 SGML、结构化文档和辅助语言
comp.text.tex                     TeX和LaTeX系统和宏
comp.theory.info-retrieval        信息检索主题(有改动)
comp.unix.admin                   基于UNIX系统的管理
comp.unix.advocacy                对UNIX及其各版本的赞成与反对的争论
comp.unix.aix                     UNIX的IBM版本
comp.unix.amiga                   Amiga上的MINIX、SYSV4及其它*nix
comp.unix.aux                     Macintosh Ⅱ计算机上的UNIX
comp.unix.bsd                     Berkeley软件分布UNIX
comp.unix.dos-under-unix          在UNIX环境下运行MS—DOS
comp.unix.internals               Hacking的UNIX内部技术
comp.unix.large                   主机和大型网络上的UNIX
comp.unix.misc                    其它消息组没有包含的UNIX主题
comp.unix.osf.misc                开放软件基金会的产品
comp.unix.osf.osf1                OSF/1
comp.unix.pc-clone.16bit          286体系结构的UNIX
comp.unix.pc-clone.32bit          386和486体系结构的UNIX
comp.unix.programmer              UNIX环境下的程序设计
comp.unix.questions               UNIX新组
comp.unix.shell                   UNIX Shell的使用和程序设计
comp.unix.sys3                    System Ⅲ的UNIX
comp.unix.sys5.misc               早于版本3的System Ⅴ版本
comp.unix.sys5.r3                 System Ⅴ的版本3
comp.unix.sys5.r4                 System Ⅴ的版本4
comp.unix.ultrix                  DEC的ULTRIX
comp.unix.unixware                Novell的UnixWare产品
comp.unix.user-friendly           有关UNIX友好用户界面的讨论
comp.unix.wizards                 UNIX奇才(有改动)
comp.unix.xenix.imsc              有关XENIX(不包括SCO)的讨论
comp.unix.xenix.sco               由Santa Cru2 Operation开发的XENIX版本

comp.virus                        计算机病毒和安全(有改动)
comp.windows.garnet               Garnet用户接口的开发环境
comp.windows.interviews           InterViews的面向对象Windows系统
comp.windows.misc                 有关Windows系统的各种观点
comp.windows.news                 Sun微机系统的NeWS Windows系统
comp.windows.open-look            Open Look GUI
comp.windows.suit                 SUIT的用户接口界面工具包
comp.windows.x                    X Windows系统
comp.windows.x.apps               X的应用,如获取和使用(但不包括程序设计)

comp.windows.x.i386unix           XFree86窗口系统及其它
comp.windows.x.intrinsics         X toolkit(工具包)
comp.windows.x.pex                X Windows的PHIGS增强版

posted @ 2005-09-07 14:15 ivaneeo 阅读(614) | 评论 (0)编辑 收藏

作法(Mechanics)
    • 修改presentation class,使其成为domain classObserver[GoF]
        • ==》如果尚未有domain class,就建立一个。
        • ==》如果没有[从presentation class到domain class]的关联性(link),就将domain class保存于presentation class的一个值域中。
    • 针对GUI class内的domain data,使用Self Encapsulate Field(171)。
    • 编译,测试。
    • 在事件处理函数(event handler)中加上对设值函数(setter)的调用,以[直接访问方式]更新GUI组件。
        • ==》在事件处理函数中放一个设值函数(setter),利用它将GUI组件更新为domain data的当前值。当然这其实没有必要,你只不过是拿它的值设定它自己。但是这样使用setter,便是允许其中的任何动作得以于日后被执行起来,这是这一步骤的意义所在。
        • ==》进行这个改变时,对于组件,不要使用取值函数(getter),应该采取[直接取用]方式,因为稍后我们将修改取值函数(getter),使其从domain object(而非GUI组件)取值。设值函数(setter)也将遭受类似修改。
        • ==》确保测试代码能够触发新添加的事件处理(event handling)机制。
    • 编译,测试。
    • 在domain class中定义数据及其相关访问函数(accessors)。
        • ==》确保domain class中的设值函数(setter)能够触发Observer模式的通报机制(notify mechanism)。
        • ==》对于被观察(被监视)的数据,在domain class中使用[与presentation class所用的相同型别](通常是字符串)来保存。后续重构中你可以自由改变这个数据型别。
    • 修改presentation class中的访问函数(accessors),将它们的操作对象改为domain object(而非GUI组件)。
    • 修改observer的update(),使其从相应的domain object中将所需数据拷贝给GUI组件。
    • 编译,测试。
posted @ 2005-09-07 12:19 ivaneeo 阅读(301) | 评论 (0)编辑 收藏

范例(Examples)
我们的范例其行为非常简单:当用户修改文本框中的数值,另两个文本框就会自动更新.如果你修改Start或End,length就会自动成为两者计算所得的长度;如果你修改length,End就会随之变动.

一开始,所有函数都放在IntervalWindow class中.所有文本框都能够响应[失去键盘焦点](loss of focus)这一事件。
public class IntervalWindow extends Frame...
    java.awt.TextField _startField;
    java.awt.TextField _endField;
    java.awt.TextField _lengthField;

    class SymFocus extends java.awt.event.FocusAdapter
    {
       public void focusLost(java.awt.event.FocusEvent event)
       {
          Object object = event.getSource();
   
          if(object == _startField)
             StartField_FocusLost(event);
          else if(object = _endField)
             EndField_FocusLost(event);
          else if(object = _lengthField)
             LengthField_FocusLost(event);
       }
}

Start文本框失去焦点,事件监听器调用StartField_FocusLost()。另两个文本框的处理也类似。事件处理函数大致如下:
void StartField_FocusLost(java.awt.event.FocusEvent event) {
    if(isNotInteger(_startField.getText()))
       _startField.setText("0");
    calculateLength();
}
void EndField_FocusLost(java.awt.event.FocusEvent event) {
    if(isNotInteger(_endField.getText()))
       _endField.setText("0");
    calculateLength();
}
void LengthField_FocusLost(java.awt.event.FocusEvent event) {
    if(isNotInteger(_lengthField.getText()))
       _lengthField.setText("0");
    calculateLength();
}

如果文本框的字符串无法转换为一个整数,那么该文本框的内容将变成0。而后,调用相关计算函数:
void calculateLength() {
    try {
       int start = Integer.parseInt(_startField.getText());
       int end = Integer.parseInt(_endField.getText());
       int length = end - start;
       _lengthField.setText(String.valueOf(length));
    } catch(NumberFormatException e) {
       throw new RuntimeException("Unexpected Number Format Error");
    }
}
void calculateEnd() {
    try {
       int start = Integer.parseInt(_startField.getText());
       int end = Integer.parseInt(_endField.getText());
       int end = start + length;
       _endField.setText(String.valueOf(end));
    } catch(NumberFormatException e) {
       throw new RuntimeException("Unexpected Number Format Error");
    }
}
我的任务就是非视觉性的计算逻辑从GUI中分离出来。基本上这就意味将calculateLength()和calculateEnd()移到一个独立的domain class去。为了这一目的,我需要能够在不引用窗口类的前提取用StartEndlength三个文本框的值。唯一办法就是将这些数据复制到domain class中,并保持与GUI class数据同步。这就是Duplicate Observed Data(189)的任务。

截至目前我还没有一个domain class,所以我着手建立一个:
class Interval extends Observable {}

IntervalWindow
class需要与此崭新的domain class建立一个关联:
private Interval _subject;

然后,我需要合理地初始化_subject值域,并把IntervalWindow class变成Interval class的一个Observer。这很简单,只需把下列代码放进IntervalWindow构造函数中就可以了:
_subject = new Interval();
_subject.addObserver(this);
update(_subject, null);

我喜欢把这段代码放在整个建构过程的最后。其中对update()的调用可以确保:当我把数据复制到domain class后,GUI将根据domain class进行初始化。update()是在java.util.observer接口中声明的,因此我必须让IntervalWindow class实现这一接口:
public class IntervalWindow extends Frame implements Observer
然后我还需要为IntervalWindow class建立一个update()。此刻我先令它为空:
public void update(Observable observed, Object arg)  {
}
现在我可以编译并测试了。到目前为止我还没有作出任何真正的修改。呵呵,小心驶得万年船。

接下来我把注意力转移到文本框。一如往常我每次只改动一点点。为了卖弄一下我的英语能力,我从End文本框开始。第一件要做的事就是实施Self Encapsulate Field(171)。文本框的更新是通过getText()和setText()两函数实现的,因此我所建立的访问函数(accessors)需要调用这两个函数:

String getEnd() {
    return _endField.getText();
}
void setEnd(String arg) {
    _endField.setText(arg);
}
然后,找出_endField的所有引用点,将它们替换为适当的访问函数:
void calculateLength() {
    try {
       int start = Integer.parseInt(_startField.getText());
       int end = Integer.parseInt(getEnd());
       int length = end - start;
       _lengthField.setText(String.valueOf(length));
    } catch(NumberFormatException e) {
       throw new RuntimeException("Unexpected Number Format Error");
    }
}
void calculateEnd() {
    try {
       int start = Integer.parseInt(_startField.getText());
       int end = Integer.parseInt(_endField.getText());
       int end = start + length;
       setEnd(String.valueOf(end));
    } catch(NumberFormatException e) {
       throw new RuntimeException("Unexpected Number Format Error");
    }
}
void EndField_FocusLost(java.awt.event.FocusEvent event) {
    if(isNotInteger(getEnd()))
       setEnd("0");
    calculateLength();
}

这是Self Encapsulate Field(171)的标准过程。然后当你处理GUI class时,情况还更复杂些:用户可以直接(通过GUI)修改文本框内容,不必调用setEnd()。因此我需要在GUI class的事件处理函数中加上对setEnd()的调用。这个动作把End文本框设定为其当前值。当然,这没带来什么影响,但是通过这样的方式,我们可以确保用户的输入的确是通过设值函数(setter)进行的:
void EndField_FocusLost(java.awt.event.FocusEvent event) {
    setEnd(_endField.getText());
    if(isNotInteger(getEnd()))

       setEnd("0");
    calculateLength();
}

上述调用动作中,我并没有使用上一页的getEnd()取得End文 本框当前内容,而是直接取用该文本框。之所以这样做是因为,随后的重构将使上一页的getEnd()从domain object(而非文本框)身上取值。那时如果这里用的是getEnd()函数,每当用户修改文本框内容,这里就会将文本框又改回原值。所以我必须使用 [直接访问文本框]的方式获得当前值。现在我可以编译并测试值域封装后的行为了。

现在,在domain class中加入_end值域:
class Interval...
    private String _end = "0";
在这里,我给它的初始值和GUI class给它的初值是一样的。然后我再加入取值/设值函数(getter/setter):
class Interval...
    String getEnd() {
       return _end;
    }
    void setEnd(String arg) {
       _end = arg;
       setChanged();
       notifyObservers();
    }

由于使用了Observer模式,我必须在设值函数(setter) 中加上[发出通告]动作(即所谓notification code)。我把_end声明为一个字符串,而不是一个看似更合理的整数,这是因为我希望将修改量减至最少。将来成功复制数据完毕后,我可以自由自在地于 domain class内部把_end声明为整数。

现在,我可以再编译并测试一次。我希望通过所有这些预备工作,将下面这个较为棘手的重构步骤的风险降至最低。

首先,修改IntervalWindow class的访问函数,令它们改用Interval对象:
class IntervalWindow...
    String getEnd() {
       return _subject.getEnd();
    }
    void setEnd(String arg) {
       _subject.setEnd(arg);
    }
同时也修改update()函数,确保GUIInterval对象发来的通告做出响应:
class IntervalWindow...
    public void update(Observable observed, Object arg) {
       _endField.setText(_subject.getEnd());
    }
这是另一个需要[直接取用文本框]的地点。如果我调用的是设值函数(setter),程序将陷入无限递归调用(这是因为IntervalWindow的设 值函数setEnd()调用了Interval。setEnd(),一如稍早行所示:而Interval.setEnd()又调用 notifyObservers(),导致IntervalWindow.update()又被调用)。

现在,我可以编译并测试,数据都恰如其分地被复制了。

另两个文本框也如法炮制。完成之后,我可以使用Move Method(142)将calculateEnd()和calculateLength()搬到Interval class。这么一来,我就拥有一个[包容所有domain behavior和domain data]并与GUI code分离的domain class了。

如果上述工作都完成了,我就会考虑彻底摆脱这个GUI class。如果GUI class是个较为老旧的AWT class,我会考虑将它换成一个比较好看的Swing class,而且后者的坐标定位能力也比较强。我可以在domain class之上建立一个Swing GUI。这样,只要我高兴,随时可以去掉老旧的GUI class。

使用事件监听器(Event Listeners)

如果你使用事件监听器(event listener)而不是Observer/Observable模式,仍然可以实施Duplicate Observed Data(189)。这种情况下,你需要在domain model中建立一个listener class和一个event class。然后,你需要对domain object注册listeners,就像前例对observable对象注册observers一样。每当domain object发生变化(类似上例的update()函数被调用),就向listeners发送一个事件(event)。IntervalWindow class可以利用一个inner class(内嵌类)来实现监听器接口(listener interface),并在适当时候调用适当的update()函数。
posted @ 2005-09-06 11:07 ivaneeo 阅读(599) | 评论 (0)编辑 收藏

动机(Motivation)
一个分层良好的系统,应该将处理用户界面(UI)和处理业务逻辑(business logic)的代码分开。之所以这样做,原因有以下几点:(1)你可能需要使用数个不同的用户界面来表现相同的业务逻辑;如果同时承担两种责任,用户界面 会变得过分复杂;(2)与GUI隔离之后,domain objects的维护和演化都会更容易;你甚至可以让不同的开发者负责不同部分的开发。

如果你遇到的代码是以双层(two-tiered)方式开发,业务逻辑被内嵌于用户界面(UI)之中,你就有必要将行为分离出来。其中的主要工作就是函数的分离和搬移。但数据就不同了:你不能仅仅只是移动数据,你必须将它复制到新建部位中,并提供相应的同步机制。
posted @ 2005-09-05 17:04 ivaneeo 阅读(279) | 评论 (0)编辑 收藏

注:所谓presentation class,用以处理[数据表现形式];所谓domain class,用以处理业务逻辑。

你有一些domain data置身于GUI控件中,而domain method需要访问之。

将该笔数据拷贝一个domain object中。建立一个Observer模式,用以对domain object和GUI object内的重复数据进行同步控制(sync.)。

Duplicate Observed Data.png
posted @ 2005-09-05 16:50 ivaneeo 阅读(293) | 评论 (0)编辑 收藏

仅列出标题
共67页: First 上一页 39 40 41 42 43 44 45 46 47 下一页 Last