摘要: 在以往的程序设计中,主要的关注点是数据的录入、以及录入数据的校验,设计的重点是获取数据的方式以及数据流转方式的逻辑及体现。 而在新的需求中,对数据的本身及其形成提出了更多的要求。这样的要求会对程序的设计方式和方法提出许多新的挑战,主要涉及到数据的分析、知识的表达、规则和策略的设制、以及数据的表现等方面。 以往的数据读取一般是明确的,中间不需要有太多的加工,数据本身体现的信息相对比较单一,一般直接用表格和form展现就可以了。 而新的数据读取更多地体现了可行性,在规则和策略基础上程序提供了数据的建议和可行的选择,这些数据需要紧扣业务经验,而且要体现上下文相关。同时数据中还要包含选择的理... 阅读全文
posted @ 2013-01-24 13:54 走在溪边 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 在编程中有时会把多个函数串在一起依次调用,以达到特定的目的,在这里我们把这样的调用方式形象地称为函数链调用。函数链中的函数有些是独立的,有些则只用在函数组合中,不会单独调用。对象的连续配置和组合是函数链调用比较常用场合,去除语法糖,linq也是一个函数链的运用。下面通过即时编译中的一个例子,来看看函数链的用法。 几种热门的语言C#、java、js都采用了即时编译的方式,即时编译需要有相应的汇编类库供调用,以便把VM代码转换成本地机器代码。 Apple的汇编类库是比较常用的,被firefox,webkit用于js的即时编译,下面的代码是Apple汇编类库的一般调用方式:masm.pus... 阅读全文
posted @ 2013-01-11 11:27 走在溪边 阅读(1903) 评论(0) 推荐(0) 编辑
摘要: 权限涉及到很多概念,用户、职员、角色、用户 组、资源、数据权限、功能权限、组织结构等,是资源分配以及职责分工在系统中的体现。如果只是关注权限的结果,而不是去分析权限的原因,很难设计出一个软性的权限系统。权限系统与需求有很大的关系,梳理权限系统很大的程度上可以說是在梳理需求。 业务模式在商业活动中处于比较核心的地位,资源的配置、业务流程和权限基本上都是围绕着业务模式展开。业务规划和业务计划是业务模式的源头和驱动,但所有的业务活动都需要通过业务模式来体现出来,流程则是业务模式的具体体现,权限则是角色在流程中职责分工,离开了业务模式讨论业务流程和权限就有点无的放矢。另外一方面,从业务模式开始讨... 阅读全文
posted @ 2013-01-10 22:39 走在溪边 阅读(332) 评论(0) 推荐(0) 编辑
摘要: 对象的谓项设计是指用对象的本体特性,而不是形式特性来体现和区分对象的方式。通俗地说区分对象的方式是能力而不是出生。在谓项设计中,对象是由基础类生成,而不是由派生类生成,我们会更关注类的特性而不是类的继承关系。常用的描述是对象具有哪一类的特性,而不常说是哪一类的对象。 举个例子,比如对于卡车,在设计时只会定义汽车类型,而不会去定义派生于汽车的卡车类型。作为替代,在汽车中定义卡车特性的谓项。要区分一辆汽车是否是卡车,是看它是否具有卡车的特性,当它有卡车特性时,可以把它归于卡车一类,反之,则认定它不属于卡车。对于既有轿车特性,又有卡车特性的汽车,你可以认定它为皮卡。 另外之所以称为谓项设计,与对.. 阅读全文
posted @ 2013-01-03 13:57 走在溪边 阅读(952) 评论(0) 推荐(1) 编辑
摘要: 在上一篇 编程便笺:代码的图形(一) 一文中描述了如何用C++直接把结构语义图形化,在继续这个话题以前,我们先暂时放一放,做些准备工作。本文先来描述一下控制语义或者说是规则语义的图形化。 像上一篇文章所说,结构很大的程度上是体现地是几何的概念,也就是图形的概念。而控制语义的图形化离不开图灵机,对于这一点,有以下一些理由: 1、图灵机从表面上看,直接体现地是匹配控制的概念,控制是图灵机的核心; 2、图灵机的语言比一般语言更接近于图形,体现图形的特色,对于编程来说,大部分的时候是形式比实质更重要,换句话说,对于程序员来说,语义的表现比语义的实现更有感受。我们平时指的语言计算能力,应该是指... 阅读全文
posted @ 2012-12-28 14:49 走在溪边 阅读(1306) 评论(0) 推荐(1) 编辑
摘要: html5是一场分合的大戏,看得人眼花缭乱;html5也是热词,时不时可以爆炒一顿,紧抓开发着的眼球;与html5相关的往往是五年计划、十年计划,在今天这样的环境下,可以説难能可贵,只是在赌开发者的耐性。1、理想与现实: html发展到现在,已形成了各种利益的生态,生态之间互相牵扯,互相平衡。所以当w3c满怀信心,以xhtml2.0去替换html时,碰壁也是难免的。在今天html5其实已经不是技术问题,而是技术背后的生态问题。对于权利者来说,技术并不是主要的,受控才是主要的。一项技术可以往前推,但必须受控,这就是潜台词。理想遇到现实,大腕如w3c,也只能徒呼无奈。2、浏览与应用: html.. 阅读全文
posted @ 2012-12-28 12:08 走在溪边 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 在各种介绍编译系统的书里,关于标志符的着墨都不是很多,但标志符却可以说是一种语言的核心,标志符的定义、名字的查找方式、以及标志符语义的解释,很大程度上决定着一种语言的风格和能力。而在实际的编译程序的编写中,标志符的处理也是最费精力的,因为这一部分的处理体现出一种语言的特性,而其他部分相对来说是比较规范和统一。 语言中包含信息的有四部分,分别是常数、标志符、句型、目录结构。目录结构决定着标志符、句型的上下文环境,不同的上下文环境,同样的标志符和句型,所体现的含义不一定相同。常数的含义比较明确,相应的变化也比较少,所含的信息比较固定。句型是标志符和常数的组合,反映了标志符和标志符以及常数之间... 阅读全文
posted @ 2012-12-24 22:04 走在溪边 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 面向对象编程,是软件编程的重要方法,在许多人心理,也许就是唯一的方法。面向对象的编程方法,可以让我们很容易的把各种信息组合在一起,写出比较稳定、实用的程序,极大地提高了编程的效率。对象是如此好用,我们也对对象产生了依赖,甚至到了过度消费的地步。 阅读全文
posted @ 2012-12-24 21:11 走在溪边 阅读(1463) 评论(2) 推荐(2) 编辑
摘要: Iterator是序列概念的体现,Iterator指向值而不是值本身,因而也就具有两方面的特性,一方面Iterator可以指代值,另一方面具有序列指示特性,可以在序列中移动,指针和数组序号都具有这样的特性。Iterator(迭代器)可以说是std的灵魂所在,也可以这样说,Iterator为std的成功提供了保证。 Iterator为什么会如此重要,因为大部分程序都是图灵完备的,所以可以分析一下图灵机,我们把图灵机分成三个部件:条带、接口部件(包括移动和数据捡取部分)、处理部件。这三个部件中,接口部件对应就是Iterator,它是条带与处理部件的纽带,从中可以看出Iterator的重要性。... 阅读全文
posted @ 2012-12-24 10:47 走在溪边 阅读(2320) 评论(0) 推荐(0) 编辑
摘要: 编程时,程序员心中会有图形,而有些代码本身就是图形,不但可读而且可看。#include "stdafx.h"#include <deque>#include <map>#include <string>using namespace std;//图形由点组成class TNode{public: wchar_t * name; //构造函数 TNode(wchar_t * _name):name(_name){} virtual const wchar_t * toString(){return name;}};class TEmp;// 阅读全文
posted @ 2012-12-16 14:11 走在溪边 阅读(1462) 评论(6) 推荐(1) 编辑
摘要: 程序的设计模式往往与计算机的体系结构有很大关系,以函数作为协议的主要表现方式,语言具有简单严格的语法结构,应该与冯·诺依曼体系,或者更准确的说与代码线性循序执行的方式不无关系。 冯·诺依曼体系是图灵机的实现,但从实现之初,两者便无多大交集,图灵机具有理想性质,是不考虑控制和执行成本的,而冯·诺依曼机器,最初的程序设计对计算成本是非常关注的,而且按照图灵机思想设计的程序,转换成通常的程序,会比较复杂而且显得不直观。正如lex与bison生成的程序代码,我们只会认为程序是对的,而很少会去阅读。 以控制机器的思想设计程序,是图灵机程序设计的主要方式,而对于计算细节(主要 阅读全文
posted @ 2012-09-21 13:17 走在溪边 阅读(2297) 评论(0) 推荐(1) 编辑
摘要: 编程总是与纠结分不开,下面的纠结与程序的可读性有关。1、纠结: 函数写着写着太长了,要分解吧?问题来了,分解出来的函数不太好找地方放了,放在类里头,污染了类,放在全局的空间里,又污染了整个环境。而且这些函数其实也就原来这个函数调用,总是要放在边上吧。 再看看类,刚开始时就几个函数,清清楚楚,写着写着就多出来很多私有函数,阅读代码时,就有点找不到主次了。2、整理箱: 这个时候,无论是类还是函数,都需要一个整理箱,为这些多出来的函数找一个合适的场所,至于整理箱在哪里,看看下面的例子就清楚了。3、一个例子: class lexer { public: int insymbo... 阅读全文
posted @ 2012-09-05 22:42 走在溪边 阅读(1360) 评论(3) 推荐(2) 编辑
摘要: 通用和专用是编程的永恒主题,编程的演化很大程度上是专用变通用的过程,归纳是更一般的叫法。专用与通用比较,往往具有更多的上下文约束,而程序设计则希望通过更细或更有效的分组、分类,而使这些上下文约束更通用,更具适应性。 对于企业应用来说,这样的约束一般来源于业务逻辑,而需求和程序设计也是围绕着业务逻辑的选择和处理展开。很多概念的形成有它自然的过程,如果经常把这些概念举在手上,反而如一座座山峰,遮住了事情本来的面目,这样也不利于这些概念的运用,当然拿来吓人或显摆的除外。 SQLDB关注于业务逻辑实体的结构及基本约束的一致性。NOSQL则揭示出业务逻辑实体的结构与业务逻辑对象的上下文相关性,也就是数. 阅读全文
posted @ 2012-07-06 15:18 走在溪边 阅读(1781) 评论(7) 推荐(2) 编辑
摘要: 轻量开发与上海世博会会馆的建设有许多共通之处,两者参照起来,可以更好地理解轻量开发的基本理念。一、系统按主题划分,围绕某一主题开发a)主题是开发的基本单元。主题的目的要达到而且要非常好用。 举个例子:报价、订单流程、采购流程、出货流程可以是开发主题,而对于大的销售企业来说,产品则不构成主题,而是一个主题框架,而产品分类和编 号、产品特性、价格管理分别构成主题,而对于更复杂的情况,产品特性和价格管理可以按照具体产品构成主题,独立开发。b)各主题之间的依赖关系要明确。 明确的依赖关系,可以为主题功能的调整、扩展、甚至分离提供必要的基础。c)应用和使用场景,而不单是使用共性,是界面设计主要考虑。 . 阅读全文
posted @ 2012-05-03 14:29 走在溪边 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 一、关于需求 1、需求的提出有多方面的原因,如效率、资源变动、资源流转等,但需求都是一种需要的满足,需求是信息化的内在驱动引擎。 2、更有效率地满足和实现需求是构架设计的基本目标。构架提供实现一类和几类需求的思路,提供了一种和多种实现需求的模板、模式和规范。 3、需求是一个动态满足的过程、同时很多需求意图是明确的,而细节则需要不断反复和完善。作为软件开发人员,不能期待每一次客户都能提明确的要求。 4、预见需求和有效地控制需求,则是设计产品的基本要求。我们并不能满足客户的所有需求,但哪些需求对客户来说是有效的、有益的、也是有效的,则是我们需要分析的。特别对客户有益的或预见有益的需求,应该... 阅读全文
posted @ 2012-04-16 11:13 走在溪边 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 有点像标题党,其实没这么恐怖。但对于做构架设计,我想很多人也有这样的感受,在过程中有时就像进入炼狱,备受煎熬。而当把所面对的问题基本梳理清楚,或者架构基本完成时,有如走出了炼狱。要让框架成为使用者很好的帮手,对于开发者来说,进出炼狱其实也是正常的。本文主要聊一些框架设计的原则,这就当成原则的第0条。0、设计者的炼狱: 从使用者考虑,这是需要的,更多理由见上。1、开放的,而不是封闭的: 框架是为用户铺宽一条路,而不是把用户带向一条窄路。在设计中遵循和融合各种标准,坚持开放的原则,是一种对用户负责的态度。2、整合而不是空中阁楼: 做构架不是闭门造车,框架设计其实是约束和融合的过程,构架最... 阅读全文
posted @ 2012-04-12 21:15 走在溪边 阅读(232) 评论(0) 推荐(0) 编辑
摘要: 现在的系统与以前的系统相比更具有整体的性质,更关注系统间的协同。系统设计中要涉及的技术往往比较广、比较泛,开发这样系统,离开开发平台和框架往往寸步难行,同时开发框架和开发方式也需要不断演进,才能更好地满足需求。现代应用开发框架应该具有哪些特征呢?不妨试着来罗列一下:0、开放性和扩展性 a、开发性是指尽量采用标准和共识的东西,或者让部分设计成为标准或事实标准。 b、扩展性是指系统从开发到运行的各个环节除了可策略、可定义外,都要可定制,可编程。1、服务即数据、数据无界 数据存在于各种服务中,如文件服务、数据库服务、邮件服务、WEB服务等,有外部的,也有内部的。数据是一种需要、可以按需存取和读取.. 阅读全文
posted @ 2012-04-11 13:35 走在溪边 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 语言是一种工具,语言应需要产生,并应需要而发展。原始的语言和词汇是一种直接、具体的符号及符号组合。感性是理性的启端,发展了的语言是建立在自我描述之上的一种抽象。词汇是语言的材料,词法是语言的模板,语义则是语言的精神。 抽象是实际需要,是选择的结果,一致性是抽象的目的,而抽象本身却是二义的。抽象意味着表示、分类、归纳、组织、演绎及错误。错误是选择和判断的一种,错误是抽象的特质,本身也是一种抽象,错误因创造而生,伴随着抽象而来。人是有灵性的动物,会因需要创造各种抽象,并依赖于创造的抽象,称之为知识和智慧。而当依赖成为习惯时,有时灵性反而被禁锢了。 语言可以用来表现世界、描述世界、记录和传递信息、. 阅读全文
posted @ 2012-04-10 21:25 走在溪边 阅读(296) 评论(0) 推荐(0) 编辑
摘要: 这几天,重读了高老爷子的java编程语言一书,就以博客为纸,做一些简记,有些凌乱,也不怕见笑了。另外顺带插一句,这一段时间重温了大学里的一些基础课程,觉得还都比较经典,受益也比较多。实用的书往往受益于一时,而有些书每一次翻起都会有些新的感受,建议大家有空的时候也可以多翻翻。 本文写的是关于java的,也许不适合这里,但我还是喜欢这里的草根味道,当然也不全是,毕竟全草根是很难存活的,但相对其他园子就草根多了,还是喜欢趴在这块草地上乱划拉几下。1、java语言是对c++语言的再思考,是对C++语言的选择、放弃和扩展。在当时新的需求要求更高的开发效率,要求更大众化。在很多应用方面,开发效率、简... 阅读全文
posted @ 2012-03-10 18:37 走在溪边 阅读(1403) 评论(0) 推荐(1) 编辑
摘要: 在企业应用软件设计中,原来往往只需要与一个SQL数据打交道,现在却往往要连接多个数据源,这些数据源可能是SQL数据库、NOSQL数据、XML文件、网站数据等。这么多复杂的数据,有没有办法让它们构成一个数据中心,以相对统一的方式进行管理和数据处理呢?XQuery是合适的前端。具体做法:1、在企业服务器上设定数据库连接池,并指定连接名称。2、选择合适的xquery引擎,并绑定企业服务器。3、扩展xquery的函数用于操作数据库,比如连接关系数据库,扩展以下函数,原型如下:declare function sql:select($a as xs:string, $b as xs:string) .. 阅读全文
posted @ 2011-12-08 12:09 走在溪边 阅读(2140) 评论(3) 推荐(1) 编辑

  对于lisp语言来说,抽象与应用是最基本的,而对于像C++这样的控制性语言,条带与位置应该我觉得也是蛮基本的,试试构造自然数?

