博文

“封装变化”面向对象的另一条设计原则(2008-11-03 11:17:00)

摘要:  面向对象的编程的另外一条非常重要的设计原则是“封装变化”。找出应用中可能需要变化的地方,把它们独立出来,不要和那些不需要变化的代码混在一起。......

阅读全文(2000) | 评论:0

一条十分重要的面向对象的设计原则(2008-11-03 10:57:00)

摘要:  面向对象的编程有一条非常重要的设计原则,那就是“针对接口编程,而不是针对实现编程。”针对接口编程的真正含义是针对超类“SuperType”编程。所谓的“接口”有多个含义,它是一种概念,也是一种interface类型。这里所说的“接口”可以不涉及interface类型。而"针对超类编程"这句话可以明确的说成“变量的声明类型应该是超类。”......

阅读全文(2332) | 评论:1

编译器设置与编译指令(1)(2008-10-27 09:43:00)

摘要:《Delphi下深入Windows核心编程》(附录A Delphi编译指令说明) Delphi快速高小的编译器主要来自Object PASCAL的严谨,使用Delphi随时都在与编译器交流,大部分情况下不需要干涉编译器的运行,但是有时也需要对编译器进行必要的设置。 ********************************************************************************************** A.1 使用编译设置对话框 编译器的编译指令是用于指定编译器对项目编译过程的动作和行为。可以通过[Project]->[Options]->[Complier]选项页进行设置,绝大部分的编译环境都可以通过这一对话框进行调整,他包含了对代码、语法、调试信息等的设置。 1.代码设置(Code Generation) Optimization: 代码优化开关 Aligned record fields: 字对齐数据。这个编译指令能够在变量和类型化常量的字节对齐和字对齐之间进行切换,其作用是全局的。 Stack frames: Windows 堆栈帧。其作用域是局部的,他使编译器成为远端过程和函数生成特定的开头和结尾代码。这个指令用于Windows 3.0的实模式,对所有Delphi应用程序他应该是关闭的。       Pentium-safe FDIV: Pentium安全FDIV检查。此指令能够在Pentium处理器中指定编译器是否创建能够检测和使用有缺陷的浮点除法指令的代码。 2.运行期错误(Runtime Errors) Range Checking: 范围检查。这个指令的作用范围是局部的,用于控制范围检验代码的生成。 I/O Checking: I/O检查。这个指令的作用域为局部,用来生成对一个文件的输入和输出过程和调用结果进行检查的代码。一般应该使其功能打开。 Overflos Checking: 溢出检查。其作用是生成对算术溢出检查的代码。 3.语法设置(Syntax Optings) Strict Var- strings: 静态变量串开关。用来控制对以变量参数形式传递的串的类型检......

阅读全文(2101) | 评论:0

delphi2009下载地址(2008-09-06 14:13:00)

摘要:《CodeGear RAD Studio 2009》Architect 破解版[ISO] 这个是测试版,大家先拿去解解渴吧. http://www.verycd.com/topics/344122/......

阅读全文(5494) | 评论:2

RemObject Hydra 创建Simple插件式系统(2007-09-01 20:57:00)

摘要:1、创建工程组 2、创建Plugin Module工程 3、创建Host Application工程 4、编译工程组 5、在Host Application工程中的HYModuleManager控件中的ModulesToLoad属性中        加入由Plugin Module工程编译生成的Dll文件名 6、HYModuleManager控件的AutoLoad属性设为"TRUE" 7、编译并运行Host Application工程,一个简单的插件系统就完成了。      RemObject是不是很强大!!!   http://islend.programfan.com 蓬莱一散人(373500710)......

阅读全文(4437) | 评论:0

怎样在Delphi中继承窗体(2006-08-06 09:31:00)

摘要:1、先创建工程,并且设置好基窗体的属性,这里基窗体就叫Form1吧。2、继承Form1步骤:   a、选择菜单的File->new->other,弹出New Items对话框。   b、点选与你工程名同名的页框,如:project1   c、在此窗体中选中你需要继承的窗体,在本例中是Form1。3、ok......

阅读全文(9251) | 评论:0

Delphi获取IP函数(2006-07-12 22:03:00)

摘要:uses winsock;//获取IP函数Function  GetIPAddr : String;type  TaPInAddr = array [0..10] of PInAddr;  PaPInAddr = ^TaPInAddr;var  phe : PHostEnt;  pptr : PaPInAddr;  Buffer : array [0..63] of char;  I : Integer;  GInitData : TWSADATA;begin  WSAStartup($101, GInitData);  Result := '';  GetHostName(Buffer, SizeOf(Buffer));  phe :=GetHostByName(buffer);  if phe = nil then Exit;  pptr := PaPInAddr(Phe^.h_addr_list);  I := 0;  while pptr^[I] <> nil do begin     result:=StrPas(inet_ntoa(pptr^[I]^));     Inc(I);  end;  WSACleanup;end;......

