Anders Liu (lover_P)的.NET天空

传播知识基于掌握知识,但又高于掌握知识。我要做一个掌握很多知识的传播知识的人!

Anders Liu
Anders Liu的公告


我写的书


购买途径:
最近评论
mldstk:wow power leveling
l763820708:有-在17号端口
txfast:这些话说的比较实际,其实说学习能力强只是一句空话,因为刚进公司,谁能够认可你的学习能力强,谁又能否定一个人的学习能力?
Wind_Eagle:想不到情人节还有心思写博客呀!不错,我有同感 !
heaso14:照着做了 还是有问题啊...

1>MSVCRT.lib(crtexew.obj) : error LNK2001: 无法解析的外部符号 _WinMain@16
1>C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\a\PureC\Rele……
文章分类
收藏
    相册
    MVP Logo
    文章用图1
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 [原创]程序结构随想收藏

    新一篇: [原创]C# 2.0对现有语法的改进 | 旧一篇: [原创]使用Visual Studio .NET编写纯C程序的提示

    程序结构随想

    作者:lover_P


    [自序]

        本来打算这一段时间好好补补算法知识,多写点程序而少写些文字。但今天突然对程序结构有所感悟,不由得写下了这篇文章。

    [正文]

        所谓程序结构,就是指通常人们所说的“结构化编程”、“面向对象编程”等等。通常,最常见的程序结构包括:

    • 非结构化程序
    • 结构化程序
    • 面向对象程序

        当然,还有很多程序结构如“面向组件”程序和“面向方面”程序等等,这些是我所不了解的,不便细说。通常一提到非结构化程序,人们自然而然地会想起汇编语言程序;同时,C语言也可以编写一些非结构化的程序。而结构化程序就多得很了,几乎在高级语言刚出现的时候,所有的高级语言都是结构化的,如FORTRAN、Pascal、C等等。至于面向对象程序,我就更不用说了,现在漫山遍野都是面向对象编程的声音,这类编程语言也有很多,如C++(它并不是纯面向对象的)、Java、C#等。

        我这里所想到的,并不是这些语言的应用,而是这些程序结构(以及支持它们的编程语言)之间的辩证关系。

        非结构化程序为当今很多程序员所不齿,认为这是一种不好的编程风格。但是,以汇编语言为代表的非结构程序编程语言却是最能直接表达机器行为的,用这些语言编写的这些程序,通常可以以最高的效率运行在特定的平台上。当然,这也要冒着最大的风险并且付出最大的努力。但是,非结构化程序也可以体现出其结构化的一面。譬如,几乎所有的汇编语言都提供call/retPROC/ENDP等语言构造以支持结构化程序的编写。因此,在为了效率而不得不使用汇编语言编写程序的时候,我们应该在追求效率的同时尽量地使用这些语言特性,使得程序更具结构化,这对于代码维护来说是相当重要的。即便你工作在一个非常低级的平台上,该平台的汇编语言不支持call/ret,我们也应该以明确的代码通过利用跳转指令来达到结构化目的。

        在结构化程序设计语言出现伊始,人们就为其深深吸引。确实,明确的代码意图、清晰的程序结构使得程序设计不再是一种煎熬,对于代码维护人员来说更是一个福音。因此,结构化程序设计思想以迅雷不及掩耳之势席卷人们的思维,而结构化程序设计语言更是如雨后春笋般地出现。但是,在大家盲目地追求结构化时,我认为,我们应该根据所解决问题的范畴进行灵活的思辨。如果我们为了追求更低的风险和更高的可维护性而使用结构化程序设计语言来书写底层应用,我们应该考虑在结构化程序中引入非结构化思想,譬如,使用全局变量避免函数调用中的传参,使用宏来代替函数调用以减少调用开销等等。当然,这些都是很危险的,要求有很高的语言控制能力才能够完成。另外,如果我们希望我们的代码具有更高的可重用性,我们还可以考虑把面向对象的思想引入到结构化程序设计中,如通过结构体等来保存数据,在一个单独的库中对某一特定类型的结构体定义特定的操作等等。当然,这也是危险的,我们不应该在结构化程序中过度地模拟面向对象程序结构,否则会适得其反,使代码变得一团糟,毫无可读性。

        最后,面向对象席卷大地20余年了,其思想可谓深入人心。它是目前最先进的程序设计结构了(其他如“面向组件”、“面向方面”等等不过是对面向对象程序设计的补充和完善)。但是,在其中我们还是能够找到非面向对象的一面。通常,一个对象只有其公共成员和接口成员才是真正为“面向对象”所用的,在它的内部,却相当于一个小型库,其间不乏结构化程序甚至非结构化程序。譬如,我们通常用一些私有成员函数(方法)来辅助公共成员完成特定任务。那么,这些成员便构成了一个对象中的结构化程序,有时,为了效率的考虑,我们将一些数据实现为私有数据成员,好像这个小型库中的全局变量一样,这样在私有成员函数之间互相调用时,就可以减少一些传参的动作。这不就是非结构化思想了么。

        上面一同胡侃,大概地说了说在某种程序结构中对另外一种或几种程序结构的体现。我们在实际的编程中,应该根据所要解决的问题灵活地选择一种程序结构,并灵活地运用语言特性适度地体现其他结构的思想,以达到效率和可读性、可维护性之间的最佳平衡。当然,这是一个权衡的过程,也是要求程序写作者有很强的程序写作能力的。还是要多多锻炼,尤其注意锻炼思维的灵活性。

    发表于 @ 2004年08月21日 07:35:00|评论(loading...)|编辑

    新一篇: [原创]C# 2.0对现有语法的改进 | 旧一篇: [原创]使用Visual Studio .NET编写纯C程序的提示

    评论

    #大名不敢 发表于2004-10-08 21:13:00  IP: 218.17.84.*
     
     写的不错,只会写代码而不会及时回味贯通到再创造的学习是低层次,低效的。 你的blog有不少是很有特色的自己的领悟,我会才来看看的,谢谢
    #loverP 发表于2004-10-20 13:38:00  IP: 219.239.98.*
    谢谢你的支持!非常感谢!
    但最近好累,好忙……都没有时间写东西~~
    #mry 发表于2004-11-26 23:13:00  IP: 211.87.214.*
    什么东西,哥们学过计算机吗?学学软件体系结构,看看现在的软件界在研究什么,别井底之蛙了。
    #lover_P 发表于2004-12-03 13:55:00  IP: 218.247.132.*
    楼上大哥批评的是,我是计算机专业的,但我不知道我这样说是丢自己的脸还是丢中国教育的脸。
    还有一点我想说的是,为什么制造出原子弹的理论只是e=mc^2这么一个简单的公式?任何复杂表象的背后实际上只是一个简单的原理驱动着的。那些“企业级架构”细想进去不就是那么几个简单的思想么?
    科学技术的发展趋势不是越来越复杂,而是越来越简单……
    我是坐在井底,看不到天空的辽阔,但我不是蛙,我是任劳任怨的矿工,只求给别人不用下井的机会。
    #cyber 发表于2005-03-19 10:40:00  IP: 219.239.98.*
    哈哈~就差说自己是苦农了~去井边喝水~结果掉进去上不来了~
    #mry_SB 发表于2005-04-26 10:20:00  IP: 61.144.76.*
    總覺得自己什麼都知道的人實際是是世界上最無知的人
    #我过路的。。。。 发表于2005-05-31 23:05:00  IP: 61.186.252.*
    我是来寒楼上ID的。。。。。

    0_o
    #路过…… 发表于2005-06-07 15:50:00  IP: 61.186.252.*
    quote:
    mry_SB 发表于2005-04-26 10:20 AM
    總覺得自己什麼都知道的人實際是是世界上最無知的人

    =====
    你知道就好~!
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © Anders Liu