下一页 1 2
这几年各种新的技术井喷一样的涌现出来。身处这样一个时代的我们,难免就有一种拔剑四顾,心下茫然的感觉。在某一方面的做到精专已属不易,全才似不可能,那么究竟又该何去何从?这篇文章目的是探讨编程过程中一些本质的东西,已期对大家的学习有所帮助。 个人以为,从编程这一职业诞生开始一直至今,其本质就没有改变过。对概念的抽象对逻辑的描述始终都是编程过程中最核心的东西。 程序为解决某一问题而存在。而问题可拆分成某些概念和逻辑关系。而结构化程序设计和面向对象程序设计不过是对概念和逻辑进行表达的不同方式。而程序中逻辑关系的复杂程度随程序的规模而增加。 程序的本质不是各种技巧。就算你把EffectiveC++,MoreEffectiveC++中的每一条款都应用到了你的C++程序中,如果没有对逻辑关系的良好组织,你的程序也可能糟不可言。可能高耦合低内聚,可能不可扩充?D?D?D。 上面这段文字提到了四个概念,他们分别是:问题、概念、逻辑和技巧。 我来举个例子来说明这四个概念都代表些什么。 现在假设我们需要根据已知的一个文件名产生一个临时文件名。如果输入为prog.dat,mydir,hello.,oops.tmp,end.dat那么相应的输出为 prog.dat=>prog.tmp mydir=>mydir.tmp hello.=>hello.tmp oops.tmp=>oops.xxx end.dat=>end.tmp (这里使用了TheC++StandardLibrary中第11章的例子) 什么都不做的程序是不存在的,程序总要解决客观世界中的某些问题。这里的问题就是要为一个已知的文件名产生相应的临时文件名。 解决这个问题时涉及的概念主要有两个:字符串和扩展名。扩展名可以用字符串进行表示。 解决这个问题的逻辑之一可用下面的伪代码来表述: if(输入文件名没有扩展名) { 用输入文件名、'.'号和"tmp"生成临时文件名; } else { 得到输入文件名的扩展名; if(扩展名为空) { 用输入文件名和"tmp"生成临时文件名; } elseif(扩展名为"tmp") { 把"tmp"替换为"xxx"; } else { 把文件名'.'以后的部分替换为"tmp"; } }