07 2008 档案
摘要:
适应变化的能力是衡量软件质量的重要标准
第七课刚一开堂,冒号就提了一个问题:“如果把一个Java程序中所有的private关键字换成public,请问该程序还能工作吗?”。。。
软件的难点有二:其一是逻辑的复杂,其二是需求的变化。许多程序员看重前者而看轻后者,大部分时间花在寻求解决方案上,而不是在选择解决方案上。。。
软件之软,体现在适应变化的能力。。。
软件的变化大致分两种:一种是出于内在需求而作的结构性变化,通常以改善软件质量为目的,即所谓的重构(refactoring);一种是出于外在需求而作的功能性变化,通常以满足客户需要为目的。。。
信息隐藏虽能将抽象接口与具体实现分离,但仍然封装在同一类中。桥梁模式则让二者彻底解耦(decouple),增强了对变化的适应力,具有更大的灵活性和可扩展性。。。
阅读全文
摘要:
OOP中的封装与信息隐藏
“用广东话说,真是有型有料又有性格啊!”叹号啧啧连声,“这哪里是在设计软件,分明是在设计心仪的对象嘛。”。。。
广义的封装仅仅只是一种打包,即package或bundle,是密封的但可以是透明的。。。
狭义的封装是在打包的基础上加上访问控制(access control),以实现信息隐藏。。。
抽象意味着用户可以从高层的接口来看待或使用一类对象,而不用关心它底层的实现,而黑盒封装意味着用户无权访问底层的实现。。。
访问控制不仅是一种语法限制,也是一种语义规范。。。
“通,则大处圆融合一而小处各具其妙;不通,则大处千变万化而小处无所分别。”冒号又打起了禅语 ,“领会OOP的精髓绝非一年半载之功,但若以抽象与封装为钥,必可早日开启通达之门。。。”
阅读全文
摘要:
介绍抽象数据类型
问号抢着说:“我知道了:过程抽象的结果是函数,数据抽象的结果应该是数据类型。”。。。
数据结构强调具体实现,侧重应用;抽象数据类型强调抽象接口,侧重设计。。。
接口是纲,实现是目。纲若不举,目无以张。。。
人们多采取‘整体设计以数据为中心,局部实现以算法为中心’的方针,以增强系统的可维护性。。。
数据类型的接口与实现的分离,有利于开发时间的分离以及开发人员的分离。。。
抽象——接口与实现相分离;数据——以数据为中心组织逻辑;类型——单纯而定义良好的概念。。。
抽象——尤其是数据抽象——才是OOP的核心和起源,尽管它们并非OOP的专利。。。
只有贯彻ADT思想,设计出来的类才会是‘万人迷’:有优雅的外形——抽象,有丰富的内涵——数据,有鲜明的个性——类型。。。
阅读全文
摘要:
软件设计中的抽象思维
冒号健步走进教室,学员们立刻正襟危坐,进入战备状态。。。
语言是形,范式是神,这次我们将二者融合,争取做到形神兼备。。。
我们的重心不在知识的枝节,而在知识的本源。因此无论讨论Java还是OOP,我们不追求系统和全面,但力求从不同的选点、角度和深度来展示知识的活性。。。
那么什么是抽象呢?不妨概括为:去粗取精以化繁为简;由表及里以异中求同。再精炼些,抽象就是作减法和除法。。。
软件设计者的任务是将复杂混沌的现实世界映射到精确严格的虚拟世界,要完成这种多对一的映射,抽象无疑是必由之路。。。
这种通过规范使代码的功能与实现相分离的方法称为规范抽象。。。
阅读全文
摘要: 本文系《冒号课堂》(又名《冒号和他的学生们》)系列的目录提纲,随着写作的深入将逐步完善。欢迎大家多提意见!
阅读全文