精华内容
下载资源
问答
  • 软件工程期末复习10-面向对象设计

    千次阅读 2020-12-27 11:15:37
    1. 面向对象设计与结构化设计 结构化方法把解空间分数据和功能两部分,可以更加清晰地进行需求分析和功能分解,数据流图能够细致地说明数据在各个功能模块之间的流动和变化,更适于系统设计的前期阶段。设计人员清楚...

    1. 面向对象设计与结构化设计

    结构化方法把解空间分数据和功能两部分,可以更加清晰地进行需求分析和功能分解,数据流图能够细致地说明数据在各个功能模块之间的流动和变化,更适于系统设计的前期阶段。设计人员清楚地了解数据和系统要求的操作后
    面向对象方法能够把数据和功能以对象为单位封装成一个整体,更直观地表达对象的状态变化和对象间的交互,更加准确地分析功能的实现过程,更适于在软件后

    2. 面向对象设计与面向对象分析的关系

    设计阶段的任务是及时把分析阶段得到的需求转变成符合各项要求的系统实现方案。面向对象的需求分析和面向对象的设计活动是一一个反复迭代的过程。

    3. 面向对象设计的过程与规则

    3.1 面向对象设计的过程
    (1) 建立软件体系结构环境图
    (2) 软件体系结构设计
    (3)对各个子系统进行设计
    大多数系统的面向对象设计模型,在逻辑上都由4大部分组成。这4大部分对应于组成目标系统的4个子系统,它们分别是:问题域子系统,人一机交互子系统,任务管理子系统,数据管理子系统
    (4)对象设计及优化
    3.2 面向对象设计的原则
    (1)模块化
    (2)抽象化
    (3)信息隐藏
    (4)低耦合
    (5)高内聚
    (6)复用性

    4. 面向对象设计的启发规则

    启发规则具体如下。
    (1) 设计结果应该清晰易懂
    (2)类等级深度应该适当
    (3)要尽量设计简单的类
    (4)使用简单的协议
    (5)使用简单的操作
    (6)把设计的变动减至最小

    5. 系统设计

    系统设计关注于确定实现系统的策略和目标系统的高层结构。
    系统设计的步骤从上到下为:将系统分解为子系统,设计问题域子系统,设计人机交互子系统,设计任务管理子系统,设计数据管理子系统。
    5.1 系统分解
    (1)问题域子系统把面向对象分析模型直接拿来,针对实现的要求进行必要的增补和调整,例如,需要对类、结构、属性及服务进行分解和重组。
    (2)人机交互子系统包括有效的人机交互所需的显示和输入,这些类在很大程度_上依赖于所用的图形用户界面环境。
    (3)任务管理子系统包括任务的定义、通信和协调,以及硬件分配、外部系统及设备约定,可能包括的类有“任务”类和“任务协调”类。
    (4)数据管理子系统包括永久数据的存取,它隔离了物理的数据管理方法,无论是普通文件、带标记语言的普通文件、关系型数据库、面向对象数据库等。可能包括的类有"存储服务”, 协调每个需永久保存的对象的存储。
    5.2 问题域子系统的设计
    问题域子系统也称问题域部分。面向对象方法中的一个主要目标是保持问题域组织框架的完整性、稳定性,这样可提高分析、设计到实现的追踪性。问题域子系统可以直接引用面向对象分析所得出的问题域精确对象模型,该模型提供了完整的框架,为设计问题域子系统奠定了良好的基础,面向对象设计就应该保持该框架结构。
    5.3 人机交互子系统的设计
    在现在的大型软件系统中,人机交互对象(类)通常是窗口或报告。软件设计者至少要考虑以下3种窗口:
    (1) 安全/登录窗口。这种窗口是用户访问系统的必经之路。
    (2) 设置窗口。这种窗口具有以下功能:
    创建或初始化系统运行必需的对象。例如用来创建、维护和删除持久对象的窗口。持久对象类似于关系数据库信息系统中的数据记录。例如车辆、车主、销售记录和事务。
    系统管理功能,例如添加和删除授权用户,修改用户使用系统的权限等。
    启动或关闭设备,例如启动打印机等。
    (3) 业务功能窗口。这种窗口用来帮助完成那些由信息系统和其用户所进行的业务交互所必要的功能。
    5.4 任务管理子系统的设计
    常见的任务有事件驱动型任务、时钟驱动型任务、优先任务、关键任务、协调任务等。设计任务管理子系统,包括确定各类任务并把任务分配给适当的硬件或软件去执行。
    5.5 数据管理子系统的设计
    数据管理子系统是系统存储或检索对象的基本设施,它建立在某种数据存储管理系统之上,并且隔离了数据存储管理模式(文件、关系数据库或面向对象数据库)的影响,但实现细节集中在数据管理子系统中。这样既有利于软件的扩充、移植和维护,又简化了软件设计、编码和测试的过程。
    设计数据管理子系统,既需要设计数据格式又需要设计相应的服务。

    6 对象设计

    对象设计以问题域的对象设计为核心,其结果是一个详细的对象模型。面向对象分析得出的对象模型,通常并不详细描述类中的服务。面向对象设计则是扩充、完善和细化面向对象分析模型的过程,设计类中的服务、实现服务的算法是面向对象设计的重要任务,还要设计类的关联、接口形式以及设计的优化。对象设计的内容包括:
    对象中对属性和操作的详细描述;
    对象之间发送消息的协议;
    类之间的各种关系的定义;
    对象之间的动态交互行为等。
    6.1 设计类中的服务
    1.确定类中应有的服务
    (1)从对象模型中引入服务
    (2)从动态模型中确定服务
    (3)从功能模型中确定服务
    2.设计实现服务的方法
    (1)设计实现服务的算法
    (2)选择数据结构
    (3)定义内部类和内部操作
    6.2 设计类的关联
    在对象模型中,关联是连接不同对象的纽带,它指定了对象相互间的访问路径。
    6.3 对象设计优化

    1. 确定优先级
    2. 提高效率的几项技术
      (1)增加冗余关联以提高访问效率
      (2)调整查询次序
      (3)保留派生属性
    3. 调整继承关系
      (1)抽象与具体
      (2)为提高继承程到而修改类定义
      (3)利用委托实现行为共享
    展开全文
  • 面向对象分析与设计——对象模型

    千次阅读 2014-10-22 09:18:58
    对象模型  对象模型包括:抽象、封装、模块化、层次结构、类型、并发和持久   2.1 对象模型的演进   OO建立在以前技术的最佳思想之上。两大趋势:小规模→大规模;高级程序设计语言;   2.1.1 程序...


    2           对象模型

     对象模型包括:抽象、封装、模块化、层次结构、类型、并发和持久

     

    2.1   对象模型的演进

    OO建立在以前技术的最佳思想之上。两大趋势:小规模→大规模;高级程序设计语言;

    2.1.1    程序设计语言的换代

    第一代(1954~1985):科学和工程应用,公式计算

    FORTRANⅠ: 数学表达式

    第二代(1959~1961):算法抽象

    FORTRANⅡ:子程序、单独编译
    ALGOL60:块结构、数据类型
    COBOL:数据描述、文件处理
    Lisp:列表处理、指针、垃圾收集,基于λ演算的函数式编程语言,在CAD软件上应用广泛(AUTOCAD二次开发用),括号+语法树;程序看作数据;          

    第三代(1962~1970):数据抽象

    Pascal:ALGOL60的简单继承者
    Simula:类、数据抽象

    代沟(1970~1980)

    C:高效、可执行程序小
    FORTRAN77:ANSI标准

    OO兴盛(1980~1990)

    Smalltalk:纯OO,在Smalltalk中所有的东西都是对象,或者应该被当作对象处理。例如表达式:2 + 3,应当被理解为:向对象2发送消息+,参数为对象3。                             对Objective-C、Java 、Ruby等有推动;开发思想:模式、XP、重构等
    C++:从C和Simula发展而来

    FrameWork的出现(1990~现在)

    VB,Java,Python,J2EE,.NET,C#,VB.NET

     

    2.1.2    第一代和第二代早期程序设计语言的拓扑结构


    基本物理构成单元:子程序(对COBOL而言,称之为段落)
    物理结构 = 全局数据 + 子程序

    2.1.3    第二代后期和第三代早期程序设计语言的结构


    子程序作为一种抽象机制
    → 开始发明支持参数传递机制的语言
    → 奠定了结构化设计的基础
    在语言上支持嵌套子程序,并在控制结构和声明的可见性方面发展
    → 出现了结构化设计方法,利用子程序作为基本构建块 

    2.1.4    第三代后期程序设计语言的结构


    大规模编译 → 独立开发同一程序的不同部分 → 独立编译的模块
    此阶段,模块只是用于最有可能同时改变的子程序分组,非抽象机制
    虽支持模块化,但鲜有规则要求模块间接口的语义一致性;
    对数据抽象和强类型支持得不好,错误只有在运行期才能被检测出来。

    2.1.5    基于对象和面向对象的程序设计语言的结构

                  

                           中小型应用                                                   大型应用

     

    构建块是模块,表现为逻辑上的一组类或对象,而非子程序。
    过程、函数是动词,数据是名词 → 面向过程(procedure-oriented)围绕动词,OO围绕名词
    中小型OO应用的物理结构表现为一个图,而非树;几乎无全局数据;数据和操作在单元中
    对巨型编程,对象模型在规模上扩展;一组抽象可构建在另一组抽象层智商;一组抽象协作,实现更高层行为;即第一章中描述的复杂性的组成方式;

     

    2.2   对象模型的基础

    对象模型是普适的(UI/DB/computer architectures);
    算法分解处理大量复杂问题时能力有限;
    C++/JAVA作为面向算法使用会丧失威力;

    何为对象:存在一些不变的特性,来刻画一个对象和它的行为;

    2.2.1    面向对象编程

    OOP的要点:    

    • 对象最为基本逻辑构建块;(组成层次结构)
    • 每个对象都是类的一个实例;
    • 类之间通过继承关联;(是一个层次结构)

    支持OOP语言的需求:

    • 支持对象,这些对象具有命名的操作结构和隐藏的内部状态的数据抽象
      (It supports objects that are dataabstractions with an interface of named operations and a hidden local state.)
    • 对象有相关的类型[类]
    • 类型[类]可以从超类型(supertypes)[超类(superclasses)]中继承属性

    2.2.2    面向对象设计

    两个要点:

    • OOAD导致OO分解;(类和对象抽象VS结构化设计的算法抽象)
    • 使用不同表示法来表达系统逻辑特征(类和对象结构)和物理设计(模块和处理架构)的不同模型,以及系统的静态和动态特征 

    2.2.3    面向对象分析

    结构化分析关注系统中的数据流;OOA重点在构建真是世界的模型,开发更早阶段就考虑。

    三方面的关系:OOA的结果作为开始OOD的模型,OOD的结果作为蓝图,利用OOP最终实现一个系统。

     

    2.3   对象模型的要素

    编程风格(programming style):一种组织程序的方式,基于某种编程概念模型和一种适合的语言,其目的是使得用这种风格编写的程序很清晰(away of organizing programs on the basis of some conceptual model of programming and an appropriate language to make programs written in the style clear)

    • 面向过程(Procedure) 算法;适用于计算密集型
    • 面向对象(Object)        类和对象;应用范围广,常作为架构框架
    • 面向逻辑(Logic)         目标,通常以谓词演算(predicate calculus)的方式表示;λ表达式,如Lisp,Prolog
    • 面向规则(Rule) 如果-那么(If–then)规则;适用于知识库
    • 面向约束(Constraint) 不变的关系(Invariant relationships)

    对象模型的4个主要要素:抽象、封装、模块化、层次结构

    3个次要要素:类型、并发、持久

     

    2.3.1    抽象的意义

     抽象描述了一个对象的基本特征,可以讲这个对象与所有其他类型的对象区分开来,因此提供了清晰定义的概念边界,它与观察者的视角有关。
     抽象壁垒(abstraction barrier): 分离对象的基本行为和它的实现
    最少承诺(least commitment): 对象的接口只提供它的基本行为
    最少惊奇(least astonishment): 抽象捕捉某对象的全部(entire)行为,不多不少,不提供抽象之外的惊奇效果或副作用 

    • 实体抽象 问题域或解决方案域实体的一个有用的模型
    • 动作抽象 提供一组通用的操作,所有这些操作都有同类的功能
    • 虚拟机抽象 集中了某种高层控制要用到的所有操作,或这些操作将利用更低层的操作集
    • 偶然抽象 封装了一些相互间没有关系的操作 

    从客户端角度,集中关注对象的外部试图
    →     编程契约模型(contract model of programming)
    →     外部视图定义了契约,其他对象依赖该契约,该对象通过内部视图来实现契约。契约包含了对象的责任,即它的可靠的行为

     

    协议:可调用的操作集 + 合法的调用顺序;→ 构成了完整的静态和动态外部视图;
    抽象思想的核心:不变性;前置条件(客户的责任) 后置条件(服务器的责任)


       C++:成员函数 = Smalltalk:方法(method) = Ada:操作(operation)

       C++:数据成员 = Smalltalk:实例变量(instance variable) = Java/Object Pascal:字段/域(filed)   

     

    2.3.2    封装的意义

    对象的抽象优先于实现决定;

           信息隐藏:对象的结构和方法的实现都是隐藏的;
           封装 → 不同抽象间提供了明确的边界 → 分离关注
           类的两部门:接口(描述外部视图,共同行为的抽象)+实现(抽象的表示,实现行为的机制)
           封装是一个过程,它分隔构成抽象的结构和行为的元素。封装的作用是分离抽象的概念接口及其实现。

    2.3.3    模块化的意义

    在程序内部创造一些定义良好的、有文档描述的边界(接口)
    Smalltalk:无模块概念,类就组成了分解的唯一物理单元
    Java:包;
    C++:模块为独立的语言结构

           将逻辑上相关的类和对象放在同一个模块中。随意模块化比不实现模块化更糟;
           分解为模块的目标是:允许模块独立设计和修改,从而减少软件的成本。
           每个模块应足够简单:能被完全理解;在不知道其他模块的实现,并不影响其他模块行为的情况下,修改其实现。
           模块编译成本小,编译模块接口成本高 → 接口尽量小 

           模块化是一个系统的属性,这个系统被分解为一组高内聚、低耦合的模块。

    2.3.4    层次结构的意义

    层次结构是抽象的一种分级或排序。

    • 单继承:

    类的两种客户:对象(调用类的实例方法),子类(继承该类)

    封装被打破的三种方式:

    子类可能访问其超类的实例变量;可调用其超类的私有操作;直接引用其超类的超类;

    •  多继承:

           混入类的概念?

           多重继承的问题:名字冲突、重复继承

    名字冲突:不同超类具有同样名字的属性或操作

    class A {
    public:      
           A() { mVal = 1; }
           void F() {cout<<"A::F()"<<endl; }
           int mVal;
    };
    class B {
    public:
           B() { mVal = 2; }
           void F() {cout<<"B::F()"<<endl; }
           int mVal;
    };
    class C : public A, publicB {
    };
    void main()
    {
           C test;
          test.A::F();
          test.B::F();
           cout<<test.A::mVal<<" "<<test.B::mVal<<endl;
    }


    重复继承:钻石型继承

    class A{
    public:
           A (intx) : m_x(x) {}
           void F() {cout<<"A::F"<<endl; }
           int m_x;    
    };
    class B : public A {
    public:
           B (intx) :A(x) {}
           void set(intx) {m_x =x; }
    };
    class C : public A {
    public:
           C (intx) :A(x) {}
           int get(void) {returnm_x; }
    };
    class D : public B, publicC {
    public:
           D (intx) :B(x),C(x) {}
    };
    void main(void) {
           D d(10);
           d.set(20);
           cout << d.get() << endl;
           d.F();//<-error C2385: 对“F”的访问不明确
    }
    在构建d对象时,里面存在两个A类基类子对象,尽管成员函数不存放在类中而在代码段,并且只会有一份,但是编译器不知道,他会作为两个继承函数来处理,用d.F()来访问时,编译器便不知道访问的是哪一个基类子对象里的F()     

    解决方案:

    class B : virtual public A//虚继承
    class C : virtual public A//虚继承
    D(int x) : B(x),C(x),A(x) {}

    在这个过程中,A对象只在D的初始化表中A(x)进行构造(虚基类最先被构造),而在B和C的初始化表中不再对A进行构造(实际上是都有一个指针指向了D中的A(x),来对A进行构造) 

    • 聚合:

    聚合允许对逻辑结构进行物理分组;而继承允许这些共同的部分在不同的抽象中被复用。
    两种关系状态:
         植物园与植物(植物可独立存在,生命周期无关)
         植物园与培育计划(计划不可独立存在)

    2.3.5    类型的意义

    类型是关于一个对象的类的强制规定,不同类型的对象不能够互换使用,或至少它们的互换使用受到非常严格的限制。
    利用多态可缓解运行时类型识别的需要。 

    【类型一致性】:强类型、弱类型、无类型

    强/弱类型是指类型检查的严格程度的。语言有无类型,弱类型和强类型三种。无类型的不检查,甚至不区分指令和数据。弱类型的检查很弱,仅能严格的区分指令和数据。强类型的则严格的在编译期进行检查。
    强类型语言:在没有强制类型转化前,不允许两种不同类型的变量相互操作。
    强类型的好处:更安全、早期错误检查、增强可读性、编译器生成的目标代码的效率更佳
    强类型往往成为类型安全的同义词,然而,类型安全动态类型并不互相排斥。

    【名字与类型绑定的时间】:静态类型(编译时固定)、动态类型(延迟绑定,运行时)

    • Ada: 强类型 + 静态类型
    • C++: 强类型 +支持动态类型
    • Java: 强类型 + 支持动态类型
    • Smalltalk: 无类型 + 动态类型
    • Perl、PHP: 弱类型 + 动态类型
    • Python: 强类型 + 动态类型

           一般而言,开发者社群说到动态语言,大致认同的一个定义是:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。

           某些静态语言有一个“后门”,在这些编程语言中,能够编写一些不被静态类型所检查的代码。例如,Java和C-风格的语言有“转型”可用。在静态类型的编程语言中,不必然意味着缺乏动态类型机制。例如 Java 使用静态类型,但某些运算需要支持运行时期的类型测试,这就是动态类型的一种形式。

           C++是一种使用非常广泛的电脑程序设计语言。它是一种静态数据类型检查的,支持多范型的通用程序设计语言。C++支持过程化程序设计、数据抽象化、面向对象程序设计、泛型程序设计、基于原则设计等多种程序设计风格。

          C++ 的多态又分成静态多态(Static Polymorphism)与动态多态(DynamicPolymorphism)。动态多态必须结合继承和动态绑定(Dynamic Binding)方式实现。静态多态是指以模板(template)实现多态的方法,也就是参数化的型态(Parameterized Types),属于编译前(pre-compile)的多态,是使用宏(marco)的“代码膨胀法”达到多态效果。类型转换(type cast)也是一种区域(ad hoc)多态的概念,C++提供 dynamic_cast,static_cast等运算对象来实现类型转换(Coercion)。运算对象重载(operatoroverloading)或函数重载(function overloading)也算是多态的概念。

           C++是部分动态的,是编译时静态绑定,通过嵌入类(多重继承)和虚函数(虚表)来模拟实现

     

           JAVA有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。

           Java反射机制主要提供了以下功能:

    • 在运行时判断任意一个对象所属的类;
    • 在运行时构造任意一个类的对象;
    • 在运行时判断任意一个类所具有的成员变量和方法;
    • 在运行时调用任意一个对象的方法;生成动态代理。

    2.3.6    并发的意义

    并发三级别:语言原生支持、使用类库、利用中断实现假象

    ----------------------------------------------------------

    【并发concurrent VS 并行parallelism】

    并发性是指两个或多个事件在同一时间段内发生
    并行性是指两个或多个事件在同一时刻发生
    并发性,又称共行性,是指能处理多个同时性活动的能力;
    并行,是指同时发生的两个并发事件,具有并发的含义,而并发则不一定并行,也亦是说并发事件之间不一定要同一时刻发生。(如在同一个cpu上同时运行多个程序,不是真正的同时,而是看来是同时,因为cpu要在多个程序间切换)

    线程机制支持并发程序设计,在多处理器系统上,它也能保证真正的并行处理

    2.3.7    持久的意义

    持久是对象的属性,它使得对象可以跨越时空存在。

    持久的谱系:

            表达式计算的瞬时结果
            局部变量
            自由变量、全局变量、堆中的值
             ------------以上为传统编程语言关注的持久----------------
            程序执行之间存在的数据
            程序的不同版本之间存在的数据
            比程序生命期长的数据
            ------------以上通常为数据库技术关注的领域----------------

     

    持久层(Persistence)

    只是一个逻辑概念,即在系统逻辑层面上,专著于实现数据持久化的一个相对独立领域。负责向(或者从)一个或者多个数据存储器中存储/获取数据的一组类和组件。

    数据持久化

    一个动作,将内存中的数据模型转换为存储模型,就是把数据长期保存起来;以及,将存储模型转换为内存中的数据模型的统称.

    数据模型

    可以是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等。

    表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)

    DAO(DataAccess Object) 封装了访问数据库对象的接口,相当于一个通道,它可能会使用JDBC、Hinernate、iBatisa等工具来实现。而DAL 是指 Data Access Layer,是把所有和数据库操作(类似Insert、update、select)的业务逻辑封装,是一个逻辑上的概念,是为了设计规范、系统扩展方便的需要

    Hibernate框架

    是一个开放源代码的对象关系映射框架,它对JDBC(Java Data Base Connectivity,java数据库连接)进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。对象上数据的修改,Hibernate框架会把这种修改同步到数据库中。

    附表:

    对象模型元素

        特性     

         SmallTalk       

              C++          

             JAVA         

    抽象(Abstraction)

    实例变量

    实例方法

    类变量

    类方法

        封装(Encapsulation)    

    变量的

    私有

    公保私

    公保私包

    方法的

    公开

    公保私

    公保私包

    模块化(Modularity)

    模块的种类

    文件

    文件

    层次(Hierarchy)

    继承

    泛型单元

    元类(Metaclasses)

    类型化(Typing)

    强类型化

        多态(Polymorphism)    

    是(单)

    是(单)

    是(单)

    并发(Concurrency)

    多任务(Multitasking)

    间接(通过类)

    间接(通过类)

    持久化(Persistence)

    持久对象

     

    2.4   应用对象模型

    2.4.1    对象模型的好处

    发挥基于对象和面向对象编程语言的能力
    有利于软件复用,设计复用
    有利于系统演化式发展,而非抛弃型重做
    集成散布在生命周期的各个时刻
    分离关注减少了开发风险

    2.4.2    开放式问题

    什么是类和对象?              第3章 类与对象
    如何正确确定类和对象? 第4章 分类
    怎样的表示法适合OOD? 第5章 表示法
    怎样的过程可以得到结构良好的OO系统? 第6章 过程
    使用OOD对管理层意味着什么? 第7章 实战

    展开全文
  • 面向对象分析和设计基本概念

    千次阅读 2014-10-12 11:54:31
     面向对象分析和设计基本概念  面向对象是基于一种哲学思想,它认为:客观实体和实体之间的联系构成了现实世界的所有问题,而每一个实体都可以抽象为对象。这种思想尽可能地按照人类认识世界的方法和思维方式来...

    转载:http://www.cnblogs.com/mywolrd/archive/2008/04/03/1930735.html

      面向对象分析和设计基本概念

            面向对象是基于一种哲学思想,它认为:客观实体和实体之间的联系构成了现实世界的所有问题,而每一个实体都可以抽象为对象。这种思想尽可能地按照人类认识世界的方法和思维方式来分析和解决问题,使人们分析、设计一个系统的方法尽可能接近认识一个系统的方法。面向对象的基本观点可以概括如。( 1 )客观世界由对象组成,任何客观实体都是对象,复杂对象可以由简单对象组成。( 2 )具有相同数据和操作的对象可归纳成类,对象只是类的一个实例。( 3 )类可以派生出子类,子类除了继承父类的全部特性外还可以有自己的特性。( 4 )对象之间的联系通过消息传递来维系。由于类的封装性,它具有某些对外界不可见的数据,这些数据只能通过消息请求调用可见方法来访问。简单的来说,面向对象=对象+类+继承+消息。
              面向对象分析( OOA )是指利用面向对象的概念和方法为软件需求建造模型,以使用户需求逐步精确化、一致化、完全化的分析过程。分析的过程也是提取需求的过程,主要包括理解、表达和验证。由于现实世界中的问题通常较为复杂,分析过程中的交流又具有随意性和非形式化等特点,软件需求规格说明的正确性、完整性和有效性就需要进一步验证,以便及时加以修正。面向对象分析中建造的模型主要有对象模型、动态模型和功能模型。其关键是识别出问题域中的对象,在分析它们之间相互关系之后建立起问题域的简洁、精确和可理解的模型。对象模型通常由五个层次组成:类与对象层、属性层、服务层、结构层和主题层,此五个层次对应着在面向对象分析过程中建立对象模型的五项主要活动:发现对象、定义类、定义属性、定义服务、设别结构。面向对象的分析过程如图 1 所示。

    面向对象分析过程模型
            
            分析是提取和整理用户需求,并建立问题域精确模型的过程。面向对象设计( OOD )则是把分析阶段得到的需求转变成符合成本和质量要求的、抽象的系统实现方案的过程。从面向对象分析( OOA )到面向对象设计( OOD )是一个逐渐扩充模型的过程,也可以说面向对象设计是用面向对象观点建立求解域模型的过程。面向对象分析主要是模拟问题域和系统任务,而面向对象设计是面向对象分析的扩充,主要增加各种组成部分。面向对象设计的模型又五层组成,在设计期间主要扩充四个组成部分:人机交互部分、问题域、任务管理和数据管理。人机交互部分包括有效的人机交互所必须的实际显示和输入。问题域部分放置面向对象分析结果并管理面向对象分析的某些类和对象、结构、属性和方法。任务管理部分包括任务定义、通信和协调、硬件分配及外部系统。数据管理部分包括对永久性数据的访问和管理。面向对象设计模型如图 2 所示。

             为了方便、高效地进行面向对象分析和设计, UML Unified Modeling Language )被创造出来。 UML 是一种功能强大的、面向对象分析的可视化系统分析的建模语言,它采用一整套成熟的建模技术,广泛地适用于各个应用领域。运用 UML 进行面向对象分析设计,通常都要经过下述三个步骤。( 1 )识别系统的用例和角色。首先要对项目进行需求调研,分析项目的业务流程图和数据流程图,以及项目中涉及的各级操作人员,识别出系统中的所有用例和角色;接着分析系统中各角色和用例见的联系,使用 UML 建模工具画出系统的用例图;最后,勾画系统的概念层次模型,借助 UML 建模工具描述概念层的类和活动图。( 2 )进行系统分析并抽象出类。系统分析的任务是找出系统的所有要求并加以描述,同时建立特定领域模型。从实际需求抽象出类,并描述各个类之间的关系。( 3 )设计系统,并设计系统中的类及其行为。设计阶段由结构设计和详细设计组成。结构设计是高层设计,其任务是定义包(子系统)、包间的依赖关系和主要的通信机制。包有利于描述系统的逻辑组成以及各个部分之间的依赖关系。详细设计主要用来细化包的内容,清晰描述所有的类,同时使用 UML 的动态模型描述在特定环境下这些类的实例的行为。

    展开全文
  • 面向对象分析中,主要由对象模型、动态模型和功能模型组成。对象模型是最基本、最重要、最核心的。 用面向对象方法开发软件,通常需要建立3种形式的模型,它们分别是描述系统数据结构的对象模型,描述系统控制结构...

    在面向对象分析中,主要由对象模型、动态模型和功能模型组成。对象模型是最基本、最重要、最核心的。

    面向对象方法开发软件,通常需要建立3种形式的模型,它们分别是描述系统数据结构的对象模型,描述系统控制结构的动态模型和描述系统功能的功能模型。

    一个典型的软件系统使用数据结构(对象模型),执行操作(动态模型),并且完成数据值的变化(功能模型)。
    对任何大系统来说,上述3种模型都是必不可少的。用面向对象方法开发软件,在任何情况下,对象模型始终都是最重要、最基本、最核心的。
    在面向对象分析过程中,构造出完全独立于实现的应用域模型;在面向对象设计过程中,把求解域的结构逐渐加入到模型中;在实现阶段,把应用域和求解域的结构都编成程序代码并进行严格的测试验证。

    复杂问题(大型系统)的对象模型通常由下属五个层组成

    主题层、类与对象层、结构层、属性层、服务层

    展开全文
  • 面向对象数据模型

    万次阅读 2018-03-28 09:22:25
    所谓面向对象数据模型指属性和操作属性的方法封装在称为对象类的结构中的模型。可以通过将一个对象类嵌套或封装在另一个类里来表示类间的关联,新的对象类可以从更一般化的对象类中导出,如:以下是描述面向对象数据...
  • UML主要是参考UML面向对象建模与设计(第二版)做的笔记。 这里涉及到UML建模的图,这里就用visio来现学现卖了。中间顺带插入一些用visio对应的操作。 visio绘制UML基本 1打开visio 2在模板类别中选择软件和...
  • 面向对象设计学习总结

    千次阅读 2019-03-17 20:43:45
    面向对象设计概述分析阶段活动图、用例图、领域模型活动图用例图领域模型寻找概念类添加关联设计阶段SSD(系统顺序图)软件类图设计类图实现阶段单元测试重构总结 概述 软件设计是软件工程中技术方向部分,软件工程...
  • 面向对象分析与设计概述

    千次阅读 2015-06-05 13:37:01
    面向对象分析与设计概述一、概述面向对象分析与设计(Object Orient Analysis & Design,简称OOAD)是现代软件企业广泛采用的一项...所以面向对象技术的优点即为能够构建与现实世界相对应的问题模型,并保持他们的结构
  • --基于面向对象葵花宝典读书总结。领域建模是面向对象真正开始。2个作用: 发掘重要的业务领域概念; 建立业务领域之间的关系。 找名词:从用例中找名词。加属性:找出名词的属性。连关系:使用ER图,连类的关系。...
  • 模型中将电子政务系统分解为三个对象,即政府、企(事)业单位和公民,建立了面向对象电子政务系统模型中各对象之间直接和间接的互动关系,结合上海社会保障卡应用实例,对面向对象的电子政务系统模型进行了系统...
  • 软件工程 面向对象分析 面向对象设计模型
  • Java面向对象设计模式

    万次阅读 2017-05-02 14:17:36
     ——可复用面向对象软件的基础  设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 ...
  • 面向对象建模得到的模型包含系统的3个要素:静态结构(对象模型)、交互次序(动态模型)和数据变换(功能模型)。  这三个模型解决的问题不同,其重要程度也不同:几乎解决任何一个问题,都需要从客观世界实体及...
  • 模型中将电子政务系统分解为三个对象,即政府、企(事)业单位和公民,建立了面向对象电子政务系统模型中各对象之间直接和间接的互动关系,结合上海社会保障卡应用实例,对面向对象的电子政务系统模型进行了系统...
  • 【软件工程】面向对象设计

    千次阅读 热门讨论 2014-12-11 20:17:24
    面向对象设计(OOD)则是从计算机技术的角度,将分析阶段得到的概念模型转换成软件系统的技术实现方案,并在功能、性能及成本方面满足用户和质量要求的过程。是一个将问题空间中的面向对象模型转换为求解空间中的...
  • 软件工程——面向对象设计详解

    千次阅读 2021-02-23 14:42:48
    软件工程——面向对象设计详解面向对象设计过程面向对象设计准则体系结构模块及依赖性接口及其依赖性包及其依赖性构件及其依赖性人机交互部分的设计用户界面设计步骤界面设计目标界面设计工作流 面向对象设计过程 ...
  • 第三部分为设计篇,介绍如何在面向对象分析模型基础上,针对具体的实现条件进行面向对象的系统设计,包括问题域部分、人机交互部分、控制驱动部分和数据接口部分4个主要部分的设计,最后介绍如何进行构件化与系统...
  • 面向对象建模的三种模型

    千次阅读 2015-07-10 19:01:00
    模型: 描述的是系统内部的组成元素--对象的特征,包括属性和行为。它是一种静态的描述。 状态模型: 描述对象在系统交互过程中所产生的状态的变化。 交互模型: 描述对象对象之间信息的交流。 转载于:...
  • 内容面向对象的数据库设计对象关系模型实体对象关系模型应用总结下载参考资料简介: 面向对象(OO)和三范式(3NF)都是成熟的设计方法,本文基于面向对象设计思想和三范式数据库设计方法,提出一种实体对象分层...
  • 下面是一个顾客从零售商处预定商品的模型的类图。     类图有三种关系: (1)关联association:如果一个类的实例必须要用另一个类的实例才能完成工作进就要用关联。 (2)聚合aggregation:当...
  • 面向对象程序设计概念

    千次阅读 2019-09-26 17:03:28
    面向对象设计范型的主要特征是:  程序=对象+消息   面向对象程序的基本元素是对象。面向对象程序的主要结构特点是:一、程序一般由类的定义和类的使用两部分组成;二、程序中的一切操作都是向对象发...
  • 1.引言  经过几十年的发展,今天的GIS系统已经具备了较强的数据存贮、管理和输入输出功能,但目前大多数的...为此,作者为现有GIS软件总结了两种典型的数据模型[1]:拓扑关系数据模型面向实体的数据模型,并分析了
  • 面向对象设计的七大设计原则详解

    万次阅读 多人点赞 2018-10-03 12:32:21
    面向对象的七大设计原则 文章目录面向对象的七大设计原则简述七大原则之间的关系一、开闭原则(The Open-Closed Principle ,OCP)概念理解系统设计需要遵循开闭原则的原因开闭原则的实现方法一个符合开闭原则的...
  • C++面向对象程序设计 面向对象编程

    万次阅读 多人点赞 2018-09-12 22:39:50
    1.1 面向过程的编程风格与面向对象的编程风格 C语言是面向过程语言,也称为命令型语言,面向过程通常采用自顶向下设计,问题复杂时不断运用自顶向下设计(即函数分解法)直到容易处理。自顶向下设计优点是直观有...
  •  谈到流程,大家都会想到熟悉的瀑布模型、螺旋模型、迭代开发、敏捷、RUP等一堆软件工程相关的软件开发流程,但是请不要误会,本文的流程和这些管理流程完全不同,为了以示区分,我把瀑布模型、敏捷、RUP等流程成为...
  • 面向对象的需求分析方法的核心是利用面向对象的概念和方法为软件需求建造模型。它包含面向对象风格的图形语言机制和用于指导需求分析的面向对象方法学。  面向对象的思想最初起源于 20世纪 60年代中期的仿真程序...
  • 两大类数据模型客观对象的抽象过程---两步抽象3.数据模型的组成要素(1)数据结构(2)数据操作(3)数据的完整性约束条件4.概念模型(1)用途与基本要求(2) 信息世界中的基本概念(3)两个实体型之间的联系① 一对一联系(1:1...
  • 从结构化到面向对象程序设计模型转换.pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 248,750
精华内容 99,500
关键字:

面向对象设计模型