摘要: 写一个函数,用递归函数完成以下运算:sum(n) = 1 – 1/2 + 1/3 – 1/4 + … -(1/n)*(-1)n (其中n>0)函数原型: float sum(int n);函数参数:n为正整数。函数返回值:相应于给定的n,右边表达式运算结果。提示:你可以使用递归表达式: sum(n)... 阅读全文
posted @ 2015-10-25 21:56 赛提斯特 阅读(204) 评论(0) 推荐(0)
摘要: 头五项原则是关于类设计的,它们是: ◆ SRP,单一职责原则,一个类应该有且只有一个改变的理由。 ◆ OCP,开放封闭原则,你应该能够不用修改原有类就能扩展一个类的行为。 ◆ LSP,Liskov替换原则,派生类要与其基类自相容。 ◆ DIP,依赖倒置原则,依赖于抽象而不是实现。 ◆ IS... 阅读全文
posted @ 2015-10-25 21:54 赛提斯特 阅读(326) 评论(0) 推荐(0)
摘要: 以前回复一个关于9连环解法的问题,看过《计算机程序设计艺术》的人都知道,这个问题的是中国的古老游戏,其解法就是“格雷二进制”的描述。九连环是一种传统的中国玩具,它有九个连在一起的环河一根长棒组成。一开始,九个环都装在榜上,由于其特殊的构造,只能按以下规则从棒上取下或装上环: 1)所有环只能从棒的一端... 阅读全文
posted @ 2015-10-25 21:52 赛提斯特 阅读(1310) 评论(0) 推荐(0)
摘要: 任何在项目伊始就规划所有的可能需求之企图都会落败,并以客观的延误告终。-Pahl,Beitz 《Engineering Design》关于需求:项目伊始,有多少需求是有技术人员参与的?有多少需求是市场人员提供的?。。。 现实中,大部分此类需求只是客户那边的管理层,各自为阵提出自己的想法。而这些想法很... 阅读全文
posted @ 2015-10-25 21:39 赛提斯特 阅读(187) 评论(0) 推荐(0)
摘要: Wiston Royce,瀑布模型的提出人,他提出瀑布模型的本意就是用来批判的,但是现实和他闹了个笑话,多少年了大量的设计师把它奉为圣典。更加可恶的是,我们的教科书上曾经也把他视为珍宝,这些教育工作者,叫兽砖家们,该醒醒了 。。。:)理性模型强调在设计的第一阶段就是把需求的内容以完整的设计树来表达,... 阅读全文
posted @ 2015-10-25 21:37 赛提斯特 阅读(260) 评论(0) 推荐(0)
摘要: 理性模型 最原始也是最符合设计师第一感觉的设计方式,因为理性,所以叫理性模型:); 设计的理论即一般的搜索理论,对象是巨大的组合空间.目标: 某人想要建立一个海滨小屋,以享用面向大海的一块海滨场地的海浪.必要条件: 海滨小屋应该足够兼顾以抵御飓风; 具备至少14个人躺卧和就座的空间; 为宾客提供令人... 阅读全文
posted @ 2015-10-25 21:35 赛提斯特 阅读(369) 评论(0) 推荐(0)
摘要: 4.9 在实现语义约束时,最好根据类定义来实现。但是这经常会导致泛滥成灾的类,在这种情况下约束应当在类的行为中实现,通常在类的构造函数中实现,但不是必须如此。 还是以汽车为例,我们看汽车的定义,为了集中注意力,先只关心汽车的发动机[csharp] view plaincopyprint?class汽... 阅读全文
posted @ 2015-10-25 21:31 赛提斯特 阅读(184) 评论(0) 推荐(0)
摘要: 4.7 类包含的对象数目不应当超过开发者短期记忆数量,这个数目通常应该是6左右4.8 让系统在窄而深的包含体系中垂直分布 假设有如下两份菜单: 正餐 --->甜瓜 --->牛排 --->土豆 --->豌豆 --->玉米 --->馅饼或者 正餐 --->甜瓜 --->牛排套餐... 阅读全文
posted @ 2015-10-25 21:27 赛提斯特 阅读(230) 评论(0) 推荐(0)
摘要: 4.6 尽量让类中定义的每个方法尽可能多地使用包含的对象(即数据成员)这其实就是高内聚的翻版强调。如果每个类的情况并非如此,那很可能是这一个类表示了两个或更多的概念,记住一个类只应该表示一个概念。 最明显的情况就是类的一半方法使用了一半的数据成员,而另一半方法使用了另一半的数据成员,那么这个类就应该... 阅读全文
posted @ 2015-10-25 21:21 赛提斯特 阅读(301) 评论(0) 推荐(0)
摘要: 4.5 如果类包含另一个类的对象,那么包含类应当向被包含的对象发送消息(调用方法)。也就是说,所有的包含关系都应当是使用关系。如果不是这样,那么包含的类有什么用处呢?当然,面向过程的开发人员会想到可能有一个Get方法供其它类使用这个包含的对象,那么按照“数据隐藏原则”,为什么 不让使用包含类的类直接... 阅读全文
posted @ 2015-10-25 21:18 赛提斯特 阅读(275) 评论(0) 推荐(0)
摘要: 4.1 尽量减少类的协作的数量,即减少使用者和被使用者的数量。 协作意味着一定程度的耦合,但是完全没有协作的类也是没有意义的,最多只能作为一个库使用。 通过抽象,依赖接口,可以最大程度减少依赖的实现类,对使用者来说,只看到接口的依赖,而具体的实现的依赖可以通后后期绑定来配置依赖关系。 如 菜单 --... 阅读全文
posted @ 2015-10-25 21:16 赛提斯特 阅读(203) 评论(0) 推荐(0)
摘要: 使用关系对象A的方法MethodA使用了B的方法MethodB,则表示A对B存在使用关系 使用关系的最关键问题在于,A如何找到B,存在6种方案方案一: A包含了B,B作为一个成员定义在A的类中,那么在MethodA中可以直接调用B.MethodB() 如汽车可以包含车轮。 如果汽车需要加油,那么就需... 阅读全文
posted @ 2015-10-25 21:13 赛提斯特 阅读(183) 评论(0) 推荐(0)
摘要: 3.7 从设计中取出不需要的类 只有Get/Set方法的类不算是一个必要的类,Get/Set方法也不算是有意义的行为。这种类降级为属性更加合适。3.8 去除系统外部的类 如果一个类只调用系统领域的方法,而系统没有向该类调用,则可以认为这个类并不属于系统。可能只是系统的使用者,我们没必要去为此建模。 ... 阅读全文
posted @ 2015-10-25 21:01 赛提斯特 阅读(265) 评论(0) 推荐(0)
摘要: 面向过程的软件开发通过非常集中化的控制机制来分解功能,在程序设计中表现就是大量的条件判断,深层次的循环嵌套等。这种模式下,我们可以通过分析方法的参数,局部变量及其访问的全局变量来得到方法对数据的依赖性,但是我们只有分析整个项目代码才能得到数据对方法的依赖性。 面向对象的软件开发主要关注在非常分布的环... 阅读全文
posted @ 2015-10-25 20:57 赛提斯特 阅读(308) 评论(0) 推荐(0)
摘要: 一,继承只应被用来为特化层次结构建模 实际上也就是要满足LSP原则,水果类<-榴莲的继承是特化二,派生类必须知道他们的基类,基类不应当知道他们的派生类 复用的前提三,基类中的所有数据都应该是私有的,不要使用保护数据(方法不在此原则约束下) 数据封装,物体的重量看起来可以用一个保护数据来表达,而不是g... 阅读全文
posted @ 2015-10-25 20:56 赛提斯特 阅读(368) 评论(0) 推荐(0)
摘要: 一个对象一定会有如下4个属性: 1,它的身份标示,可能只是它在内存中的地址; 2,它的类的属性(通常是静态属性)和这些属性的值(通常是动态的); 3,它的类的行为(从实现者的角度看); 3,它的公开接口(从用户的角度看).2.1 所有数据都应该隐藏在它所在的类内部. 考虑最简单的点Point类(X,... 阅读全文
posted @ 2015-10-25 20:55 赛提斯特 阅读(530) 评论(0) 推荐(0)
摘要: 为了理解ActiveX事件的运作原理,特意做了如下实验 初试化过程:try{ CLSID clsid; HRESULT hr=::CLSIDFromProgID(L"MSWinsock.Winsock",&clsid); if(FAILED(hr)) throw "获得对象的CLSID失败... 阅读全文
posted @ 2015-10-25 16:26 赛提斯特 阅读(449) 评论(0) 推荐(0)
摘要: 为了弄清楚COM库的运行原理,特意做了这个实验: #include "stdafx.h"#include "objbase.h"#include "atlcomcli.h"#include "limits"//#include "commctrl.h"#import "msscript.ocx" n... 阅读全文
posted @ 2015-10-25 16:23 赛提斯特 阅读(385) 评论(0) 推荐(0)
摘要: 题目大概是这样的:有两个数组a[N],b[N],求构造 b[i]=a[0]*a[1]*a[2]*...a[N-1]/a[i], 要求:1、不能使用除法。2、空间复杂度O(1),时间复杂度O(n)。3、除循环计数器和a[N]、b[N],不能使用其他变量。 个人看法: 与N有关,又要求空间复杂度O(1)... 阅读全文
posted @ 2015-10-25 16:04 赛提斯特 阅读(217) 评论(0) 推荐(0)
摘要: DH 请教下大家一个设计模式的问题 业务: 有多种短信指令,系统会根据接收到的指令进行相应的业务处理,处理完成后,系统会回复一条短信 这种业务处理,可以用哪个设计模式来做? QX 状态模式 DH 小雪,短信指令可能会增加,也可能会减少 QB 命令模式 DH 用命令模式更合适? QB 命令模式看起来挺奇怪的。 QB interface ICommand{IComm... 阅读全文
posted @ 2015-10-25 15:59 赛提斯特 阅读(277) 评论(0) 推荐(0)
摘要: TY 用策略就是动态改变对象的方法了怎么还要有访问者的出现 有点晕 STST 策略所改变的同一性质的方法的不同实现,如记录日志,策略1记录在文本文件,策略2记录在Access文件里 ,......访问者则改变的是完全没有相似点的方法,如一个是打印,一个统计,一个是邮件通知 访问者要求对象的结构稳定,变化的是行为 结构稳定,就是指被访问者对象的类继承层次是稳定的,不会经常变化... 阅读全文
posted @ 2015-10-25 15:41 赛提斯特 阅读(277) 评论(0) 推荐(0)
摘要: CZ 匠友们,请教一个细节问题: 在一张表里,有一个字段"图件类型",包括 "平面图,柱状图,统计图",我现在是将该字段设计为 varchar 类型,直接存放类型名称。 现在有同事建议,应该设计为interger类型,然后定义一个枚举变量, enum MapType{AllMapType=0,Plane=1,Histogram,Cartogram};理由是, 1)这样查询的效率高。 2)避免使用... 阅读全文
posted @ 2015-10-25 15:33 赛提斯特 阅读(241) 评论(0) 推荐(0)
摘要: HZ 动态代理学了 不知道在工作中杂用哦 HE 现在一般不会直接用吧,一般都是用aspectJ这种完整aop的实现 STST 拦截方法调用 HZ 我见过把所有accessor方法放到切面的 还有transaction肯定都是在切面的 STST 比如一个方法,记录要保存起来用来验证用户名密码,如果不拦截的话就要如下处理bool Valid(string ... 阅读全文
posted @ 2015-10-25 15:24 赛提斯特 阅读(298) 评论(0) 推荐(0)
摘要: "设计模式,需要则用之,否则为了设计模式而设计模式反而不好,我们前段时间,大量的删除由于设计模式多出来的类和方法",一哥们这么说 关于这个,我认为: 为了设计模式而模式,肯定是不行的,基本上所有的模式都是用复杂性换取代码的其他属性(可维护性,灵活性等)使用了模式的代码肯定比平铺直叙的代码要复杂,但是带来了其他方面的好处,所以设计的时候应该先按照平铺直叙的方式设计,然后遇到重复的问题后回... 阅读全文
posted @ 2015-10-25 12:19 赛提斯特 阅读(129) 评论(0) 推荐(0)
摘要: 今天,和一哥们讨论到简单工厂,正好我也对此关注了很长时间,所以有感而发,写点东西,供以后回味这段历史。 简单工厂的用途在现代语言(具有运行时强类型系统支持的语言,如Java,.Net),确实用途不大,感觉不到想起他模式一样重要,但是在不具备运行时强类型系统支持的语言(如C/C++等,C++具有编译时的强类型,运行时没有),这是一个极其重要的模式。 比如一个简单的... 阅读全文
posted @ 2015-10-25 12:18 赛提斯特 阅读(135) 评论(0) 推荐(0)
摘要: 设计:抽象共同点,封装不同点模式:实现设计的手法语言:实现模式的载体不要一开始就进行模式套用,这样只会带来复杂性,而很少会带来好处,在重构过程中应用模式才有说服力! 阅读全文
posted @ 2015-10-25 12:13 赛提斯特 阅读(108) 评论(0) 推荐(0)
摘要: HB:真正人才是几个层面的人才:1. 思维层面:他本身的思维方式就是高端的,这种思维方式导致他学习能力、解决问题能力是比别人强的。2. 技术层面:熟悉底层的东西,底层的东西变化比上层少,而对于核心的认识,导致对于新的上层技术的理解也快。有自己精通的语言可以实现自己想要的东西3. 流程层面:可以从大的... 阅读全文
posted @ 2015-10-25 12:12 赛提斯特 阅读(183) 评论(0) 推荐(0)
摘要: STST 这一点我有话要说,不吐不快 1,没有什么"单纯地看测试一说" 2,销售额和利润暂时不说,进度这里,测试的好处就是保证好的进度,而不是"想当然"的认为测试占用了时间,而导致进度慢,实际经验中证明恰恰相反,"猴子一样乱弹琴的测试"除外 3,测试带来好的进度,好的质量,难道不会影响到销售额和利润? FN 现在的敏捷不就是将涉及研发进度的测试都交给开发人员完成了吗? STST 深层次... 阅读全文
posted @ 2015-10-25 12:11 赛提斯特 阅读(149) 评论(0) 推荐(0)
摘要: 我刚在.Net下做了测试,对于尾递归,在Debug模式下,不会被优化为非递归结构,在Release模式下,会被优化为非递归结构,就不存在栈溢出的问题了 STST 这是我模拟的文件结构类 STST 这是非尾递归版本 STST 这是尾递归版本 STST 这是测试代码 STST 这是CreateDir的定义 STST 结果: 1,在Debug模式下,无论是不适尾递归,... 阅读全文
posted @ 2015-10-25 11:58 赛提斯特 阅读(134) 评论(0) 推荐(0)
摘要: 今天与人再次聊到这个话题,有人在为"到底该用什么模式"而烦恼,我相信,每个都经历过这个阶段一定都会感觉很熟悉这个烦恼我认为,模式不是目的,只是工具,达到设计目标的工具,我们不会因为"为了使用锤子"而去"使用锤子",一定是因为其他目的"比如敲打钉子"而去"使用锤子".我们应该也同样不要因为"想用那个模... 阅读全文
posted @ 2015-10-25 11:52 赛提斯特 阅读(190) 评论(0) 推荐(0)
摘要: 软件工程,模式,语言,设计思想发展到今天,说白了,所有的技巧,思想,原则归根结底都是为了这个DRY 从机器语言开始:为了DRY,出现了汇编符号来代表指令,使开发人员不用“重复翻阅指令手册”为了DRY,出现了宏汇编,来使开发人员不用“重复编写同一个过程”为了DRY,出现了C,Fortran等,使开发人... 阅读全文
posted @ 2015-10-25 11:50 赛提斯特 阅读(377) 评论(0) 推荐(0)
摘要: 今天,WC的时候,突然间理解了一个一直很模糊的概念就是:强类型,弱类型,静态类型,动态类型到底具体指什么意思,哈哈,太有成就感了强类型:运行时检查目标地址的对象是不是预期的类型,如.Net,Java等弱类型:运行时没有类型的概念,只有地址的概念,如汇编,C等静态类型:对象的"多态"在编译时决定,编译... 阅读全文
posted @ 2015-10-25 11:49 赛提斯特 阅读(145) 评论(0) 推荐(0)
摘要: Fizz-Buzz-Whizz问题描述:1. 你首先说出三个不同的特殊数,要求必须是个位数,比如3、5、7。2. 让所有学生拍成一队,然后按顺序报数。 3. 学生报数时,如果所报数字是第一个特殊数(3)的倍数,那么不能说该数字,而要说Fizz;如果所报数字是第二个特殊数(5)的倍数,那么要说Buzz... 阅读全文
posted @ 2015-10-25 11:47 赛提斯特 阅读(2828) 评论(0) 推荐(0)
摘要: STST 昨天看到这个观点,感同身受,大家讨论下 XQ 分解成小问题:进行抽象并降低耦合性。 STST 恩,所以强调 XQ 代表这一种思维方式:复杂问题简单化。 如何把小模块组合成大系统也很见功力。 STST 当然,无论什么问题,都是如何把问题逐步求精的过程,我们学数学,物理,化学也是这样 复杂问题必须简单化以后才能求解 模块合并的关键在于,小模块之间的正交性如何,具有正交性的多个... 阅读全文
posted @ 2015-10-25 11:41 赛提斯特 阅读(132) 评论(0) 推荐(0)
摘要: 瀑布模型 : 强调整体推进与阶段划分 需求->设计->实现->...->测试->交付, 项目资源(时间人力资金等)按阶段分配 每个阶段的产出作为下个阶段的输入.迭代模型 : 强调逐个推进与功能划分 子功能1->子功能2->...->子功能N 项目资源按子功能分配 每个阶完成一部分... 阅读全文
posted @ 2015-10-25 11:33 赛提斯特 阅读(483) 评论(0) 推荐(0)
摘要: 1,在编写好失败的单元测试之前,不要编写任何产品代码 如果不先写测试,那么各个函数就会耦合在一起,最后变得无法测试 如果后写测试,你也许能对大块大块的代码进行测试,但是无法对每个函数进行测试 先写测试是进攻,后写测试是防守2,只要有一个单元测试失败了,就不要再写测试代码,编译失败也是失败 一个地方漏... 阅读全文
posted @ 2015-10-25 11:31 赛提斯特 阅读(408) 评论(0) 推荐(0)
摘要: 前几天我看到了Bob大叔关于Code Dojo(练习)的表述,获益非浅,以前我只知道这样做肯定是有用,但是说不出所以然,但是Bob一针见血地说了:Dojo就是让你通过反复的练习,使一些原来看起来高阶的抽象变成一种本能,而把脑子解放出来思考更高阶的抽象. 初学者而言,语法就很抽象,通过练习,使语法成... 阅读全文
posted @ 2015-10-25 11:30 赛提斯特 阅读(124) 评论(0) 推荐(0)
摘要: 很奇怪的一个现象,在C#中使用Process来启动进程,启动文件名必须是系统指定的扩展名.EXE,而我使用原生的Win32API ::CreateProcess()并没有这个限制,以后遇到类似的问题要注意了下面例子:com.aaa,com.exe都是同一个可执行文件,只是扩展名不一样 [TestMe... 阅读全文
posted @ 2015-10-25 11:28 赛提斯特 阅读(1678) 评论(0) 推荐(0)