软件设计师笔记-面向对象

    科技2026-08-07  20

    面向对象

    一、面向对象的基本概念

    究竟怎样才算真正的面向对象(object-oriented,oo)? 面向对象=对象(objects) +类(classes) +继承(inheritance) +消息通信(communication with messages)

    对象:系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。 对象三要素: 对象标识、属性和服务。 封装: 是对象的一个重要原则 两层含义: 1. 全部属性和全部服务紧密结合不可分割的整体 2. 对象是一个不透明的黑盒子,表示对象状态的数据和实现操作的代码都封装在黑盒子里面。 类: 具有相同属性和服务的一个或者一组对象的抽象,类与对象是抽象描述和具体实例的关系,一个具体的对象被称作类的一个实例。 继承与泛化: 用来说明特殊类(子类)与一般类(父类)的关系,通常使用泛化来说明一般类与特殊类之间的关系,它们之间是一对多关系。 多态性与重载: 一般类中定义的属性或服务被特殊类继承后,可以具有不同的数据类型或表现出不同的行为,通常是使用重载和改写两项技术来实现的。

    例题: 消息和消息通信: 消息:向对象发出的服务请求,它通常包括提供服务的对象标识、消息名、输入信息和回单信息。 消息通信:面向对象方法学中的一个重要原则,它与对象的封装原则密不可分,为对象间提供唯一合法的动态联系的路径。 面向对象方法学的优点: 1. 与人类习惯的思维方法一致 2. 稳定性好 3. 可重用性好 4. 较易开发大型软件产品 5. 可维护性好

    二、面向对象程序设计

    继承成员访问控制机制:

    三、面向对象分析与设计方法

    OOA/OOD OOA中定义了两种对象类之间的结构:分类结构和组装结构 is a 组合 Booch方法: Booch认为软件开发是一个螺旋上升的过程,在这个螺旋上升的每个周期中,有以下几个步骤:

    发现类和对象确定它们的含义找出它们之间的相互关系说明每一个类和对象的界面和实现 静态模型动态模型逻辑模型类图对象图状态装换图时序图物理模型模块图进程图

    OMT方法: OMT方法定义了三种模型:对象模型、动态模型、功能模型

    #mermaid-svg-Gm6IBUqBXl4iArWp .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-Gm6IBUqBXl4iArWp .label text{fill:#333}#mermaid-svg-Gm6IBUqBXl4iArWp .node rect,#mermaid-svg-Gm6IBUqBXl4iArWp .node circle,#mermaid-svg-Gm6IBUqBXl4iArWp .node ellipse,#mermaid-svg-Gm6IBUqBXl4iArWp .node polygon,#mermaid-svg-Gm6IBUqBXl4iArWp .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-Gm6IBUqBXl4iArWp .node .label{text-align:center;fill:#333}#mermaid-svg-Gm6IBUqBXl4iArWp .node.clickable{cursor:pointer}#mermaid-svg-Gm6IBUqBXl4iArWp .arrowheadPath{fill:#333}#mermaid-svg-Gm6IBUqBXl4iArWp .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-Gm6IBUqBXl4iArWp .flowchart-link{stroke:#333;fill:none}#mermaid-svg-Gm6IBUqBXl4iArWp .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-Gm6IBUqBXl4iArWp .edgeLabel rect{opacity:0.9}#mermaid-svg-Gm6IBUqBXl4iArWp .edgeLabel span{color:#333}#mermaid-svg-Gm6IBUqBXl4iArWp .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-Gm6IBUqBXl4iArWp .cluster text{fill:#333}#mermaid-svg-Gm6IBUqBXl4iArWp div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-Gm6IBUqBXl4iArWp .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-Gm6IBUqBXl4iArWp text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-Gm6IBUqBXl4iArWp .actor-line{stroke:grey}#mermaid-svg-Gm6IBUqBXl4iArWp .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-Gm6IBUqBXl4iArWp .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-Gm6IBUqBXl4iArWp #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-Gm6IBUqBXl4iArWp .sequenceNumber{fill:#fff}#mermaid-svg-Gm6IBUqBXl4iArWp #sequencenumber{fill:#333}#mermaid-svg-Gm6IBUqBXl4iArWp #crosshead path{fill:#333;stroke:#333}#mermaid-svg-Gm6IBUqBXl4iArWp .messageText{fill:#333;stroke:#333}#mermaid-svg-Gm6IBUqBXl4iArWp .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-Gm6IBUqBXl4iArWp .labelText,#mermaid-svg-Gm6IBUqBXl4iArWp .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-Gm6IBUqBXl4iArWp .loopText,#mermaid-svg-Gm6IBUqBXl4iArWp .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-Gm6IBUqBXl4iArWp .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-Gm6IBUqBXl4iArWp .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-Gm6IBUqBXl4iArWp .noteText,#mermaid-svg-Gm6IBUqBXl4iArWp .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-Gm6IBUqBXl4iArWp .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-Gm6IBUqBXl4iArWp .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-Gm6IBUqBXl4iArWp .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-Gm6IBUqBXl4iArWp .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Gm6IBUqBXl4iArWp .section{stroke:none;opacity:0.2}#mermaid-svg-Gm6IBUqBXl4iArWp .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-Gm6IBUqBXl4iArWp .section2{fill:#fff400}#mermaid-svg-Gm6IBUqBXl4iArWp .section1,#mermaid-svg-Gm6IBUqBXl4iArWp .section3{fill:#fff;opacity:0.2}#mermaid-svg-Gm6IBUqBXl4iArWp .sectionTitle0{fill:#333}#mermaid-svg-Gm6IBUqBXl4iArWp .sectionTitle1{fill:#333}#mermaid-svg-Gm6IBUqBXl4iArWp .sectionTitle2{fill:#333}#mermaid-svg-Gm6IBUqBXl4iArWp .sectionTitle3{fill:#333}#mermaid-svg-Gm6IBUqBXl4iArWp .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Gm6IBUqBXl4iArWp .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-Gm6IBUqBXl4iArWp .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Gm6IBUqBXl4iArWp .grid path{stroke-width:0}#mermaid-svg-Gm6IBUqBXl4iArWp .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-Gm6IBUqBXl4iArWp .task{stroke-width:2}#mermaid-svg-Gm6IBUqBXl4iArWp .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Gm6IBUqBXl4iArWp .taskText:not([font-size]){font-size:11px}#mermaid-svg-Gm6IBUqBXl4iArWp .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Gm6IBUqBXl4iArWp .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-Gm6IBUqBXl4iArWp .task.clickable{cursor:pointer}#mermaid-svg-Gm6IBUqBXl4iArWp .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-Gm6IBUqBXl4iArWp .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-Gm6IBUqBXl4iArWp .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-Gm6IBUqBXl4iArWp .taskText0,#mermaid-svg-Gm6IBUqBXl4iArWp .taskText1,#mermaid-svg-Gm6IBUqBXl4iArWp .taskText2,#mermaid-svg-Gm6IBUqBXl4iArWp .taskText3{fill:#fff}#mermaid-svg-Gm6IBUqBXl4iArWp .task0,#mermaid-svg-Gm6IBUqBXl4iArWp .task1,#mermaid-svg-Gm6IBUqBXl4iArWp .task2,#mermaid-svg-Gm6IBUqBXl4iArWp .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-Gm6IBUqBXl4iArWp .taskTextOutside0,#mermaid-svg-Gm6IBUqBXl4iArWp .taskTextOutside2{fill:#000}#mermaid-svg-Gm6IBUqBXl4iArWp .taskTextOutside1,#mermaid-svg-Gm6IBUqBXl4iArWp .taskTextOutside3{fill:#000}#mermaid-svg-Gm6IBUqBXl4iArWp .active0,#mermaid-svg-Gm6IBUqBXl4iArWp .active1,#mermaid-svg-Gm6IBUqBXl4iArWp .active2,#mermaid-svg-Gm6IBUqBXl4iArWp .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-Gm6IBUqBXl4iArWp .activeText0,#mermaid-svg-Gm6IBUqBXl4iArWp .activeText1,#mermaid-svg-Gm6IBUqBXl4iArWp .activeText2,#mermaid-svg-Gm6IBUqBXl4iArWp .activeText3{fill:#000 !important}#mermaid-svg-Gm6IBUqBXl4iArWp .done0,#mermaid-svg-Gm6IBUqBXl4iArWp .done1,#mermaid-svg-Gm6IBUqBXl4iArWp .done2,#mermaid-svg-Gm6IBUqBXl4iArWp .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-Gm6IBUqBXl4iArWp .doneText0,#mermaid-svg-Gm6IBUqBXl4iArWp .doneText1,#mermaid-svg-Gm6IBUqBXl4iArWp .doneText2,#mermaid-svg-Gm6IBUqBXl4iArWp .doneText3{fill:#000 !important}#mermaid-svg-Gm6IBUqBXl4iArWp .crit0,#mermaid-svg-Gm6IBUqBXl4iArWp .crit1,#mermaid-svg-Gm6IBUqBXl4iArWp .crit2,#mermaid-svg-Gm6IBUqBXl4iArWp .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-Gm6IBUqBXl4iArWp .activeCrit0,#mermaid-svg-Gm6IBUqBXl4iArWp .activeCrit1,#mermaid-svg-Gm6IBUqBXl4iArWp .activeCrit2,#mermaid-svg-Gm6IBUqBXl4iArWp .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-Gm6IBUqBXl4iArWp .doneCrit0,#mermaid-svg-Gm6IBUqBXl4iArWp .doneCrit1,#mermaid-svg-Gm6IBUqBXl4iArWp .doneCrit2,#mermaid-svg-Gm6IBUqBXl4iArWp .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-Gm6IBUqBXl4iArWp .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-Gm6IBUqBXl4iArWp .milestoneText{font-style:italic}#mermaid-svg-Gm6IBUqBXl4iArWp .doneCritText0,#mermaid-svg-Gm6IBUqBXl4iArWp .doneCritText1,#mermaid-svg-Gm6IBUqBXl4iArWp .doneCritText2,#mermaid-svg-Gm6IBUqBXl4iArWp .doneCritText3{fill:#000 !important}#mermaid-svg-Gm6IBUqBXl4iArWp .activeCritText0,#mermaid-svg-Gm6IBUqBXl4iArWp .activeCritText1,#mermaid-svg-Gm6IBUqBXl4iArWp .activeCritText2,#mermaid-svg-Gm6IBUqBXl4iArWp .activeCritText3{fill:#000 !important}#mermaid-svg-Gm6IBUqBXl4iArWp .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Gm6IBUqBXl4iArWp g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-Gm6IBUqBXl4iArWp g.classGroup text .title{font-weight:bolder}#mermaid-svg-Gm6IBUqBXl4iArWp g.clickable{cursor:pointer}#mermaid-svg-Gm6IBUqBXl4iArWp g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-Gm6IBUqBXl4iArWp g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-Gm6IBUqBXl4iArWp .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-Gm6IBUqBXl4iArWp .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-Gm6IBUqBXl4iArWp .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-Gm6IBUqBXl4iArWp .dashed-line{stroke-dasharray:3}#mermaid-svg-Gm6IBUqBXl4iArWp #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Gm6IBUqBXl4iArWp #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Gm6IBUqBXl4iArWp #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-Gm6IBUqBXl4iArWp #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-Gm6IBUqBXl4iArWp #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Gm6IBUqBXl4iArWp #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Gm6IBUqBXl4iArWp #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Gm6IBUqBXl4iArWp #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Gm6IBUqBXl4iArWp .commit-id,#mermaid-svg-Gm6IBUqBXl4iArWp .commit-msg,#mermaid-svg-Gm6IBUqBXl4iArWp .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Gm6IBUqBXl4iArWp .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Gm6IBUqBXl4iArWp .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Gm6IBUqBXl4iArWp g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Gm6IBUqBXl4iArWp g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-Gm6IBUqBXl4iArWp g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-Gm6IBUqBXl4iArWp g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-Gm6IBUqBXl4iArWp g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-Gm6IBUqBXl4iArWp g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-Gm6IBUqBXl4iArWp .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-Gm6IBUqBXl4iArWp .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-Gm6IBUqBXl4iArWp .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-Gm6IBUqBXl4iArWp .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-Gm6IBUqBXl4iArWp .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-Gm6IBUqBXl4iArWp .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-Gm6IBUqBXl4iArWp .edgeLabel text{fill:#333}#mermaid-svg-Gm6IBUqBXl4iArWp .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Gm6IBUqBXl4iArWp .node circle.state-start{fill:black;stroke:black}#mermaid-svg-Gm6IBUqBXl4iArWp .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-Gm6IBUqBXl4iArWp #statediagram-barbEnd{fill:#9370db}#mermaid-svg-Gm6IBUqBXl4iArWp .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-Gm6IBUqBXl4iArWp .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-Gm6IBUqBXl4iArWp .statediagram-state .divider{stroke:#9370db}#mermaid-svg-Gm6IBUqBXl4iArWp .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-Gm6IBUqBXl4iArWp .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-Gm6IBUqBXl4iArWp .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-Gm6IBUqBXl4iArWp .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-Gm6IBUqBXl4iArWp .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-Gm6IBUqBXl4iArWp .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-Gm6IBUqBXl4iArWp .note-edge{stroke-dasharray:5}#mermaid-svg-Gm6IBUqBXl4iArWp .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-Gm6IBUqBXl4iArWp .error-icon{fill:#522}#mermaid-svg-Gm6IBUqBXl4iArWp .error-text{fill:#522;stroke:#522}#mermaid-svg-Gm6IBUqBXl4iArWp .edge-thickness-normal{stroke-width:2px}#mermaid-svg-Gm6IBUqBXl4iArWp .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-Gm6IBUqBXl4iArWp .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-Gm6IBUqBXl4iArWp .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-Gm6IBUqBXl4iArWp .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-Gm6IBUqBXl4iArWp .marker{fill:#333}#mermaid-svg-Gm6IBUqBXl4iArWp .marker.cross{stroke:#333} :root { --mermaid-font-family: "trebuchet ms", verdana, arial;} #mermaid-svg-Gm6IBUqBXl4iArWp { color: rgba(0, 0, 0, 0.75); font: ; } 对象模型 动态模型 功能模型

    四、设计模式

    1.UML结构

    构造快 建模元素关系图 公共机制 规格说明修饰公共分类扩展机制 规则 范围可见性完整性执行

    1.用例图: - 包含关系(抽象用例) - 扩展关系

    2.类图与对象图

    2.UML图形

    类之间的关系:

    依赖关系泛化关系(概括关系)关联关系 1)聚合关系(主机与显示器) 2)组合关系(公司与部门,人与心脏)实现关系

    3.顺序图(序列图) 顺序图与协作图统称为交互图 协作图: 状态图: 活动图: 构件图: 部署图

    3.典型例题分析

    考点:

    数据流图

    面向对象设计

    数据库设计

    算法设计/C程序设计

    C++程序设计

    JAVA程序设计

    VB程序设计

    Web Service

    信息加密

    操作系统操作PV

    Processed: 0.012, SQL: 9