概述
为什么软件在本质上是复杂的?
1.问题域的复杂性
无限制的外部复杂性是导致复杂的原因之一
2.管理开发过程的困难性
3.软件中随处可能出现的灵活性
迫使开发者打造几乎所有的初级模块
4.如何描述系统行为
抽象和逼近
软件人如何认识复杂系统?
软件工程师是如何认识复杂系统和进行建模和分析的
发现共同抽象的思维,极大地促进了我们对复杂系统的理解
抽象->系统整体架构
1.复杂系统的规范形式
2.处理复杂性时人的能力的局限
3.混沌-->有序
分解、抽象、层次化
软件人如何进行复杂系统的设计?
1.建模的重要性
建模在所有工程实践中都已得到广泛接受,这主要是因为建模引证了分解、抽象和层次结构的原则。
2.软件设计方法学的要素
3.掌握面向对象开发的模型
本课程的目标
1.掌握面向对象分析的方法
2.掌握面向对象设计的方法
3.进行典型系统的分析与建模
第一章 面向对象方法概论
什么是对象?
在软件系统中,对象具有唯一的标识符,对象包括属性和方法,属性就是需要记忆的信息,方法就是对象能够提供的服务。在面向对象的软件中,对象是某一个类的实例
什么是面向对象?
面向对象方法是一种运用对象、类、继承、封装、聚合、关联、消息、多态性等概念来构造系统的软件开发方法。
面向对象方法的基本思想
一、从现实世界中客观存在的事物出发来构造软件系统
二、在系统构造中尽可能运用人类日常的思维方法
具体而言,面向对象方法有如下一些主要特点:
(1)从问题域中客观存在的事务出发来构造软件系统,用对象作为这些事物的抽象表示,并以此作为系统的基本构成单位。
(2)用对象的属性表示事物的静态特征(即可以用一些数据来表达的特征),用对象的操作来表示数的动态特征(即事务的行为)。
(3)对象的属性与操作结合在一起构成一个独立的实体,对外屏蔽其内部细节(封装)。
(4)对数进行分类,把具有相同性属性操作的对象归为一类,类是这些对象的抽象描述,每个对象是它的类的一个实例。
(5)通过在不同程度上运用抽象的原则,可以得到较一般类和较特殊的类。特殊类继承一般类的属性与操作,从而简化了系统的构造过程。
(6)复杂的对象可以用简单的对象作为其构成部分(聚合)。
(7)对象之间通过消息进行通讯,以实现对象之间的动态联系。
(8)用关联表达某些类之间对用户业务有特定意义的关系。
【总结】
对象是系统的基本构成单位,而对象是通过类进行描述和创建的。系统中的对象对应问题域中的事物,其属性和操作刻画了事物的静态特征和动态特征,它们之间的继承关系、聚合关系、关联和消息如实地表达了问题域中事物之间实际存在的各种关系。
什么是面向对象的思考方式?
1.可维护
2.可复用
3.可扩展
4.灵活性好
软件工程是与人打交道的、是为人提供服务的
问题是什么?
谁碰到了问题?
问题的本质是什么?
问题该如何解决?
面向对象软件工程方法学与传统方法学的异同
面向对象方法的基本概念与原则
对象,类
属性,操作
封装
继承,一般-特殊结构
聚合,整体-部分结构
关联
消息
多态
持久对象,主动对象
……
实例化
可以以类为模板产生属于该类的对象,这种根据类产生对象的过程称为实例化
实例化使并发成为可能
软件功能是如何完成的?
类
定义了对象群体的逻辑结构,包括属性和操作
系统运行时,类作为产生对象的模板,在物理层面是不存在的
对象
系统运行时必须为每一个需要的对象分配内存、保存数据
对象存在于物理层面,每个对象都有自己的数据空间(内 存)
所有的对象共享同一块代码空间
消息
对象之间的一种交流手段
就像我们日常工作中的各种交流手段
所有相关对象之间相互协作完成软件功能
目前在大部分面向对象的编程语言中,消息其实就是函数(或过程)调用。
更一般的定义: 消息是对象之间在一次交互中所传送的信息
面向对象基本特征
消息传递:
只能通过向对方发送消息的方式传递信息,这就是消息传递机制
对象只能借助消息传递机制才能同其他对象通信
每个消息必须发送给指定的接受这,并且消息的解释依赖于接受者
消息传递是一种强大的机制,提供了函数名重载、多态和软件复用的能力。
纠正一种误解——认为在任何两个类之间只有存在关联才可能存在消息。 实际上,关联和消息是两个截然不同的概念,二者是相互独立的。
委托:借助消息传递,工作可从一个对象传递到另一个对象
抽象:抽象是忽略一个主题中与当前目标无关的那些方面
封装:封装是指把对象的属性和方法包围起来,避免外界的干扰和不确定性,对数据的访问只能通过接口进行
继承:继承是特殊类自动地拥有或隐含的复制其一般类的全部属性与操作
多继承:允许一个特殊类具有一个以上一般类的继承方式称作多继承
多态:多态是指允许不同类的对象对同一消息做出相应
封装是继承的前提,没有封装就没有继承
抽象,类,一般类,特殊类
抽象与分类:忽略事物的非本质特征,只注意那些与当前目标有关的本质特征,从而找出事物的共性,叫做抽象。抽象是形成概念的基本手段。把具有共同性质的事物划分为一类,叫做分类。
类是具有相同属性和操作的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和操作两个主要部分。类的作用是用来创建对象,对象是类的一个实例。
一般类和特殊类的定义
如果类A具有类B的全部属性和全部操作,而且具有自己特有的某些属性或操作,则A叫做B的特殊类,B叫做A的一般类。一般类与特殊类又称父类与子类。
泛化
泛化是面向对象方法中的一个重要概念,能够在很大程度上提高软件开发小绿。也称继承、一般-特殊结构。
泛化关系是一种类之间的关系。可将一类对象进一步细分为许多子类,原来的类(父类)与子类之间的关系就是泛化关系。父类称为子类的泛化,子类称为父类的特化。
继承关系是泛化关系的反关系,也就是说子类是从父类继承的,而父类则是子类的泛化
面向对象的6种关系: 关联,聚合,组合,泛化(继承),依赖,实现
关联:两个或者多个类上的一个关系(即这些类的对象实例集合的笛卡儿积的一个子集合),其中的元素提供了被开发系统的应用领域中一组有意义的信息。
聚合:是两个类之间的一个二元关系,它表示一个类的对象实例以另一个类的对象实例作为其组成部分。 聚合刻画了现实事物之间的构成关系或者拥有关系。
当一个类实现了该接口中的方法,称为实现。
持久对象: 在程序运行结束后仍能继续保存的对象
超出了程序运行时间,跨越了内外存空间
实现途径:支持持久对象的OOPL,OO-DBMS
主动对象: 至少有一个操作不需要接收消息就能主动执行的对象。
描述具有主动行为的事物
描述并发执行的多个控制流
第二章 不同的分析与设计方法