随笔分类 -  程序设计

摘要:面向对象的思想,先把现实中的对象转化为程序上的对象。程序,是解决某个问题的相关步骤和次序。而实际很多时候,程序描述的是一个场景活动,首先是有主体,然后是相关活动。程序固有的含义,可能就比较关注活动,而不关注主体。面向对象,首先要确立活动场景中的主体,也就是对象,在分析主体所担当的职责,也就是功能。过程性的开发方法,强调的是活动,那么活动的主体是什么?是数据,也就是,在过程性的观点下,程序只是数据的变换过程。而面向对象的观点,则是对象之间职责的传递:“我把我的任务完成了,然后交给你接着做”。过程性的观点是比较低层次的,比较接近计算机的层次,而面向对象,就比较人性化。但是面向对象也离不开过程性的观 阅读全文
posted @ 2010-04-16 23:51 诺贝尔 阅读(517) 评论(0) 推荐(0) 编辑
摘要:很多人学习面向对象和设计模式,往往是为了技术而技术,只是学到了形式,很僵化。这都是因为没有把握好技术的目的是为了什么。对于设计来说,他的目的就是为了方便软件开发和软件维护。不提倡滥用设计,在于设计是和你当前的软件开发需要是相匹配的。对于你这个项目的要求,可能平铺直叙,直观的方式是最有效率的。因为只有你一个人在干,你就没有必要通过设计来分配功能任务给若干个开发人员,没有这种需求,就没有这个设计的必要。又因为你这个项目很小,设计一个高度抽象的架构出来,却只有一个简单的实现,框架的灵活性完全排不上用场,结果设计的成本比你开发的成本要高太多太多,也就没必要了。 除非你是在做教案,才有必要对每一个细节都 阅读全文
posted @ 2010-04-15 13:29 诺贝尔 阅读(383) 评论(0) 推荐(0) 编辑
摘要:关联内容: 面向对象思想的头脑风暴(一)关联的文章讨论了一个开放封闭原则的具体案例,其中前两个是超级复杂化的设计,而且还完全不符合开放封闭原则。但是,我想如果没有学习过所谓的设计模式的人,绝对不会犯前两个这种“模式过度”的错误的。因此,设计模式的爱好者们,要小心了,让你代码变得恶心的,往往就是你所热衷的东西。然后第三个用委托。第四个用组合接口的方式。也许是例子不够好,我觉得第三第四也是不完美。我们回顾一下设计要求:“需要处理三种产品图书,数码,消费,需要计算产品的税率,图书的税率为价格的0.1,数码和消费类产品为价格的0.11,需要获得三种产品的信息,图书和消费类产品的信息为:"名字 阅读全文
posted @ 2010-04-10 12:08 诺贝尔 阅读(355) 评论(0) 推荐(0) 编辑
摘要:结构优美的代码,是每个程序员的追求。可能这个没有严格的标准,但是有些原则会有助编写结构优美的代码。1.对代码的逻辑层次要有感觉。比如大体上,一个程序会分三个层次:界面层,逻辑层,数据层。简化后一般也有两个层次:界面和逻辑层。逻辑层是去掉外表的,内在的,实质的东西。一般来说,就是表现为对数据的一组操作。而界面层,是关注程序应该如何和用户沟通的。比如可视的视窗,图表,控件等。它是内部逻辑的呈现,也是用户和内部逻辑沟通的桥梁。 区分这两个层次的好处,一个是这两个层次所注重的核心内容有所不同,用到的技巧或者指导方法有所差别。第二点是,可以将问题解构和局部化,减轻开发难度。第三点,有助分开来修改内容,比 阅读全文
posted @ 2010-04-05 14:11 诺贝尔 阅读(3462) 评论(0) 推荐(1) 编辑
摘要:很多新手,总是把用户界面的代码和业务逻辑的代码 混在一起。到 最后,导致整个流程变得很复杂,要理解很不容易。好的代码应该是结构清楚的。而将界面代码和业务逻辑的代码区分开来,是新手进阶的第一步,也是比较容易实践的一步。比如五子棋游戏,在逻辑层面,下一个子不过是在二维数组写入一个标志。但是用户界面接口的代码就包括,读取键盘的输入,判断输入是否合法,输入的内容是什么,然后再调用逻辑代码。如果将这些混在一起,本来很清晰的逻辑代码,变得无比复杂。保持逻辑代码的清晰是很重要的,这些是核心功能。 阅读全文
posted @ 2010-03-31 13:57 诺贝尔 阅读(1598) 评论(0) 推荐(0) 编辑
摘要:根据模块的设计文档,程序设计师开始设计代码。这里不讨论怎么设计优秀的代码,只是讨论如何贯彻质量管理或者具体来说是检测设计是否符合编码人员的要求。<p123456>设计于编码来说,主要体现在设计完成了一个良好的应用接口和相应的功能范畴的定义。而 检测相关接口和功能定义是否适合编码工作,就是这一阶段实践软件开发质量管理的关键。<p123456>对某个功能点下的编码人员来说,有自身应该实现的接口,和可以使用的接口。自身接口一般应该由另外的功能点下的编码人员来检验。因此接口应该符合真正的使用者的要求。而当前编码需要使用的接口,应该编写详细的测试代码。这就 阅读全文
posted @ 2010-03-31 13:27 诺贝尔 阅读(1244) 评论(0) 推荐(0) 编辑
摘要:提高软件质量,需要一个良好定义的执行过程。而执行过程,每时每刻都需要一套行之有效的检测反馈的方案。包括担当检测主体的人,检测的工具,和实施的方法。在一个质量管理团队中,总有两种角色。一种是送检方,另一种是检验方。1.需求分析阶段:送检方是消费者,他提供了需求信息,而检验方是我们团队的需求分析员。工具是什么?检验的方法和标准是什么?2.系统模型的建立阶段:送检方是分析员,提供了需求分析报告,而检验方是框架设计师。工具是什么?检验的方法和标准是什么?3.功能模块化阶段:送检方是框架设计师,提供了框架级别的文档,而检验方是程序员主管。工具?检验?4.代码设计阶段:送检方是程序员主管,提供功能模块文档 阅读全文
posted @ 2010-03-29 09:46 诺贝尔 阅读(389) 评论(0) 推荐(0) 编辑
摘要:软件开发和其他制造业的区别在于,软件的成本在于研发,而不是制造,制造业可以有既有的模式来进行流水线的工作方式,大大的提高产品的质量。虽然,软件有这种固有的特点,但是我认为还是可以借助制造业的管理经验来管理软件开发。尤其是,软件不会受许多物质条件的限制,也就有了很多更大的发挥空间。一个产品,如何才能称之为质量高的产品?我认为应该满足一下条件:1.符合消费者的需要(功能性)2.健壮3.高效(竞争力的体现)其实传统制造业要弄个新产品出来,并不比软件开发容易。先要构思,然后一步一步修改,市场宣传,诸如此类,不管哪个环节,如果是软件开发来说,都比较节省成本,因为软件要部署比硬件部署技术手段要容易多了。正 阅读全文
posted @ 2010-03-26 22:34 诺贝尔 阅读(1892) 评论(3) 推荐(1) 编辑
摘要:<p123456>有几个模式比较重要和基础的。第一个是关于构建对象的模式。<p123456>接口 a = new 类b();<p123456>这个就是构建对象的代码,这个代码应该怎样处理。从位置来看,在组合模式下,假设类a包含类b,如果将构建代码放在类a中,必然导致类a对类b的强引用,当类b有所变更,可能就会影响类a的代码。但是类a如果不对类b进行引用,就无法组合代码了。基于这个些要求,应该把以上代码放在一处地方,这个地方是关于业务的主线的。<p123456>类a 和 类b 直接通过接口作为纽带,是 阅读全文
posted @ 2010-03-09 14:01 诺贝尔 阅读(324) 评论(0) 推荐(0) 编辑
摘要:重构的原因,在于需求的变化。需求没有变化,也就没有必要瞎折腾来重构,除非你真很蛋疼。 需求变化有两种原因:一,是真的变化了。二,对需求的认识深化了。旧的需求,转化到新的需求,设计就要跟着变化。当然也不是所有情况都需要大变动,很多需求变化,没有涉及到“筋骨”,就可以保持设计的骨架,而添加新的内容。 一个优秀的设计,应该精良预示到这种简单的需求变化。如果真的要改变,那哪些设计会比较容易更改呢? 类设计有两种观点:一是从自身出发,该类应该有哪些操作,就建立这些操作。二是从需求出发,别人需要该类有什么操作,他就应该提供这些操作。我的看法是,从需求出发,建立的是概念切面,也就是接口。从自身出发,建立的是 阅读全文
posted @ 2010-03-07 15:57 诺贝尔 阅读(1841) 评论(0) 推荐(0) 编辑
摘要:很多“框架”设计出来后,你用了一丁点东西吧,都要求你背负整个框架的大包袱。这样很不好。软件应该由用户选择自己用到的功能,而能将不必要的功能去掉。一个好的软件设计,应该可以增大也可以减小的。从这种意义上,.net 的dll封装模式,就不如java的class + jar zip包模式高明。dll 是个大包,可能包含了很多用不上的类,作为面向对象的封装模式,细化到类是有意义的。假如你的程序只使用框架的某个类,那么你只需要包含这个类的class文件,然后包含这个类自身的相关引用,然后类推下去。比如,子类需要相关的基类,和其用到的类。如果设计该类的程序员遵照比较规范的面向对象原则,可以预见,应该不会用 阅读全文
posted @ 2010-02-18 13:15 诺贝尔 阅读(430) 评论(0) 推荐(0) 编辑
摘要:<p123456>面向对象有三个特性:封装、继承、多态。封装是不容置疑的,就算不是面向对象,一样有封装的开发思想。多态,是能够减少阅读难度的方法,对合作开发有很大的帮助。<p123456>最让人质疑,也是最有特色的是继承。面向对象用很形象的思维,创造性的将现实世界的种类关系纳入开发指导中,但是正是这种类比,让我产生了一种忧虑。是不是这个目标太过理想,反而让人们忽视了其实质。肯定的,现实世界的种类关系确实很普遍,我们完全有理由相信,编程使用类似的思想是有价值的,但是对于如何借鉴值得研究。现在的面向对象继承方法,实质是什么?举例说:有个类D,继承自类 阅读全文
posted @ 2010-01-31 15:47 诺贝尔 阅读(514) 评论(1) 推荐(0) 编辑
摘要:软件设计过程有几类和源代码相关的角色:1.使用者;2.修改者1.封闭原则。使用者不需要了解的东西封闭起来,一则可以减少阅读无关的信息,二则可以减少误用,增加代码的耦合,增加以后修改代码的难度。2.抽象接口原则。使用者引用的是抽象接口,会减少修改代码的难度。<p123456>原则性的东西往往不用太多,但是相关的具体措施还是蛮广泛的。如何实现封闭原则?首先要了解什么是封闭,封闭的程度怎么看出来。很多语言都可以做到多层级的封闭,范围比如有:1.项目内;2.文件内;3.类可以有公开,继承公开,私密几种;4.类成员有公开,继承公开,私密等等。如何贯彻封闭原则,就是在某一个范围内, 阅读全文
posted @ 2010-01-18 01:10 诺贝尔 阅读(361) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示