面向对象编程——类与对象
周立功教授数年之心血之作《程序设计与数据结构》以及《面向AMetal框架与接口的编程(上)》,电子版已无偿性分享到电子工程师与高校群体,书本内容公开后,在电子行业掀起一片学习热潮。经周立功教授授权,本公众号特对《程序设计与数据结构》一书内容进行连载,愿共勉之。
第四章为面向对象编程,本文为4.2 类与对象。
4.2 类与对象
亚里士多德可能是第一个研究类型概念的人,他提到了"鱼类和鸟类"。将具有共同的行为和特征的所有对象归为一个类的思想,在第一个面向对象语言Simula-67中得到了直接应用,其目的是为了解决模拟问题。比如,银行的出纳业务,包括出纳部门、顾客、业务、货币的单位等大量的对象,将具有相同数据结构(属性)和行为(操作)的对象归在一起为一个类,属于类的任何对象都共享该类的所有属性,这就是类的来源。
创建抽象数据类型是OOP的基本思想,几乎能象完全内建类型一样使用。程序员可以创建类型的变量和操作这些变量。每个类的成员都有共性,每个账户有余额,每个出纳员都能接收存款等。同时每个成员都有自己的状态,每个账户有不同的余额,每个出纳员都有名字。通常在计算机中出纳员、客户、账户和交易等都被描述为唯一的实体,这个实体就是对象,每个对象都属于一个定义了它的行为和特性的特定类。
由此可见,类和类的对象不是相同的概念,与图纸和建筑的关系类似,对象的描述依赖描述它的类。因此可以通过创建类的实例创建对象,即定义类的变量,这个过程叫做实例化。
>>> 4.2.1 对象
从人类认知的抽象角度来看,对象可以是下列事物之一:
-
一个可以触摸或可以看见的东西;
-
在智力上可以理解的东西;
-
可以指导思考或行动的东西。
显而易见,一个对象反映了某一部分的真实存在,因此对象是在时间和空间中存在的某种东西。软件中的"对象"术语首先出现在Simula语言中,对象存在于Simula程序中,用于模拟现实世界的某个方面。
某些对象可能有明确的概念边界,但代表的是不可触摸的事件或过程。比如,一个立方体和一个球相交,它们的相交线是一条不规则的曲线。虽然它离开了球体或立方体就不存在了,但这条线仍然是一个对象,因为它有明确定义的概念边界。
某些对象可能是可触摸的,但物理边界不太清晰。比如,河流、雾和人群等就属于这种类型的对象。虽然类似于美和色彩这样的属性不是对象,爱和恨这样的感情也不是对象,但这些东西有可能成为其它对象的属性,比如,一个男人(一个对象)爱他的妻子(另一个对象),或者说某只猫(又一个对象)是灰色的。由此可见,属性表示对象记忆的信息,且只能通过对象的操作来访问和修改。
当传统的过程模块或函数返回调用者时,不会带来任何副作用,模块运行结束,只将其结果返回。当同一模块再次被调用时,就象是第一次诞生一样。模块对以前的存在没有任何记忆,就象人类一样对以前的存在一无所知。
就对象而言,对象的一个重要特征是它们充当数据的容器,因此对象具有记忆功能,对象知道它的过去,通常也将包含在对象属性中的数据值称为对象的状态。当一个对象的调用者给该对象一个信息后,如果该调用者或其它调用者要求该对象再次提供这一信息,则该对象执行结束后并没有死,因此对象具有如何保持其状态(状态即对象拥有值的集合)的能力。
假设你在看一个人,肯定会将这个人当作一个对象。显然,每个人都有数据,比如,name、birthdate和weight等;一个人还有行为,比如,走路、说话和呼吸等,因此可以说对象是由"数据和行为"构成的。在现实世界里,由于每个对象的状态不一样,因此可以用存储在一个对象中的数据表示对象的状态,数据包含了能够区分不同对象的信息。
在OO程序设计中,每个对象都有唯一的标识,标识是一个对象的属性,用于区分这个对象与其它所有对象。而这个唯一的标识可以通过句柄机制提供,因此可以借助这个句柄引用对象。不同的语言实现句柄的方式不一样,比如,地址、数组下标或人为编号。
在现实世界中一些对象有对等物,比如,ZLG公司,另一些对象则是概念实体,比如,解一元一次方程,还有一些其它的对象,比如,栈、数组变量名a,都是为了实现而引入的,没有对应的物理实体。
许多开发人员可能会认为"一个包含了另一个对象的对象",其本质上与"一个具有纯数据成员的对象"是完全不同的,但是那些看起来不是对象的数据成员实际上也是对象,比如,整数和双精度数。在真正的面向对象语言中,万
对象 相关文章:
- 面向对象编程——OO思想(08-27)