抽象与具体相对,它是一个泛化的过程。用百度百科中的描述就是:从众多事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征。
汇编语言是底层机器的抽象,对于不同的CPU来说,它的加法指令码可能各不相同,但是可以使用一个相同的汇编指令,ADD。
C语言是对汇编语言的抽象,也可以说是对汇编的封装,比如说C语言提供了语言级别的流程控制语句,循环语句,条件语句等,而这些在汇编中是需要使用跳转指令实现的。
对于上述的汇编、C语言,它们都是对机器的建模,程序员要解决某个特定的问题,就必须与所建立起的机器模型进行联系,使之相对应。某些程序设计语言针对某类特定的问题进行建模,如Lisp,全名叫List Processing,它是为研究人工智能而开发的。
SmallTalk是第一个成功的面向对象语言,也是C++的启发者,它有5个基本特征:
(1) 万物皆对象。
(2) 程序就是一组对象,对象之间通过发送消息的进行通信。所谓发送消息其实就是调用此对象上的成员函数或方法。
(3) 每个对象都可以包含其它对象。通过包含其它对象创造新对象。
(4) 每个对象都有一个类型。每个对象都是某个类的实例,类的一个重要特征是“能向它发送什么消息”。
(5) 一个特定类型的所有对象都能接收相同的消息。
实现的隐藏
可以把程序员划分为类创建者(创建类的人)和客户程序员(使用类的人)。类创建者创建一个类,并且只将那些必须的部分暴露给客户程序员,而将其它的部分都隐藏起来。被隐藏的部分通常是对象内部的管理功能。隐藏的好处是类的创建者可以改变隐藏的部分而不用担心会影响其他人。
异常处理
在程序设计语言出现的时候,错误处理就是最重要的问题之一。
异常处理(exception handling)将错误处理直接与程序设计语言甚至有时是操作系统联系起来。异常是一个对象,它在出错的地方被抛出,并且被异常处理代码(exception handler)所接收。异常处理代码只有在出错的时候被调用,它不需要干涉正常代码的执行。另外异常不可忽略,必须要保证异常在某处得到了处理。最后异常还提供了从错误状态中进行恢复的方法。
面向对象语言中通常使用一个对象来表示异常,异常处理并不是面向对象的一个特征。
分析和设计
方法论(methodology)是一系列的过程和探索,用以降低程序设计问题的复杂性。我们要使用一个方法,首要的是搞清楚这个方法要解决的是什么问题。
在开发过程中,最重要的问题是:不要迷路。采用合适的发开过程,不要一上来就进行编码。在开发过程中很容易受阻,陷入“分析瘫痪状态”,这种状态往往是由于没有弄清当前阶段的所有小细节而感到不能继续前进了。记住,不管做了多少分析,系统的一些问题总是到设计阶段才会暴漏出来,并且更多的问题是到编程或直到程序完成后才会出现。因此迅速地分析和设计并对提出的系统执行测试是相当重要的。
对于一个具有许多“不确定”因素的系统,在进行简单分析和设计后便可尝试初步实现,这样“匆忙”进入初步实现似乎有风险,但是当我们开始进行实现时,我们就可以较早的确定某个方法是否是可行的。
极限编程
两个重要的原则:先写测试和结对编程(pair programming)。
先写测试的好处,
第一,它强制性地规定了一个类的接口的含义。可以写所有的文档描述,或者创建所有图表来描述一个类的行为,但是什么都没有一组测试清晰明白。文档之类列出的是期望,而当我们创建测试时,我们会被迫充分思考这个类,常常会发现所需要的功能,而这些功能可能会在描绘UML图、CRC、用例等过程中被漏掉。
第二,能在每次编译后运行这些测试。有了测试系统,我们就可以大胆地尝试一些易错的实验,因为测试系统会捕捉到我们引入的问题。当需要对系统做大的变动时,我们就不必担心引起整个系统混乱。
LISP(List Processing)
多范型(multiparadigm)
UML(Unified Modeling Language),书籍: 《UML Distilled》
极限编程(eXtreme Programming, XP),书籍《Extreme Programming Explained》,Kent Beck著