




已阅读5页,还剩135页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象技术基础 第一部分对象入门北京航空航天大学软件工程研究所刘超Liuchao 对象入门 2 序 面向对象技术出现于70年代末期 并表现出强大的生命力20世纪80年代曾预言 OO将成为90年代计算机领域的主流技术1991年3 4 1993年9 12 1995年15 20 1996年 40 1998年 60 2000年 80 这个预言已经成为不争的事实 21世纪现代软件开发方法的重要基础之一 对象入门 3 序 续1 面向对象方法的发展80年代 面向对象语言Smalltalk C 等90年代 面向对象方法 Booch方法 Rumbaugh的OMT Jacobson的OOSE Yourdon的OOA OOD OOP等面向对象建模工具 RationalRose Booch SmartDraw OMT 面向对象语言 Java OO DBMS1997 统一建模语言UML1999 统一软件开发过程USDP RUP 对象入门 4 序 续2 相关技术软件复用技术构件化技术软件体系结构软件模式Client Server Browser Server中间件技术Agent 代理 技术 对象入门 5 序 续3 国内研究九五期间北航软件工程所 UML Designer SafePro C Java北大青鸟 JBOO十五软件企业 研究院所 学习运用OO方法面向对象方法已经成为软件开发的主流方法 对象入门 6 练习0 简述面向对象技术发展史查阅80年代初期 有关Object oriented Smalltalk C 等方面的研究与实践 综述面向对象方法的形成过程查阅90年代国内计算机重要学术期刊 如 软件学报 计算机研究与发展 等 综述国内在面向对象方法方面的重要研究与实践成果查阅97年以来互联网上有关OO技术的重要网站 综述OO技术的最新研究与实践成果 etc UML 赛迪网 不要被一些人在网站上随意发表的观点所误导 查阅权威的书籍和网站 正式发表的学术论文 对象入门 7 练习0的要求 阅读3篇以上有关OO的文章综述论文标题 主题具体 明确中英文摘要 中文摘要 200字 英文摘要 与中文一致 概述 500 800字左右 正文 1 2章 结论 500字左右 参考文献 对象入门 8 举例 阅读研究论文http citeseer ist psu edu AnOverviewofJMLToolsandApplicationsEighthInternationalWorkshoponFormalMethodsforIndustrialCriticalSystems FMICS 03 vol 80ofElectronicNotesinTheoreticalComputerScience pp 73 89 Elsevier 2003 http www jmlspecs org 对象入门 9 Abstract TheJavaModelingLanguage JML canbeusedtospecifythedetaileddesignofJavaclassesandinterfacesbyaddingannotationstoJavasourcefiles TheaimofJMListoprovideaspecificationlanguagethatiseasytouseforJavaprogrammersandthatissupportedbyawiderangeoftoolsforspecificationtype checking runtimedebugging staticanalysis andverification ThispapergivesanoverviewofthemainideasbehindJML thedifferentgroupscollaboratingtoprovidetoolsforJML andtheexistingapplicationsofJML Thusfar mostapplicationshavefocusedoncodeforprogrammingsmartcardswrittenintheJavaCarddialectofJava 对象入门 10 第一部分目录 面向对象语言基础知识Java和C 抽象和建模UML面向对象的基本概念对象和类 属性与操作封装消息 对象间的交互继承 抽象与重用关联与连接 对象间的关系 对象入门 11 第1章Java基础知识 为什么先介绍Java通过分析一些程序实例 有助于理解有关对象的概念研究对象概念和对象建模方法 其本身与语言无关便于展示如何将对象模型转化为Java程序代码Java的特点平台无关性 生成 字节码 bytecode 由Java虚拟机 JVM 解释运行SunMicrosystem 一次编译 随处运行 功能全面是开发Web的理想语言开放标准 对象入门 12 Java平台无关性 AJavaprogramPublicclassHello Publicstaticvoidmain String args System out println Hello SunSolorisJavaCompiler WindowsNTJavaCompiler MacOSJavaCompiler EP Ljava lang String V SunSolorisJVM WindowsNTJVM MacOSJVM SunWorkStation PersonalComputer Mac 与平台无关的Java源代码 对Java源代码进行编译 标准的字节码 用JVM运行在任何平台上 对象入门 13 开发Web软件的理想语言 MyHomePage 字节码检验器 WebServer ExploreronClient 1 用户浏览器从Web服务器下载HTML页面 2 用浏览器下载 3 字节检查 对象入门 14 J2EE服务器 Server 和容器 Container 对象入门 15 Java语言的基础知识 一个简单Java应用程序Java注释的几种形式Java语言的几种内置数据类型Java表达式的特点及计算方法Java数据类型的自动转换和显式转换Java语言的块结构属性以及变量的作用范围Java语言的几种执行控制语句Java应用程序的命令行执行方式Java应用程序的图形用户界面 GUI 数据库接口 JDBC 对象入门 16 一个简单Java应用程序 ASimpleJavaprogram saying Hello FileName Hello javaPublicclassHello Publicstaticvoidmain String args System out println Hello Hello Println Hello 对象入门 17 练习1 1 1在Sun公司网站 上检索Java的相关资料 并指出本章中未提及的Java语言的其他优点 1 2在网上看一下有多少销售商支持Java语言 如IBM Oracle等 1 3比较C 和Java的语言特点 1 4研究applet和应用程序的区别 要求 列举的优点或特点等要具体 明确要求明确标注出所引述的资料的来源 参考文献 列举示例 以说明之 对象入门 18 练习0和练习1的要求 练习0和练习1 选做其中的一个题目 或者自选题目 写一篇小论文 第5周以前交 对象入门 19 第2章抽象和建模 通过抽象实现简化 概括分级分类进行抽象抽象是软件开发的基础在建造信息系统时 必须判断各种细节资料 信息是否与系统的最终目标相关抽象 模式 的重用通过对特性的比较来发现相似的抽象 并再次使用该抽象的技术被称为模式匹配和重用 对象入门 20 固有的挑战 建立软件的正确模型 最难的问题 数不清的可能 虽有好坏之分 但难以断定 最好 和 最正确 没有严格的方法来检验或测试一个模型是否充分反映了用户的所有需求使用者 开发者 清楚 准确 一致的理解 对象入门 21 怎样才能正确地建模 洞察问题的整个领域创造力虚心听取建议的能力观察力一个有组织有计划进行的过程 软件工程过程一种有效的沟通方法 或多种的有机结合 对象入门 22 第3章对象和类 对象面向对象软件对象面向对象方法对象类封装Java中对象的引用 对象入门 23 什么是对象 Objects Webster字典 1 某种确实存在的 可以被感官察觉到的物质 2 思想 感觉或行为指向的某种精神或物质的东西 对象入门 24 什么是对象 Objects 续 对象是指某个事物 大多对应于真实世界中的某个客观实体 但有些对象在真实世界中没有直接的对应物 是人们对某个事物或概念的一种抽象描述 对象是封装了状态和行为的 具有明确的界面和身份定义的离散实体 所有的对象都是有唯一标识的独立实体 对象之间的区别是由它们固有的存在性所决定的 而与它们的特征是否相同无关 对象的基本特征可以归纳为属性行为 对象入门 25 什么是软件对象 Softwareobjects Barker 软件对象指的是将数据 状态 和功能 行为 捆绑为一体的软件结构 合在一起代表现实世界 包括物理和概念的 对象的一个抽象 描述 计算机软件中的对象对问题域中的对象的一种抽象描述描述方法 计算机语言 使其可以被计算机理解并执行自然语言或者某种建模语言 对象入门 26 什么是软件对象 续 杯子 实物 一种客观存在的物体属性 静态特征 如尺寸 容积 材料 厂家 所有者 行为 动态行为特征 如盛水杯子 软件对象 对杯子的一种抽象描述或实现属性 静态特征的描述或实现 存储 行为 动态行为的描述或实现 操作 Mr Peter 对象入门 27 例 classStudent private Stringname student snamepublic Student Strings name s StringgetName returnname createanobjectofstudentStudents newStudent 王小兰 printouthernameSystem out println s getName s 对象入门 28 什么是面向对象 Obejct orientatiaon 邵维忠 是一种新兴的程序设计方法 或者说是一种新的程序设计范型 paradigm 其基本思想是使用对象 类 继承 封装 消息等基本概念来进行程序设计 面向对象不仅是一些具体的软件开发技术与策略 而且是一整套关于如何看待软件系统与现实世界的关系 以什么观点来研究问题并进行求解 以及如何进行系统构造的软件方法学 对象入门 29 面向对象方法 对象技术词典 Object orientation一种使用对象 它将属性和操作封装为一体 消息传送 类 实例和继承等概念的技术一种基于对象 类 继承 封装 多态和动态绑定来开发问题域模型之解的范型面向对象方法一种运用对象 类 继承 封装 聚合 消息传送 多态性等概念来构造或开发 软件 系统的软件开发方法 对象入门 30 面向对象方法的主要特点 从问题域中客观存在的事物出发来构造软件系统 用对象作为对这些事物的抽象表示 并以此作为系统的基本构成单位事物的静态特征 即 可以用一些数据来表达的特征 用对象的属性表示事物的动态特征 即 事物的行为 用对象的服务 或操作 表示对象的属性与服务结合为一体 成为一个独立的实体 对外屏蔽其内部细节 称作封装 对象入门 31 对比结构化方法 过程型分析模块化程序 数据结构 算法 StructStudent charname MAXSIZE 1 students MAXSIZE 1 getName Student s returns name Test Student s students 0 strcpy s name 王小兰 printf s n getName 对象入门 32 面向对象方法的主要特点 续 对事物进行分类 把具有相同属性和相同服务的对象归为一类 类是这些对象的抽象描述 每个对象是它的一个实例通过在不同程度上运用抽象的原则 较多或较少地忽略事物之间的差异 可以得到较一般的类和较特殊的类 特殊的类继承一般类的属性和服务 面向对象方法支持对这种继承关系的描述和实现 从而简化系统的构造过程及其文档复杂的对象可以用简单对象作为其构成部分 称作聚合 对象之间通过消息进行通信 以实现对象之间的动态联系和协作通过关联来表达对象之间的静态关系 对象入门 33 举例 学生注册系统工作过程 典型场景 学生注册系统 对象入门 34 编程语言的发展 鸿沟变窄 计算机 自然语言 面向对象语言 结构化描述语言 汇编语言 机器语言 客观世界 问题域 语言的鸿沟 对象入门 35 传统的软件开发方法上的鸿沟 计算机 自然语言 需求分析 结构图 概要设计 流程图 PDL 详细设计 汇编语言 编码 测试 客观世界 问题域 分析与设计的鸿沟 设计的鸿沟 设计与实现的鸿沟 高级程序设计语言 代码实现 检验 验证 对象入门 36 面向对象软件开发方法 计算机 OO 自然语言 问题描述 OOA 需求模型 OOD 设计模型 OOP 编码 OOT 测试 客观世界 问题域 OOV 验证 面向对象建模方法 对象入门 37 类 类是一组具有共同特性的所有对象成员的抽象描述定义这种对象所需要的数据结构 属性及其类型和名称 定义这种对象所拥有的操作 方法 实例化对象是类的实例 内存中创建数据结构以容纳新创建的对象的属性 将对象和一定的行为集建立关联例 学生类 描述学生注册系统中所有注册的学生对象 对象入门 38 类的命名规则 类名 每个单词的首字母大写例 Student ScheduleOfClasses属性名和操作名 第一个单词的首字母小写 后面的单词的首字母大写例 name nameOfPerson 对象入门 39 数据 属性 状态 属性 描述对象静态特性的一个数据项例 记录一个学生 对象 的信息该学生的姓名 ID 出生年月日 住址专业 累计学分 累计平均成绩 GPA 专业导师姓名本学期正在学习的课程清单已修完的课程的学期和成绩数据 属性值 对象入门 40 数据 属性 状态 续 状态 对象的属性值被认为定义对象的状态或条件例 如果要决定一个学生是否能够毕业 一个状态 要综合考虑以下因素成绩单 中各科成绩 正在学习的课程清单 课程名称等 是否达到所学专业对课程学习的要求 对各门课程成绩的要求 对象入门 41 行为 操作 服务 方法 行为 对象的动态特性 反映对象的某种能力服务 用来描述对象动态特性 行为 的一个操作序列 以对其它对象的请求给予必要的回应操作 用来描述对象的一个基本的动态特性 行为 基本服务 外界可以访问的操作内部计算或处理方法 操作的一种实现方法请求 是一个消息 对象A向对象B提出的请求f 必须是通过对象B对外提供的一项服务B f来实现的 对象入门 42 例 一个学生对象与学校 SRS 相关的行为 选择某一门课程取消某一门课程选择一个学习专业选择一个导师当被询问时告知自己的累计平均成绩 GPA 告知是否选择了某一门课程 如果选择了 还要告知这门课程的讲课教师和取得的成绩操作可以改变对象的状态 对象的属性值 对象入门 43 行为 操作 方法 续 很难想象一个没有生命的对象会有行为 但是 如果把它们想象成为一些有生命 或行为 的对象 则便可以赋予它们一些操作 以描述它们的动态特性例2 一门课程 在计算机中的对象 的行为允许一名学生登录判断某一个学生是否已经登录告知有多少学生已经登记选课告知该课允许多少学生登记选课告知课程的学分数告知本学期哪位教授讲授本课程 对象入门 44 对象的图形化表示 课程清单 图1对象图 学生对象与课程对象 对象入门 45 类的图形化表示 复杂类型 作为属性的对象 图2类图 学生类 对象入门 46 复合类 作为属性的对象ClassStudent Professoradvisor ClassProfessor StudentstudentAdvisee 图3类图 教授类 对象入门 47 数据词典 类 词汇对照及说明表 编号 模型编号 包编号 模型图编号 模型元素编号 对象入门 48 数据词典 属性 词汇对照及说明表 对象入门 49 数据词典 操作 词汇对照及说明表 对象入门 50 封装 是将对象的状态信息 属性 和行为 方法 捆绑成一个逻辑单元的机制 并尽可能隐蔽对象的内部信息 C语言 structstudent charname 30 floatgpa GPA floatgrades listofgradesintn grades numberofgrades floatgpaIs structstudent s floats 0 for inti 0 in grades i s s grades i return s gpa s n grades C 语言 classStudent private charname 30 floatgpa GPAfloatgrades listofgradesintn grades numberofgradespublic floatgpaIs floats 0 for inti 0 i n grades i s grades i return gpa s n grades Students 一个对象实例s gpaIs 调用它的方法 对象入门 51 封装 Java类 classStudent privateStringname privatefloatgpa GPAprivatefloat grades listofgradesprivateintn grades numberofgradespublicStudent Strings name s publicfloatgpa inti gpa 0 0F for i 0 i n grades i gpa grades i return gpa gpa float n grades othersomitted 对象入门 52 实例化对象 一个引用变量用来引用 访问 一个对象Studenty y newStudent 句柄 如果一个引用变量 控制 某个对象 便称其为对象的句柄 对象入门 53 Java中的对象引用 变量 例 Studentx x 是一个指向一个Student类的实例 对象 的变量 x 称作一个引用 或一个Student对象的引用 x 只具备了引用一个Student对象的潜在能力 但在内存中并没有创建一个对象 例 Studenty null y newStudent null值 空 y 被赋了一个对象例 x y x也指向y所指的这个对象 对象入门 54 Java中的变量的命名规则 与方法 属性的命名规则相同例 Studentx StudentaStudent CourseprerequisiteOfThisCourse ProfessormyAdvisor 对象入门 55 对象与数据库记录 一个对象类 不考虑其操作 如同关系数据库中的表表中的每一条记录如同一个特定的对象实例表中的每一列如同相关类中的一个具体的属性但是 对象具有行为 而记录没有数据库的 表 中要求 主键 等 以便提供每条记录的 唯一标识 和建立与其他相关表之间的关联关系 对象也有 唯一的标识性 在程序中通常是靠 句柄 来标识 也可以定义一个具有唯一性的属性 比如 唯一的标识码 对象入门 56 类图模型 类及其相互之间的关系 关联性 图4类图 系 教授 学生 课程 registerForCourse 见第6章 对象入门 57 问题 请用一句话简要地解释下列公式的含义 软件 程序 文档 数据请用一小段话解释什么是面向对象软件开发方法 或者面向对象方法的主要特征 提交作业 用学号登录系统 密码也是学号 对象入门 58 第4章对象的交互 事件驱动的对象协作对象的行为定义 命名建议消息传递和点的表示法委派 授权 访问对象对象客户和对象服务 代理信息隐藏 可视性 但是 莫瑞尔 鲁凯赛 美国女诗人 说 世界是由故事而非原子组成的 对象入门 59 面向对象软件的最简单的开发和使用过程 确定需求确定应用程序的功能需求和总体任务系统设计与实现设计适当的对象类 并由这些对象类来搭建起能够很好地实现或完成功能需求和总体任务的系统系统运行将类实例化 以创建系统中的对象系统提供服务通过外部事件来触发这些对象 这些对象通过协同工作来为外界请求者提供服务 对象入门 60 对象系统实例 学生选课场景 UML顺序图 对象入门 61 对象系统实例 学生注册 注册 课程 对象入门 62 事件驱动的对象协作 外部事件触发对象之间的通信 例 单击一个按钮 发出一个学生想选修某门课程的请求 保证请求的课程是学生毕业需要的课程 保证该课程有供学生选课的空闲名额 即授课地点 以核实座位容量 该学生的成绩单 以保证该学生满足这门课程的预修课程的要求 图5对象图 学生 课程 教室 成绩 学位程序 check course selected registerForCourse course selected attend student verifyCompletion Course 对象入门 63 对象类的行为定义 如何定义对象类的行为 对象类提供的每一个操作 方法 都可以看作是此类对象提供的一种服务 也就是一种行为当A类对象a向B类对象b请求某些服务时 对象a需要知道和对象b通话的 特定语言 即B类对象提供的 可供A类对象引用的所有操作的集合 在通信中常被称作 协议 对象入门 64 对象类的交互语言 这种语言是由B类定义的一组操作构成的每个操作应当提供三方面的信息操作名 对象a要明确指明需要对象b提供哪种服务 或执行哪种操作 例如 你自己 a 请求教务秘书 b 查询一门课程 注册一门课程 或取消一门课程操作参数 对象a需要提供给对象b的附加信息例如 查询什么书返回类型 例如 返回查询到的书e g a b query Math 请求b查询课程Math 对象入门 65 方法的特征标记 用法说明 Signature 行为特征的名称和参数 如操作或信号 包括其返回类型 操作有 而信号没有 接口定义 消息或通信协议方法的名称传递给方法的用圆括号括起来的参数序列方法的返回类型应当有明确的语义定义 即该方法是做什么的但是 没有具体的实现体 即没有规定如何做 对象入门 66 传递参数 向方法传递参数 以给对象提供完成某项任务所必需的要求 或数据 例 注册课程 课程编码 课程班编号booleanregisterForCourse StringcourseID StringsecNo 对象入门 67 返回类型 例 booleanregisterForCourse voidsetName StringnewName 对象入门 68 方法主体 例 classStudent Attributes floatgpa Hereisafull blownmethod completedwithabody ofcodetobeexecutedwhenthemethodisinvoked booleanisHonorsStudent Theprogrammingdetailsofwhatthismethod function istodo gobetweenthecurlybraces thisisthemethodbody if gpa 85 returntrue 85of100pointselsereturnfalse endofthemethodbody 对象入门 69 方法的命名建议 在为方法和参数起名时 名称应当是一种 描述性 的名词或名词组 以便于理解和记忆 例 voidswitchMajor StringnewDepartment ProfessornewAdvisor 显然优于voidswitch Stringdept Professorp 对象入门 70 消息传递和点表示法 一个消息就是一个 引用某对象方法的 表达式由代表接收该消息的对象的引用变量的名称 后面跟一个点 和带有入口参数的一个方法引用构成 例 object method args amessagetoobject 对象入门 71 例 给一个Student对象发送一个消息 InstantiateaStudentobject Studentx newStudent x setName Jeff SendamessagetoStudentobject x askingtoregisterfor courseMATH101 section10 x registerForCourse MATH101 10 Thisisamessage 对象入门 72 对象之间的通信过程举例 1 Student类 BooleansuccessfullyCompleted Coursec 变量c表示某一个Course对象 通过调用方法来询问该Student对象 是否选修并通过了该课程Course类 Booleanregister Students 变量s表示某一个Student对象 通过调用该方法来询问Course对象是否接纳该学生注册该课程 返回值是True表示注册成功 False表示失败 对象入门 73 对象之间的通信过程举例 合作图 2 图6合作图 课程注册 对象入门 74 对象之间的通信过程举例 顺序图 3 s Student u GUI c register s s sucessfullyCompleted c2 True True 1 一个Course对象c收到一个消息 c register s 其中s表示一个学生对象 消息的来源可以由用户和学生注册系统的GUI界面交互时触发产生 2 课程对象c要决定学生对象s是否被允许注册 发出消息 s successfullyCompleted c2 对于学生s来说 c2是Course对象c的一门预修课程的引用 不必关心c是如何知道c2是其预修课 它和与c内部的prerequisites属性的交互有关 3 对象s返回True给对象c 表示对象s已经成功地完成了预修课程c2的学习 这里 忽略了s是如何判断的 这和与s内部的transcript属性的交互有关 可以通过 委派 机制来实现 4 确信该学生已遵循该课程的要求完成了预修课程的学习后 Course对象c完成对该学生的注册工作 并返回True 表示注册成功 c Course 图7顺序图 课程注册 对象入门 75 用点表示法访问属性 对象的引用变量 属性例 Instantiatethreeobjects Studentx newStudent Studenty newStudent Professorz newProfessor Weusedotnotationtoaccessattributesasvariables x name JohnSmith Setstudentx sname thatmustbepublicy name JoeBlow Setstudenty snamez name x name Setprofessorz snametobethesameasstudent sx snamex age 21 Setthestudentx sagetobe21y age 23 Setthestudentx sagetobe23inti x age y age 2 Computetheaverageagesofthetwostudents 对象入门 76 访问对象 对象A传递一个消息给对象B的唯一途径是A可以访问B的一个句柄 变量引用 几种访问方式 对象B的句柄被作为A的一个属性成员对象B的句柄被作为A的方法的一个入口参数对象B的句柄被作为全局变量这样 所有其它对象都可以访问它对象A可以通过调用第三方对象C的方法来请求对象B的句柄 对象入门 77 例 访问对象 对象B的句柄被作为A的一个属性成员例 Student类中有一个属性是Professor类的句柄 所以 任何一个Student类的对象都可以访问他的导师 classStudent handlerofthestudent sadvisorProfessorfacultyAdvisor etc 学生s访问他的导师 s facultyAdviser getName 对象入门 78 例 访问对象 续 对象B的句柄被作为A的方法的一个入口参数例 Course对象c通过它的register方法来访问Student对象sc register s 对象A可以通过调用第三方对象C的方法来请求对象B的句柄例 classA aMethod 类A的对象通过对象s得到他的成绩单对象tt s getTranscript 得到s的成绩单If t successfulCompletion c2 true 预修课c2已经修完 omitted 对象入门 79 客户对象和服务 代理对象 当对象A向对象B发送一个消息时 即请求B执行一个方法 或称向B请求一项服务 此时 称A是一个客户对象 B是一个服务或代理对象将调用对象B的方法的代码称为与B相关的客户代码当对象A可以看作是对象B的一个客户时 则B也可以看作是A的一个服务或代理 对象入门 80 例 客户对象和服务 代理对象 publicclassSRS publicstaticvoidmain String args Coursec newCourse Students newStudent Detailsomitted InvokeamethodonCourseobjectc c register s etc 对象入门 81 信息隐藏 可见性 可见性 表示对象 属性或方法 的一个特性是否可以在客户代码中通过其引用变量并采用点表示法来直接访问 公用的 public 表示在客户代码中可以采用点表示法直接访问私用的 private 表示在客户代码中不可以采用点表示法直接访问 即除了该对象本身以外 其它对象均不能直接访问之 受保护的 protected 其子对象可以访问 对象入门 82 公用的和私用的可见性设置规则 一般规则 一般应当将属性声明为私用的一般应当将向外界提供服务的方法声明为公用的私用的属性与专为其定义的 共用的获取 设置方法一起构成一个完整的 完备的 整体要点 对于仅供内部使用的私用属性 无需配备获取 设置方法仅供内部使用的方法 应声明为私用的方法为了提供便捷的访问方式 有些经常要被直接访问 无需做任何检查 的属性可以被声明成公用的适当地运用可见性 可以更好地实现类的封装 对象入门 83 练习4 根据你对选课制度的了解 给出学生选修课程的基本规程 参照图1至图7 建立下列类模型提取并定义必要的对象类 如学生 教授 系 成绩单 课程 学位计划 教室等 对于每一个类 给出必要的属性和操作 确定各对象类之间的基本关系 建立类模型 针对类模型 建立相应的数据词典 对象入门 84 练习4 续 采用顺序图来描述一个学生成功地注册一门课程的处理过程 即在这个过程中 各个对象之间的通信过程 并对对象类的操作做必要的补充或修改 用Java或C 设计并实现上述对象类 对类中的操作 应采用简单合理的方法来实现 实现一个简单的应用程序 支持学生注册一门课程 以学生 王小兰 注册课程 面向对象技术基础 其预修课程为 Java程序设计 为例 检验你所实现的程序 练习5 某人X 在一个陌生的路口见到三个人A B C正在聊天 便走上前去向A问路 如 请问到M处怎么走 试设想一种可能的对话场景 并用顺序图来描述之 讨论 自愿组成讨论小组 研讨应该有多少种必需的且彼此不重复的基本场景 即不可能用其它更间断的对话场景取代 请用uml desinger绘制出这些场景的顺序图 附上小组成员名单 于周五前提交 对象入门 85 对象入门 86 第5章对象类之间的关系 类的关联性 Association 关联的多值性 Multiplicity 对象之间的连接 Link 聚合与组成 AggregationandComposition 泛化与继承 GeneralizationandInheritance 泛化关系继承继承的好处与问题类的层次结构波动的影响多重继承 对象入门 87 关联性 关联 Association 表示对象类之间存在的某种结构 或者通信 关系例 一个学生选修一门 或多门 课程一个教授讲授一门 或多门 课程一个学位计划中需要 至少 一门课程 图8类图 学生 课程 教授 学位计划 对象入门 88 关联的多重性 Multiplicity 定义在关联端的多重性 说明在关联的一端可以有多少个对象参与 对于二元关联 目标端的多重性限制了源端的一个对象可以与目标类的多少个对象之间有关联 表示法 1对1 1对多 多对多 选择 1 1 1 1 0 1 N 1 N 1 2 4 6 对象入门 89 连接 Link 连接 Link 表示两个特定对象 实例 之间存在的某种结构关系 连接是关联的实例例 JoeBlow Student Math101 Course FredSchnurd Student MarySmith Student History723 Course JohnSmith Professor MikeGhows Professor 选修 选修 选修 图9对象图 学生 课程 教授 对象入门 90 聚合和组成 聚合 Aggregation 是一种特殊的关联 表示一种 整体与部分 的关系 如 包含 由 组成 由 构成 是 的一部分 包括 等这种聚合关系所描述的 整体 与 部分 之间的关系可以是松散的 即 部分 可以不依赖于 整体 而独立存在 且可以从属于多个 整体 或称与多个 整体 所共享 Section Student 对象入门 91 聚合和组成 续 组成 Composition 是一种特殊的聚合 也表示一种 整体与部分 的关系组成关系所描述的 整体 与 部分 之间的关系必须是紧耦合的 即 部分 不能独立于 整体 而单独存在 且不可以从属于多个 整体 即不可以被多个 整体 所共享 成绩单 成绩项 对象入门 92 关联的实现 多种实现方式属性关联 类的一个属性是其所关联的对象的一个引用 句柄 操作关联 类的一个操作的参数是一个相关的类服务 消息 关联 类的一个方法体中引用另一个相关类的属性或操作 服务 关联类 关联本身含有自身的属性和操作其它方式 辅助类等 classSection privateStudent students 属性关联 聚集 privateVectorstudents 借助聚集类publicisInSection Students 参数s getStudentId 方法调用 消息 对象入门 93 泛化关系 Generalization 泛化关系定义两个同类 可泛化的 元素之间存在的一般与特殊关系 即一般元素说明了所有同类的特殊元素所具有的共同特性 特殊元素说明的实例除了带有该一般元素说明的所有共同特性之外 还具有自己的独有特性 一般元素称作父 特殊元素称作子 泛化是一种可传递的反对称关系 可泛化元素 类 用例 其它类元 关联 状态 时间 协作 对象入门 94 类的泛化 如果对象类A是对象类B的父类 则类A是对其子类B的一种抽象 泛化 它描述了所有属于一般类A的对象 包括类B中的所有对象 所共有的特征子类B是对其父类A的一种特化 Specialization B类对象除了具有A类的所有共同特征外 还可以具有其特有的一些特征 常用来表达A类对象 是一个 或 是一种 isa B类对象 即A是B的子类 对象入门 95 类的泛化举例 图10类图 人 学生 教授 对象入门 96 继承 Inheritance 继承 一种使得一个较具体的元素遵从一个较一般的元素定义的结构和行为的机制特殊类 子类 的对象 自动地或隐含地 拥有其一般类 父类 的全部属性与操作 服务 特殊类既有自己新定义的属性和操作 又有从它的一般类中继承下来的属性和操作继承是可传递的继承可以看作是泛化关系的一种实现机制并非所有的泛化关系都适合用继承关系实现 对象入门 97 例 研究生是学生 例 已经有一个定义得很好的类Student 则可以在此基础上 进一步定义GraduateStudent 图11类图 学生 研究生 对象入门 98 例 研究生是学生 续 classGraduateStudentextendsStudent Declaretwonewattributesaboveandbeyond whattheStudentclassdeclares privateStringundergraduateDegree privateStringundergraduateInstitution andapairofaccessor modifiermethods foreachofthenewattributespublicStringgetUndergraduateDegree returnundergraduateDegree publicvoidsetUndergraduateDegree Stringu undergraduateDegree u C classA A0 omits 对象入门 99 继承关系 泛化的实现 例 PersonisageneralizedconceptclassPerson omitted StudentandProfessorareconcreteclassesclassStudentextendsPerson omitted classProfessorextendsPerson omitted 对象入门 100 继承的优点与缺点 优点继承使得导出类变得非常简洁明了通过继承 可以达到重用的目的重用和扩展那些已经通过测试甚至大量实际应用的代码 对象入门 101 继承的优点与缺点 续 缺点继承深度不宜太深 并非所有泛化关系都适合用继承关系来实现多重分类问题公用特性的不当继承问题波动影响当对一个父类所修改时 这些改动会波及到其所有的子类 对象入门 102 重构 Overriding 重构是指在不改变这个方法的接口 特征标记 的情况下 方法的实现体 在子类中 被重新定义同一个操作的实现方法可以是不同的 对象入门 103 重构举例 Student print classStudent attributesomitted printoutalltheattributesvoidprint System out println StudentName name n StudentNo studentId n MajorField majorField n GPA gpa 对象入门 104 重构举例 UndergraduateStudent print classUndergraduateStudentextendsStudent attributesomitted printoutalltheattributesvoidprint System out println StudentName name n StudentNo studentId n MajorField majorField n GPA gpa n HighSchoolattended highSchool n THISISANUNDERGRADUATESTUDENT n reusethecodefromtheStudentsuperclasseSuper print andthengoontoprintthissubclass sattributesSystem out println HighSchoolattended highSchool n THISISANUNDERGRADUATESTUDENT n 对象入门 105 重构举例 GraduateStudent print classGraduateStudentextendsStudent attributesomitted printoutalltheattributesvoidprint System out println StudentName name n StudentNo studentId n MajorField majorField n GPA gpa n Undergrad Deg undergraduateDegree n Undergrad Inst undergraduateInstitution n reusethecodefromtheStudentsuperclasseSuper print andthengoontoprintthissubclass sattributesSystem out println Undergrad Deg undergraduateDegree n Undergrad Inst undergraduateInstitution n 对象入门 106 运用重构 Overriding 需注意的问题 不能也不应当改变特征的语义例 假如Person的属性name是用来存储一个人的名字 并以 姓 名 的格式存放 则其子类Student的属性name也应该使用相同的格式 不能替代属性 子类中不能改变属性的名字和类型不能 删除 或屏蔽父类的特征 不能 忽略 父类中已经定义的特征 特别是那些公用的属性和操作 除非是 受保护的 protected 不能改变一个操作的特征标记 即操作的名称 参数类型和数量 返回值类型 对象入门 107 重载 Overloading 重载机制允许在一个类中定义两个或多个同名操作 这些操作必须具有不同个数或类型的参数 例 booleanprint noargumentvoidprint Stringfilename asingleargumentvoidprint intdetailedLevel differentargumenttypevoidprint intdetailedLevel Stringfilename twoarg Intprint StringreportTitle inmaxPages twodiff arg 对象入门 108 多重继承 一个子类可以有多个父类多继承的冲突Java中 不允许 可使用接口 Interface 学生 教师 学生教师 人 图12类图 学生教师 对象入门 109 多态性 Polymorphism 问题 如何使得不同类的对象对同一个消息做出各自不同的反应 多态性是指对于一个完全相同的消息 方法调用 属于不同类的两个或多个对象各自以其特有的方法 由其所属的类定义的方法 做出适当应答的能力 对象入门 110 例 打印不同类型学生的属性的操作 Student s newStudent 100 Assign100studentsintothearray includingundergraduate graduateones aswellassomefromhighschoolsfor inti 0 i 100 i invokingtheprint method ofthei thstudentobject s i print po
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 劳务合同模板
- 租赁合同:融资租赁协议3篇
- 集体耕地承包合同2篇
- 瑞吉氏染色课件
- 安全方面的培训课题课件
- 理财和养老课件
- 理想华莱课件教学
- 店面升级装修工程方案(3篇)
- 电厂氨水改造工程方案(3篇)
- 球磨机培训课件
- 资源调查与评价-课件
- 新型给药系统行业分析报告
- 特种设备日管控、周排查、月调度模板
- 山东钢铁集团矿业有限公司彭集铁矿采选工程项目环境影响报告
- 员工信息安全培训手册
- 华为项目管理10大模板Excel版可直接套用-非常实用
- 空管三校联考复习题(DOC)
- GB/T 27021.3-2021合格评定管理体系审核认证机构要求第3部分:质量管理体系审核与认证能力要求
- 3000储罐预制安装施工方案
- 食品工程原理(课堂)课件
- 五年级上册数学课件-《练习一》北师大版 (共10张PPT)
评论
0/150
提交评论