#include <vector>

using namespace std;

template<typename T>
struct Nature
{
private:
    typename T::iterator iter;
    T * tape;
public:
    static Nature zero(T& tape_){
        Nature x;
        x.tape = &tape_;
        x.iter = tape_.begin();
        return x;
    }

    Nature succ(){
        Nature x;
        x.tape = tape;
        x.iter= iter;
        x.iter++;
        return x;
    }

    Nature pred(){
        Nature x;
        x.tape = tape;
        x.iter= iter;
        x.iter--;
        return x;
    }

    bool operator ==(Nature n)
    {
        return iter == n.iter;
    }

    bool operator !=( Nature n)
    {
        return !(iter == n.iter);
    }

    Nature operator +(Nature n){
        Nature zero = Nature::zero(*n.tape);
        Nature x = *this;
        while(n != zero)
        {
            x = x.succ();
            n = n.pred();
        }
        return x;
    }

    Nature operator *(Nature n){
        Nature one = Nature::zero(*n.tape).succ();
        Nature x = *this;
        while(n != one)
        {
            x = x + *this;
            n = n.pred();
        }
        return x;
    }

    static Nature what(T & _tape,typename T::iterator _iter )
    {
        Nature zero = Nature::zero(_tape);
        Nature x = zero;
        while(zero.iter!=_iter)
        {
            _iter--;
            x = x.succ();
        }
        return x;
    }
    void show()
    {
        Nature zero = Nature::zero(*tape);
        Nature x = zero;
        T::iterator it = iter;
        if(zero.iter == it)printf("_");
        while(zero.iter != it)
        {
            printf("0");
            it--;
            x = x.succ();
        }
    }
};

