面向对象技术及语言-第8章
软件工程 第八章 面向对象的设计方法
第八章面向对象的设计方法本章采用基于UML的面向对象设计方法的将分析模型转换为设计模型。
如第五章所述,面向对象的分析模型主要由顶层架构图、用例与用例图、领域概念模型构成;设计模型则包含以包图表示的软件体系结构图、以交互图表示的用例实现图、完整精确的类图、针对复杂对象的状态图和用以描述流程化处理过程的活动图等。
为完成这一转换过程,设计人员必须处理以下任务:(1)针对分析模型中的用例,设计实现方案。
实现方案用UML交互图表示。
(2)设计技术支撑设施。
在大型软件项目中,往往需要一些技术支撑设施来帮助业务需求层面的类或子系统完成其功能。
这些设施本身并非业务需求的一部分,但却为多种业务需求的实现提供公共服务。
例如,数据的持久存储服务、安全控制服务和远程访问服务等。
在面向对象设计中,需要研究这些技术支撑设施的实现方式以及它们与业务需求层面的类及子系统之间的关系。
(3)设计用户界面。
(4)针对分析模型中的领域概念模型以及第(2)、(3)两个步骤引进的新类,完整、精确地确定每个类的属性和操作,并完整地标示类之间的关系。
此外,为了实现软件重用和强内聚、松耦合等软件设计原则,还可以对前面形成的类图进行各种微调,最终形成足以构成面向对象程序设计的基础和依据的详尽类图。
面向对象的软件设计过程如图8-1-1所示。
图8-1-1 面向对象的软件设计过程第一节设计用例实现方案UML 的交互图(顺序图、协作图)适于用例实现方案的表示。
因此,本节首先介绍交互图的语言机制,然后探讨用例实现方案的设计方法。
该设计方法包含如下3个步骤:(1)提取边界类、实体类和控制类;(2)构造交互图;(3)根据交互图精华类图。
一、顺序图顺序图用来描述对象之间动态的交互关系,着重表现对象间消息传递的时间顺序。
在顺序图中,参与交互的对象位于顶端的水平轴上,垂直轴表示时间,时间推移的方向是自上而下的。
顺序图中的对象一般以“对象名:类名”的方式标识,但也可以仅采用缩写形式“对象名”或者“:类名”。
面向对象程序设计C - 东华大学
龚涛
13
东华大学信息科学与技术学院
第8章 多态性和虚函数 8.6 虚析构函数
在析构函数前面加上关键字virtual进行说明, 称该析构函数为虚析构函数。
静态联编和动态联编都属于多态性,它们是在不同阶段对不同 实现进行不同的选择。
龚涛
10
东华大学信息科学与技术学院
第8章 多态性和虚函数 8.4 虚函数
虚函数是动态联编的基础。虚函数是成员函数,而 且是非static的成员函数。说明虚函数的方法如下:
virtual <类型说明符> <函数名>(<参数表>) 其中,被关键字virtual说明的函数称为虚函数。
重载函数的意义在于它可以用相同的名字访问一组 相互关联的函数,由编译程序来进行选择,因而有助于 解决程序复杂性的问题。
(1) 不要使用重载函数来描述毫不相干的函数。
(2) 在类中,构造函数可以重载,普通成员函数也可 以重载。
(3) 在重载函数中使用参数的默认值要避免二义性。
龚涛
4
东华大学信息科学与技术学院
由于C语言的数组中没有保存其大小,因此,不能 对数组元素进行存取范围的检查,无法保证给数组动态 赋值不会越界。利用C++语言的类可以定义一种更安全、 功能更强的数组类型。为此,为该类定义重载运算符[]。
2. 重载增1减1运算符
增1减1运算符是单目运算符,分为前缀运算和后缀 运算两种。为了区分这两种运算,将后缀运算视为双目 运算符。表达式obj++或obj—被看作obj++0或obj—0。
vfp第8章
(3)继承性
继承是一个有力的工具,例如父类中实现了某一个 特定功能,那么在它的子类中就自动获得该功能,这样 就免去了重新为子类编写同样代码的重复劳动。 子类可以继承并保持父类的所有特性和功能,但也 可以修改、重置甚至取消有父类继承来的某些特性和功 能,使父类的功能在子类中有所变异,也可以增加父类 所没有的特性和功能,子类的任何变化都不影响它的父 类。继承性体现了类层次中的“共享”机制。 例如,由基本类型的电话(拨号、讲话、听音功 能),可以派生出电话传真机、移动电话、公用投币电 话等,这些电话都继承了电话基本类型的拨号、讲话、 听音功能,又添加了各自的独特功能。
8.1 面向对象程序设计基本概念
8.1.1 基本概念
VFP支持面向对象程序设计(Object-Oriented Programming),面向对象程序设计所追求的目标是将 现实世界的问题求解尽可能简单化,采用符合人类处理问 题的思维方式。它用“对象”表现事物,用“事件”表示 处理事物的动作,用“方法”表现处理事物的过程,用 “消息”传递对象与对象之间的相互联系。 面向对象程序设计方法不同于传统的结构化程序设计, 采用事件驱动编程机制。在事件驱动编程中,程序员只要 编写响应用户动作的程序,如选择命令、移动鼠标等,而 不必考虑按精确次序执行的每个步骤。在这种机制下,不 必编写一个大型的程序,而是建立一个由若干微小程序组 成的应用程序,这些微小程序可以由用户启动的事件来激 发。
PHP编程基础与实例教程 第3版 第8章 PHP结构化编程和PHP面向对象编程
get_area() 计算面积
get_perimeter() 计算周长
是否是锐角三角形
is_triangle() 3条边构成三角形?
is_positive() 数据大于零?
check_triangle() 两边和大于第三边?
PHP编程基础与实例教程(第三版)
8-2 面向对象编程
面向对象编程能够在结构化编程的基础上进 一步避免代码冗余、增强代码的复用性,现在 的编程语言(例如Java、Python等)都是面 向对象编程语言,PHP从PHP4开始,逐渐支 持面向对象。
函数3 ( a, b, c ) 函数4 ( a, b, c )
函数function
结构化编程
property
属 性
方 法
method
三角形类
Triangle
a b c
方法1() 方法2() 方法3() 方法4() ...
方法 可以 隐式 地访 问属 性
面向对象编程
PHP编程基础与实例教程(第三版)
8-3 理解类和对象之间的关系
PHP编程基础与实例教程(第三版)
8-1 结构化编程
自 顶 向
输入 (a,b,c)
下
,
分
而
治
之
,
功 输入
能 (a,b,c) 分
解
计算三角形面积
输出 结果
数据 大于零 ?
两边 和大于 第三 边?
输出结果
能构成三角形? 计算三角形面积
PHP编程基础与实例教程(第三版)
8-1 结构化编程
是否是直三角形
?>
PHP编程基础与实例教程(第三版)
8-4 自定义类、创建对象和方法的调用
软件工程 第三部分 软件设计与建模--面向对象设计
(2) 块状组织 把系统垂直地分解成若干个相对独立的、弱耦 合的子系统/块,每块提供一种类型的服务。
采用层次与块状的混合结构
3. 设计(分布式)系统的拓扑结构 由子系统组成完整的系统时,典型的拓扑结构 有管道形、树形、星形等。设计者应该采用与问题 结构相适应的、尽可能简单的拓扑结构,以减少子 系统之间的交互数量。
3. 设计简单的类 小而简单的类便于开发和管理(高内聚)。为使 类保持简单,应该注意以下几点。 (1) 避免包含过多的属性:完成的功能可能太多了。 (2) 有明确的定义:任务应该简单。 (3) 简化对象之间的合作关系。如果需要多个对象 协同配合才能做好一件事,则破坏了类的简明性和 清晰性。 (4) 不要提供太多服务。典型地,一个类提供的公 共服务不超过7个。
层次图、结 构图、流程 图、N-S图、 PAD图、判 定表、判定 树等
面向对象设计方法比结构化设计方法更具有优势, 9/71 使用范围更广。
内容摘要
• • • • • 面向对象设计方法概述 面向对象设计原则 面向对象设计的启发规则 系统设计 对象设计
10/237
面向对象设计原则
• 强调模块化、抽象化、信息隐蔽、高内聚低耦合、复用性等 设计准则。
4/71
什么是面向对象设计(OOD)?
(二)现今(90年代后)的OOD • 面向对象的设计(OOD)就是在OOA模型的基础上运 用面向对象方法进行系统设计,目标是产生一个符合具 体实现条件的OOD模型。
OOD的特点: • 1、以面向对象的分析为基础,一般不依赖结构化分析。 • 2、与相应的OOA方法共同构成一种OOA&D方法体系。 OOA和OOD采用一致的概念和原则,但属于软件生命 周期的不同阶段,有不同的目标及策略。 • 3、较全面地体现面向对象方法的概念与原则。 • 4、大多数方法独立于编程语言,通过OOA&D所得到 的系统模型可以由不同的编程语言实现。
08面向对象导论
第8章面向对象方法学导论哈尔滨理工大学荣成学院李胜利•结构化软件开发曾经给软件产业带来了巨大进步,部分地缓解了软件危机。
使用这种方法开发的许多中、小型软件项目大都获得了成功。
但是,把它应用于大型软件产品的开发时,却很少取得成功。
•在20世纪60年代后期出现了类和对象的概念;80年代中期起,逐步形成了面向对象方法学。
90年代,面向对象成为人们开发软件的首选方法。
总体上说,面向对象技术是当前最好的软件开发技术•面向对象方法学概述•面向对象方法学的主要优点•面向对象的概念•面向对象建模1. 面向对象方法学概述•面向对象方法学的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题的问题空间(问题域)与实现解法的解空间(求解域)在结构上尽可能一致。
•面向对象方法的要点:(1)客观世界是由各种对象组成的,任何事物都是对象,复杂的对象可以由比较简单的对象以某种方式组合而成。
面向对象方法使用对象分解取代了传统方法的功能分解。
(2)把所有对象都划分成各种对象类,每个对象类都定义了一组数据和一组方法。
数据表示对象的静态属性,是对象的状态信息。
类中定义的方法,是允许施加于该类对象上的操作,是该类所有对象共享的,并不需要为每个对象都复制操作的代码。
(3)按照子类(派生类)与父类(基类)的关系,把若干个对象类组成一个层次结构的系统(类等级)。
在这种层次结构中,通常下层的派生类继承上层基类的特性(数据和方法),但如果在派生类中对某些特性做了重新描述,则以新描述为准。
即低层的特性将屏蔽高层的同名特性。
(4)对象彼此之间仅能通过传递消息互相通信。
对象与传统的数据有本质的区别,它不是被动地等待外界对它施加操作,相反,它是进行处理的主体,必须发送消息请求它执行它的某个操作,处理它的私有数据,而不能从外界直接对它的私有数据进行操作。
也就是说,一切局部于该对象的私有信息,都被封装在对象的定义内,外界看不见,也不能直接操作。
c++面向对象课后答案第8章
1.1在C++中,三种派生方式的说明符号为public、private、protected不加说明,则默认的派生方式为private。
1.2当公有派生时,基类的公有成员成为派生类的公有成员;保护成员成为派生类的保护成员;私有成员成为派生类的不能直接访问成员。
当保护派生时,基类的公有成员成为派生类的保护成员;保护成员成为派生类的保护成员;私有成员成为派生类的不能直接访问成员。
1.3 派生类的构造函数一般有3项工作要完成:首先基类初始化,其次成员对象初始化,最后执行派生类构造函数体。
1.4多继承时,多个基类中的同名的成员在派生类中由于标识符不唯一而出现二义性。
在派生类中采用虚基类或作用域分辨符来消除该问题。
2.简答题2.1 派生类如何实现对基类私有成员的访问?2.2什么是类型兼容规则?2.3派生类的构造函数是怎样的执行顺序,析构函数的执行顺序是如何实现的?2.4继承与组合之间的区别与联系是什么?2.5什么是虚基类?它有什么作用?含有虚基类的派生类的构造函数有什么要求,什么是最远派生类,建立一个含有虚基类的派生类的对象时,为什么由最远派生类的构造函数负责虚基类的初始化?3.选择题3.1下面对派生类的描述中,错误的是(D )。
A.一个派生类可以作为另外一个派生类的基类B.派生类至少有一个基类C.派生类的成员除了它自己的成员外,还包含了它的基类的成员D.派生类中继承的基类成员的访问权限到派生类中保持不变3.2下列对友元关系叙述正确的是(A)。
A.不能继承B.是类与类的关系C.是一个类的成员函数与另一个类的关系D.提高程序的运行效率3.3当保护继承时,基类的(B)在派生类中成为保护成员,不能通过派生类的对象来直接访问。
A.任何成员B.公有成员和保护成员C.公有成员和私有成员D.私有成员3.4设置虚基类的目的是(B)。
A.简化程序B.消除二义性C.提高运行效率D.减少目标代码3.5在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是( C )。
第7、8章 深入面向对象练习题
一、选择题(1)下列构造方法的调用方式中,正确的是()A.按照一般方法调用B.由用户直接调用C.只能通过new自动调用D.被系统调用(2)下列叙述中,正确的是( )A. 声明变量时必须指定一个类型B. Java认为变量number与Number相同C. Java中唯一的注释方式是"//"D. 源文件中public类可以有0或多个(3)下列叙述中,错误的是( )A. 父类不能替代子类B. 子类能够替代父类C. 子类继承父类D. 父类包含子类(4)下列关于继承的哪项叙述是正确的?A.在java中允许多重继承B.在java中一个类只能实现一个接口C.在java中一个类不能同时继承一个类和实现一个接口D.java的单一继承使代码更可靠(5)下列哪个修饰符可以使在一个类中定义的成员变量只能被同一包中的类访问?( )A.private B.无修饰符C.public D.protected(6)给出下列代码,如何使成员变量m 被方法fun()直接访问?class Test{ private intm;public static void fun(){ ... }}A.将private int m 改为protected int mB.将private int m 改为public int mC.将private int m 改为static int mD.将private int m 改为int m(7)下列关于内部类的说法不正确的是( )A.内部类的类名只能在定义它的类或程序段中或在表达式内部匿名使用B.内部类可以使用它所在类的静态成员变量和实例成员变量C.内部类不可以用abstract修饰符定义为抽象类D.内部类可作为其他类的成员,而且可访问它所在类的成员(8)在Java中,一个类可同时定义许多同名的方法,这些方法的形式参数的个数、类型或顺序各不相同,传回的值也可以不相同。
这种面向对象程序特性称为()。
第8章 模 块
习 题 8
1填空题 1)VBA是Microsoft Office系列软件的_编程语言,其语法与独立运行 的_编程语言互相兼容。 2)在For循环中,步长可以是_ ,也可以是_ ,默认为_ 。 3)自定义类型变量与数组的相同之处是,由若干个_ 组成的。 2选择题 1)下列符号中,不属于VBA的合法变量名的是( )。 A Integer B abc123 C456a D o —123 2)使用Dim声明变量时,若省略As类型,则所创建的变量默认为( )。 A Integer B String C Variant D不合法变量 3)当一个表达式中有多种不同类型的运算符时,运算符的优先次序为 ( )。 A逻辑运算符>关系运算符>连接运算符>算术运算符
8.3.5 VBA程序流程控制语句
3)如果Case子句中的表达式是一个范围,范围可以用To从小到大指 定,如Case 90 To 99;或者使用Is <关系运算符> <表达式>,如Case I s >90 And <99。 4) Case Else可以省略。 ① 在1000元以上者,按八折优惠; ② 在600元以上,但不足1000元者,按八五折优惠; ③ 在300元以上,但不足600元者,按九折优惠; ④ 在100元以上,但不足300元者,按九五折优惠; ⑤ 不足100元者,没有优惠。 3.循环语句 (1)For...Next循环语句 (2)Do
动态数组
8.4.5 自定义数据类型
1)先定义数据类型,使用Type语句声明自定义数据类型的框架; 2)再定义变量,用Dim语句定义用Type定义的数据类型来声明变量。
8.5 上机实验
1.实验目的 1)熟悉在窗体中调用VBA代码的方法。 2)理解各种变量类型的使用范围及定义方法。 3)掌握InputBox与MsgBox函数的用法。 4)掌握条件语句、循环语句的实现过程。 5)掌握数组的基本使用技术。 2.实验内容 1)“鸡兔同笼问题”,已知同一笼子里鸡和兔的总头数为m,总脚数 为n,求鸡和兔各有多少只? 2)定制一个订单优惠政策,当订单的金额达到一定值时可给予一定 的折扣,例如,应付款可按如下公式计算:
19-面向对象分析
图书馆系统的第2张类图
图书管理员 职工号 姓名 读者 姓名 身份证号 借书卡号 借书限额 可用限额 图书目录 图书 馆藏流水号 状态 罚款细则
图书品种 书名 国际书号 作者 出版社 出版日期 简介 价格 馆藏数量 可借数量
分析模型与用例模型
用例:外观
类图:内部结构 交互图:内部行为
软件的基本组成——类
• 学习OOA,找到实现用例功能的类
:系统
:图书管理 员
Loop
输入读者借书卡 读者信息 输入书号 图书信息
: 图书管理 员 : 借书窗口
系统做了些什么 (事件流),谁 去做的(对象)?
: 读者 : 图书
1. 提供读者借书卡(号) 2. 验证读者身份 2.1. 取读者信息 2.2. 检查读者借书条件
不同类别的概念(续)
• 规格说明:系统中关于对象的规格信息的描述。
– 如图书品种,每种图书有一个唯一的馆藏号,同时该 图书还包含一些描述信息,如书号、价格、作者、出 版社等,多本图书对象共用这些规格说明。这是一种 经过了抽象的概念,应该识别为概念类。
• 业务规则或政策:系统中经常使用的业务规则或 政策的文字描述。
4、关联的导向性(Navigability)
• 角色的导向性特征表示可以通过关联从源类 导向到目标类上。也就是说给定关联一端的 对象就能够容易并直接地得到另一端的对象。 • 识别关联的导向可以推迟,与设计实现有关。 通常是源对象存储了对目标对象的一些引用
读者 Reader
1 登记 1..*
借书记录 Loan
属性的表示
借书记录 borrowDate:Date returnDate:Date
面向对象技术基础教材课程
8.2 C++类的定义
• 先来看一下类是如何定义的,对一些通用的问题, 前人已经定义好了很多的类,比如微软的MFC类库, 程序员不必关心其内部细节,只要抱着“拿来主 义”的态度就好,但对某些特殊问题来说,必须 由自己提炼模型,进行类的定义。
8.2.1 类定义的基本形式
• C++中使用关键字class定义一个类,其基本形式 如下:
“双轮车”的摩托车和自行车,有共同点,也有许多不同点。 “车”类是对摩托车、自行车、汽车等相同点和不同点的提取与 抽象,如所示。 • 类的定义分为两个部分:数据(相当于属性)和对数据的操作 (相当于行为)。从程序设计的观点来说,类就是数据类型,是 用户定义的数据类型,对象可以看成某个类的实例(某个类的变 量),类和对象的关系与前面介绍的“结构”和“结构体变量” 的关系相似,但又有不同,在本章稍后类的定义一节中后具体说 明这一问题。
• class的定义看上去很像struct定义的扩展,事实 上,类定义时的关键字class完全可以替换成 struct,也就是说,第5章中介绍的结构体变量也 可以有成员函数。class和struct的唯一区别在于: struct的默认访问方式是public,而class为 private。
• 提示:通常使用class来定义类,而把struct用于 只表示数据对象、没有成员函数的类。
8.1.2 类是分层的
• 每一大类中可分成若干小类,也就是说,类是分层的,如图8.2所示。可将所有的图 形抽象成“图形”类,该类中共同的属性有很多,这里只取“颜色”这个属性,对所 有图形而言,都可定义“显示”操作。同时,“图形”类可进一步分为“一维图形” 类、“二维图形”类和其他类,根据形状的不同,“一维图形”类可进一步分为“直 线”类和“折线”类,“二维图形”类又可分为“正方形”类和“圆”类。下层的类 除了“继承”了上层类中定义的属性和行为外,还可增加新的属性和行为(如“圆” 类相比“二维图形”类增加了“圆心”和“半径”属性,增加了“求面积”这一行 为),甚至可以在下层类中重新定义上层类已定义的属性和行为(如“直线”类、 “折线类”、“正方形”类和“圆”类中都重新定义了“图形”类中已定义的“显示” 操作)。
[计算机软件及应用]第8章第一部分 类与对象
class Date
{
public:
Date( );
// 默认构造函数
void setDate(int,int,int); // 设置年、月、日
17
class 类名
{ private:
私有数据和函数
public:
公有数据和函数
};
大括号后的分号“;”是类定义的结束
标志。类的成员分为数据和函数,分别
称为成员数据和成员函数。成员数据描
述类对象内部数据的结构,成员函数则
用于操作类对象的这些数据。
18
class Date
{ public:
Date( );
public: void putname(char *n); void getname(char *n);
private: long num;
public: void putnum(long n); long getnum();
};Leabharlann 24成员数据的说明 一般说来,类中的成员数据可以是任何类
型的。成员数据说明的形式等同C++程序中 一般变量的定义形式。
第八章 类与对象
1
80年代后期,在计算机软件领域发生了 许多变化,这些变化极大地影响着几乎所 有的程序设计者和系统分析员的工作。面 向对象的程序设计方法: (Object-Oriented Programming)就是其中之一。
OOP并不是一种程序设计语言,而是一 种新概念——关于数据、过程和它们之间 关系的一种新的思考方法。
int X,Y; 只是这里还要使用访问说明符(类型修饰 符)private、public和protected。在说明成员数 据时不再使用修饰符extern、auto、register。
C++面向对象程序设计第8章 继承与派生
蚌埠学院计算机系
C++面向对象程序设计
class Studend1 可以看出,很多是重复的地方, 我们可以通过C++语言中的 { int num; //此行原来己有 继承机制,可以扩充和完善旧 char name[20]; //此行原来己有 的程序设计以适应新的需求。 char sex; //此行原来己有 这样不仅可以节省程序开发的 时间和资源,并且为未来程序 int age; 增添了新的资源。 char addr[20]; public: void display( ) ; //此行原来己有 {cout<<"num: "<<num<<endl; //此行原来己有 cout<<"name: "<<name<<endl;//此行原来己有 cout<<"sex: "<<sex<<endl; //此行原来己有 cout<<"age: "<<age<<endl; cout<<"address: "<<addr<<endl;} };
蚌埠学院计算机系
21
C++面向对象程序设计
【例8-3】定义类Point,然后定义类Point的派生类 Circle。 #include <iostream.h> class Point //定义基类,表示点 { private: int x; int y; public: void setPoint(int a, int b){ x=a; y=b; }; //设置坐标 int getX(){ return x; }; //取得X坐标 int getY(){ return y; }; //取得Y坐标 };
面向对象分析与设计
提高软件的可维护 性和可扩展性
面向对象分析与设计的基本原则
面向对象分析与设计遵循一些基本原则,比如封 装性、继承性、多态性和抽象性。封装性指隐藏 对象的内部细节,仅暴露有限的接口;继承性允 许子类继承父类的属性和方法;多态性允许同一 方法在不同对象上有不同行为;抽象性帮助提取
对象的共性特征,形成抽象类或接口。
观察者模式
概念
定义对象间的一种一对多的依赖关系
特点
主体对象状态改变时,依赖对象会自动更新
应用场景
当一个对象的改变需要同时改变其他对象,并且不知道具体有多少对象需要改变时
模板方法模式
模板方法模式是一种行为型设计模式,定义了一个算法的骨 架,允许子类为一个或多个步骤提供实现。这种模式在父类
中定义算法的步骤,而将一些实现延迟到子类。
设计模式应用
选择合适模式
根据实际情况选择 合适的设计模式
灵活性提升
通过设计模式提高 系统的灵活性和可
扩展性
●04 第四章 面向对象编程语言
Java
支持类
Java拥有丰富的类库,方便开发人员使用
继承
允许一个类继承另一个类的属性和方法
封装
将数据和方法封装在类中,提高安全性和模块性
C++
C++是一种多范式编程语言,支持过程化编程、 面向对象编程和泛型编程。它是继C语言后,一种
Eclipse IDE
集成开发环境
Visual Studio
强大的开发工具
IntelliJ IDEA
智能IDE
协作工具
Git版本控制
代码管理利器
JIRA项目管理
项目跟踪与管理
Confluence团队协 作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Object-Oriented Technology & Language 第 8章 Interface & Inner Classes
主讲教师: 饶若楠 上海交通大学计算机科学与工程系 rao-ruonan@
第 8章
Interfaces & Inner Classes
You can add new method declarations to an interface by using inheritance, and you can also combine several interfaces into a new interface with inheritance.
Example: c08: Parcel1.java (p331)
Inner classes and upcasting (p333-p335)
Inner classes really come into their own when you start upcasting to a base class, and in particular to an interface.
Example: c08: Months.java (p324) c08: Month.java (p325)
Initializing fields in interfaces (p327 -328)
Fields defined in interfaces are automatically static and final. Those cannot be “blank finals,” but they can be initialized with nonconstant expressions.
8.1 接口(Interface)
所谓接口就是对操作规范的说明。通俗地说, 接口只是说明函数应该做什么(What),但没有定 义函数如何做(How)
<<Interface>> Shape draw ()
Shape
Triangle Elided/Iconic Representation (“lollipop”) draw ()
Example: c08: LocalInnerClass.java (p352)
Inner class identifier (p354)
LocalInnerClass$2.class
“multiple inheritance” in Java (p319 -323)
Because an interface has no implmentation at all - that is, there is no storage associated with an interface - there’s nothing to prevent may interfaces from being combined.
Referring to the outer class object (p347-p348)
Example: c08: Parcel11.java (p347)
Reaching outward from a multiply-nested class(p348-p349)
Example: c08: MultiNestingAccess.java (p348)
Example: c08: NestingInterfaces.java (p328)
Inner classes (p331-p333)
It’s possible to place a class definition within another class definition. This is called an inner class.
5.9 接口Interface
3. 接口可以作为一种引用类型来使用。任何实现
该接口的类的实例都可以存储在该接口类型的变 量中,通过这些变量可以访问类所实现的接口中 的方法。Java运行时系统动态地确定该使用哪个 类中的方法。
例如: Shape abc = new Triangle();
8.1接口Interface - 例子
8.1 接口Interface - 例子
class InterfaceType{ public static void main( String args[] ){ Collection c = new FIIFOQueue(); …… add( obj ); }…… }
把接口作为一种数据类型可以不需要了解 对象所对应的具体的类,而着重于它的交互 界面
Example: c08: Adventure.java (p320)
Name collision when combining interfaces Example: c08: InterfaceCollision.java (p322)
Extending an interface with inheritance (p323 -324)
Inheriting from inner classes (p349)
Example: c08: InheritInner.java (p349)
Can inner classes be overriden ?(p350)
Example: c08: BigEgg.java (p350)
Local inner classes (p352)
第 8章
Interfaces & Inner Classes
8.2.6 Referring to the outer class object 8.2.7 Reaching outward from a multiply-nested class 8.2.8 Inheriting frominner classes 8.2.9 Can inner classes be overriden 8.2.10 Local inner classes 8.2.11 Inner class identifiers 8.3 Why inner classes? 8.3.1 Closure & Callbacks 8.3.2 Inner classes & control frameworks
Example: c08: Destination.java (p333) c08: Contents.java (p334) c08: TestParcel.java (p334)
Inner classes in methods and scopes (p335-p338)
Inner classes can be created within a method or even an arbitrary scope.
interface Collection { int MAX_NUM=100; void add (Object obj); void delete (Object obj); Object find (Object obj); int currentCount ( ); class FIFOQueue implements collection{ } void add ( Object obj ){……} void delete( Object obj ){……} Object find( Object obj ){……} int currentCount{……} }
Example: c08: sequence.java (p342)
Nested classes (p344-p347)
static inner classes.
Example: c08: Parcel10.java (p345) c08: IInterface.java (p346) c08: TestBed.java (p346)
draw()
Rectangle draw ()
Triangle draw ()
Rectangle draw ()ห้องสมุดไป่ตู้
8.1 接口Interface
1. 接口的定义
接口的定义包括接口声明和接口体两部分。如下: [public] interface InterfaceName [extends superInterfaceList] {//接口声明 type constantName = Value; //常量声明,可为多个 retumType methodName ( [paramList] ); //方法声明,可为多个 }
Example: c08: HorrorShow.java (p323)
Grouping constants (p324 -327)
Because any fields you put into an interface are automatically static and final, the interface is a convenient tool for creating groups of constant.
8.1 Interfaces 8.1.1 “multiple inheritance” in Java 8.1.2 Extending an interface with inheritance 8.1.3 Grouping constants 8.1.4 Initializing fields in interfaces 8.1.5 Nesting interfaces 8.2 Inner Classes 8.2.1 Inner classes and upcasting 8.2.2 Inner classes in methods and scopes 8.2.3 Anonymous inner classes 8.2.4 The link to the outer class 8.2.5 Nested classes