摘要:
讨论C语言 , C++ 和D语言
问号忙问:“您打算比较哪些主流语言呢?”。。。
关于C语言,前面多次提到。这是一把历久弥新的宝剑,一旦出鞘,依旧寒光逼人,锋利无俦。有了它,便如战将有了佩剑,平添一分独闯敌营的胆气。。。
能力越大,责任越大,风险越大。此话既适用于编程语言,也适用于程序员。。。
指责C++不是100%OOP的说法更是荒谬之极。OOP又不是金子,含量越高越好。试图把一切都装进OOP的箱子里的想法无异于削足适履。。。
C与C++同为系统语言,决定了它们的理念是:优化机器的时间而不是人的时间,优化机器的记忆而不是人的记忆;假设编译器是愚蠢的而程序员是聪明的,因此赋予程序员更多的权利、义务与责任。。。
C++是匹无辔无鞍的野马,看似桀骜不驯,若能顺性而御,必能足踏飞燕,行千里而不劳。。。 阅读全文
摘要:
讨论Java和C#
逗号提出:“现在应该到了Java时间吧。”
冒号顺水推舟:“下面谈论的重心从刚才的系统语言转到平台语言——Java和C#。”。。。
这既是程序员之幸——语言之间可以互相取长补短,共同进步;也是程序员之不幸——往往不得不在众多语言中作艰难选择,或者多花精力学更多的语言。。。
以前人们试图在语言的威力(power)和生产率(productivity)中寻求最佳平衡点,现在似乎更想鱼与熊掌兼得。。。
Java的目的是让一种语言在多种平台上运行,而C# 的目的是让多种语言在一种平台上运行。
两个平台语言,一个重在语言,让语言向平台扩散;一个重在平台,让平台来凝聚语言。。。
编程语言绝非象牙塔中之物,实乃技术和商业合力推动的结果。。。
C++提供了一马平川的大路,也提供了陷阱密布的小道;Java则在大路上铺设水泥,同时封锁了捷径小道;C#同样填平了大路上的坑坑洼洼,但把一些小道上‘此路不通’的牌子偷偷改成了‘此路危险’。 阅读全文
摘要:
讨论VB、Delphi和JavaScript
稍事休息后,冒号切换了话题:“接下来简单聊聊Visual Basic和Delphi。”。。。
在以网络为中心的企业解决方案中,作为平台语言的Java和C#是两棵比肩而立的大树,在它们周围生长着郁郁葱葱的动态语言的小草。。。
待友之道,贵在放大其优点而缩小其缺点,对待语言亦当如此。其实JavaScript的强大和优雅是超乎想象的,它如一只神奇的魔袋,乍看平淡无奇,却总能变出意想不到的宝贝。。。
前台编程涉及面专,绚丽花哨的界面更容易让初涉编程者产生成就感;后台编程涉及面广,需要深厚的技术积累和缜密的设计思维;底层编程涉及面深,给人神秘莫测之感。然大道相通,难者亦易,易者亦难。。。 阅读全文
摘要:
讨论Perl、PHP、Python和Ruby 语言
“剩下四种动态语言,我们将之归为后台脚本语言。”冒号说着画了张图表。。。
Perl凝练晦涩,Python优雅明晰,Ruby精巧灵动,PHP简明单纯。。。
叹号——没有最好的语言,只有最合适的语言。
逗号——没有糟糕的语言,只有糟糕的程序员。
问号——没有一种语言是万能的,只会一种语言是万万不能的。
引号——废除对语言的宗教信仰,建立对语言的哲学思维。
句号——编程就是在人脑和电脑之间寻找最佳平衡点的过程。。。 阅读全文
摘要:
软件设计中的抽象思维
冒号健步走进教室,学员们立刻正襟危坐,进入战备状态。。。
语言是形,范式是神,这次我们将二者融合,争取做到形神兼备。。。
我们的重心不在知识的枝节,而在知识的本源。因此无论讨论Java还是OOP,我们不追求系统和全面,但力求从不同的选点、角度和深度来展示知识的活性。。。
那么什么是抽象呢?不妨概括为:去粗取精以化繁为简;由表及里以异中求同。再精炼些,抽象就是作减法和除法。。。
软件设计者的任务是将复杂混沌的现实世界映射到精确严格的虚拟世界,要完成这种多对一的映射,抽象无疑是必由之路。。。
这种通过规范使代码的功能与实现相分离的方法称为规范抽象。。。 阅读全文
摘要:
介绍抽象数据类型
问号抢着说:“我知道了:过程抽象的结果是函数,数据抽象的结果应该是数据类型。”。。。
数据结构强调具体实现,侧重应用;抽象数据类型强调抽象接口,侧重设计。。。
接口是纲,实现是目。纲若不举,目无以张。。。
人们多采取‘整体设计以数据为中心,局部实现以算法为中心’的方针,以增强系统的可维护性。。。
数据类型的接口与实现的分离,有利于开发时间的分离以及开发人员的分离。。。
抽象——接口与实现相分离;数据——以数据为中心组织逻辑;类型——单纯而定义良好的概念。。。
抽象——尤其是数据抽象——才是OOP的核心和起源,尽管它们并非OOP的专利。。。
只有贯彻ADT思想,设计出来的类才会是‘万人迷’:有优雅的外形——抽象,有丰富的内涵——数据,有鲜明的个性——类型。。。 阅读全文
摘要:
OOP中的封装与信息隐藏
“用广东话说,真是有型有料又有性格啊!”叹号啧啧连声,“这哪里是在设计软件,分明是在设计心仪的对象嘛。”。。。
广义的封装仅仅只是一种打包,即package或bundle,是密封的但可以是透明的。。。
狭义的封装是在打包的基础上加上访问控制(access control),以实现信息隐藏。。。
抽象意味着用户可以从高层的接口来看待或使用一类对象,而不用关心它底层的实现,而黑盒封装意味着用户无权访问底层的实现。。。
访问控制不仅是一种语法限制,也是一种语义规范。。。
“通,则大处圆融合一而小处各具其妙;不通,则大处千变万化而小处无所分别。”冒号又打起了禅语 ,“领会OOP的精髓绝非一年半载之功,但若以抽象与封装为钥,必可早日开启通达之门。。。” 阅读全文
摘要:
适应变化的能力是衡量软件质量的重要标准
第七课刚一开堂,冒号就提了一个问题:“如果把一个Java程序中所有的private关键字换成public,请问该程序还能工作吗?”。。。
软件的难点有二:其一是逻辑的复杂,其二是需求的变化。许多程序员看重前者而看轻后者,大部分时间花在寻求解决方案上,而不是在选择解决方案上。。。
软件之软,体现在适应变化的能力。。。
软件的变化大致分两种:一种是出于内在需求而作的结构性变化,通常以改善软件质量为目的,即所谓的重构(refactoring);一种是出于外在需求而作的功能性变化,通常以满足客户需要为目的。。。
信息隐藏虽能将抽象接口与具体实现分离,但仍然封装在同一类中。桥梁模式则让二者彻底解耦(decouple),增强了对变化的适应力,具有更大的灵活性和可扩展性。。。 阅读全文
摘要:
软件接口服务的主客双方应遵循的准则
叹号幡然反省:“以前我们做OOP编程时,总是专注于如何利用其他类来解决问题,而较少考虑自己设计的类对其他类的影响。”。。。
作为服务的提供者,最重要的是讲诚信。首先,服务要有可靠性,不能阳奉阴违——即接口必须履行它的承诺;其次,服务要有稳定性,不能朝令夕改——即接口一经公开,不得随意变更。。。
此外,高质量的服务还要有纯粹性和完备性。Unix有一个哲学:‘一个程序只做一件事,但要做好’。用在OOP上,则是:‘一个类只提供一套服务,但要完善’。。。
关键不在于服务数量的多寡,而在于服务的一致性和关联性。。。
作为服务的享受者,最重要的是讲规矩。。。
以违背服务初衷的方式享受的服务,如同盛夏的豆腐——即使没有变质,也是不能持久的。。。 阅读全文
摘要:
OOP中的访问控制
问号提问:“信息隐藏是否专指用private来控制访问?”。。。
初级程序员的理想是为所欲为——能用编程解决一切问题;中级程序员的理想是尽善而为——追求最佳解决方案;高级程序员的理想是有所为有所不为——重在整体设计的选择,能抵制局部技巧的诱惑;最高理想是无为而无不为——无论宏观设计还是微观实现,均非刻意选择,却自然合度。。。
从软件应变的角度来看,访问控制是对修改所带来的副作用的控制。。。
客户意识对一个程序员的重要性,丝毫不亚于对一个企业的重要性。。。
千万不要为追求廉价的重用而轻易扩大接口范围,莫以自身之便而致客户之不便,莫以一时之便而致长期之不便。。。 阅读全文
摘要:
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... 阅读全文
摘要:
This class is a simple owner-draw CButton class that allows you to play animation files (AVI's) within the button. This class can be used like any other owner drawn control - simply include the heade... 阅读全文
摘要:
Introduction I was actually experimenting with different brush option to create a glassy orb but it does not work .. But i still like the effect even though it wasnt really what i want .. So i turn t... 阅读全文
摘要:
Introduction SBButton control is a button control from a set of controls (Sysbytes Controls) I'm developing to use with an application I'm writing. This button control can be customized in almost any... 阅读全文
摘要:
Introduction ThemeButton is a CButton derived class. It is a very simple graphical button, and has special bitmaps representing five button states: normal, hot, pressed, disabled, and default. Button... 阅读全文