int test_nature()
{
    typedef vector<char> Tape;
    Tape tape(1000);
    Nature<Tape> zero   = Nature<Tape>::zero(tape);
    Nature<Tape> one    = zero.succ();
    Nature<Tape> two    = zero.succ().succ();
    Nature<Tape> three    = zero.succ().succ().succ();
    Nature<Tape> four    = zero.succ().succ().succ().succ();
    
    printf("\r\n four is: ");
    four.show();

    Nature<Tape> y = four * three;
    printf("\r\n y is %");
    y.show();

    return 1;
}

 

posted @ 2013-04-24 19:44 走在溪边 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 一、流程 1、关于流程 a、 流程是系统的基本运行和操作方式,是资源运作的体现,也体现了资源变动的结果。 b、流程反映的是动作和责任,任务则关注时间节点的规划和控制,任务和流程的协调,流程通过任务来调度。 c、流程的权限是资源权限的体现,反映人力之间的职责分工。消息、通知、执行、控制可以认定为信息资源,权限可以通过资源的分配来实现。 d、流程强调的是执行过程的有效,而管理考核的往往是结果和形式。 e、 流程反映的是过程性,而模块反映的是功能性,也可以这样说,流程反映的是线,模块反映的是点,各有所侧重。 f、流程作业目的要明确,流程的过程和时间不易过长。 2、贸易流程 a、贸易流程主要包括报价流 阅读全文
posted @ 2012-05-24 12:11 走在溪边 阅读(409) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示