 |
白乔原创:实战软件DIY
|
|
| |
| 开发一个属于自己的软件?让流行软件的包装打上你的名字?也许这是最令你感到振奋的事情了。然而,这并不是很容易做到的事情。如何从一个好的思路出发,到软件的最终出品,个中艰辛足以让你感到迷茫……本文将围绕笔者自行开发的免费软件《FlashNow!动画浏览器》的具体开发过程,循序渐进,深入浅出,向读者朋友简单介绍软件开发的相关知识。
需要指出的是,软件开发是一件很严谨的事情,据说需要完整的系统的软件工程理论知识;对于软件开发,每个人也会有自己钟爱的开发方法和习惯(正如有的人偏爱于用左手写字一样)。本文不想花多大的篇幅讲述令人头疼的软件工程、软件管理的概念,毕竟我们更多的潜在的“开发商”群还基本上就是那些古里古怪的只热衷于物理代码的程序员们,而程序员的特点,很简单,除了激情十足,就是懒散。抽象的概念总会让人头疼,本文所想做到的,就是根据笔者实战的具体过程,向读者朋友们推荐一种实际可行的方法,而绝不是理论。跟着我来,Do It Yourself!我真诚的希望:通过本文,读者朋友能够学到一点真正有用的东西。
0. 前言
开发一个属于自己的软件?让流行软件的包装打上你的名字?也许这是最令你感到振奋的事情了。然而,这并不是很容易做到的事情。如何从一个好的思路出发,到软件的最终出品,个中艰辛足以让你感到迷茫……本文将围绕笔者自行开发的免费软件《FlashNow!动画浏览器》的具体开发过程, ...
|
|
| 作者:不祥 bluejoe张贴于2004-04-25 11:36:21.0,共阅读4230次,回复14次 |
|
|
 |
使得子控件大小随主窗口大小变化的宏
|
|
| |
|
|
 |
