Presentation is loading. Please wait.

Presentation is loading. Please wait.

高级数据库系统作业答疑 ——面向对象 2016. 01.08.

Similar presentations


Presentation on theme: "高级数据库系统作业答疑 ——面向对象 2016. 01.08."— Presentation transcript:

1 高级数据库系统作业答疑 ——面向对象

2 第一次作业 7.2 解:第三句有问题,左边为string类型,右边是City类型。
cityOfLA.name := cityOfLA.mayor.spouse.livesIn; 7.4 解:前一种的输出结果为: Donald Duck Mickey Mouse 后一种的输出结果为: 60 因为前一种是引用语义,而后一种是复制语义。 donald.livesIn.mayor := donald; print (donald.livesIn.mayor.name); mickey.livesIn.mayor := mickey; donald.age := mickey.age; Print (donald.age); mickey.age := 70; print (donald.age);

3 第一次作业 7.9 (1)mary.children:=joe.children,joe和mary通过属性children共享同一PersonSet对象(引用传递) (2)通过insert操作,插入Person对象到共享PersonSet对象,PersonSet状态变化会被其引用对象joe可见(集合内为对象类型,插入概念是引用语义)

4 第一次作业 (1)(2)执行完毕后,mary.children = joe.children = {littleJoe}

5 第一次作业 7.9 (3)betty.children:=jim.children,betty和jim的children属性值相同,但是字段不共享(复制语义) (4)通过insert操作,jimbo插入到betty的children中,但jim的相应值不会改变(集合内为sort类型,插入概念是复制 )

6 第一次作业 (3)(4)执行完毕后, betty.children = {jimbo} jim.children = {}

7 第一次作业 8.8 解: surface: 计算表面积。 scale: 按比例放大/缩小Cuboid的尺寸。
center: 返回Cuboid的中心坐标。 diagonal: 计算对角线长度。 minDistance: 计算Vertex参数到Cuboid的最短距离。

8 第一次作业 persistent type Cuboid is public length, width, height, surface, volume, weight, translate, scale, rotate, center, diagonal, minDistance; (封装) body [v1, v2, v3, v4, v5, v6, v7, v8 : Vetex; mat : Material; value : float;] operations … declare surface :  float; declare scale : Vertex  void code scaleCuboid; declare center :  Vertex; declare diagonal:  float; declare minDistance : Vertex  float code minDistanceCode;

9 第一次作业 implementation … define surface is
return 2.0 * (self.length*self.width self.length*self.height + self.width*self.height); define scaleCuboid(s) is begin self.v1.scale(s); self.v8.scale(s); end define scaleCuboid;

10 第一次作业 define center is var c : Vertex; begin c.create; c.x = 0.5 * (self.v1.x + self.v7.x); c.y = 0.5 * (self.v1.y + self.v7.y); c.z = 0.5 * (self.v1.z + self.v7.z); return c; end define certer; define diagonal is return self.v1.distance(self.v7);

11 第一次作业 define minDistanceCode(v) is var v0; begin //将长方体的6个面无限延伸,可将整个空间分为27个区域 if (v在长方体内部或表面上) return 0; else begin 根据v所在区域,可简单判断出长方体上距v最近的点v0所在 的面/棱/顶点,进而求出v0; return v.distance(v0); end else end deine minDistanceCode; … end type Cuboid;

12 第一次作业 9.1 答: (1)方法一采用1:1关系表示1:N关系,存在较多冗余; 不考虑索引,
已知left查询对应的right集时,方法二效果明显好于方法一; 已知right查询对应的left时,方法一效果好于方法二 ( 需要从各个 right集合找到相应的right,才能确定left)。 当插入新关系<L,R>时,两种方法都无法保证一致性,即原关系 1:N的语义约束可能被违反,需要对insert操作做修改,保证每一 个Tright实例仅有至多一个对应的Tleft实例。 删除关系<L,R>时,方法一中直接删除对应的TR实例,方法二中 只需修改right集合,直到right集合为空时,才需要删除对应的TR 实例。 更新操作由插入删除操作组合而成,不再讨论。 (2)方法一、二的insert操作均需修改,以保证一致性,方法二的 delete操作也需要修改。修改思想上边已说明,具体算法不再给 出。

13 第二次作业 10.5 解: declare connect : Pipe || Pipe  void;
refine connect : ConicalPipe || ConicalPipe  void; 一个合法的重定义要求: 操作名不变,参数个数不变; 操作的接收者类型是原操作中接收者类型的子类; 操作的返回值类型是原操作返回值的子类; 操作的参数类型是原操作参数类型的超类。 题中的重定义仅满足(1)(2)(3),但违反(4)。ConicalPipe是Pipe 的子类而非超类,故不合法。 考虑下面的程序段: var aPipe, anotherPipe : Pipe; aConicalPipe : ConicalPipe; anotherPipe := aConicalPipe; //可替换性,合法 anotherPipe.connect(aPipe); //编译通过,执行时由于动态绑定,出错 //动态绑定时从当前接受者的直接类型开始,沿着继承层次搜索,这里 //pipe的直接类型为ConicalPipe,connect调用的是Conicalpipe的版本。

14 第二次作业 10.11 Type Room is body [length : float ; height : float ;…]
operation declare area:->float; implementation define area is return self. length*self. width; end type Room; type kitchen supertype Room is …… end type kitchen; type livingRoom supertype Room is end type livingRoom; 其他例子:如车与机动车、非机动车之间的关系,person与teacher、student之间的关系

15 谢 谢!


Download ppt "高级数据库系统作业答疑 ——面向对象 2016. 01.08."

Similar presentations


Ads by Google