Open-Closed Principle原则讲的是:一个软件实体应当对扩展开放,对修改关闭。
我的理解:如在工厂模式中,可以直接扩展产品类并投入使用,而不需要想简单工厂模式那样修改工厂类的判断逻辑;即增加新代码而不会引起原有代码的变动。
满足OCP带来的好处:
能保证模块的稳定性,又能对需求的变更提供灵活的应对方案。
里氏代换原则(LSP)
Liskov Substitution
Principle(里氏代换原则):子类型(subtype)必须能够替换它们的基类型。
我的理解:LSP的针对点是OOD提炼抽象类,假设在代码段中,原先使用的是基类型,当使用子类型替换基类型后,代码仍旧可以正常工作,则表示是符合LSP的。
题外话:子类可以替换基类,但子类不等同于基类,子类可以提供比基类更丰富的功能。
LSP有一个著名的长方形和正方形例子,该例子表明提取的抽象类不能满足需要。
满足LSP带来的好处:
同一个基类下的子类型,可以复用算法。
依赖倒置原则(DIP)
依赖倒置(Dependence Inversion Principle)原则讲的是:要依赖于抽象
要实现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:
1、前期对技术过于自信,对设计过于自信,对开发周期过于乐观,技术人员基本上大大小小都会犯这个错误
2、开发过程中对项目需求的变更超出了软件的最初设计范围,基本上大大小小的软件都会遇到一些这方面的问题
3、对技术团队整体生产力过高的估计,以至团队人员流失率达到90%以上
为什么会有这些问题的产生和应对的方法?
(1)软件开发是一种类似科学研究的过程,有成功当然就有失败。
(2)在有考虑条件(1)之下,合理的软件设计,项目日志计划(不要把它当成是一种形式),项目监控(要足够的重视),人员调配(技术人员其实心理压力很大)
最近在考虑软件发行的次序问题,从商业利益出发应该是这样发行次序和一些想法
一、升级程序应该是以稳定老版软件(修改BUG)为主
二、新版程序发行
三、再针对老版程序发行升级包(或补丁)
当然软件本身最好是要有一个好的架构,做到可随时模块级的无缝的替换和拼接(面象对象编程的原则)。
这篇笔记原于当于学习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
PT0_Sel=0x202000
PT1_Sel=0x201000
断点下到0x1d499
分页地址计算
页目录 0x200000 内容 0x27 0x20 0x20 0x00 0x7 0x10
页表0
分析1
jmp far 0x30:0000->0x00303000
0x30->GDT里为 0x402000=10000000010000000000000b
31-22位页目录索引=0x1
21-12页表索引=0x2*4=0x8
11-0 页内偏移=0x0
回想过去04-06两年关于游戏开发与J2EE相关的技术笔记不知道放到哪块硬盘的哪个目录里了,怎么找也找不到,回悔不以,所以把最近的一些技术笔记和实践技术概要目录记录下来:
1、IE的调用层次与通过Hook IDispatch屏蔽一些功能(Hook类成员函数)
2、COM组件的线程模型深入认识
3、COM组件JavaScript回调(并非连接点)
4、Http协议编码
5、应用层与驱动层通讯的实现机制原理
6、对应用层调试器技术的原理深入了解
7、对软件架构设计更进一步的理解与必要性
|
标签:杂谈 |
|
标签:知识/探索 |
但这里就有一个问题,到底是谁先理解谁,是你先理解客户,还是让客户先理解你呢。
我想应该是你先理解客户,才可能使客户能理解你。
生活中的案例: