文档介绍:第十一章面向对象语言的编译
本章内容
概述面向对象语言的重要概念和实现技术
以C++语言为例,介绍如何将C++程序翻译成C程序
实际的编译器大都把C++程序直接翻译成低级语言程序
面向对象语言的概念
对象和对象类
对象
由一组属性和操作于这组属性的过程组成
属性到值的映射称为对象的状态,过程称为方法
对象类
一类对象的总称,规范了该类中对象的属性和方法,包括它们的类型和原型
对象有自己存放属性的存储单元;对象可以共享方法的代码
对象类形成了面向对象语言的模块单元
下面我们将把术语“类”和“类型”看成是同义的
面向对象语言的概念
继承
图形对象的继承层次结构
GraphicalObj
translate
scale
PolyLine
translate
scale
length
ClosedGraphics
area
Ellipse
translate
scale
area
PolyGon
area
Rectangle
area
Triangle
……
……
……
面向对象语言的概念
继承
基类、派生类、子类、抽象类
子类型规则
当某个类型的一个对象在某个输入位置被需要或作为函数的返回值时,其任何子类型的对象允许出现在这些地方。
类B的一个对象,若它不同时是B的某个真子类的对象,那么称该对象是B的真对象,称B是该对象的运行时类型
面向对象语言的概念
继承
图形对象的继承层次结构
GraphicalObj
translate
scale
PolyLine
translate
scale
length
ClosedGraphics
area
Ellipse
translate
scale
area
PolyGon
area
Rectangle
area
Triangle
……
……
……
B
面向对象语言的概念
方法选择规则
如果类B继承类A并且重写了方法m,那么对类B的对象b来说, 即使它作为类A的对象使用, 也必须使用在类B中定义的方法m
面向对象语言的概念
继承
图形对象的继承层次结构
GraphicalObj
translate
scale
PolyLine
translate
scale
length
ClosedGraphics
area
Ellipse
translate
scale
area
PolyGon
area
Rectangle
area
Triangle
……
……
……
A
B
面向对象语言的概念
动态绑定规则
当对象o的一个方法可能被子类重新定义时,如果编译器不能确定o的运行时类型,那么必须对该方法进行动态绑定
void zoom (GraphicalObj &obj, double
zoom_factor, Point &center) {
(, );
// 将“中心”移至“点(0, 0)”
(zoom_factor); // 缩放
}
面向对象语言的概念
信息封装
大多数面向对象语言提供了一种机制,它可用来将类的特征分成私有的和公共的
某些面向对象语言用不同的上下文区分作用域,如“在一个类中”、“在派生类中”、“在友元类中”等等
由编译器来实现这些作用域规则是简单而又明显的
方法的编译
先定义一般的图形对象类GraphicalObj如下:
class GraphicalObj {
virtual void translate (double x_offset, double
y_offset);
virtual void scale (double factor);
. . . // 可能还有一些其它方法
};