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