第一讲 面向对象方法学与信息系统建模.

Slides:



Advertisements
Similar presentations
[ Java 程序设计 教程 ] 阎菲 陈利 向郑涛 陈宇峰 中国水利水电出版社.  Java 语言是对软件开发技术有深 远影响、应用前景广泛、具有丰富 的类库、继承了 C++ 传统(摈弃了 某些不足)广泛使用的网络编程语 言。 Java 语言的特性使它可以最大 限度地利用网络。  本章介绍面向对象的基本概念:对.
Advertisements

系統分析與設計 楊子青 H-1 H 、物件導向技術 n 物件導向的基本概念 – 物件、類別 – 封裝、繼承 – 同名異式 ( 多型 ) 、超荷 ( 過載 ) n 物件導向分析與設計及塑模工具 n UML 塑模工具.
第三讲 面向对象(上).
JAVA 编 程 技 术 主编 贾振华 2010年1月.
<<會計資訊系統課程講義>> 統一塑模語言(UML)語法精要 -- 物件導向概念、需求分析及系統分析
6. 6 Overloading methods and constructors 6
第16章 代理模式 Website:
第一章 绪论.
第一章 認識程式語言.
第8章 面向对象的软件工程 8.1 软件工程的新途径 8.2 面向对象建模 8.3 对象模型 8.4 动态模型 8.5 功能模型.
第一章 資料結構導論 1-1 資料結構簡介 1-2 認識程式設計 1-3 演算法效能分析 1-4 物件導向程式設計與Java.
Ch02物件導向程式設計 物件導向系統分析與設計.
第3章 需求分析(续) 学习目标 什么是需求建模? 需求分析建模方法 掌握实体—关系图(E—R图); 掌握状态转换图;
第八章 信息系统开发概述.
面向对象的程序设计(一).
欢迎各位 Nice to Meet U.
第一章 面向对象程序设计.
課程名稱:程式設計 授課老師:________
设计模式可以帮助我们改善系统的设计,增强 系统的健壮性、可扩展性,为以后铺平道路。
程設一.
類別與物件 Class & Object.
軟體工程 -物件導向程式設計與UML系統分析實作
第9章 面向对象方法学引论 9.1 面向对象方法学概述 9.2 面向对象的概念 9.3 面向对象建模 9.4 对象模型 9.5 动态模型
新世代計算機概論 第14章 程式語言.
第八章 分析與設計階段 – 物件導向設計(OOD)
软件工程 主讲:饶国政 天 津 大 学.
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
第 9 讲 面向对象分析与设计
刘胥影 东南大学计算机学院 面向对象程序设计1 2010~2011第3学期 刘胥影 东南大学计算机学院.
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
H、物件導向技術 物件導向的基本概念 物件、類別 封裝、繼承 同名異式(多型) 、超荷(過載) 物件導向分析與設計及塑模工具 UML塑模工具.
Chap 18 類別與物件 夫有土者,有大物也。有大物者,不可以物。 物而不物,故能物物。 明乎物物者之非物也,豈獨治天下百姓而已哉!
Derived Class 前言 衍生類別的定義 單一繼承 public, protected, 和 privated 基底類別
Classes Lecturer: 曾學文.
西安交通大学 计算机教学实验中心 大学C++程序设计教程 西安交通大学 计算机教学实验中心
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
第 6 章 函式.
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
JUDE教學 Jude安裝教學篇 Jude初步介紹篇 Jude繪圖介紹篇 介紹jude的安裝和下戴 介紹jude的初基本功能
C++ 與 物件導向 程式設計概念簡介 魏天君 2018/12/3.
面向对象程序设计 、.
Java程序设计 第9章 继承和多态.
Java
第四章 小技巧.
谭浩强 编著 中国高等院校计算机基础教育课程体系规划教材 C++程序设计.
两种不同类别的软件: 功能预定义软件;用户驱动的软件。他们对软件工程方法有不同的需求
類別與物件 I (Classes and Objects I)
第16章 虛擬與多形 16-1 虛擬函數 16-2 純虛擬函數與抽象類別 16-3 多形 16-4 虛擬繼承與虛擬解構子.
第7章 繼承/多型/介面 注意: 本投影片僅供本書上課教師使用,非經同意請勿上網轉載或供拷貝.
C#程序设计基础 $3 成员、变量和常量.
陳維魁 博士 儒林圖書公司 第三章 變數與繫結 陳維魁 博士 儒林圖書公司.
程式語言 程式語言發展史 資料型態 程式指令 程序定義和使用.
Inheritance -II.
Object-Oriented Programming in C++ 第二章 类和对象
第6章 面向对象开发的 分析与设计.
第二章 语言设计问题.
C++程序设计 吉林大学计算机科学与技术(软件)学院.
业务流程重组 1.概念 业务流程重组(BPR ,Business Process Reengineering)强调以业务流程为改造对象和中心、以关心客户的需求和满意度为目标、对现有的业务流程进行根本的再思考和彻底的再设计,利用先进的制造技术、信息技术以及现代化的管理手段、最大限度地实现技术上的功能集成和管理上的职能集成,以打破传统的职能型组织结构(Function-Organization),建立全新的过程型组织结构(Process-Oriented.
授课老师:龚涛 信息科学与技术学院 2016年3月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
方法進階及物件導向基礎 Lecturer: 楊昌樺.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
面向对象建模 对象(object) 对象具有的含义: 现实世界中某个具体的物理实体或概念在计算机逻辑中的映射和体现。 在现实世界中:
JAVA 程式設計與資料結構 第三章 物件的設計.
對於成員(member)存取權的限制 成員的資料被毫無限制的存取,任誰都可以指定任意值給成員,Java語言為了防止這種現象的產生,規定:有一種成員的資料不能任由類別外部的任何人隨意存取。
面向对象程序设计 C++教程 西安工业大学 于帆.
05 方法. 05 方法 5.1 方法 在一個較大型的程式中,通常會將具有特定功能或經常重複使用的程式,撰寫成獨立的小單元,稱為「方法」(Method),並賦予方法一個名稱,當程式需要時就可以呼叫此方法來執行該段特定程式。(此種重複使用的程式小單元在其他語言中可能稱為程序、副程式或函式, Visual.
程式設計與程式語言 告訴電腦做些什麼 第十六章.
Summary
Presentation transcript:

第一讲 面向对象方法学与信息系统建模

内容 历史回眸 开发模式 传统方法学 面向对象方法学 面向对象基本概念 对象组成 面向对象分析/设计/编程 信息系统建模 2019/5/22

1.历史回眸 现在的计算机的数学理论基础是由计算机的开山鼻祖,大名鼎鼎的图灵于1937年提出的图灵机模型。 随后不到十年,电子计算机就诞生了(1945)。(埃尼亚克) 它当时的主要任务之一就是用于导弹弹道轨迹的计算。当时的软件开发(如果可以称之为软件开发的话)与现在的大不相同。为了算一道题,要有人事先把完成加减乘除等各类运算的部件像搭积木那样搭起来,如果换一道题,则要把这些部件分解开来,根据新的要求重新搭建,效率极低(与现在比)。 2019/5/22

现代电子计算机的体系结构及实际计算模型来自冯 现代电子计算机的体系结构及实际计算模型来自冯.诺依曼的思想。 1946年他和他的同事们发现了埃尼亚克的缺陷,发表了一份报告,提出了程序放入内存,顺序执行的思想,这样,当算一道新题时就只需采取改变计算机中的程序的“软”的方法。 英国的科学家维尔克斯实现了冯.诺依曼的思想,领导研制了“艾克萨克” 。 因此,现在的计算机通常被称为冯.诺依曼计算机。 2019/5/22

早期程序员们使用机器语言来进行编程运算;随着编译技术的出现,人们设计了许多更高级别的语言;这些语言摆脱了机器语言繁琐的细节,更接近于人的自然语言,迅速流行开来。 据统计,全世界的高级语言起码有几千种,但从可计算性的角度看,它们的计算能力都等价于图灵机。 已经证明,一个计算机语言,只要除了赋值语句之外,还包括顺序语句,条件语句和循环语句,它的计算能力即相当于图灵机。 这里当然要排除其他技术因素的影响,如程序长度,变量个数,数据精度等。 2019/5/22

程序员们先建立问题的模型(形式化),再用计算机语言加以合适的表达,最后再输入计算机里进行计算。 由于图灵机的想法是把问题转化为一步一步按规则执行的机械求解过程,各种计算机语言也不过都是某种形式语言,因此软件开发的过程实质上就是程序员们对客观世界问题域的形式化的过程。    程序员们先建立问题的模型(形式化),再用计算机语言加以合适的表达,最后再输入计算机里进行计算。 2019/5/22

最早的高级语言大约诞生于1945年,是德国人楚译为他的Z-4计算机设计的Plan Calcul,比第一台电子计算机还早几个月;在电子计算机上实现的第一个高级语言是美国尤尼法克公司于1952年研制成功的Short Code;而真正得到推广使用,至今仍在流行的第一个高级语言是美国的计算机科学家巴科斯设计,并于1956年首先在IBM公司的计算机上实现的FORTRAN语言。  2019/5/22

早期的高级语言主要是应用于科学和工程计算,其代表作有FORTRAN和ALGOL60。计算机进入商业和行政管理领域以后,出现了COBOL和 RPG等便于商界使用的语言。 这类语言和数据库技术,图形界面技术(可视化编程),面向对象的思想及RAD(Rapid Application Development)的概念相结合,形成了一批更方便使用的所谓第四代语言(4GL),如Powerbuilder,Delphi,VB等。 2019/5/22

前一类应用于科学和工程计算的大型语言相对来说更为基础,因而也更为灵活,应用范围更为广泛。 在FORTRAN,BASIC(学习型)之后,自70年代以来,模块特征更明显,简单易用,可靠性强的PASCAL异军突起,在世界范围内广泛流行。 但进入80年代以后,它的地位又逐渐为更实用的C语言替代。 到现在,C语言的地位已相当于一种“高级汇编语言”了。   2019/5/22

80年代后期,面向对象的语言开始浮出水面,C++借助使用C语言的庞大程序员队伍,一举建立了面向对象语言的老大地位。从而OO的思想正式统治了整个软件开发界。C++的流行甚至使得美国军方从80年开始大力扶植的Ada语言还未及推广便胎死腹中了。 2019/5/22

上述这些变化,表面是不同的编程工具的流行,但其背后反映的却是一种更为深刻的认识论的改变,即你是用何种观点来认识这个世界的? 90年代以后,计算机世界更是发生了天翻地覆的变化,原先的单机平台让位于WEB,“网络就是计算机”,新的语言不仅要是OO的,Visual的,更要是基于WEB的。 Java语言借INTERNET的东风,横空出世,一夜红遍天下。 上述这些变化,表面是不同的编程工具的流行,但其背后反映的却是一种更为深刻的认识论的改变,即你是用何种观点来认识这个世界的?    2019/5/22

2. 开发模式(Paradigm) 开发模式又称为范型、范例、风范或模式(Pattern)。开发模式定义了 特定问题和应用的开发过程中将遵循的步骤; 确定将用于表示问题和解的那些成分的类型; 利用这些成分表示与问题解决有关的抽象; 直接得到问题的结构。 2019/5/22

开发模式的选择影响到整个软件开发生存期。就是说,它支配选择: 设计方法 编码语言 测试和检验技术 2019/5/22

3. 传统方法学 传统方法学:瀑布模型,结构化分析/设计/编码 瀑布模型的缺点:僵化 瀑布模型要求:生命周期各阶段间遵守严格的顺序,实际情况是:软件开发往往在反复实践中完成 瀑布模型要求:预先定义并“冻结”软件需求,实际情况是:某些系统的需求的一个逐渐明确的过程,且预先定义的需求到软件完成时可能已经过时 2019/5/22

SA - SD - SP 技术的缺点: 本质上是功能分解,以实现功能的过程为中心,而用户的需求变化主要是针对功能的。这就使基于过程的设计不易被理解;且功能变化往往引起结构变化较大,稳定性不好 系统有明确的边界定义,且系统结构依赖于系统边界的定义,这样的系统不易扩充和修改 数据与操作分开处理,可能造成软构件对具体应用环境的依赖,可重用性(reusability)较差 2019/5/22

4. 面向对象方法学的起源 维特跟斯坦是本世纪乃至人类哲学史上最伟大的哲学家之一。 他生前只于1922年出版了一本著作——《逻辑哲学论》(Tractatus Logico-Philosophicus)。 在该书中,他阐述了一种世界观,或者说一种认识世界的观点,这种观点,在六七十年后的今天,终于由一种哲学思想沉淀到技术的层面上来,成为计算机业界的宠儿,这就是“OO”,Object-Oriented,面向对象。 2019/5/22

维特根斯坦在《逻辑哲学论》 一书中提出了如下思想: 世界可以分解为事实 ( The world divides into facts.) 事实是由原子事实 (atomic facts)组成的。 一个原子事实是多个对象(objects)的组合。 对象是简单的(基本的) The Object is simple。 对象形成了世界的基础。 2019/5/22

Post_office.Send (request, payment) 杭 州 北 京 Message Post-office Send by method Object 我想把邮局搬到 我家门口,多加几个 邮递员,24小时都开门 …… Attributes: location; employee; …… 对不起, 本邮局不提供 此类服务 Methods: send; sell; …… 唉,那就先送束花吧 —— Post_office.Send (request, payment) 对象Object = 数据Attribute + 操作Method 注意:Object内部的attributes不允许外部用户直接改动,只有当它提供了相应的服务method时,用户才能通过发送message来提请它执行。 2019/5/22

特点:尽可能模拟人类习惯的思维方式,即问题域与求解域在结构上尽可能一致。与传统方法相反,OOM以数据或信息为主线,把数据和处理结合构成统一体 —— 对象。这时程序不再是一系列工作在数据上的函数集合,而是相互协作又彼此独立的对象的集合。 2019/5/22

5. 面向对象方法学的要素

4.1 对象:世界由对象构成 对象是面向对象开发模式的基本成份。 每个对象可用它本身的一组属性和它可以执行的一组操作来定义。 属性一般只能通过执行对象的操作来改变。 操作又称为方法或服务,它描述了对象执行的功能,若通过消息传递,还可以为其它对象使用。 2019/5/22

4.2 类:物以类聚 类是一组具有相同数据结构和相同操作的对象的集合。 类的定义包括一组数据属性和在数据上的一组合法操作。 类定义可以视为一个具有类似特性与共同行为的对象的模板,可用来产生对象。 2019/5/22

在一个类中,每个对象都是类的实例 (Instance),它们都可使用类中提供的函数。 对象的状态则包含在它的实例变量,即实例的属性中。 2019/5/22

例: class Post_office { 2019/5/22 private : loc_type location ; emp_type employee ; …… public : void send (req_type request, money_type payment); void sell (int goods, money_type payment) ; } ; main ( ) { Post_office My_PO ; req_type My_request ; money_type My_payment ; …… My_PO.Send ( My_request, My_payment) ; } 2019/5/22

4.3 继承:世界的相似性与多样性 继承(inheritance):类可分层,下层子类与上层父类有相同特征,称为继承 继承是使用已存在的定义做为基础建立新定义的技术。 新类的定义可以是既存类所声明的数据和新类所增加的声明的组合。新类复用既存的定义,而不要求修改继承类。 既存类可当做基类来引用,则新类相应地可当做派生类来引用。 2019/5/22

2019/5/22

使用继承设计一个新类,可以视为描述一个新的对象集,它是既存类所描述对象集的子集合。 这个新的子集合可以认为是既存类的一个特殊化。Quadrilateral类是Polygon类的特殊化。Quadrilateral是限制为四条边的多边形。我们还可以进一步地把类Quadrilateral特殊化为Rectangle 。 2019/5/22

类Quadrilateral的界面可以等同于类Polygon的界面,而Rectangle类的界面又与Quadrilateral类的界面相同。 新类的界面还可以被看做是既存类界面的一个扩充界面。例如,从一个既存的车辆类派生的四轮驱动车类可能不仅是车辆类子集合定义的特殊化,而且还可能在新类的界面中引入新的能力。 2019/5/22

2019/5/22

在类的继承层次中,Quadrilateral的实际参数可以替换Polygon的形式参数。 2019/5/22

4.4 消息:合作之道 消息(message):对象间只能通过发送消息进行联系,外界不能处理对象的内部数据,只能通过消息请求它进行处理(如果它提供相应消息的话)。 2019/5/22

一个对象接收的消息则调用消息中指定的方法,并将形式参数与参数表中相应的值结合起来。 消息是一个对象与另一个对象的通信单元,是要求某个对象执行类中定义的某个操作的规格说明。发送给一个对象的消息定义了一个方法名和一个参数表(可能是空的),并指定某一个对象。 一个对象接收的消息则调用消息中指定的方法,并将形式参数与参数表中相应的值结合起来。 2019/5/22

+Communication with messages OOM = Object +Class +Inheritance +Communication with messages 2019/5/22

4.4 传统方法与OO的比较 传统方法:面向过程设计,以计算为核心,数据与操作分离,不易理解 OOM:以object 为核心,强调对现实概念的模拟而不强调算法。“面向对象方法学的基本原则,是按照人们习惯的思维方式建立问题域的模型,开发出尽可能直观、自然地表现求解方法的软件系统”。 Class:由特殊到一般的归纳(induction) Inheritance:由一般到特殊的演绎(deduction) 2019/5/22

传统方法:结构依赖于功能,不稳定。 OOM:以object模拟实体,需求变化不会引起结构的整体变化,因为实体相对稳定,故系统也相应稳定。 传统方法:通过建立标准函数库来重用软构件。但标准函数缺少必要的“柔性”,难以适应不同场合的不同需要 OOM:一个class所有的 instances 都可重用它的代码;由 inheritance 派生出的新的 class 可重用其父类的代码,并且可以修改、扩充而不影响其父类的使用。。 2019/5/22

传统方法:可维护性是最令人头痛的问题。 OOM:从以下几方面改善了可维护性 稳定性好:软件功能需求的变化不牵动全局,只需局部修改; Class 独立性强:只要修改不涉及class的对外接口,则内部修改完全不影响外部调用; Inheritance和多态性(polymorphism)使其很容易被修改和扩充; 容易理解; 容易测试、调试。 有这一条就什么都好办了! 这一点还可商榷 2019/5/22

OOM并不是减少了开发时间,而是通过提高可重用性、可维护性,进行扩充和修改的容易程度等,从长远角度改进了软件的质量。 OOM与Prototyping结合使用效果好。 2019/5/22

6. 对象概念

S S’ 1、Object : = ID + Method + Attribute + Message …… …… gi(X,S) 输出 fi(X) …… …… f1 f2 f3 fi fn gi(X,S) S S’ 输出 输出 2019/5/22

特点: 以数据为中心,不设与数据无关的操作; Object主动处理而不 被动地等待被处理,外部只能通过message请求操作; 具有黑盒性:外部操作时,无须知道该object内部的数据结构及算法; 具有并行性:不同object各自独立地处理自身数据,彼此间仅通过传递message完成通信; 模块独立性好:内聚强( ① )、耦合松( ③ ④ ) 2019/5/22

2、Class:具有相同数据和相同操作的一组对象; 3、Instance:某个class描述的具体对象; 4、Message: = object_ID. method_ID (parameter(s)); 5、Method: object能做的操作,亦称为service 、responsibility, 在 class 中须定义相应的代码; 6、Attribute :object 的固有数据; 7、Inheritance:子类自动共享父类的attributes 和methods ,而不必重复定义。 2019/5/22

例: Class 中国人 张山 (instance) 2019/5/22 中国人 Attributes 中国人 Methods

特点: 若上海人的 methods中有与中国人的同名,则李士执行该 method 时以上海人为准,不执行中国人中定义的同名 method。 传递性(transitivity):AB、BC  AC, 一个 class 继承了上层全部 classes 的一切性质。 一个子类只 有 一 个父类称为单 继 承 (single inheritance), 一个子类可有多个父类称为多重继承(multiple inheritance). “低层性质override高层性质” “县官不如现管” 2019/5/22

例: Female Chinese Scholar I 注意:multiple inheritance 在定义中应避免二义性(ambiguity),即二个父类中定义重名,但各具不同性质。 例: CardDeck GraphicalObject Method: Draw := take a card from a deck Method: Draw := display a graphical object GraphicalDeck Method: Draw := ? 2019/5/22

8 Polymorphism: 2019/5/22 Which form do you need, master? 不同层次的 classes 可共享一个method名,但按各自的方式来实现这种 method。 C++ 中定义了虚函数(virtual function)来实现这一功能。即一个method有多个版本,运行时才决定执行哪一个。故亦称为动态联编(dynamic binding)或滞后联编(late binding) 修改与扩充可以很容易地通过派生子类来完成 Aladdin’s Genie 2019/5/22

⑴ Function (or parameter) overloading : double avg (const double a[ ], int size) ; double avg (const int a[ ], int size) ; { double sum = 0.0 ; for ( int i = 0; i < size; ++i ) sum += a[i] ; return ( sum / size ) ; } double avg (const int a[ ], int size) ; { int sum = 0 ; return ( (double) sum / size ) ; main() { int k[3] = { 1, 2, 3 } ; double x[3] = { 1.1, 2.2, 3.3 } ; cout << avg(k, 3) << “ int average \n” ; cout << avg(x, 3) << “ double average \n” ; 9、Overloading ⑴ Function (or parameter) overloading : 不同函数共用一个名字,而调用参数的特征不同。 例: 2019/5/22

⑵ Operator overloading : 同一运算符 (operator)作用于不同类型的操作数 (operand) 上面。 在编译(compile)阶段就决定了使用类型及执行代码,故亦称为静态联编 (static binding)或先前联编 (early binding) 。 2019/5/22

7. 面向对象的分析/设计/编程

7.1 概述 面向对象的分析(OOA) 面向对象的设计(OOD) 面向对象的编程(OOP) 分析问题论域,找出问题解决方案,发现对象,分析对象的内部构成和外部关系,建立软件系统的对象模型 面向对象的设计(OOD) 根据已确定的系统对象模型,运用面向对象技术,进行系统软件设计 面向对象的编程(OOP) 2019/5/22

7.2 面向对象的分析 2019/5/22 问题论域分析 发现和定义对象和类 识别对象的外部联系 建立系统的静态结构模型 业务范围,业务规则,业务处理过程,确定系统的责任,范围和边界,确定系统的需求 发现和定义对象和类 识别对象和类,确定它们的内部特征:属性和操作,这是一个抽象过程 识别对象的外部联系 对象与对象,类与类之间的各种外部联系,包括一般与特殊,整体与部分,实例连接(关联),消息连接等 建立系统的静态结构模型 对象类图和对象图,系统与子系统结构图等,绘制相应的图 建立系统的动态行为模型 对象之间的交互关系等 2019/5/22

7.3 面向对象的设计 设计对象和类 设计系统结构 设计问题论域子系统 设计人机交互系统 设计数据管理子系统 设计任务管理子系统 具体设计对象和类的属性,操作,设计对象与类的各种外部联系的实现结构,设计消息与事件的内容、格式等 设计系统结构 设计组件与子系统,以及它们的相互的静态和动态关系 设计问题论域子系统 负责领域的业务服务 设计人机交互系统 设计数据管理子系统 设计任务管理子系统 进程管理 设计优化,提高系统性能 2019/5/22

7.4 面向对象的编程 详细的面向对象设计与语言有关。 一般地,所有的语言都可以完成面向对象实现,但某些语言能够提供更丰富的语法,能够显式地描绘在面向对象分析和面向对象设计过程中所使用的表示法。 2019/5/22

可以增加数据抽象及封装(如利用结构化设计的信息隐蔽模块) 无法明确地表示继承性。也无法明确支持整体与部分、类与成员、对象与属性等关系。 过程型语言只直接支持过程抽象 可以增加数据抽象及封装(如利用结构化设计的信息隐蔽模块) 无法明确地表示继承性。也无法明确支持整体与部分、类与成员、对象与属性等关系。 具有面向对象特性的过程型语言可以成为一种实用的且可行的语言。 2019/5/22

基于对象的语言,也叫做面向软件包的语言,如Ada等,能够直接支持过程抽象、数据抽象、封装和对象与属性关系 它无法表示继承性,也无法表示类与成员、整体与部分的关系。 基于对象语言的面向对象设计代表一种可行的开发方法。 2019/5/22

它们不明确地支持整体与部分关系,但可以方便地表示组装对象。 面向对象的程序设计语言,包括C++、Smalltalk、Objective-C、 Actor、 Eiffel等,都直接支持过程抽象、数据抽象、封装、继承、以及对象与属性、类与成员关系。 它们不明确地支持整体与部分关系,但可以方便地表示组装对象。 2019/5/22

8. 信息系统建模

8.1 为什么要建模 今天的计算机软件系统 2019/5/22 是产品,而非“计算机程序”。 软件系统作为产品的特征  是产品,而非“计算机程序”。  软件系统作为产品的特征 开发者和使用者是脱离的。 软件产品为用户提供功能 软件产品具有质量的概念 软件产品,应具备完备的用户手册技术文档 软件产品的生产过程具有工业化生产的特点 开发团队协同工作 软件产品需要使用工具 技术是可复用 质量必须稳定的 不应在不同版本的软件之间产生质量不稳定的现象 2019/5/22

但是, 和其它传统的、成熟的工业生产行业相比, 软件生产实际上仍处于幼稚阶段 举一个成熟的工业化生产的例子:电子产品制造 首先,确定产品性能指标 如:收音机 波段 扬声器 频率范围 等等 …… 2019/5/22

然后 2019/5/22 设计电原理图 构成: 集成电路符号 晶体管符号 电阻电容符号 标注符号 描述 电气连接关系 可以了解到各关键信号的电气指标: 信号的频率, 电平电流, 等等。 2019/5/22

电原理图是电子产品生产制造的基础。 电子产品定型并投入生产后 软件生产行业,情形有所不同… 2019/5/22 设计资料被作为技术资料存档 产品需要更新换代 技术复用 软件生产行业,情形有所不同… 首先,写系统分析报告 由文字和示意性的框图构成 然后,提出设计报告 简单的 文本和非标准图形组成 2019/5/22

报告评审通过后 2019/5/22 编码、调试、测试、发行 在大多数情况下,这时的工作已经和报告的内容脱钩 这是由于开发和项目计划方面的压力 软件产品发行, 开发项目结束后,这些报告已不具备参考价值 因为此时软件设计报告已经和软件的实际实现脱节,无法反映软件产品的实际原理和结构。 软件产品需要更新换代时 软件新版本的开发队伍所面对的只是老版本的软件产品本身加上相关的源代码。 除此之外,没有任何其它的资源可以帮助他们分析和理解原产品的设计原理、结构和实现思路。 2019/5/22

这相当于制造收音机时 2019/5/22 不绘制画电原理图就直接用集成电路、晶体管、电阻、电容制造收音机 带来许多严重的问题 对产品进行维修/维护 新产品开发 如何使开发周期最短、费用最节省 对软件行业是同样的,它使得 软件的技术复用难以进行 开发队伍无法得到明确有效的分工 软件的质量难以保证 降低软件产品开发效率 2019/5/22

从本质上讲,标准而规范的设计描述手段,就是建模 回顾成熟的工业行业的发展历史,可以看出 标准而规范的设计描述手段的引入,对产业的成熟起着重要的作用 标准而规范的设计描述手段,作为一种标准的交流媒介,可以: 促进开发队伍的分工合作 提高(软件)产品的开发效率和质量 从本质上讲,标准而规范的设计描述手段,就是建模 2019/5/22

在产品的实际制造之前,先用模型来描述产品的特性和结构,使得参与产品设计和制造的人员能够了解目标产品的: 设计原理 内部结构 制造工艺和流程 从中找出产品设计和生产过程中的困难和风险所在 2019/5/22

为什么要进行建模,是由于: 而对于一个软件产品而言, 2019/5/22 对于一个复杂的软件系统,人们无法对其整体进行详细而全面的把握。 所以,一个复杂的软件系统必须由多个开发人员共同完成。对于开发队伍里的每个成员而言, 他(她)不可能对整个软件系统有全面而详细的了解。 而对于一个软件产品而言, 如果对整个系统的功能、原理和结构没有一个全面而详细的记载的话, 将会对此软件产品的开发、维护、升级产生不利的结果。 2019/5/22

通过建模 把一个复杂的系统,按问题的不同方面,以一种约定好的,为大家共同接受的描述方式,分别进行全面而详尽的描述; 这样,人们在试图理解一个系统时,可根据他所关心的某一方面的问题,查阅对应的系统模型,从而得到对此问题的理解。 2019/5/22

8.2 信息系统建模的原则 2019/5/22 准确的原则:模型必须准确地反映软件系统的真实情况。 模型必须准确,意味着在软件开发的整个周期内模型必须和产品始终保持一致。 分层的原则:在建模的过程中,必须有不同的模型,以不同的抽象程度,反映系统的不同侧面。 在软件构筑的不同阶段,不同的开发相关人员(stockholder),如:投资者、管理者、设计者、程序员、测试者,使用者,看待软件的侧重面有所不同。 因此,软件系统的建模需要不同的模型以反映系统的不同侧面。 如: 一类模型描绘系统的外部边界和行为 另一类模型描绘系统的内部逻辑关系。 2019/5/22

2019/5/22 分治的原则:不可能单独用一个模型来反映整个系统的任何侧面。 标准的原则:模型必须在某种程度上是通用的。 软件系统是复杂的 对于软件模型的任意一个侧面,不可能用一个模型来反映所有内容, 需要把问题分解为不同的子模型,分别处理。 这些模型相对独立,但又互相联系,综合起来构成了此侧面的一个完整的模型。 标准的原则:模型必须在某种程度上是通用的。 建模的基本目的是交流 一个开发队伍内部的交流 同一软件的不同时期的版本的开发队伍的交流 不同软件的开发队伍之的交流 以实现最大程度的软件复用 交流需要语言 语言是通用的、是标准 2019/5/22

8.3 基于建模的开发过程 采用以用户需求分析为指导,建立系统的逻辑结构,在此基础上建立系统的数据模型,将数据存储到关系或对象数据库中。最后,通过建立组件和分布模型,建立系统的分布式组件,实现组件的可重用,并将这些组件分布到不同的物理和网络环境下运行。 可行性分析和调查 功能模型精化 设计 精化 部署与交付 实现 测试 2019/5/22

8.4 信息系统建模的特点 开放性:采用标准,实现与其他分析建模工具和设计平台的互操作 一体化:实现从需求分析到逻辑建模到数据建模以及物理分布建模的无缝结合 易用性:信息系统建模是一个与用户以模型不断交互的过程,必须有可视化、层次化的建模环境 可重用性 多领域的协同 2019/5/22

8.5 信息系统建模方法 信息系统的建模方法可以分为: 面向过程的建模 面向数据的建模 面向信息的建模 面向决策的建模 面向对象的建模 2019/5/22

面向过程的建模方法是把过程看作系统模型的基本部分,数据是随着过程而产生的。最有影响的面向过程的设计方法是Yourdon设计法。 面向数据的建模方法把模型的输入输出看成是最为重要的,因此,首先定义的是数据结构,而过程模块是从数据结构中导出的,即功能跟随数据。最有影响的面向数据的设计方法是Jackson设计法。    2019/5/22

面向信息的建模方法与面向数据建模方法的区别就是信息和数据的区别。 面向信息建模方法是从整个系统的逻辑数据模型开始的,通过一个全局信息需求视图来说明系统中所有基本数据实体及其相互关系,然后,在此基础上逐步构造整个模型,信息模型记录系统运作所需的信息实体,如:人员,地点,事物,观念等,为分析现行系统提供信息的图形化表示。 数据建模的目的是设计和实现满足系统信息需求的数据库结构,即数据建模支持系统设计。 2019/5/22

决策支持系统由数据库、模型库和各自的管理系统组成。决策支持系统模型需要反映的问题是系统的决策制订原则和机理、系统的组织机构和人员配置。通过对决策系统的建模,企业的领导可以对企业有一个细致的了解,从而发现其中问题。如组织结构臃肿,职权划分不清,权力范围不合理等,据此进行相应的改革。比较成熟的决策支持系统建模方法有Petri网和GRAI法。 2019/5/22

面向对象的分析方法是利用面向对象的信息建模概念,如实体、关系、属性等,同时运用封装、继承、多态等机制来构造模拟现实系统的方法。传统的结构化设计方法的基本点是面向过程,系统被分解成若干个过程。而面向对象的方法是采用构造模型的观点,在系统的开发过程中,各个步骤的共同的目标是建造一个问题域的模型。在面向对象的设计中,初始元素是对象,然后将具有共同特征的对象归纳成类,组织类之间的等级关系,构造类库。在应用时,在类库中选择相应的类。 2019/5/22

8.6 模型表示 2019/5/22 面向需求分析的建模方法 面向对象的逻辑建模方法 面向数据的建模方法 数据流分析方法:DFD IDEF0 USE-CASE 面向对象的逻辑建模方法 对象与类的建模 对象间关系的建模 子系统建模 动态模型 组件模型 配置模型 面向数据的建模方法 语义数据模型:实体-关系图 IDEF1X模型:IDEF1X图 2019/5/22

小结 面向对象方法学是认识世界的观点 优点:问题域与求解域的一致 信息系统建模改善了软件开发过程,是软件工业化生产的必要条件 2019/5/22