自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 《Windows网络与通信程序设计》——示例:获取MAC地址

示例:获取MAC地址<br />说明:<br />下面的例子输出了本机的IP地址、网络(内部 LAN )的子网掩码、网关的lP地址和本机的MAC地址。<br /> <br />代码: <br />unit uLocalHostInfo;<br /> <br />interface<br /> <br />uses<br />    Windows,SysUtils,Classes;<br /> <br />procedure GetGlobalData(AList: TStrings);<br /> <br

2010-12-25 13:34:00 531

原创 《Windows网络与通信程序设计》——示例:获取本机IP地址

示例:获取本机IP地址<br />说明:<br />通常,主机上的接口被静态地指定一个IP地址,或者是由配置协议来分配,如动态主机配置协议(DHCP)。如果 DHCP 服务器不能到达,系统会使用Automatic Private IP Addressing (APIPA),自动分配169.254.0.0/16范围内的地址。<br /> <br />代码:<br />unit uGetAllIps;<br /> <br />interface<br /> <br />uses<br />    SysUtil

2010-12-25 13:32:00 708

原创 《Windows网络与通信程序设计》——示例:地址信息

<br />示例:地址信息<br />unit uSockAddr;<br /> <br />interface<br /> <br />uses<br />    WinSock2;<br /> <br />procedure InitSockAddr;<br /> <br />implementation<br /> <br />procedure InitSockAddr;<br />var<br />    SockAddr: TSockAddrIn;<br />begin<br />    wit

2010-12-25 13:31:00 420

原创 《Windows网络与通信程序设计》——示例:Winsock库的装入和释放

