http://blog.sina.com.cn/quickbasic[订阅]
个人资料
分类
    内容读取中…
评论
读取中...
友情链接
访客
读取中...
好友
读取中...
博文

 '开放-封闭'原则(OCP)
Open-Closed Principle原则讲的是:一个软件实体应当对扩展开放,对修改关闭。
我的理解:如在工厂模式中,可以直接扩展产品类并投入使用,而不需要想简单工厂模式那样修改工厂类的判断逻辑;即增加新代码而不会引起原有代码的变动。
满足OCP带来的好处:
能保证模块的稳定性,又能对需求的变更提供灵活的应对方案。
 
 
里氏代换原则(LSP)
Liskov Substitution Principle(里氏代换原则):子类型(subtype)必须能够替换它们的基类型。
我的理解:LSP的针对点是OOD提炼抽象类,假设在代码段中,原先使用的是基类型,当使用子类型替换基类型后,代码仍旧可以正常工作,则表示是符合LSP的。
题外话:子类可以替换基类,但子类不等同于基类,子类可以提供比基类更丰富的功能。
LSP有一个著名的长方形和正方形例子,该例子表明提取的抽象类不能满足需要。
满足LSP带来的好处:
同一个基类下的子类型,可以复用算法。
 
 
依赖倒置原则(DIP)
依赖倒置(Dependence Inversion Principle)原则讲的是:要依赖于抽象

COM组件连接点(2009-05-30 03:49)

要实现COM回调,连接点只是一种方式,还有一种方式就是直接定义接口来实现(类似COM组件JavaScript回调函调数)
连接点大多是用于COM回调事件处理
首先实体化IDispatch接口,做为连接点对象
QueryInterface 根据需要返回IID_IUnknown,IID_IDispatch,和需要实体的连接点接口,比如DIID_DWebBrowserEvents2,为IWebBrowser2的事件接口。
Invoke里面具体完成代码,根据DISPID的判断可以得到回调的方法不一样,以下代码是实例化一个IE对象,然后连接IE对象(IWebBrowser2)对象的DWebBrowserEvents2对象。

#include 'stdafx.h'
#include <comdef.h>
#include <windows.h>
#include 'Exdisp.h'
#import 'c:\windows\system32\shdocvw.dll' rename ('tagREADYSTATE','tagIEREADYSTATE')
 