阅读全文(6811) | 评论:1

Java常见面试题(2006-06-30 19:32:00)

摘要: Java常见面试题(含答案) 第一,谈谈final, finally, finalize的区别。 final? 修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载 finally?再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。 finalize? 方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。 第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。 Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。具体可见http: //www.frontfree.net/articles/services/view.asp?id=704&page=1 注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象 第四,&和&&的......

阅读全文(3694) | 评论:0

三谈多态——善用virtual(2006-06-05 23:45:00)

摘要:三谈多态——善用virtual作者:Nicrosoft(nicrosoft@sunistudio.com) —— 2002.4.30出处:东日软件开发网络(SSDN) http://www.ssdn.net   多态性,是一种能给程序带来灵活性的东西。看过《设计模式》的程序员应该都知道,相当多的模式(几乎所有)都是依靠多态来实现的,以此给程序提供可扩展、可重用性。在《再谈多态——向上映射及VMT/DMT》一文中,提到了多态性是依赖于虚函数/虚方法(即动态绑定)来实现的,也介绍了虚函数/虚方法(virtual)的实现方法。那么本文就来谈一下,如何使用virtual、善用virtual来获取多态性给我们带来的灵活性。    实例是最好的教材,因此本文还是假设一个需求,写一个实例来讲解。不过,我想没有必要给出所有源码,因此在本文中有些实现的代码会粗略带过。另外,本文所有代码均为Object Pascal语言编写,实现环境为Delphi。    另外,由于“方法(Method)”一词已经成为Object Pascal的术语,因此,以下称成员函数都为“方法”。也许C++程序员会不太适应这样的称呼(呵呵,我自己也不太适应),见谅吧。    假设我们要编写一个纯文本内的编辑器,也就是记事本(呵呵,别嫌例子老套,记事本程序在相当多方面都是很好的教材),编辑控件我们一般会用TMemo或TRichEdit,但是它们的功能都不甚强大,也许我们目前没有,但日后会找到一个更好的第三方文本编辑控件(比如,支持语法着色的)。因此,我们必须为未来的改进留下方便之门,否则到时候再重写全部程序真是太傻了。    界面层(菜单响应、状态显示等)对文本编辑器控件的控制的代码对于所有编辑器来说都是类似的,应该可以被重用。那么就必须将界面层的代码与编辑器控件的控制代码隔离开来。    如何隔离?我们可以为所有的编辑器控件指定一个公共的接口(抽象类),界面层只看得到这个接口,只使用接口提供的功能,那么,我们更换任何编辑器控件时,都不必更改界面层的代码了。    首先,抽象出编辑器的基本操作,如:Load(打开文本)、Save(保存到文件)、Copy(复制到剪贴板)等等,将这些操作作为public方法。其次,考虑这些操作中有哪些会涉及到具体相关控件的,对于这些操作,你有两种选择:1、如果完全依赖控件本身的,可以选......

阅读全文(2964) | 评论:0

MM使用体会(2006-06-05 23:33:00)

摘要:如果你是一个生手,mm众多的按钮参数会让你晕头转向。如果没有oo的概念,mm至多是一个好的coding工具。如果你既懂oo又熟delphi,并且足够懒惰,mm是个很好的选择。正如mm的资料所介绍,许多开发人员已经放弃了delphi的ide,直接在mm中进行开发。坦率的说,在uml方面,mm还赶不上rose,各种diagram描绘的不够精美,界面上的按钮也是花里胡哨,不尽合理,但mm强过rose的是mm不光提供了模型一种描述方式,而且还提供了object pacasl语言的实现。rose虽然通过转换包也能将各种diagram转换为程序语言但由于rose是个通用型的产品,需要照顾到各种转换语言,因此,在代码质量上不及mm。作为系统分析员,他感兴趣的是mm能够为他提供一种与实际编译语言结合非常紧密的建模工具。作为程序员,比如我,则最喜欢mm提供的对程序代码的精确的控制能力。在implementation面板中,我们可以将一个function中的代码分成若干段,然后上下调整这些段落的分布,如果将自动同步的功能打开,在delphi的ide中编写代码,保存后,mm会自动为你进行代码格式化,比如缩进,换行等。在delphi的ide中要增加一个属性或者一个事件,至少要写3、4个地方,而在mm中,一个对话框就全部高定了。还有许多懒人特喜欢的地方,,,,简单的说,mm是为那些懒惰的delphier准备的,用以成倍的提高编码效率和质量。当然,使用mm的一个基本条件是:你看到的不是代码,而是对象。不知道为什么,mm官方网站上提供的那个教程,只到第6章就结束了,第7-10章没有登出来,正看的过瘾,哪位兄台有收藏的,贡献一把,多谢多谢!mm很好,但是不知道delphi的将来版本会不会继续整合他,mm会被bold所取代吗,就象当初的teamsource。......

阅读全文(4357) | 评论:0