北京大学研究生软件工程课程面向对象方法RU_第1页
北京大学研究生软件工程课程面向对象方法RU_第2页
北京大学研究生软件工程课程面向对象方法RU_第3页
北京大学研究生软件工程课程面向对象方法RU_第4页
北京大学研究生软件工程课程面向对象方法RU_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SoftwareEngineering·PekingUniversity面向对象方法与RUP北京大学研究生软件工程课程Contents课程目录北京大学研究生软件工程课程核心模块概览,涵盖面向对象方法与RUP实践体系。01软件工程框架与开发范型02面向对象核心概念与原理03UML统一建模语言体系04RUP过程与实践应用CHAPTER01软件工程框架与开发范型理解软件工程的本质问题与开发活动全景COREOBJECTIVES软件工程的工程目标软件工程的核心目标是生产具有正确性、可用性和开销合宜的产品。这三个维度相互制约又相互支撑,构成了评价软件产品质量与工程效能的完整框架,也是选择开发范型和方法论的根本出发点。正确性软件产品达到预期功能的程度,要求在需求定义的功能范围内表现出符合预期的行为,是软件工程最基本的质量要求。正确性确保软件按规格说明准确执行,避免缺陷和错误。功能正确·行为可预期可用性涵盖软件基本结构、实现及文档为用户可用的程度,强调软件不仅要能运行,还要便于理解、操作和维护。良好的可用性降低学习成本,提升用户满意度。易于维护·用户友好开销合宜开发和运行的整个生命周期开销满足用户要求,包括时间成本、人力成本和计算资源消耗的合理控制。在预算约束内交付高质量软件是工程实践的关键挑战。资源可控·成本优化平衡与张力三大目标之间存在内在张力:追求更高正确性可能增加开发开销,过度优化开销可能影响可用性,工程实践的核心在于根据场景需求动态权衡取舍,寻求最优解。工程权衡·动态优化SoftwareEngineeringFundamentals软件开发的基本活动软件开发包含需求分析、设计、实现、验证/确认和维护五大基本活动。这些活动构成了软件生命周期的核心骨架,不同开发范型的本质区别在于这些活动的组织方式、迭代策略和交付节奏。01需求分析RequirementAnalysis从问题空间中提取和定义用户需求,建立系统应该"做什么"的精确描述,是后续所有活动的基石02设计Design将需求转化为系统的结构和行为方案,解决"怎么做"的问题,包括架构设计、详细设计和接口设计等层次03实现Implementation将设计方案转化为可执行的程序代码,是软件从抽象概念走向具体产品的关键环节04验证/确认Verification/Validation验证确保"我们正确地构建了产品",确认确保"我们构建了正确的产品",两者缺一不可05维护Maintenance在软件交付后进行纠错性、适应性和完善性修改,维护成本通常占软件全生命周期总成本的60%以上MAPPINGPRINCIPLE软件开发的本质:问题空间到解空间的映射软件开发的本质可概括为问题空间的概念与解空间的模型化概念之间的映射。不同的开发范型提供了不同的映射原理和技术手段,其中面向对象方法通过数据抽象实现了从现实实体到计算客体的自然映射。面向对象映射映射示例对象=F(张山)将问题空间中的真实实体映射为解空间中的计算客体对应需求分析阶段,采用面向对象技术基于数据抽象原理,建立可直接作为计算客体的模型强调封装、继承与多态性,实现现实世界的自然建模数据抽象·DataAbstraction结构化映射映射示例加工1+数据流=F(计算学生成绩)将问题空间的处理逻辑映射为解空间的处理过程对应需求分析阶段,采用结构化分析方法基于过程抽象原理,关注数据在系统中的流动与变换通过数据流图、数据字典等工具描述系统功能过程抽象·ProcessAbstractionENGINEERINGPRINCIPLES软件工程的四大工程原则实现软件工程目标需要遵循四大工程原则:采用合适的开发范型奠定方法论基础,使用好的设计方法保障系统质量,提供高质量的工程支持提升效率,实施有效的工程管理确保项目可控。PRINCIPLE01采用合适的开发范型根据项目特征选择面向过程、面向对象、敏捷或混合范型,为整个开发活动提供方法论指导方法论基础PRINCIPLE02使用好的设计方法运用模块化、抽象、信息隐藏等设计原则,确保系统具有良好的结构和可维护性系统质量PRINCIPLE03提供高质量的工程支持构建完善的开发工具链、测试环境和持续集成平台,为开发团队提供高效的技术基础设施效率提升PRINCIPLE04实施有效的工程管理建立项目计划、质量保证、配置管理和风险控制体系,确保项目在预算和进度内交付项目可控PARADIGMCOMPARISON开发范型对比:结构化方法与面向对象方法结构化方法以过程抽象为核心将系统视为数据变换集合,面向对象方法以数据抽象为核心将系统视为协作对象群。结构化方法01过程抽象为核心将系统分解为功能模块和数据流,自顶向下逐步求精,适合需求稳定的数据处理系统02优势与局限逻辑清晰、文档规范、易于验证,但模块间耦合度高,维护成本随系统规模急剧增长过程抽象·自顶向下面向对象方法01数据抽象为核心将系统组织为封装了数据和行为的对象,通过继承和多态实现代码复用和灵活扩展02核心优势与人类认知方式一致、支持渐进式开发、适应需求变化能力强,已成为软件工业界主流开发范型数据抽象·封装继承CHAPTER02面向对象核心概念与原理从基本思想到设计原则,系统构建面向对象方法论基础FUNDAMENTALS·核心概念面向对象的基本思想面向对象方法的核心思想是将客观世界视为由对象组成的系统,每个对象封装了静态属性和动态行为,对象间通过消息传递实现协作。这种思维方式与人类自然认知方式高度一致,使得软件开发从"计算机如何实现"转向"世界如何运作"。客观世界由对象组成任何客观实体都可以看作一个对象,从一本书到一家银行,从一辆汽车到一个订单,万物皆可为对象。万物皆对象对象具有属性与行为每个对象都包含描述其状态的静态属性和描述其能力的动态行为,二者共同构成对象的完整定义。属性+行为对象间通过消息交互对象不是孤立存在的,它们通过发送和接收消息来实现协作,共同完成系统的整体功能。消息协作分类与抽象机制具有相同属性和行为的对象归为一类,类是对对象的抽象描述,体现了从特殊到一般的认知规律。类与抽象OOPFundamentals对象与类:面向对象的核心概念对象是封装了属性和操作的运行时实体,具有唯一标识、状态和行为三要素。类是对具有相同特征的一组对象的抽象模板,类与对象的关系如同模具与产品的关系——类定义结构和能力,对象承载具体数据。面向对象编程中类与对象关系的教学示意对象的三要素:唯一标识(OID)确保系统中每个对象可被唯一区分;属性(Attribute)描述对象的静态状态;操作(Operation)定义对象的动态能力OID·Attribute·Operation类的双重角色:作为对象的创建模板定义了实例变量的结构和可执行的方法;作为类型定义规定了对象可接收的消息集合创建模板·类型定义实例化过程:通过类的构造方法创建对象实例,每个实例拥有独立的属性值但共享类定义的方法实现,体现了空间效率与代码复用的平衡空间效率·代码复用面向对象方法与RUP封装:信息隐藏的核心机制封装将对象的属性与操作绑定为不可分割的整体,同时隐藏内部实现细节仅暴露有限接口。封装是降低系统耦合度、提高模块独立性的关键机制,使得对象的使用者无需了解内部实现即可正确使用对象。ENCAPSULATION封装的两层含义数据与行为的绑定将属性值和操作方法封装在同一个对象中,形成高内聚的功能单元,确保数据只能通过预定义的方法被访问和修改高内聚ENCAPSULATION封装的两层含义实现细节的隐藏对外只暴露公共接口,隐藏私有属性和内部算法,使用者通过接口与对象交互而无需了解内部工作机制接口隔离ENGINEERING封装的工程价值降低耦合度对象间仅通过接口交互,修改内部实现不影响外部调用者,使得系统各模块可以独立开发、测试和演进独立演进ENGINEERING封装的工程价值提高安全性通过访问控制(public/protected/private)保护关键数据不被意外篡改,维护对象状态的一致性和完整性访问控制OOP·INHERITANCE继承:代码复用与层次构建继承使子类自动获得父类的属性和方法并可扩展或覆盖,建立"is-a"层次关系实现概念分类和代码复用。继承是面向对象方法中实现纵向复用的核心机制,但过度使用会导致继承层次过深和紧耦合问题,需要与设计模式中的组合策略互补使用。01继承的基本机制子类自动继承父类的全部属性和方法,可添加新成员或覆盖已有方法,形成从一般到特殊的层次化分类体系02单继承与多继承单继承(如Java)结构清晰但复用受限,多继承(如C++)能力强大但可能引发菱形继承等二义性问题03继承的工程价值减少重复代码、建立概念分类体系、支持框架扩展点设计,是实现"开闭原则"的重要手段04继承的局限性父类修改会影响所有子类,深层继承链难以理解,"is-a"语义不适用于所有复用场景,应优先考虑组合优于继承POLYMORPHISM·OOP多态:灵活性的终极武器多态使同一消息被不同对象接收时产生不同行为,调用者无需了解具体实现即可统一操作。多态是面向对象实现灵活架构的终极武器,通过运行时动态绑定机制,支持在不修改已有代码的前提下扩展系统行为。多态的表现形式FORMSOFPOLYMORPHISM多态的工程应用ENGINEERINGAPPLICATIONSDYNAMIC运行时多态(动态绑定)通过方法覆盖和向上转型实现,编译期确定接口、运行期确定具体实现,如父类引用指向不同子类实例。RUNTIMEBINDINGSTRATEGY策略模式的基础将算法封装为独立对象,通过统一接口在运行时切换策略,实现行为的灵活组合而不修改客户端代码。FLEXIBLESWITCHSTATIC编译时多态(静态绑定)通过方法重载和泛型参数化实现,编译器根据参数类型和数量在编译期选择合适的方法版本。COMPILE-TIMEPLUGIN插件化架构的核心定义扩展点接口,第三方实现者提供具体实现类,主程序通过多态机制加载和调用插件而无需感知具体实现。EXTENSIBILITYPRINCIPLES面向对象的基本原则面向对象方法遵循抽象、信息隐藏、模块化、强内聚弱耦合等一系列基本原则。这些原则相互配合,从不同角度指导开发者构建结构合理、易于维护的软件系统,是面向对象分析与设计的方法论基石。抽象原则从具体问题中提取共同特征形成类定义,忽略与当前目标无关的细节,建立问题空间到解空间的清晰映射信息隐藏原则对象的内部实现细节对外部不可见,仅通过定义良好的公共接口进行交互,降低模块间的依赖关系模块化原则将系统分解为相对独立的模块,每个模块具有明确的功能边界和接口定义,支持并行开发和独立测试强内聚弱耦合原则模块内部元素紧密相关(高内聚),模块之间依赖关系最小化(低耦合),是评价设计质量的核心指标OOMETHODOLOGY面向对象方法的主要优点面向对象方法凭借与人类认知一致、高复用性、强适应性等显著优势成为软件工业主流。其最大价值在于从分析到实现使用统一概念体系,消除了传统方法中各阶段之间的语义鸿沟,使软件开发更加自然和连贯。符合人类认知方式对象、类、消息等概念与人类认识世界的方式高度一致,降低了需求理解和团队沟通的认知成本认知一致高复用性与可维护性封装保护模块独立性,继承实现代码复用,多态支持灵活扩展,三者结合大幅降低维护成本封装·继承·多态统一的建模语言从需求分析到编码实现全程使用对象、类等统一概念,消除了数据流图到模块结构图的转换鸿沟统一概念适应需求变更能力强信息隐藏使局部修改不影响全局,开闭原则支持在不修改已有代码的前提下扩展系统功能开闭原则Chapter03UML统一建模语言体系掌握面向对象分析与设计的标准化图形表示法History&StandardizationUML概述与发展历程UML由Booch、Rumbaugh和Jacobson三位大师于1990年代联合创建,核心理念是充分运用面向对象基本概念,保持建模概念的简练。01历史背景1990s1990年代面向对象方法百花齐放,Booch方法、OMT、OOSE等各有不同的图形表示法,行业急需统一的建模标准。02三友合并1994-1996Booch、Rumbaugh和Jacobson联合工作,将各自方法的核心思想融合,创建了统一建模语言UML。03标准化进程19971997年UML1.1被OMG采纳为标准,此后经历多次修订,UML2.x引入了更精确的语义定义和更完善的图分类体系。04北大教学理念麻志毅麻志毅教授主张充分运用面向对象基本概念、限制扩充概念引入、加强过程指导以保持建模概念的简练和实用性。UMLDiagramTaxonomyUML图表分类体系UML2.x将图表分为结构图和行为图两大类共14种图表。结构图描述系统的静态组成,行为图描述系统的动态运行。结构图(静态视图)01类图ClassDiagram—描述类的属性、操作及类间关系,是面向对象分析与设计最核心的图表02对象图、包图、组件图、部署图、组合结构图—分别从实例、命名空间、物理组件、硬件部署和复合结构等视角补充静态描述6DiagramTypes行为图(动态视图)01用例图UseCaseDiagram—描述系统功能边界和角色交互,是需求分析阶段的关键产出02活动图、状态机图、序列图、通信图—分别从流程控制、状态变迁、时间顺序和消息传递等维度描述系统动态行为8DiagramTypesUSECASEDIAGRAM用例图:需求建模的利器用例图从用户视角描述系统功能边界,由参与者、用例和关系三大要素构成,是连接需求与设计的桥梁。ACTOR参与者:系统外部与系统交互的实体,可以是人、外部系统或硬件设备,识别参与者是定义系统边界的第一步。USECASE用例:系统为参与者提供的一个完整功能单元,必须产生对参与者有价值的可观测结果,粒度选择直接影响需求质量。RELATION关系类型:包含(include)表示必须执行的公共子功能,扩展(extend)表示可选的附加行为,泛化(generalize)表示用例间的继承关系。开发团队围绕用例图展开需求讨论UMLStaticStructure类图:面向对象设计的核心类图是UML中使用最频繁的图表,通过类、属性、操作和六种关系完整描述系统的静态结构。类图的质量直接决定了软件系统的架构质量。类的表示与可见性📐三层结构名称层(类名)、属性层(类型与默认值)、操作层(方法签名与返回值),通过+/-/#符号标记可见性。类名居中,属性与操作左对齐,清晰呈现类的完整接口定义。🔷类型区分抽象类用斜体类名表示,接口用<<interface>>构造型标记,区分具体类、抽象类和接口是良好设计的基础。准确识别类型有助于理解系统的扩展点和多态机制。六种核心关系🔗关联与聚合关联表示对象间的普通连接,聚合表示弱"整体-部分"关系,部分可独立于整体存在。聚合用空心菱形表示,体现一种"has-a"的语义。🔒组合与依赖组合表示强"整体-部分"关系,部分不能脱离整体,用实心菱形表示;依赖表示一个类使用另一个类的临时关系,用虚线箭头表示。⬆️泛化与实现泛化表示继承关系(is-a),用实线空心三角箭头;实现表示类对接口的承诺实现关系,用虚线空心三角箭头。两者都是面向对象多态的基础。UMLBEHAVIORALMODELING序列图与活动图:行为建模工具序列图按时间顺序展示对象间的消息传递,适合描述用例的详细交互流程;活动图描述业务流程的控制逻辑,支持并发分支和泳道划分。两者互补使用,序列图聚焦"谁与谁在何时交互",活动图聚焦"流程如何推进与分支"。SequenceDiagram序列图以时间为纵轴展示对象间的消息传递顺序,支持同步/异步消息、返回消息和自调用,清晰呈现交互的时间因果关系。ActivityDiagram活动图描述业务流程或算法的控制逻辑,支持条件分支、并行执行和泳道划分,可建模复杂的业务规则和并发场景。序列图应用场景01适用于详细设计阶段,描述单个用例或操作的完整交互流程,帮助开发者理解对象协作的具体时序。02以时间为纵轴展示对象间的消息传递顺序,支持同步/异步消息、返回消息和自调用,清晰呈现交互的时间因果关系。时序交互活动图应用场景01适用于需求分析阶段描述业务规则和工作流,也适用于设计阶段描述复杂算法的执行步骤和异常处理路径。02描述业务流程或算法的控制逻辑,支持条件分支、并行执行和泳道划分,可建模复杂的业务规则和并发场景。流程控制UMLBEHAVIORALDIAGRAM状态机图:对象生命周期的建模状态机图描述单个对象在生命周期中所有可能的状态及状态间的转换条件。它是理解复杂业务对象行为的关键工具,特别适合描述订单、审批单据等状态变化丰富的实体。COREELEMENTS状态·事件·转换状态机由三个核心要素构成:状态(对象在某一时刻的条件或处境)、事件(触发状态转换的外部或内部刺激)、转换(从一个状态到另一个状态的迁移路径)。GUARDS&ACTIONS守卫条件与动作转换可附带守卫条件(只有条件满足时转换才发生)和动作(转换时执行的操作),精确控制状态迁移的触发逻辑。COMPOSITESTATES复合状态与历史状态支持状态的嵌套(一个状态内部包含子状态机)和历史记录(记住上次离开时的子状态),处理复杂对象的层次化状态。APPLICATIONS典型应用场景订单管理(待支付→已支付→已发货→已完成)、文档审批(草稿→待审→已通过/已驳回)、设备控制(开机→运行→暂停→关机)。CHAPTER04RUP过程与实践应用掌握Rational统一过程的核心框架与工程化实践CorePhilosophyRUP概述与核心理念RUP是由Rational公司开发的软件工程过程框架,以"用例驱动、架构为中心、迭代增量"为三大核心特征。RUP总结了六大最佳实践,将面向对象分析与设计方法嵌入到结构化的过程框架中,实现了方法论与工程实践的统一。三大核心特征01用例驱动:从需求捕获到测试验证,整个开发过程以用例为主线贯穿,确保最终产品切实满足用户需求02以架构为中心:在早期迭代中优先建立和验证系统架构,为后续的增量开发提供稳固的技术基础03迭代与增量:将项目分解为多个迭代周期,每个迭代交付一个可运行的增量,通过持续反馈降低项目风险六大最佳实践迭代式开发、需求管理、基于组件的架构:前三项关注开发策略,通过短周期迭代降低风险,通过组件化提高复用和可维护性可视化建模(UML)、持续质量验证、变更控制:后三项关注工程支撑,通过UML实现沟通,通过持续测试保障质量,通过配置管理控制变更LIFECYCLEPHASESRUP的四个阶段RUP将软件生命周期分为初始、细化、构造和移交四个阶段,每个阶段以里程碑结束并包含关键决策点。细化阶段是整个过程中最关键的环节。RUP四阶段工作量分布(典型比例)构造阶段占据最大工作量,但细化阶段的架构决策对后续影响最为深远01初始阶段Inception确定项目范围和商业案例,识别关键用例和主要风险,里程碑为生命周期目标LCO02细化阶段Elaboration分析80%以上需求,建立架构基线并化解高风险项,里程碑为生命周期架构LCA03构造阶段Construction以增量方式实现剩余功能,完成编码与测试,里程碑为初始运作能力IOC04移交阶段Transition交付给最终用户,含beta测试、性能调优与用户培训,里程碑为产品发布PRRATIONALUNIFIEDPROCESSRUP的九大核心工作流RUP定义六大工程工作流和三大支持工作流,在四个阶段中以不同强度交叉执行,形成二维矩阵结构,是RUP区别于瀑布模型的重要创新。六大工程工作流商业建模理解组织业务流程和领域模型,为系统定位提供业务上下文需求捕获、分析和管理用户需求,产出用例模型和非功能需求规格分析与设计将需求转化为系统设计方案,产出分析模型和设计模型实现·测试·部署编码实现设计方案,多层测试验证质量,部署到运行环境三大支持工作流配置与变更管理管理软件制品版本控制和变更请求,确保开发过程可追溯性项目管理制定计划、监控进度、管理风险和资源,保障项目按期交付环境配置和维护开发团队所需的工具、流程规范和基础设施ITERATIVE&INCREMENTALRUP的迭代与增量策略RUP每次迭代经历完整的需求-设计-编码-测试周期并产出可执行增量,遵循'风险优先'原则安排迭代内容。迭代开发的核心价值在于通过早期验证降低项目风险。PLANNING迭代规划原则每次迭代2-6周,优先处理高风险高价值需求,包含完整的分析、设计、编码和测试活动2–6周DELIVERY增量交付策略系统功能通过多次迭代逐步交付,每个增量都是可运行的子系统,用户可早期体验并反馈可运行增量RISK-DRIVEN风险驱动决策早期迭代集中化解架构风险和技术不确定性,'先难后易'确保项目后期不遭遇颠覆性问题先难后易ADAPTIVE持续评估与调整每个迭代结束时进行评审,根据实际进展和新发现的风险动态调整后续计划,实现适应性管理适应性管理RUP·OOADRUP中的面向对象分析与设计RUP通过BCE模式(边界类-控制类-实体类)组织面向对象分析与设计,从用例出发系统性地识别分析类。分析模型关注"系统做什么",设计模型关注"系统怎么做",两者之间是平滑演进而非断裂转换的关系。BCE分析模式实体类Entity—业务领域核心数据与持久化信息如订单、用户、商品等,从用例描述中提取名词概念,封装业务数据与状态边界类Boundary—系统与外部参与者的交互接口包括用户界面、API端点和外部系统适配器,隔离系统内外变化控制类Control—协调业务逻辑的执行流程如订单处理器、支付管理器,封装用例核心行为逻辑,实现关注点分离从分析到设计的演进平滑演进—分析模型聚焦功能需求的行为语义忽略实现细节;设计模型在此基础上加入平台特性、性能优化和技术选型等约束设计模式赋能—解决分析模型中的通用问题通过工厂、观察者、策略等设计模式提升复用性与可维护性,实现架构演进迭代精化—分析到设计并非一次性转换而是通过多次迭代逐步细化,每次迭代都可在前一层次基础上回溯调整ARTIFACTS&MILESTONESRUP的工件与里程碑RUP定义了一系列标准工件作为各阶段的有形产出,并在每个阶段末设置里程碑作为关键决策点。这种"工件+里程碑"的管理机制既保证了开发过程的可视化和可追溯性,又通过阶段门控制有效防止项目偏离轨道或过度镀金。RUP四阶段关键工件与里程碑对照阶段关键工件里程碑初始愿景文档、初始用例模型、风险清单LCO生命周期目标细化架构文档、详细设计模型、细化用例LCA生命周期架构构造代码增量、测试报告、用户文档草稿IOC初始运作能力移交用户手册、发布说明、最终测试报告PR产品发布摘要:每个阶段的里程碑是决定是否继续投入的关键决策点PROCESSTAILORINGRUP裁剪与轻量化应用完整RUP适合大型复杂项目,但实际应用中需根据项目规模进行裁剪。裁剪原则是"保留核心价值、去除冗余环节"——保留迭代策略、用例驱动和架构设计等核心实践,简化文档模板、减少评审层级、合并低价值工件。裁剪决策因素Scale项目规模与复杂度—大型多人协作项目需要完整RUP,中小项目可简化为精简版RUP或结合敏捷实践Ma

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论