<br />示例:Winsock库的装入和释放<br /><br />unit uInitSock;<br /> <br />interface<br /> <br />uses<br />    SysUtils,WinSock2;<br /> <br />type<br />    TInitSock = class(TObject)<br />    public<br />        constructor Create(const minorVer: byte = 2; const major

2010-12-25 13:27:00 471

原创 《GOF设计模式》—职责链(CHAIN OF RESPONSIBILITY)—Delphi源码示例:doesNotUnderstand机制

示例:doesNotUnderstand机制<br />说明:<br />在Smalltalk中自动转发,你可以使用Smalltalk中的doesNotUnderstand机制(类似于Delphi的DefaultHandler机制)转发请求。没有相应方法的消息被doseNotUnderstand实现方法捕捉,doseNotUnderstand实现方法可以被重定义,从而可向一个对象的后继者转发该消息。这样就不需要手工实现转发;类仅处理它感兴趣的请求,而依赖doesNotUnderstand转发所有其他的请求。

2010-12-25 13:23:00 320

原创 《GOF设计模式》—职责链(CHAIN OF RESPONSIBILITY)—Delphi源码示例:表示请求(使用请求对象)

<br />示例:请求对象<br />说明:<br />为解决参数传递问题,我们可使用独立的请求对象来封装请求参数。Request类可明确地描述请求,而新类型的请求可用它的子类来定义。这些子类可定义不同的请求参数。处理者必须知道请求的类型(即它们正使用哪一个Request子类)以访问这些参数。为标识请求,Request可定义一个访问器(accessor)函数以返回该类的标识符。或者,如果实现语言支持的话,接受者可使用运行时的类型信息。<br />以下为一个分派函数的框架(sketch),它使用请求对象标识请

2010-12-25 13:20:00 402

原创 《GOF设计模式》—职责链(CHAIN OF RESPONSIBILITY)—Delphi源码示例:表示请求(使用处理函数)

<br />示例:处理函数<br />说明:<br />另一选择是使用一个处理函数,这个函数以一个请求码(如一个整型常数或一个字符串)为参数。这种方法支持请求数目不限。唯一的要求是发送方和接受方在请求如何编码问题上应达成一致。<br />这种方法更为灵活,但它需要用条件语句来区分请求代码以分派请求。另外,无法用类型安全的方法来传递请求参数(或参数组,如“a-1,b-2”),因此它们必须被手工打包和解包。显然,相对于直接调用一个操作来说它不太安全。<br /> <br />代码:<br />unit uCha

2010-12-25 13:19:00 371

原创 《GOF设计模式》—职责链(CHAIN OF RESPONSIBILITY)—Delphi源码示例:帮助机制

示例:帮助机制<br />说明:<br /><br /><br />代码:<br />unit uHelp;<br /> <br />interface<br /> <br />uses<br />    Dialogs;<br /> <br />const<br />    NO_HELP_TOPIC = -1;<br />    PRINT_TOPIC = 1;<br />    PAPER_ORIENTATION_TOPIC = 2;<br />    APPLICATION_TOPIC = 3;<b

2010-12-25 13:17:00 375

原创 《GOF设计模式》—职责链(CHAIN OF RESPONSIBILITY)—Delphi源码示例:职责链接口

示例:职责链接口<br />说明:<br />(1)、定义<br />使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。<br />(2)、结构<br /><br /><br />对象:<br />* Handler:处理对象。定义一个处理请求的接口。(可选)实现后继链。<br />* ConcreteHandler:具体处理对象。处理它所负责的请求。可访问它的后继者。如果可处理该请求,就处理之;否则将该请求转发给

2010-12-25 13:15:00 333

原创 《GOF设计模式》—代理(PROXY)—Delphi源码示例:更新前拷贝机制(copy-on-write)

示例:更新前拷贝机制(copy-on-write)<br />说明:<br />Proxy模式还可以对用户隐藏另一种称之为copy-on-write的优化方式,该优化与根据需要创建对象有关。拷贝一个庞大而复杂的对象是一种开销很大的操作,如果这个拷贝根本没有被修改,那么这些开销就没有必要。用代理延迟这一拷贝过程,我们可以保证只有当这个对象被修改的时候才对它进行拷贝。<br />在实现Copy-on-write时必须对实体进行引用计数,“拷贝代理”仅会增加引用计数。只有当用户请求一个修改该实体的操作时,代理才会

2010-12-18 14:34:00 509

原创 《GOF设计模式》—代理(PROXY)—Delphi源码示例:智能指引(Smart Reference)

示例:智能指引(SmartReference)<br />说明:<br />取代了简单的指针,它在访问对象时执行一些附加操作。<br />它的典型用途包括:<br />*对指向实际对象的引用计数,这样当该对象没有引用时,可以自动释放它(也称为Smart Pointers[Ede92])。<br />*当第一次引用一个持久对象时,将它装入内存。<br />*在访问一个实际对象前,检查是否已经锁定了它,以确保其他对象不能改变它。<br />ProtectionProxies和SmartReference都允许在

2010-12-18 14:31:00 467

原创 《GOF设计模式》—代理(PROXY)—Delphi源码示例:保护代理(Protection Proxy)

示例:保护代理(ProtectionProxy)<br />说明:<br />Protection Proxy检查调用者是否具有实现一个请求所必需的访问权限。<br /> <br />代码:<br />unit uProtectionProxy;<br /> <br />interface<br /> <br />uses<br />    Dialogs;<br /> <br />type<br />    TSubjectPermit = (spDefault,spA,spB);<br />    TS

2010-12-18 14:28:00 403

原创 《GOF设计模式》—代理(PROXY)—Delphi源码示例:远程代理(Remote Proxy)

示例:远程代理(RemoteProxy)<br />说明:<br />为一个对象在不同的地址空间提供局部代表(相当于主机实际对象<—>用户机映射对象,对映射对象操作传递给主机实际对象)。<br />Remote Proxy负责对请求及其参数进行编码,并向不同地址空间中的实体发送已编码的请求。<br />代码:<br />unit uRemoteProxy;<br /> <br />interface<br /> <br />uses<br />    SysUtils,Dialogs,ScktComp;<b

2010-12-18 14:26:00 452

原创 《GOF设计模式》—代理(PROXY)—Delphi源码示例:文档编辑器(使用doesNotUnderstand的Proxy)

<br />示例:使用doesNotUnderstand的Proxy<br />说明:<br />在Smalltalk中,你可以定义超类为nil的类,同时定义doesNotUnderstand方法处理消息,这样构建一些通用的代理。<br />在以下程序中我们假设代理有一个realSubject方法,该方法返回它的实体。在ImageProxy中,该方法将检查是否已创建了Image,并在必要的时候创建它,最后返回Image。它使用perform来执行被保留在实体中的那些消息。<br />doesNotUnder

2010-12-18 14:19:00 368

原创 《GOF设计模式》—代理(PROXY)—Delphi源码示例:文档编辑器(使用虚代理实现)

<br />示例:使用虚代理实现<br />说明:<br /><br />Graphic类为图形对象定义一个接口。<br />Image类实现了Graphic接口用来显示图像文件。Image重定义Handlemouse操作,使得用户可以交互的调整图像的尺寸。<br />ImageProxy和Image具有相同的接口,其构造函数保存了存储图像的文件名的本地拷贝,并初始化FExtent和Fimage。如果可能的话,GetExtent的实现部分返回缓存的图像尺寸;否则从文件中装载图像。Draw用来装载图像,Han

2010-12-18 14:15:00 392

原创 《GOF设计模式》—代理(PROXY)—Delphi源码示例:代理接口

示例:代理接口<br />说明:<br />(1)、定义<br />为其他对象提供一种代理以控制对这个对象的访问。<br />(2)、结构<br /><br /><br />这是运行时刻一种可能的代理结构的对象图。<br /> <br /> <br />对象:<br />Subject:定义RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy。<br />RealSubject:定义Proxy所代表的实体。<br />代理:<br />Proxy:保

2010-12-18 14:11:00 418

原创 PL/0语言编译程序整理实现:(12)、测试代码

<br />const<br />    a = 10;<br />var<br />    b,c;<br />    procedure p;<br />    begin<br />        c := b + a<br />    end;<br />begin<br />    read(b);<br />    while b # 0 do<br />    begin<br />        call p;<br />        write(2 * c);<br />       

2010-12-15 09:30:00 2742

原创 PL/0语言编译程序整理实现:(11)、测试界面

界面<br /><br /><br />object Form1: TForm1<br />  Left = 192<br />  Top = 114<br />  Width = 691<br />  Height = 451<br />  Caption = 'Form1'<br />  Color = clBtnFace<br />  Font.Charset = DEFAULT_CHARSET<br />  Font.Color = clWindowText<br />  Font.Height =

2010-12-15 09:28:00 448

原创 PL/0语言编译程序整理实现:(10)、错误处理

<br />unit uError;<br /> <br />interface<br /> <br />uses<br />    SysUtils;<br />    <br />type<br />    TError = class<br />    public<br />        procedure ReportError(const AMsg: string);    <br />    end;<br /> <br />implementation<br /> <br />proced

2010-12-15 09:25:00 807

原创 PL/0语言编译程序整理实现:(9)、错误信息

<br />unit uErrorInfo;<br /> <br />interface<br /> <br />const<br />    CNT_Error1 = '程序编译失败';<br />    CNT_Error2 = '数值溢出';<br />    CNT_Error3 = '无效字符';<br />    CNT_Error4 = '代码太长';<br />    CNT_Error_1 = 'Error 01:  常数说明中“=”写成“:=”';<br />    CNT_Error_

2010-12-15 09:24:00 778

原创 PL/0语言编译程序整理实现:(8)、代码执行

<br />unit uInterpret;<br /> <br />interface<br /> <br />uses<br />    SysUtils,classes,Dialogs,uCodeType;<br /> <br />type<br />    TInterpret = class<br />    private<br />        FCode: PInstructions; //--代码段<br />        FOutList: TStrings;<br />    pu

2010-12-15 09:22:00 644

原创 PL/0语言编译程序整理实现:(7)、目标代码

<br />unit uCode;<br /> <br />interface<br /> <br />uses<br />    SysUtils,Classes,uSymbolType,uCodeType,uError;<br /> <br />type<br />    TCodes = class<br />    private<br />        FError: TError;<br />        FCode: PInstructions; //--代码表<br />       

2010-12-15 09:21:00 1627

原创 PL/0语言编译程序整理实现:(6)、代码类型

<br />unit uCodeType;<br /> <br />interface<br /> <br />const<br />    CNT_LevelMax = 3; //--最大允许的块嵌套层数)<br />    CNT_AddressMax = 2047; //--最大寻址空间<br />    CNT_Code_MaxLen = 200; //--PCODE目标代码表的最大长度(可容纳代码行数)<br /> <br />type<br />    //--PCODE指令类型<br />  

2010-12-15 09:20:00 611

原创 PL/0语言编译程序整理实现:(5)、语法分析

<br />unit uGrammar;<br /> <br />interface<br /> <br />uses<br />    SysUtils,Classes,TypInfo,uSymbolType,uSymbol,uObjectType,uCodeType,uCode,uError;<br /> <br />type<br />    TGrammarAnalyzer = class<br />    private<br />        FScript: TSymbolAnalyzer;

2010-12-15 09:15:00 1165

原创 PL/0语言编译程序整理实现:(4)、对象类型

<br />unit uObjectType;<br /> <br />interface<br /> <br />uses uSymbolType;<br /> <br />const<br />    CNT_ObjectTable_MaxCount = 100; //--标识符表的最大长度(容量)<br /> <br />type<br />    //--标识符类型(常量、变量、数组,过程)<br />    TObjectKind = (okConstant,okVariable,okArray,

2010-12-15 09:13:00 399

原创 PL/0语言编译程序整理实现:(3)、词法分析

<br />unit uSymbol;<br />interface<br />uses<br />    SysUtils,uSymbolType,uError;<br />type<br />    TSymbolAnalyzer = class<br />    private<br />        FScript: string;<br />        FChar: char;<br />        FCharPos: integer;<br />        FSymbol: TSy

2010-12-13 17:45:00 736

原创 PL/0语言编译程序整理实现:(2)、单词类型

<br />unit uSymbolType;<br />interface<br />uses<br />    Classes;<br />const<br />    CNT_Ident_MaxLen = 10; //---标识符最长长度<br />    CNT_Number_MaxLen = 14; //---数字允许的最长位数<br />type<br />    //---标识符<br />    TIdent = packed array[1..CNT_Ident_MaxLen] of ch

2010-12-13 17:44:00 765

原创 PL/0语言编译程序整理实现:(1)、语法描述EBNF

参考《编译原理(清华版)》中"PL/0语言编译程序"的源代码,重新整理和实现,以提高代码可阅读性和可理解性。

2010-12-13 17:42:00 1922

原创 《GOF设计模式》—享元(FLYWEIGHT)—Delphi源码示例:文档编辑器

示例:文档编辑器说明:面向对象的文档编辑器通常使用对象来表示嵌入的成分,例如表格和图形。应用程序的对象结构可以模拟文档的物理结构。下图显示了一个文档编辑器怎样使用对象来表示字符。但这种设计的缺点在于代价太大。Flyweight模式描述了如何共享对象,使得可以细粒度地使用它们而无需高昂的代价。Glyph是图形对象的抽象类,其中有些对象可能是flyweight。基于外部状态的那些操作将外部状态作为参量传递给它们。效果:代码:

2010-12-04 15:13:00 481

原创 《GOF设计模式》—享元(FLYWEIGHT)—Delphi源码示例:享元接口

示例:享元接口<br />说明:<br />(1)、定义<br />运用共享技术有效地支持大量细粒度的对象。<br />(2)、结构<br /><br /><br /> <br />享元对象<br />Flyweight:描述一个接口,通过这个接口flyweight可以接受并作用于外部状态。<br />ConcreteFlyweight:实现Flyweight接口,并为内部状态(如果有的话)增加存储空间。ConcreteFlyweight对象必须是可共享的。它所存储的状态必须是内部的;即,它必须独立于Con

2010-12-04 15:05:00 357

原创 《GOF设计模式》—装饰(DECORATOR)—Delphi源码示例:改变对象内核

<br />示例:视图组件<br />说明:<br /><br />我们可以将Decorator看作一个对象的外壳,它可以改变这个对象的行为。另外一种方法是改变对象的内核,策略模式(Strategy)就是一个用于改变内核的很好的模式。<br /><br />例如,我们可以将组件绘制边界的功能延迟到一个独立的Border对象中,这样就可以支持不同的边界风格。这个Border对象是一个Strategy对象,它封装了边界绘制策略。我们可以将策略的数目从一个扩充为任意多个,这样产生的效果与对装饰进行递归嵌套是一样的

2010-12-04 15:02:00 389

原创 《GOF设计模式》—装饰(DECORATOR)—Delphi源码示例:图形用户界面组件

示例:图形用户界面组件<br />说明:<br /><br />有时我们希望给某个对象而不是整个类添加一些功能。例如,一个图形用户界面工具箱允许你对任意一个用户界面组件添加一些特性,例如边框,或是一些行为,例如窗口滚动。<br /><br /><br />代码:<br /><br /><br />unit uView;<br /> <br />interface<br /> <br />uses<br />    Classes,Graphics,Controls,Forms,StdCtrls;<br />

2010-12-04 14:58:00 420

原创 《GOF设计模式》—装饰(DECORATOR)—Delphi源码示例:装饰接口

示例:装饰接口<br />说明:<br />(1)、定义<br />动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。<br /> <br />(2)、结构<br /><br /><br />组件:<br />Component:组件。定义一个对象接口,可以给这些对象动态地添加职责。<br />ConcreteComponent:具体组件。定义一个对象,可以给这个对象添加一些职责。<br />装饰组件:<br />Decorator:装饰组件。维持一个指向Com

2010-12-04 14:54:00 308

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除