亚里士多德或许是认真研究类型概念的第一人他曾谈及鱼类和鸟类的问题在世界首例面向对象语言Simula中第一次用到了这样的一个概念 所有对象——尽管各有特色——都属于某一系列对象的一部分这些对象具有通用的特征和行为在Simula中首次用到了class这个关键字它为程序引入了一个全新的类型(clas和type通常可互换使用见注释) Simula是一个很好的例子正如这个名字所暗示的它的作用是模拟(Simulate)象银行出纳员这样的经典问题在这个例子里我们有一系列出纳员客户帐号以及交易等每类成员(元素)都具有一些通用的特征每个帐号都有一定的余额每名出纳都能接收客户的存款等等与此同时每个成员都有自己的状态每个帐号都有不同的余额每名出纳都有一个名字所以在计算机程序中能用独一无二的实体分别表示出纳员客户帐号以及交易这个实体便是对象而且每个对象都隶属一个特定的类那个类具有自己的通用特征与行为 因此在面向对象的程序设计中尽管我们真正要做的是新建各种各样的数据类型(Type)但几乎所有面向对象的程序设计语言都采用了class关键字当您看到type这个字的时候请同时想到class反之亦然 建好一个类后可根据情况生成许多对象随后可将那些对象作为要解决问题中存在的元素进行处理事实上当我们进行面向对象的程序设计时面临的最大一项挑战性就是如何在问题空间(问题实际存在的地方)的元素与方案空间(对实际问题进行建模的地方如计算机)的元素之间建立理想的一对一对应或映射关系 如何利用对象完成真正有用的工作呢?必须有一种办法能向对象发出请求令其做一些实际的事情比如完成一次交易在屏幕上画一些东西或者打开一个开关等等每个对象仅能接受特定的请求我们向对象发出的请求是通过它的接口(Interface)定义的对象的类型或类则规定了它的接口形式类型与接口的等价或对应关系是面向对象程序设计的基础 下面让我们以电灯泡为例 Light lt = new Light(); lton(); 在这个例子中类型/类的名称是Light可向Light对象发出的请求包括包括打开(on)关闭(off)变得更明亮(brighten)或者变得更暗淡(dim)通过简单地声明一个名字(lt)我们为Light对象创建了一个句柄然后用new关键字新建类型为Light的一个对象再用等号将其赋给句柄为了向对象发送一条消息我们列出句柄名(lt)再用一个句点符号()把它同消息名称(on)连接起来从中可以看出使用一些预先定义好的类时我们在程序里采用的代码是非常简单和直观的 [注释] 有些人进行了进一步的区分他们强调类型决定了接口而类是那个接口的一种特殊实现方式 |