随笔分类 -  开软软件及文档

上一页 1 2 3 4 5 6 7 8 9 ··· 17 下一页
开软软件及文档
摘要:泛型式编程简谈 冒号重新开讲:“你们会不会经常遇到这种情景:一遍又一遍地写着相似的代码,有心将其归并,却因种种原因无法践行。” 逗号心有戚戚焉道:“是啊,有时明明两个函数的实现几乎一模一样的,就因为某些参数不匹配,无法合而为一。” “有一种编程范式可以解决这个问题,它打破了不同数据结构之间的壁垒,让你的代码不再臃肿,这——就是泛型编程。”冒号的语调和说辞不免令人联想到电视上的减肥广告。。。 算法串联数据,如脊贯肉;数据实化算法,如肉附脊。。。 泛型编程是算法导向(Algorithm-Oriented)的,即以算法为起点和中心点,逐渐将其所涉及的数据结构内涵模糊化、外延扩大化,从而扩展算法的适用范围。。。 在数学家眼里,思想是鸡,结论是蛋。。。 阅读全文
posted @ 2008-08-12 08:31 广陵散仙(www.cnblogs.com/junzhongxu/) 阅读(256) 评论(0) 推荐(0)
摘要:元编程简谈 引号忽然想起一事,问道:“有一本名为《C++模版元编程》的书,既然提到了模板,想来也属于泛型编程吧?”。。。 “元程序将程序作为数据来对待,能自我发现和自我赋权,有着其他程序所不具备的自觉性、自适应性和智能性,可以说是一种最高级的程序。它要求编程者超越常规的编程思维,在一种崭新的高度上理解编程。想象一下,”冒号激情勃发,“如果有一天机器人能自我学习、自我完善,甚至能生产机器人,实现‘智能繁衍’,是不是很美妙?”。。。 阅读全文
posted @ 2008-08-12 08:30 广陵散仙(www.cnblogs.com/junzhongxu/) 阅读(182) 评论(0) 推荐(0)
摘要:餐馆里的编程范式 叹号摘下眼镜,揉了揉眼:“范式再好,多了也难免有些审美疲劳。” 逗号也搓着太阳穴:“现在脑子被灌得沉甸甸的。” “彼此彼此!你们的脑袋闹涝灾,我的喉咙闹旱灾。”冒号说着,拿起矿泉水瓶一饮而尽。 大伙听着怪别扭的,这不是拐着弯说我们脑子进水了吗? 冒号清了清嗓子:“为尊重民意,也为避免消化不良,大家先放松一下。下面我们来个情景编程。”。。。 阅读全文
posted @ 2008-08-12 08:28 广陵散仙(www.cnblogs.com/junzhongxu/) 阅读(222) 评论(0) 推荐(0)
摘要:AOP简谈 引号重开话题:“OOP方兴未艾,AOP又开始崭露头角。AOP算是OOP的一种分支、一种补充还是一种超越?”。。。 “准确地说,抽象是前提,分解是方式,模块化是结果。”冒号很讲究精确,“大家记得庖丁解牛的故事吧?在常人眼中复杂的牛体,庖丁经过抽象,已目无全牛,及至提刀分解,自是游刃有余。待牛如土委地,模块化既成。”。。。 问号提问:“抽象与分解的原则是什么?” 冒号作了个V字:“两条:单一化,正交化。每个模块职责明确专一,模块之间相互独立,即高聚合低耦合。。。 何谓横切关注点?顾名思义,乃是与程序的纵向主流执行方向横向正交的关注焦点。。。 对程序员来说,英语也是一门计算机语言。。。 阅读全文
posted @ 2008-08-12 08:28 广陵散仙(www.cnblogs.com/junzhongxu/) 阅读(157) 评论(0) 推荐(0)
摘要:编程范式总结 众人落座之后,冒号开始了第四课的讲授:“我们已经涉及了不少编程范式,虽只是走马观花,亦可管窥一斑。现用表格归纳如下——”。。。 编程水平的提升之道是:在实战中演练招法,在招法中领会心法,心法反过来提升招法,进而提高实战水平,如此循环往复呈螺旋式上升过程。正所谓熟能生巧,巧能生通。。。 软件工程中有个迭代开发法,本班则采用迭代学习法:即在具体知识与抽象理论之间进行折返式学习。当然这种迭代不是机械式的重复,而是增量式的循环。。。 阅读全文
posted @ 2008-08-12 08:27 广陵散仙(www.cnblogs.com/junzhongxu/) 阅读(241) 评论(0) 推荐(0)
摘要:讨论下一步教学计划 一阵商讨之后,众人似乎未能达成共识。冒号见状,便让他们一一道来。。。 网页的迷人之处就在于,能够用精美的画皮来包裹冗长低效的代码。。。 无论干哪一行,要胜任愉快,离不开四样东西:才能 、兴趣 、方法和努力。没有才能则难以胜任;没有兴趣则难以愉快;没有方法则事倍功半;没有努力则一事无成。。。 阅读全文
posted @ 2008-08-12 08:26 广陵散仙(www.cnblogs.com/junzhongxu/) 阅读(198) 评论(0) 推荐(0)
摘要:关于数据类型 待教室平静下来,冒号再度开腔:“在谈论动态语言之前,最好先澄清一下它与动态类型语言之间的区别。”。。。 数据类型既有针对机器的物理意义,又有针对人的逻辑意义。。。 静态类型检查类似‘疑罪从有’的有罪推定制——在被证明合法之前是非法的,动态类型检查类似‘疑罪从无’的无罪推定制——在被证明非法之前是合法的。。。 阅读全文
posted @ 2008-08-12 08:25 广陵散仙(www.cnblogs.com/junzhongxu/) 阅读(221) 评论(0) 推荐(0)
摘要:动态语言简谈 叹号急不可耐地问:“现在可以谈动态语言了吧?” 冒号感言:“曾几何时,动态语言还只是陪太子读书的角色,那时候它们的名字是‘脚本语言’。近来却迅速崛起,俨然有与静态语言分庭抗礼之势。”。。。 程序是为终端用户服务的,而脚本是为程序员服务的。。。 动态语言秉承的一个理念是:优化人的时间而不是机器的时间,因此为提高人的生产率而不惜牺牲部分程序的性能。。。 两类语言的风格的确大相异趣:待静态语言披盔戴甲、备马抬枪之际,动态语言已衣袂飘飘,长剑出手了。。。 当脚本语言穿上动态语言的彩衣,昔日不起眼的毛毛虫便羽化成碟,开始飘舞在众人追逐的目光之中。但静态语言也绝不会淡出人们的视线,它如矫健的苍鹰,依然有搏击长空的雄力。程序员只要保持严谨的作风和开放的心态,既有稳如泰山的马步,又有一跃凌空的飞腿,静如处子,动如脱兔,如履平地般游走于高高的梅花桩上,绝无跌落之虞。。。 阅读全文
posted @ 2008-08-11 16:53 广陵散仙(www.cnblogs.com/junzhongxu/) 阅读(215) 评论(0) 推荐(0)
摘要:讨论C语言 , C++ 和D语言 问号忙问:“您打算比较哪些主流语言呢?”。。。 关于C语言,前面多次提到。这是一把历久弥新的宝剑,一旦出鞘,依旧寒光逼人,锋利无俦。有了它,便如战将有了佩剑,平添一分独闯敌营的胆气。。。 能力越大,责任越大,风险越大。此话既适用于编程语言,也适用于程序员。。。 指责C++不是100%OOP的说法更是荒谬之极。OOP又不是金子,含量越高越好。试图把一切都装进OOP的箱子里的想法无异于削足适履。。。 C与C++同为系统语言,决定了它们的理念是:优化机器的时间而不是人的时间,优化机器的记忆而不是人的记忆;假设编译器是愚蠢的而程序员是聪明的,因此赋予程序员更多的权利、义务与责任。。。 C++是匹无辔无鞍的野马,看似桀骜不驯,若能顺性而御,必能足踏飞燕,行千里而不劳。。。 阅读全文
posted @ 2008-08-11 16:52 广陵散仙(www.cnblogs.com/junzhongxu/) 阅读(188) 评论(0) 推荐(0)
摘要:关于编程语言的讨论 教室里,学员们正热火朝天地讨论着流行的编程语言。。。 通禅悟道者拈花不语,坐井观天者蛙鸣鼓噪。。。 如果说编程范式是一种文化,那么编程语言更像是一种宗教——尽管它本不该是。。。 对待一门语言的态度应该是:与其抱怨争执,不如扬长避短。。。 对一种语言最大的批判是发明一种与此语言有类似功用的新语言;从另一个角度看,发明一种语言也是对先前语言的一种最高的赞美。。。 过分拔高一种语言与抹煞语言之间的差别是两种极端,皆为秕言谬说。。。 语言为本,余者为末。许多人偏偏本末倒置,常常为在IDE、框架、设计工具等中挖掘到某一新功能而欣喜不已,或者津津乐道于各种语言的优劣高下,却对正在使用的语言中大量的宝藏视而不见。这些人若有幸拜关公为师,他们最艳羡的一定他的赤兔马和青龙偃月刀,或许还会抹红脸蓄长须什么的,就是不太愿学他的盖世武功。。。 阅读全文
posted @ 2008-08-11 16:52 广陵散仙(www.cnblogs.com/junzhongxu/) 阅读(219) 评论(0) 推荐(0)
摘要:讨论Java和C# 逗号提出:“现在应该到了Java时间吧。” 冒号顺水推舟:“下面谈论的重心从刚才的系统语言转到平台语言——Java和C#。”。。。 这既是程序员之幸——语言之间可以互相取长补短,共同进步;也是程序员之不幸——往往不得不在众多语言中作艰难选择,或者多花精力学更多的语言。。。 以前人们试图在语言的威力(power)和生产率(productivity)中寻求最佳平衡点,现在似乎更想鱼与熊掌兼得。。。 Java的目的是让一种语言在多种平台上运行,而C# 的目的是让多种语言在一种平台上运行。 两个平台语言,一个重在语言,让语言向平台扩散;一个重在平台,让平台来凝聚语言。。。 编程语言绝非象牙塔中之物,实乃技术和商业合力推动的结果。。。 C++提供了一马平川的大路,也提供了陷阱密布的小道;Java则在大路上铺设水泥,同时封锁了捷径小道;C#同样填平了大路上的坑坑洼洼,但把一些小道上‘此路不通’的牌子偷偷改成了‘此路危险’。 阅读全文
posted @ 2008-08-11 16:45 广陵散仙(www.cnblogs.com/junzhongxu/) 阅读(235) 评论(0) 推荐(0)
摘要:讨论VB、Delphi和JavaScript 稍事休息后,冒号切换了话题:“接下来简单聊聊Visual Basic和Delphi。”。。。 在以网络为中心的企业解决方案中,作为平台语言的Java和C#是两棵比肩而立的大树,在它们周围生长着郁郁葱葱的动态语言的小草。。。 待友之道,贵在放大其优点而缩小其缺点,对待语言亦当如此。其实JavaScript的强大和优雅是超乎想象的,它如一只神奇的魔袋,乍看平淡无奇,却总能变出意想不到的宝贝。。。 前台编程涉及面专,绚丽花哨的界面更容易让初涉编程者产生成就感;后台编程涉及面广,需要深厚的技术积累和缜密的设计思维;底层编程涉及面深,给人神秘莫测之感。然大道相通,难者亦易,易者亦难。。。 阅读全文
posted @ 2008-08-11 16:45 广陵散仙(www.cnblogs.com/junzhongxu/) 阅读(224) 评论(0) 推荐(0)
摘要:软件设计中的抽象思维 冒号健步走进教室,学员们立刻正襟危坐,进入战备状态。。。 语言是形,范式是神,这次我们将二者融合,争取做到形神兼备。。。 我们的重心不在知识的枝节,而在知识的本源。因此无论讨论Java还是OOP,我们不追求系统和全面,但力求从不同的选点、角度和深度来展示知识的活性。。。 那么什么是抽象呢?不妨概括为:去粗取精以化繁为简;由表及里以异中求同。再精炼些,抽象就是作减法和除法。。。 软件设计者的任务是将复杂混沌的现实世界映射到精确严格的虚拟世界,要完成这种多对一的映射,抽象无疑是必由之路。。。 这种通过规范使代码的功能与实现相分离的方法称为规范抽象。。。 阅读全文
posted @ 2008-08-11 16:44 广陵散仙(www.cnblogs.com/junzhongxu/) 阅读(317) 评论(0) 推荐(0)
摘要:讨论Perl、PHP、Python和Ruby 语言 “剩下四种动态语言,我们将之归为后台脚本语言。”冒号说着画了张图表。。。 Perl凝练晦涩,Python优雅明晰,Ruby精巧灵动,PHP简明单纯。。。 叹号——没有最好的语言,只有最合适的语言。 逗号——没有糟糕的语言,只有糟糕的程序员。 问号——没有一种语言是万能的,只会一种语言是万万不能的。 引号——废除对语言的宗教信仰,建立对语言的哲学思维。 句号——编程就是在人脑和电脑之间寻找最佳平衡点的过程。。。 阅读全文
posted @ 2008-08-11 16:44 广陵散仙(www.cnblogs.com/junzhongxu/) 阅读(255) 评论(0) 推荐(0)
摘要:介绍抽象数据类型 问号抢着说:“我知道了:过程抽象的结果是函数,数据抽象的结果应该是数据类型。”。。。 数据结构强调具体实现,侧重应用;抽象数据类型强调抽象接口,侧重设计。。。 接口是纲,实现是目。纲若不举,目无以张。。。 人们多采取‘整体设计以数据为中心,局部实现以算法为中心’的方针,以增强系统的可维护性。。。 数据类型的接口与实现的分离,有利于开发时间的分离以及开发人员的分离。。。 抽象——接口与实现相分离;数据——以数据为中心组织逻辑;类型——单纯而定义良好的概念。。。 抽象——尤其是数据抽象——才是OOP的核心和起源,尽管它们并非OOP的专利。。。 只有贯彻ADT思想,设计出来的类才会是‘万人迷’:有优雅的外形——抽象,有丰富的内涵——数据,有鲜明的个性——类型。。。 阅读全文
posted @ 2008-08-11 16:43 广陵散仙(www.cnblogs.com/junzhongxu/) 阅读(267) 评论(0) 推荐(0)
摘要:OOP中的封装与信息隐藏 “用广东话说,真是有型有料又有性格啊!”叹号啧啧连声,“这哪里是在设计软件,分明是在设计心仪的对象嘛。”。。。 广义的封装仅仅只是一种打包,即package或bundle,是密封的但可以是透明的。。。 狭义的封装是在打包的基础上加上访问控制(access control),以实现信息隐藏。。。 抽象意味着用户可以从高层的接口来看待或使用一类对象,而不用关心它底层的实现,而黑盒封装意味着用户无权访问底层的实现。。。 访问控制不仅是一种语法限制,也是一种语义规范。。。 “通,则大处圆融合一而小处各具其妙;不通,则大处千变万化而小处无所分别。”冒号又打起了禅语 ,“领会OOP的精髓绝非一年半载之功,但若以抽象与封装为钥,必可早日开启通达之门。。。” 阅读全文
posted @ 2008-08-11 16:37 广陵散仙(www.cnblogs.com/junzhongxu/) 阅读(230) 评论(0) 推荐(0)
摘要:适应变化的能力是衡量软件质量的重要标准 第七课刚一开堂,冒号就提了一个问题:“如果把一个Java程序中所有的private关键字换成public,请问该程序还能工作吗?”。。。 软件的难点有二:其一是逻辑的复杂,其二是需求的变化。许多程序员看重前者而看轻后者,大部分时间花在寻求解决方案上,而不是在选择解决方案上。。。 软件之软,体现在适应变化的能力。。。 软件的变化大致分两种:一种是出于内在需求而作的结构性变化,通常以改善软件质量为目的,即所谓的重构(refactoring);一种是出于外在需求而作的功能性变化,通常以满足客户需要为目的。。。 信息隐藏虽能将抽象接口与具体实现分离,但仍然封装在同一类中。桥梁模式则让二者彻底解耦(decouple),增强了对变化的适应力,具有更大的灵活性和可扩展性。。。 阅读全文
posted @ 2008-08-11 12:02 广陵散仙(www.cnblogs.com/junzhongxu/) 阅读(245) 评论(0) 推荐(0)
摘要:软件接口服务的主客双方应遵循的准则 叹号幡然反省:“以前我们做OOP编程时,总是专注于如何利用其他类来解决问题,而较少考虑自己设计的类对其他类的影响。”。。。 作为服务的提供者,最重要的是讲诚信。首先,服务要有可靠性,不能阳奉阴违——即接口必须履行它的承诺;其次,服务要有稳定性,不能朝令夕改——即接口一经公开,不得随意变更。。。 此外,高质量的服务还要有纯粹性和完备性。Unix有一个哲学:‘一个程序只做一件事,但要做好’。用在OOP上,则是:‘一个类只提供一套服务,但要完善’。。。 关键不在于服务数量的多寡,而在于服务的一致性和关联性。。。 作为服务的享受者,最重要的是讲规矩。。。 以违背服务初衷的方式享受的服务,如同盛夏的豆腐——即使没有变质,也是不能持久的。。。 阅读全文
posted @ 2008-08-11 12:00 广陵散仙(www.cnblogs.com/junzhongxu/) 阅读(186) 评论(0) 推荐(0)
摘要:OOP中的访问控制 问号提问:“信息隐藏是否专指用private来控制访问?”。。。 初级程序员的理想是为所欲为——能用编程解决一切问题;中级程序员的理想是尽善而为——追求最佳解决方案;高级程序员的理想是有所为有所不为——重在整体设计的选择,能抵制局部技巧的诱惑;最高理想是无为而无不为——无论宏观设计还是微观实现,均非刻意选择,却自然合度。。。 从软件应变的角度来看,访问控制是对修改所带来的副作用的控制。。。 客户意识对一个程序员的重要性,丝毫不亚于对一个企业的重要性。。。 千万不要为追求廉价的重用而轻易扩大接口范围,莫以自身之便而致客户之不便,莫以一时之便而致长期之不便。。。 阅读全文
posted @ 2008-08-11 11:58 广陵散仙(www.cnblogs.com/junzhongxu/) 阅读(268) 评论(0) 推荐(0)
摘要:Introduction This tutorial could well be the simplest windows program you could ever write. All you need to understand this tutorial is the basics of windows messaging. This tutorial is about the CB... 阅读全文
posted @ 2008-08-11 09:25 广陵散仙(www.cnblogs.com/junzhongxu/) 阅读(224) 评论(0) 推荐(0)

上一页 1 2 3 4 5 6 7 8 9 ··· 17 下一页