interface TestEvent:public IDispatch
{
public:
 //IDispatch
 HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid,void ** ppvObject)
 {
  if(IsEqualIID(iid, IID_IUnknown)||  
   IsEqualIID

软件开发风险(2009-03-07 01:51)

    在我软件开发了十年的过程里经历了大大小小的项目或产品之后,我发觉得很多公司对软件开发风险几乎从来不加以考虑,也很少去思考这个问题,以至对软件项目的估计不足,以至在项目后期几乎无法能正常的进行下去,以下是我的一些心得体会:

1、前期对技术过于自信,对设计过于自信,对开发周期过于乐观,技术人员基本上大大小小都会犯这个错误

2、开发过程中对项目需求的变更超出了软件的最初设计范围,基本上大大小小的软件都会遇到一些这方面的问题

3、对技术团队整体生产力过高的估计,以至团队人员流失率达到90%以上

 

为什么会有这些问题的产生和应对的方法?

    问题1:初生牛犊不怕虎,我最初也是这样,后面经历过几次成功和几次失败的开发经历之后,越多的发现,技术这种东西,千万不要只考虑一切都在理想的情况之下。

(1)软件开发是一种类似科学研究的过程,有成功当然就有失败。

(2)在有考虑条件(1)之下,合理的软件设计,项目日志计划(不要把它当成是一种形式),项目监控(要足够的重视),人员调配(技术人员其实心理压力很大)

  

软件产品发行(2009-01-05 03:14)

最近在考虑软件发行的次序问题,从商业利益出发应该是这样发行次序和一些想法

一、升级程序应该是以稳定老版软件(修改BUG)为主

   1、BUG需要进行分级,根据级别(轻重缓级)发行hotfix升级程序

   2、如非必要,尽量不要让升级程序去升级程序功能 

二、新版程序发行

   1、如果软件要在功能上进行大的改动或增加,尽量发行新版本

   2、如果不是需要修改老版本的结构,尽量不要发行新版本,以增加不必要的维护量

三、再针对老版程序发行升级包(或补丁)

   1、发行新版程序之后在一定时间内再来发行老版本程序的升级补丁

   2、可以为老版本升级带来的开发(这种开发主要工作是兼容结构问题)带来更多的开发测试时间

 

当然软件本身最好是要有一个好的架构,做到可随时模块级的无缝的替换和拼接(面象对象编程的原则)。

这篇笔记原于当于学习CPU保护模式特性。

X86架构保护模式技术分析调试笔记(使用Bochs虚拟机进行调试学习)

分段机制分析
SCode_sel=0x1d3d0
TPSCode_sel=0x303000

GDT=0x1d370 size=0x5f 全局描述符
段描述符方式
0x1d512 jmp far 0040:0000->0x1d4c0
到0x1d370+0x40处去找到0x1d4c0地址

分页机制分析

PDT_Sel=0x200000  0x0 页目录
PT0_Sel=0x202000  0x10 页表0
PT1_Sel=0x201000  0x18 页表1

断点下到0x1d499

分页地址计算

页目录 0x200000 内容 0x27 0x20 0x20 0x00 0x7 0x10
页表0 0x202000 内容 0x07 0x00 0x00 0x00 0x07 0x10

分析1
jmp far 0x30:0000->0x00303000

0x30->GDT里为 0x402000=10000000010000000000000b 分页地址
31-22位页目录索引=0x1 0x201027->后3位0x027去掉,得到页表0x201000地址
21-12页表索引=0x2*4=0x8 0x201008->0x303025 去掉后3位0x025得到0x303
11-0 页内偏移=0x0 把0x303后

回想过去04-06两年关于游戏开发与J2EE相关的技术笔记不知道放到哪块硬盘的哪个目录里了,怎么找也找不到,回悔不以,所以把最近的一些技术笔记和实践技术概要目录记录下来:

1、IE的调用层次与通过Hook IDispatch屏蔽一些功能(Hook类成员函数)

2、COM组件的线程模型深入认识

3、COM组件JavaScript回调(并非连接点)

4、Http协议编码

5、应用层与驱动层通讯的实现机制原理

6、对应用层调试器技术的原理深入了解

7、对软件架构设计更进一步的理解与必要性

人为什么活着(2008-07-20 03:21)
 这个问题问了自己很多次,今夜读了本书中终于找到了比较满意的答案,人活着本身就是一个答案。
 人活的就是这个过程,活的是一种意境。
最近没事看了看IT技术上一些新的概念。做点小小的总结:
1、JAVA开源框架:几年前写JAVA的时候大都是在用传统的jsp,servlet,EJB在做东西,现在出了几个更上层思想的框架,struts,spring,hibernate,把以前一些难做,而且重复的工作做成了用XML进行配置,基本上用的是JAVA的反射机制(IoC),代理机制(AOP),我也只是对这几个流行的框架做了一个大至的了解,试了一下hibernate(数据OR映射框架),感觉还不错。大大的简化了程序员的工作。
2、C++网络开发:一直以来都是用socketAPI在做程序,早就知道有一套ACE的网络架构库,最近了解了一下,只是把socket进行的封装,在开发上来讲简化了一些API层的调试工作。
3、汇编语言:最近反复的看C++编译器生成的汇编代码,加快了一些反汇编代码的查看速度,IDA Pro真是个好东西。
4、JAVA1.5~1.6的一些新改变,增加了类似C++ Templeate支持,这功能不错,就不需要像以前哪样,用ArrayList.get(i)的时候总是要转换类型了。
5、看了几本架构设计方面的书,讲的内容不是十分精典。
6、还对一些新概念做了一下基本了解,BPM、SOA等

 人与人之间的沟通是建立在互相尊重、互相理解的基础上。
但这里就有一个问题,到底是谁先理解谁,是你先理解客户,还是让客户先理解你呢。
我想应该是你先理解客户,才可能使客户能理解你。
生活中的案例:
  我一个朋友是做照相生意的,有一次一个客户与之发生冲突,是因为客户要求的东西与我朋
友提供的产品出现了不满意的情况。大概情况如下,客户是一个老年人,他的八岁的小孙子在得了一个全国少儿书法比赛中得了铜奖,老人家希望小孙子能报着证书照一张照片,他希望能寄给分散在外地的亲朋好友。但照片出来后,证书看不清楚。说实话一张7寸的照片要想看清哪个证书,是很有难度的。但双方都不能理解。我朋友这边的理由就是一张7寸的照片要想看清哪个证书,是不太可能实现的;而老爷子这边的理由是如果不可能实现,我来照这张像有什么用处。而我也正好在场,看了他们为这个问题争议了半小时,而且越争越厉害。于是我就出

生活原来可以这样(2007-04-18 00:34)
    一直以来除了电脑、学习、工作,大概一直都没考虑过这一生怎么去生活,最近想一下,对工作以来这么多的习惯做了一点点变动,感觉还不错。
1、十年没做过饭,开始学做饭炒菜。
2、十年来除了深色衣服,没有穿过浅色衣服,一下子买了两件。
3、十年来没有自己洗过衣服(基本都是洗衣店洗)。
4、十年没有注意过按时吃饭。
答案:
1、原来自己做的菜虽然不是很好,但吃起来是这么的香,比馆子的好吃。
2、原来我穿浅色衣服感觉也很好
3、原来自己洗衣服也不是哪么难
4、原来按时作息不是什么做不到的事。
 
总结:人总是要不断完善自我,不单要在工作和学习知识上完善,还要在生活上完善,其实一个人一生中只有少数时间是在工作,大部分时间是在生活。
一句话:“做男人嘛就是要进得厨房,出得厅堂”