清明时节雨

导航

2013年5月13日

分治法与模块化

摘要: 今天看了一会儿分治算法的讲座,产生了这样一种感觉,分治法是模块化的雏形。 最初的程序编码基于过程,整个程序就是一个长长的过程,不容易理解,也不容易差错。因为程序员开始对代码进行分治,把长长的代码分段,形成一个个较小的过程或函数,如果依旧过长,则再次分段,直到每段代码长度适量。 再接下来,如果这些子函数或子过程功能不明确,依旧不容易理解,于是逐渐按照特定的功能来进行整合,使得每段代码实现特定的功能。最后,既然每段代码功能相对独立,那就把他们和特定的数据打包,做成黑盒,于是就发展到了模块化。 分治算法的目标固然不是模块化,让程序结构更清晰也仅仅是其附加功能,分治的目的是降低程序的规模,使O(n). 阅读全文

posted @ 2013-05-13 16:31 学而不思 阅读(279) 评论(0) 推荐(0) 编辑

2013年5月9日

OpenGL的矩阵

摘要: 今天早上遇到了一个问题,视图模型矩阵堆栈进入三层之后显示效果就出现问题,差错发现出现了溢出。 然后查阅MSDN,知道投影矩阵、纹理矩阵和模型视图矩阵堆栈的支持至少为2,2,32。为什么会溢出呢? 之后写了几个例子,也没有出现问题。折腾了一上午发现原来问题出在没有选择视图模型矩阵,所有的绘制操作都是在投影矩阵上实现的,投影矩阵堆栈只提供两层,所以出错。但让我疑惑的是显示效果上竟然没有看出任何差异。 之后又写了几个例子进行尝试,不使用试图模型矩阵似乎都没有问题。在代码的不同阶段检查当前矩阵的值,得出的结论是这样的。投影矩阵和试图模型矩阵仅仅是为计算提供的缓冲区,他们并没有什么不同,仅仅决定了当前. 阅读全文

posted @ 2013-05-09 13:53 学而不思 阅读(326) 评论(0) 推荐(0) 编辑

2012年6月24日

连接器的语义描述

摘要: 代理连接器声明组件实例具备的某项功能并非由其自身实现,而是由另一个具备兼容能力的实例。这可以是另一个组件的实例,或者(简单情况下)仅仅另一个类的实例。后一种情况下,代理连接器连接组件的接口或端口与作为其部件的一个包含的类。这个类必须和相连接的接口或端口存在实现关系。 代理连接器用于对行为的层次化分解建模,这种情况下的服务的最终实现处于由多层嵌套之下。代理一词体现了具体的消息和信号在被连接的端口之间的转递,这些端口甚至有可能跨越很多层。要知道这些信号的传递并不一定被所有的系统环境或实现所理解。 一个端口可以由多个下级组件的端口代理。这时,这些下级端口必须共同实现上级端口功能的代理。执行的时候,. 阅读全文

posted @ 2012-06-24 23:46 学而不思 阅读(279) 评论(0) 推荐(0) 编辑

组件的语义描述

摘要: 《OMG UML Superstructure》中对于组件的语义描述一段感觉比较精彩,特翻译如下,不当之处请大家指正。 一个组件是一个自成体系的单元,它封装了一些分类成员的状态和行为。一个组件制定了其相关的正式契约,这些契约包括它为其客户提供的服务以及它所依赖于系统中其它组建提供的服务,这些通过其提供和要求的接口的形式给出。 组件是一个可替换单元,它可以在设计时或者运行时被替换,只要替换它的组件满足基于接口一致性的等价功能。只要环境允许组件通过提供和需求的接口形式提出的约定,这个组件就可以满足这个环境中的交互需求。因此,一个系统可以通过增加新的组件来扩展现有的功能。 组件要求和提供的接口可以体 阅读全文

posted @ 2012-06-24 00:34 学而不思 阅读(324) 评论(0) 推荐(0) 编辑

2012年6月15日

把复杂的关联择出来

摘要: 今天阅读UML Specification的时候,对Namespace-ElementImport-PackagableElement的关联方式有了更深的理解。ElementImport这个概念,表示一个关联,它本来并不是一个实体,而前述的关联实质上(或者说直观的来分析),应该是两个实体之间有一个关联的结构。但由于中间这个关联含有一些普通关联所无法描述的内容,visibility和alias,因此把它独立为一个实体,于是这个结构就变成了三个实体依次关联。在设计过程中经常会遇到这种情况。但两个实体之间的关联过于复杂时(主要是包含了一些可变因素的时候),就把它们之间的关联独立为一个实体,变成三实. 阅读全文

posted @ 2012-06-15 00:07 学而不思 阅读(152) 评论(0) 推荐(0) 编辑

2011年12月22日

一个MFC的设置问题

摘要: 创建一个Win32的dll工程。添加一个接口,定义如下:class Interface1{public:virtual void Fun1()=0;virtual void Fun2(std::string str)=0;};接口文件中添加一个导出函数,声明如下:extern "C" __declspec(dllexport) Interface1* CreateInterface();添加一个类,头文件定义如下:class Class1 :public Interface1{public:void Fun1();void Fun2(std::string str);std 阅读全文

posted @ 2011-12-22 09:32 学而不思 阅读(266) 评论(0) 推荐(0) 编辑

2011年11月17日

WPF与Qt

摘要: 所谓大道归一,其实很多的方法,虽然初期不同,但发展到一定程度后,往往又会出现惊人的相似之处。 WPF和Qt是分别隶属微软和Nokia,前者是一个商业开发平台,后者则完全开源。但他们都提供给界面开发者使用。在使用了一段时间之后,发现二者其实有很多相同的思路。就界面的组织而言,WPF使用xaml来定义控件,完全学习了html的方式。控件之间可以任意组合,任意包含。这相对于MFC方便了许多,而这种嵌套的思路也是很符合发展趋势的。而Qt在这方面也有类似的做法。所有的控件元素全部继承自QWidget,这点没有WPF那么纯粹,从WinForm开始,C#语言就要求所有的类都继承自object了。QWidg. 阅读全文

posted @ 2011-11-17 10:43 学而不思 阅读(16256) 评论(0) 推荐(3) 编辑

2011年7月18日

换名规则与替换规则

摘要: 做了几个例题之后,才对换名规则和代替规则有了一点新的理解。 之前我一直觉得这两个规则明明就可以作为一个的,都是换个符号,区别就是一个有约束一个没有约束而已。而事实上并不是这么简单。单纯从字面上看虽然是这样,但它们所表达的逻辑意义却是完全不同的。着这种区别的根源在于量词对符号的作用。 在没有量词约束的时候,一个符号表示一个固定的变量,整个式子中的这个符号都表示这个变量,无论怎样进行逻辑推演,它们始终是一个量。 而一旦加上了量词的约束,实际上这个变量某种意义上讲已经不存在了。或者更确切地应该说这个符号,和量词辖域外的相同符号已经没有任何关系了。它可以在本辖域内任意换名,这个符 号仅仅就表示一个名. 阅读全文

posted @ 2011-07-18 10:34 学而不思 阅读(3007) 评论(0) 推荐(0) 编辑