为具体问题找到最恰当的类定义,并且可以在最恰当的继承级别解释
问题。举例说明,莱丝在大多数时候都被当
作一条狗,但是如果想要让它做牧羊犬做的事,你完全可以调用牧羊犬的方法。如果狗这个类还有动物的父类,那么你完全可以视莱丝为一个动物。
[编辑]OOP名词释意
编程范型 对于OOP的准确定义及其本意存在着不少争论。
通常,OOP被理解为一种将
程序分解为封装数据及相关操作的模块而进行的编程方式。有别于其它编程方式,OOP中的与某数据类型相关的一系列操作都被有机地封装到该数据类型当中,而非散放于其外,因而OOP中的数据类型不仅有着状态,还有着相关的行为。OOP理论,及与之同名的OOP实践相结合创造出了新的一个编程架构;OOP思想被广泛认为是非常有用的,以致一套新的编程范型被创造了出来。(其它的编程范型例如函数式编程或过程式编程专注于程序运行的过程,而逻辑编程专注于引发程序代码执行的断言)
对面向模拟系统的语言(如:SIMULA 67)的研究及对高可靠性
系统架构(如:高性能操作系统和CPU的架构)的研究最终导致了OOP的诞生。
[编辑]面向对象的语言
支持部分或绝大部分面向对象特性的语言即可称为基于对象的或面向对象的语言。
早期,完全面向对象的语言主要包括Smalltalk等语言,目前较为流行的语言中有Java、C#、Eiffel等。随着软件工业的发展,比较早的程序导向的语言在近些年的发展中也纷纷吸收了许多面向对象的概念,比如C->C++,C->Objective-C,BASIC->Visual Basic->Visual Basic .NET,Pascal->Object Pascal,Ada->Ada95。
[编辑]历史
计算机科学中对象和实例概念的最早萌芽可以追溯到麻省理工的PDP-1系统。这一系统大概是最早的基于容量架构(capability based architecture)的实际系统。另外1963年Ivan Sutherland的Sketchpad应用中也蕴含了同样的思想。对象作为编程实体最早是于1960年代由Simula 67语言引入思维。Simula这一语言是奥利-约翰·达尔和克利斯登·奈加特在挪威奥斯陆计算机中心为模拟环境而设计的。(据说,他们是为了模拟船只而设计的这种语言,并且对不同船只间属性的相互影响感兴趣。他们将不同的船只归纳为不同的类,而每一个对象,基于它的类,可以定义它自己的属性和行为。)这种办法是分析式程序的最早概念体现。在分析式程序中,我们将真实世界的对象映射到抽象的对象,这叫做“模拟”。Simula不仅引入了“类”的概念,还应用了实例这一思想——这可能是这些概念的最早应用。
20世纪70年代施乐PARC研究所发明的Smalltalk语言将面向对象程序
设计的概念定义为,在基础运算中,对对象和消息的广泛应用。Smalltalk的创建者深受Simula 67的主要思想影响,但Smalltalk中的对象是完全动态的——它们
可以被创建、修改并销毁,这与Simula中的静态对象有所区别。此外,Smalltalk还引入了继承性的思想,它因此一举超越了不可创建实例的程序设计模型和不具备继承性的Simula。
此外,Simula 67的思想亦被应用在许多不同的语言,如Lisp、Pascal。
面向对象程序设计在80年代成为了一种主导思想,这主要应归功于C++——C语言的扩充版。在图形用户界面(GUI)日渐崛起的情况下,面向对象程序设计很好地适应了潮流。GUI和面向对象程序设计的紧密关联在Mac OS X中可见一斑。Mac OS X是由Objective-C语言写成的,这一语言是一个仿Smalltalk的C语言扩充版。面向对象程序设计的思想也使事件处理式的程序设计更加广泛被应用(虽然这一概念并非仅存在于面向对象程序设计)。一种说法是,GUI的引入极大地推动了面向对象程序设计的发展。
苏黎世联邦理工的尼克劳斯·维尔特和他的同事们对抽象数据和模块化程序设计