白乔原创:DOS时代-汉字的处理技术(三)
|
|
| |
| 2.使用点阵字库来写字
读者看到上一节的内容,恐怕会产生一种担忧:如果要写出十几个,甚至上百个字,那该需要花多少时间来拼写点阵字模呢?
我们应该感谢那些致力于UCDOS等中文操作系统的开发人员,他们在为我们提供了完美的操作系统的同时还为用户和他们的软件本身提供了属于不同字体而又庞大的汉字库(分别取名为HZK16, HZK16K,HZK16F等等),他们一笔一划地为我们创造了一个又一个行业标准,避免了用户的大量劳动。
这些字库已成为标准字库,只要熟悉其中的结构特点,就不难写出不同的汉字来。首先,标准字库是二进制文件,那些好奇的读者是无法通过文本编辑器来直接观看它是否包含有那么多的0还是1的。利用C语言的fopen()函数时,必须指明打开方式为"rb",这是非常重要的。
其次,标准字库的数据内容是按位存放的,一个字节只存一个0或1是相当浪费的,这样一个16 * 16汉字就会占用265字节!实际上一个字节的每个位都可以用来标志1和0,这样一个16 * 16汉字只占用16*16/8=32个字节。很多初学者朋友在练习中总得莫名其妙地填上一个16点阵字模信息占用32Bytes,就是这个原因。
最后,这些汉字堆砌在一起到底是按什么顺序的呢?这就有必要了解区位码的含义。人们将汉字与一些字符分成94个区(区码1-94),每个区内含有94位(位码1-94),这正如我们开辟了一个word[94 ...
|
|
| 作者:不祥 bluejoe张贴于2004-05-24 21:21:05.0,共阅读5285次,回复2次 |
|
|
 |
白乔原创:艺术编程之C++篇[5]
|
|
| |
| 4 编写快的代码——代码的效率性
程序的效率包括时间和空间上的效率,程序运行速度快,或者占用内存小,那么它的效率就高。
在640K内存时代,空间效率是很讲究的;但时过境迁,现在的内存动辄256M,必要的时候Windows还要动用虚拟内存,将上G的硬盘当着内存使,这样一来,空间效率就没有时间效率显得重要了。
所以,以下的内容只讨论程序的时间效率。
4.1 换机器还是改代码?
让程序跑得更快,要么改代码,要么换机器。程序员以固执著称,肯定选择后者;应用商有的是钱,升级打补丁毕竟要花时间,干嘛那么麻烦?所以他们大抵想都不想,大手一挥,“换一台1.2G的去……”——那么到底该换什么?
程序员的机器通常不是很好的机器(因为穷,或者机器的历史由来已久)。换机器不是程序员所赞成的做法,但对于功能性很强的商用程序,花费钞票购买更快的机器是很有必要的,也很能解决问题。过分地追求算法的效率,改进程序,很有可能带来副作用,如影响程序的兼容性、延误程序的开发进度和推广进度、引入更隐秘的错误等等。
当然,换机器通常是商家的事,而修改代码责无旁贷地是程序员的事。
4.2 衡量程序的时间效率
统计数据总是能更好地说明问题,测试程序的时间效率需要用到精确的时间函数,Windows系统定时器的精度(只能精确到 1 s)是不够的;函数GetTickCount()只能返回到ms级的时间(而且应该是只能 ...
|
|
| 作者:不祥 bluejoe张贴于2004-04-10 12:26:15.0,共阅读3049次,回复2次 |
|
|
 |
白乔原创:实战软件DIY[6]
|
|
| |
| 5. 实战成果
实战的成果就一个.exe安装文件,如图1所示。后续的内容就是你如何发布软件,如何销售软件,利用产品来为你赚钱(如果你还想要钱的话)。在知名的网站发布你的软件,或者登记注册你的软件,与感兴趣的商家主动联系也是好办法,好的idea,总会有明智的商家愿意掏钱与你合作。
FlashNow!至此还没有赚取一分钱的利润,FlashNow!1.05.20完全免费,FlashNow!的广告条还是虚席以待——但我仍希望有明智的商家(最好是经营Flash网站的)给我寄来热忱的协议书……
软件商品化是你的事,笔者没有更好的经验。
6. 实战经验
本文到此结尾,有所收获吗?我希望你有。正如我前面所提醒的,软件开发过程是一个严谨完整的过程,各种理论在拼命地解释程序员各个阶段的行为并得出更新更枯燥的规则,各种软件开发工具也因此应运而生,要足够时髦,就必须掌握更多更新的工具。软件开发是学问,本文只尝试以浅显的语言和具体的实例来告诉读者朋友们一种组织软件开发的思路,仅仅如此。
实战结束了,以下的经验是我想带给你的:
² 不要急着编码。编码工作量不应该超过开发工作的百分之二十,成熟的系统设计会事半功倍;
² 不要忽视测试。测试应该至少要占工程的百分之三十,如果你不想做一个不负责任的软件牛仔的话,在经历足够的测试之后,再发布你的软件;
...
|
|
| 作者:不祥 bluejoe张贴于2004-04-25 11:44:39.0,共阅读2992次,回复3次 |
|
|
 |
编写易于调试的VC代码
|
|
| |
| 一 程序的设计 要避免错误,首先要从好的设计开始。对于程序的设计,需考虑到程序的两个特性: 1简单性 大多数常见的错误来源于程序设计中不必要的复杂成分。一个好的设计应该反映问题本身的要求,而不必为了刻意追求“满足将来的需要”而添加不必要的特性。实际上,简单优雅的设计比那些复杂的设计更能迎合未来的需求。 2 耦合性 耦合(decoupling)性用来衡量不同对象之间的依赖程度。松耦合的程序易于理解和实现,易于测试和维护,且这种程序包含错误的可能性小,错误也较容易发现和清除。
二 编程风格 编程风格是个人问题,有很大的随意性。一个好的编程风格不仅让代码易理解,也易于调试。好的编程风格包括: 1 清晰地书写代码 如果没有必要,尽量不要使用语言中的高级特性,因为这些特性不易于理解和调试。使用大多数程序员都能理解的语言成分来书写代码不易犯错且易于理解和维护。 2 编写结构良好的代码 当程序崩溃时所能得到的最基本的调试信息是源代码文件、问题所在行的行号和一个调用栈(call stack)。调用栈是调试程序时最有帮助的部分,它提供错误出现的上下文,也就是带参数的函数调用序列。你书写的代码结构越好,调用栈就能给你越多信息。 3 使用良好的标识符 一个好名字能使你的代码更容易被理解和维护。流行的匈牙利命名法(Hungarian Notation) ...
|
|
| 作者:michael bluejoe张贴于2007-01-23 17:00:05.0,共阅读2656次,回复2次 |
|
|
 |
白乔原创:实战软件DIY[5]
|
|
| |
| 4. 实战体验
经过详细的实战部署和系统设计,后面就是真枪实弹的实战了。我们按照软件实现(编码)——帮助文档——安装程序——软件打包——软件测试的顺序一一介绍。
4.1 版本管理
且慢!还是不要急着编码,在进入具体的软件实现阶段,作为常识,你应该掌握一下关于版本管理的概念。
版本管理是软件配置管理(Software Configuration Management,简写为SCM)的一个重要环节。版本管理不属于软件开发过程中某个特定的阶段,而是贯穿于整个软件开发过程中的,在软件开发过程中所有的分析、设计文档和源代码都必须有严格的版本管理来保证。
版本管理的工具软件很多,在众多的成熟产品和试验产品中,笔者推荐目前使用比较广泛、有较大用户前景且又能较易获得的版本管理器产品Microsoft公司的Visual SourceSafe(VSS)。VSS是Microsoft Visual Studio产品家族的一员,图8示出了使用Visual SourceSafe对FlashNow!进行版本管理的实况。
图8 使用Visual SourceSafe进行FlashNow!版本管理
运用VSS进行版本控制管理的非常有效而且代价较小的解决方案是:
在一台Windows NT服务器或者是一台较为独立的Windows98/95 PC上安装VSS6.0的服务器端软件,创建一个 ...
|
|
| 作者:不祥 bluejoe张贴于2004-04-25 11:43:49.0,共阅读4236次,回复1次 |
|
|
 |
白乔原创:艺术编程之C++篇[3]
|
|
| |
| 2 编写稳的代码——代码的鲁棒性
“没有最稳,只有更稳”,几乎没有一个程序是完全稳定的,简单的HelloWorld在内存吃紧的时候也可能会束手无策。但,我们的目的是让程序更稳定一点……
2.1 小心掉下去——错误陷阱
一切从小事开始,在C++语言里,存在着很多危险的错误陷阱,就像《雷电II》里面的漩涡,一不小心就会掉进去——只有学会正确地避免它们,才能将程序的危险性降低到最低限度。
以下内容介绍常见的错误陷阱:
2.1.1 奇怪的表达式(expression)
嗯,看一看下面的表达式:
int i = 100;
i += i = 10 + ++i + i + i++;
这是完全合法的一例表达式,知道该死的i会有什么样的值? 这是常见的面试题中的一种,许多老师和招聘单位总会拿出这样的表达式来整人并藉以炫耀,常常让人想到孔乙己:“你知道茴字有几种写法?”
写出这样的表达式是不负责任的,不同的编译器很有可能会得出不同的结果。不缺德的程序员应该避免这样的写法。否则,会有想象不到的灾难来临。
使用表达式时最好遵循以下规则:
不要过分地依赖于各操作符的优先权,在必要的时候使用括号()。如:
bool bValue = (i > j) && (i < 0 || j < 0);
不要过分地依赖于表达式的赋值顺序,如尽量少用++i,++j等。
if语句谨防“= ...
|
|
| 作者:不祥 bluejoe张贴于2004-04-10 11:55:09.0,共阅读4010次,回复2次 |
|
|
 |
java关于23种设计模式的有趣见解
|
|
| |
| java里23种设计模式,对VC设计来说应该一样通用。与大家共享之:
创建型模式
1、FACTORY
追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory
工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。
2、BUILDER
MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到MM我只要按对应的键,它就能够用相应的语言说出“我爱你”这句话了,国外的MM也可以轻松搞掂,这就是我的“我爱你”builder。(这一定比美军在伊拉克用的翻译机好卖)
建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。
3、FACTORY METHOD
请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Fact ...
|
|
| 作者:不祥 bluejoe张贴于2007-01-31 16:14:05.0,共阅读1557次,回复0次 |
|
|
 |
白乔原创:DOS时代-汉字的处理技术(四)
|
|
| |
| 5.小汉字库的使用
需要注意是,在建立小汉字库的同时,最好还要记住其中的排列顺序,这样才能方便地通过索引数组来选择字模信息。静态库的内容可以通过test. txt来观察,而动态库的内容却不能直观地显示,如果忘了的话,我们编制以下的小工具来实现浏览功能:
/*testl8. c*/
#include <stdio.h>
#include <graphics.h>
int GetBit(unsigned char c int n)
{
return ((c>>n)& 1);
}
main()
{
FILE*fp;
int i i1 i2 i3 x = 0 y = 0 gd = VGA gm = VGAHI;
long length;
char bit [32];
initgraph(& gd &gm "");
fp = fopen("testl.hzk" "rb");
fseek(fp 0 SEEK_END);
length = ftell(fp) /32L;
rewind(fp);
for(i = 0; i <length; i++)
{
f ...
|
|
| 作者:不祥 bluejoe张贴于2004-05-25 22:27:46.0,共阅读4767次,回复0次 |
|
|
 |
白乔原创:DOS时代-汉字的处理技术(二)
|
|
| |
| 6.特殊显示
UCDOS3. 0以后版本都向用户提供了特殊显示的功能,在使用特殊显示功能之前,必须先运行RDSL.COM(打印字库读取模块)和TX. COM(特殊显示模块)。
如同输入法模块一样,这两个程序同样也是TSR程序。它们修改了lOH号中断,预先截获特殊显示命令串并予以解释执行。
C语言调用特殊显示的命令格式如下:
printf ("\16[命令串] ");
具体的命令串格式请参考相关手册。显示特殊汉字是特显功能中的一个重要组成部分,其命令串包括许多控制命令:
①-x 横坐标
②|y 纵坐标
③@ 字形 指定汉字显示的字形,取值范围为A-X或a-t。如:L代表48 * 48点阵黑体字
④@ 宽,高 指定汉字显示的大小
⑤= 字库 选择汉字显示的字库编号,取值范围为0-33。如:2代表HZKSLHTJ字库文件。
⑥# 字号n 选择汉字的字号,字号范围为0-7,n可以为“+(正常)”、“-(扁体)”、“|(长体)”三种。
⑦& 行距
⑧^ 字距
⑨( 前景色
⑩) 背景色
如
printf("\16[{-100|100=2#0+ (14)4青春工作室}]");
将在(100100)处以红底黄字显示96 * 96点阵的黑体“青春工作室”五个字。
特显功能主要用来设计软件的封面,而在运行软件时最好不再依赖于中文系统,这就要求 ...
|
|
| 作者:不祥 bluejoe张贴于2004-05-23 18:17:43.0,共阅读3601次,回复1次 |
|
|
 |
白乔原创:DOS时代-汉字的处理技术(一)
|
|
| |
| 有很多这样的编者,他们永远不会在一本书中详尽地叙述一个看起来非常简单的例子。因为这样看来象是在浪费纸张。但是初学者永远是有的,在碰到困难的时候,他们很需要得到耐心的指导和帮助,而事实上他们所看到的都是些“高层次”的内容。每个编者都是从初学者开始的,但他们开始编书的时候,往往不屑于那些细节的问题,这是令读者很苦恼的。
汉字是怎样写到屏幕上来的,中断能用来干什么,还有怎样让你的程序支持鼠标的操作,在此我们开辟了系列讲座:汉字的处理技术、中断的处理技术、鼠标的处理技术,内容由浅至深,环环相扣,很符合初学者的特点。每一章节都提供有很好的例程,并且附上程序的真实运行结果。建议读者要读懂它们,并且能够“临摹”出一些类似的程序来。
关于本文的读者对象,要求能熟悉C语言的基本语法以及关于文件的基本操作,还有一点UCDOS的操作。“程序永远没有结束的时候”。希望读者朋友们能相互切磋,共同提高。汉字的处理技术(一)
许多读者朋友学会了基本的C语言编程以后,就开始对汉字技术产生了兴趣。本篇分别从中文状态、西文状态、文本方式、图形方式四种情形进行汉字处理的介绍。
一、中文状态下的汉字处理
1.第一个汉字处理程序
学习C语言首先都是从著名的“Hello world!”程序起步,它的程序清单如下:
/*test01l. c*/
main( )
{
printf("Helloworld! ...
|
|
| 作者:不祥 bluejoe张贴于2004-05-21 20:46:40.0,共阅读4143次,回复1次 |
|
|
 |
编程思想之于团队精神
|
|
| |
| 为什么需要有团队?答案其实很简单,就像我们编程,没有必有将所有功能放在一个函数里实现,这样不仅我们难以做到,还难以发现错误和难以维护。这就是一个人闭门造车、埋头苦干,他将很难把事情做好,且自身也难以进步。于是我们需要将程序模块化,把大的功能分成各个小的部分来实现。现在好了,由于各部分实现的功能较简单,就容易做到了,且发现错误和维护也比较容易了,因此我们需要团队!
但是,新的问题又来了。各个模块怎样才能很好地结合起来共同完成最后的功能哩?这就需要各个模块都要有接口,各个模块能否相互调用并很好地结合关键在于接口能否被外部所理解。于是我们的团队各个组或成员就需要交流,需要有好的交流方式,大家能否能否相互协作共同完成任务取决于大家能否充分地交流和相互理解!
好了,现在我们的各个模块都已做好了。最后要怎么来实现整体功能呢?各个模块单独执行吗?不是,我们需要一个main()函数来指挥和调用各个模块,让他们充分发挥自己的功能。所以我们的团队还需要一个Leader!
这就是编程,这就是生活。
|
|
| 作者:不祥 barco张贴于2004-05-16 12:34:57.0,共阅读2406次,回复4次 |
|
|
 |
巴比伦塔为什么会失败
|
|
| |
| 在一次从东方往西方迁徙的过程中,人们发现了苏尔美的地区的一处平原,并在那里定居下来。接着他们奔相走告说:“来,让我们制造砖块,并把它们烧好。”于是他们用砖块代替石头,用沥青代替灰泥(建造房屋)。然后他们又说:“来,让我们建造一座带有高塔的城市,这个塔将高达云霄,也将让我们声明远扬,同时,有了这个城市,我们可以居住在这里,再也不会分散在广阔的大地上了。”于是上帝决定下来看看人们建造的城市和高塔,看了以后,他说:“他们只是一种种族,使用一种语言,如果他们一开始就能建造城市和高塔,那以后就没有什么能难得倒他们了。来,让我们下去,在他们的语言里制造些混乱,让他们相互之间不能听懂。”这样,上帝把人们分散到世界各地,于是他们不得不停止建造那座城市。
-----创世纪,11:1-8
|
|
| 作者:不祥 barco张贴于2004-05-16 12:08:52.0,共阅读1522次,回复0次 |
|
|
 |
白乔原创:实战软件DIY[4]
|
|
| |
| 3. 实战策略
确定了FlashNow!的功能需求之后,接下来就是系统设计的工作。很简单,“怎样解决用户需求所提出的问题”,“在多种解决方案中,哪一种方案最合适”,如此如此,就是具体的系统设计的过程。系统设计一般分成概要设计和详细设计,大抵是“逐步求精”的思路。
如何设计我们的FlashNow!呢?不要慌,我们从系统流程设计、系统模块设计和系统类设计三个方面入手。
3.1 系统流程设计
FlashNow!包括两个重要的流程,用户可以直接启动FlashNow!,或者从一个.swf文件关联过去;另一种方式,用户可以从文件夹的Shell菜单中选取“启动FlashNow!动画浏览器(F)”来启动FlashNow!,对应于不同的系统入口,FlashNow!的系统流程设计如下:
流程一(浏览视图):
流程二(查看视图):
流程很简单,但愿软件实现起来也同样的简单。
3.2 系统模块设计
总体来说FlashNow!可以分成以下几大模块:
² Flash动画播放控制模块
包括动画播放(Play)、停止(Stop)、跳转(Seek)、拖放(Drag)、放大(ZoomIn)、缩小(ZoomOut)、全屏显示(FullScreen)模块;包括动画循环播放、画面质量和动画背景色设置等模块;
² Explorer文件 ...
|
|
| 作者:不祥 bluejoe张贴于2004-04-25 11:40:47.0,共阅读3040次,回复0次 |
|
|
 |
白乔原创:实战软件DIY[3]
|
|
| |
| 2. 实战部署
编码?别急。对程序员来说,编码是很惬意的事情(就象碰到咖啡和啤酒一样),但记住:不要急着编码。做好完整的实战部署,才能打好仗。
2.1 问题定义
为什么要开发FlashNow!?开发FlashNow!真的有必要吗?FlashNow!系统的开发真正可行吗?下面我们来具体分析一下需求产生的基本背景。
也许你使用过acdsee,很好的东西,acdsee是个很成功的案例,大量的收藏图片,合法的,或者不合法的,你都会想到使用acdsee来查看它,这就是acdsee成功的地方。那么,现在流行什么了?现在(实际上是去年、或者前年)流行起Flash动画了,追美眉的男生一定很清楚,阿贵系列的,snoopy系列的,流氓兔系列的,ShowGood MTV,还有更多的无厘头的MTV,都纷纷采用Flash动画格式,去网上随便走走,活灵活现的Flash广告比中关村的ITer还要多。
总之,Flash动画很流行了。Flash作为一种成熟的流式技术,给动画带来了丰富的声音、快的速度和吸引人的交互性,Flash让动画活起来了。有Flash查看工具吗?有的,市场上流行的动画浏览器不少,有一款国外的产品SwfBrowser就很不错。怎么说呢,利用ShockwaveFlash控件,通过VB就完全可以做出一个象模象样的Flash动画浏览器来。作为Flash的缔造者,Macromedia也提供了界面 ...
|
|
| 作者:不祥 bluejoe张贴于2004-04-25 11:39:15.0,共阅读2550次,回复0次 |
|
|
 |
白乔原创:实战软件DIY[2]
|
|
| |
| 1. 实战目标
我们到底要做什么?“一副图画胜过千言万语”,图1为FlashNow!的最终用户安装界面(在本文的后续内容我们将学习到软件安装程序的制作)。
图1 FlashNow!动画浏览器安装界面
再也简单不过了,我们要做的是一个Flash动画浏览器。图2和图3是软件运行界面的2个不同风格的快照(snapshot),图2是FlashNow!的查看视图,图3是FlashNow!的浏览视图,一个类似于资源浏览器的界面。
图2 FlashNow!的查看视图
图3 FlashNow!的浏览视图
程序跑起来会有2个界面,实战目标应该清楚了,FlashNow!实际上就是一个类似于acdsee双界面的Flash动画浏览器。
“麻雀虽小,五脏俱全”,再简单的软件都必须有详尽的帮助文档。如图4为FlashNow!的帮助界面。看来我们的实战内容还应包括帮助文档的编写。
图4 FlashNow!的帮助界面
看来要学的东西还真的不少,那我们赶快开动吧!
|
|
| 作者:不祥 bluejoe张贴于2004-04-25 11:38:07.0,共阅读2659次,回复0次 |
|
|
 |
白乔原创:艺术编程之C++篇[4]
|
|
| |
| 3 编写有用的代码——代码的可用性
中国的程序员都不大喜欢公开代码,自己写的程序模块别人很难也很少有机会用得上,这是一件很奇怪的事情。每个自诩为很“牛气”的程序员总在花费相同的时间做着和别人重复的事情。很少人在自己拷贝来的代码中声明别人的版权,这确实是太奇怪了。
这样的事情发生,一方面与思维习惯有关,对国人来说,程序是用来使自己出名的,而不是使别人出名的,程序的源码和资料别人当然别想拿得到;另一方面,这样的情况与国人程序的质量有关,别人的程序拿过来,用不了,或者用得很不舒服,还不如自己重新写一个,其结果,当然会造成闭门造车,“百家争鸣”——而这绝对不是好事。
本章节引导你如何不浪费时间(自己的,和别人的)重复劳动。
3.1 别的系统可以用吗?——可移植性(portability)
你做的程序在别的平台也可以用吗?“应该没问题”,这是大多数程序员的回答。之所以“应该”,是因为程序员心里没底,在程序开发过程中程序的移植性一直是个门外话题。这样的程序拿出来,正如将中国的演员明星拿到好莱坞,让人心里总是没底。
以下是一些提高程序的可移植性的建议:
将“设备相关程序”与“设备无关程序”分开。正如Java的虚拟机与.class字节码文件其实就是将一个完整的程序分成两部分;
将“功能模块”与“界面模块”分开。如果开发一个网络服务端,你的程序很有可能不在Windows里运行,而 ...
|
|
| 作者:不祥 bluejoe张贴于2004-04-10 12:22:34.0,共阅读2752次,回复0次 |
|
|
 |
白乔原创:艺术编程之C++篇[2]
|
|
| |
| 1 编写美的代码——代码的艺术性
1.1 何为“代码的艺术性”?
何为“代码的艺术性”?大凡提及“艺术性”的,总离不开“享受”。代码的艺术性也是这样,当你编程的时候,或者回首看自己的代码的时候,或者你的代码落在某个得意洋洋的程序员手中的时候,你,或者得意洋洋的他,突然感觉读其中那么一段代码完全是一种享受,那么,你的代码就具有了“艺术性”。
“艺术性”不是说来就来的,艺术需要“与生俱来的修养”。对于代码来说,这些修养则主要体现在你的编程风格。
1.2 编程风格
1.2.1 使用注释(comment)
“如果你的程序不值得注释,那么它也很可能也不值得运行”。确实是这样,不要让自己象那些古板的程序员一样,洋洋洒洒几页代码,却从来不写一句注释。
C语言的注释符为“/*…*/”。C++语言中,程序块的注释常采用“/*…*/”,行注释一般采用“//…”。以下是注释通常适用的场合:
版本、版权声明;说明代码的来源、目的与内容。以下的代码Windows程序员一直都在用,它摘自于windows.h头文件:
/*
Copyright (c) 1985-1997, Microsoft Corporation
Module Name:
windows.h
Abstract:
Master include file for Windows applicati ...
|
|
| 作者:不祥 bluejoe张贴于2004-04-10 11:50:42.0,共阅读2608次,回复0次 |
|
|
 |
白乔原创:艺术编程之C++篇
|
|
| |
| 0 引言
做“编程的学问”?这绝不是小题大做。中国的程序员有的是,但他们程序的质量往往并不能和他们的智商相提并论。中国有句老话叫“踏踏实实做事,认认真真做人”,本文不想提太多的时髦的软件工程理论,而只想就程序员的基本功——“编程”一一展开篇幅,让那些聪明的程序员从小事做起,从点点滴滴做起,写出更有用的程序。
本文着重讨论软件编程的艺术(“不要和我谈艺术”,谁说的?!),作为例子,本文将选取高结构化的C++语言作为实现语言。
本文部分内容参考《高质量程序设计指南——C++/C语言》(林锐 著)和Rational Unified Process文档《Java 编程指南》(Scott Ambler 著),感兴趣的读者可以和笔者联系。
0.1 何为“高质量的软件”——软件的质量属性
何为“高质量的软件”?一个功能性很强的软件并不一定高质量,同理,一个很厉害的程序员往往也不是“最好的”,“高处不胜寒”的程序员往往是最寂寞的,对于民族程序员群体来说,他们正如流星一样耀眼,但是他们也正如流星一样短暂、一样悲哀……
一个程序员的代码,不能为他人所读懂,不是一件光荣的事。这样的程序可读性也见一斑,更谈不上“高质量”了(可笑的是,总有这方面的“牛人”藉以自己“高深”的程序而自豪)。
软件的质量属性很多,以下是最突出的,也是最容易让人所理解的:
艺术性(artistry)。你 ...
|
|
| 作者:不祥 bluejoe张贴于2004-03-04 15:29:19.0,共阅读2995次,回复1次 |
|
|