第二章面向对象与UML建模基础周瑞信息与软件工程学院2本章内容•面向对象基础•UML概述•UML建模工具2.1面向对象基础4什么是面向对象?面向对象思想①客观世界是由各种对象组成,复杂对象可以由简单对象组成。②对象是对现实世界实体的抽象,将实体的属性数据和操作封装在一起。③对象之间通过消息传递实现交互,以模拟现实世界中不同事物之间的联系。面向对象(Object-Oriented,OO)•面向对象=对象+类+继承+通信•等式可以解释为:采用对象思想将问题领域的实例进行抽象,并应用分类技术来管理对象,应用继承机制管理对象之间的相似性,并且通过对象间的消息连接来实现对象间通信,这种方法称为面向对象方法。5面向对象的基本概念对象(Object)•对象是系统中用来描述客观事物的一个实体,由一组属性和对这组属性进行操作的一组服务组成•面向对象的核心•属性描述对象的静态特征,服务描述对象的动态特征:学生姓名=王平性别=男出生日期=1990年3月1日学号=2011003011入学注册选课:教师姓名=李四性别=男出生日期=1968年1月1日职称=教授工资号=520100授课6面向对象的基本概念对象•对象是面向对象系统的基本构造块•对象可以用来代表现实世界中的事物–桌子、椅子、学生、教师等等–图书管理系统:图书管理员、读者、书籍–飞行试驾程序代表现实世界中正在飞行的飞机–机床数控程序来代表现实世界中运行的机床•对象也可以用来描述抽象的概念–图书管理系统:院系、学生学号、书籍编号–窗口、按钮、菜单7面向对象的基本概念类(Class)•类是具有相同属性和操作的一组对象的集合•对象是类的一个实例,即类在某时刻的一个快照•类描述了一组相似对象的共同特征,为属于该类的全部对象提供了统一的抽象描述•例如:图书管理系统中的“读者”类、“书籍”类•每个类都由一组属性和一组方法来描述,类的定义包含以下要素–该类对象的属性(名称、类型等):描述类的个体(对象)具有的静态特征。–该类对象的操作(名称、参数、返回值等):是对象所能提供的服务或可执行的操作,描述对象具有的动态特征。8面向对象的基本概念类和对象姓名性别出生日期学号学生入学注册选课抽象姓名=王平性别=男出生日期=1990年3月1日学号=2011003011:学生入学注册选课姓名=李明性别=男出生日期=1991年1月2日学号=2011003013:学生入学注册选课9类和对象•对象继承了它所属类的所有属性与方法,并将其数据(属性)和操作代码(方法)封装在一个实体中,并以对象名标识。外部访问对象只能通过对象名字及其公开的接口进行通信。对象之间的交互也只能通过其接口传递消息来实现。面向对象的基本概念类命名为p1的Point对象匿名Point对象对象可以列出属性值操作可以不必列出x:Realy:RealPointscale(factor:Real)10抽象类(AbstractClass)•抽象类是一种不能直接产生实例的类,它的作用仅仅是为了其他的非抽象类继承和重用。面向对象的基本概念11接口(Interface)•接口是一组供外部访问的操作,它用于一个类为其它类提供服务的界面•接口可以看作一种特殊的类,不含属性,只有方法,且不定义方法实现•接口代表系统中的接缝,接口两端的对象或组件可以独立变更,只要它们遵守和实现接口的规定,通过接口相联系即可。面向对象的基本概念12面向对象的基本概念消息(Message)•消息是从一个对象(发送者)向另一个或几个其他对象(接收者)发送的信号,或由一个对象(发送者或调用者)调用另一个对象(接收者)的操作。•对象之间的通信方式•消息组成–接收者–操作名–参数13面向对象的基本概念事件(Event)•事件通常是指一种由系统预先定义而由用户或系统发出的动作•例如:点击鼠标OnClick、鼠标经过OnMouseOver•事件作用于对象,对象识别事件并作出相应反应•事件的集合通常是固定的,用户不能随便定义新的事件14面向对象的基本特征•抽象•封装•继承•多态15面向对象的基本特征抽象(Abstraction)•抽象描述了一个对象的基本特征,可以将这个对象与所有其它类型的对象区分开来,因此提供了清晰定义的概念边界,它与观察者的视角有关。•抽象是人类处理复杂性的基本方式。•识别和关注与当前目标有关的事物的本质特征,淘汰与当前状况无关的非本质信息。•对于给定的问题域决定一组正确的抽象,是面向对象设计的核心问题。16面向对象的基本特征抽象关注某个对象的基本特征,它与观察者的视角有关抽象17面向对象的基本特征封装(Encapsulation)•封装是把对象的状态和行为绑到一起的机制,把对象形成一个独立的整体,并且尽可能的隐藏对象的实现细节18面向对象的基本特征封装•封装有两个含义①结合性:把对象的全部状态和行为结合一起,形成一个不可分割的整体。对象的私有属性只能够由对象的行为来修改和读取。②信息隐蔽性:尽可能隐蔽对象的内部细节,与外界的联系只能够通过外部接口来实现。•封装通过信息隐藏来实现,隐藏对象的结构、方法的实现•封装的信息屏蔽作用反映了事物的相对独立性,我们可以只关心它对外所提供的接口,即能够提供什么样的服务,而不用去关注其内部细节。19面向对象的基本特征封装带来的好处:•封装的结果是使对象以外的部分不能随意去更改对象的内部属性,这样复杂系统的每一部分都不依赖其它部分的内部细节。•数据和操作的内部实现细节对外界隐藏(信息隐蔽),这将减少当变化发生时副作用的传播。•数据结构和操纵它们的操作被合并在单个命名实体(类)中,这将便于组件复用。•被封装对象间的接口被简化。一个发送消息的对象不需要关心接收对象的内部数据结构,因此,接口被简化,系统耦合度被降低。20继承(Inheritance)•继承,也称泛化,是指类之间的相似性重用机制。•面向对象利用继承来描述这种相似性,一个类可以通过继承来重用其他类的属性与方法,从而简化相似类的定义工作。•继承是一般和特殊的关系,表明“…是一种…”•一个类可以继承其他类的属性和方法。一个特殊类既有自己定义的属性和行为,又有继承下来的属性和行为。面向对象的基本特征21面向对象的基本特征继承•继承意味着“自动地拥有”,在特殊类中不必重新对已经在一般类中所定义过的属性和行为进行定义,而是特殊类自动地、隐含地拥有其一般类的属性和行为•继承了其它类属性和方法的类称为子类或派生类,被继承的类称为父类或超类。•子类复用父类属性和方法的过程,称为继承或泛化。22继承•一个类可能没有父类,这种没有父类的类被称为基类或根类;•一个类也可以没有子类,没有子类的类被称为叶类;•如果一个类恰好只有一个父类,这样的继承关系叫单继承;•如果一个类有多个父类,这样的继承就是多继承。•继承是传递的•继承是一种连接类与类之间的层次模型,通过确定这些层次结构,可以极大简化对系统的理解。面向对象的基本特征23面向对象的基本特征多态(Polymorphism)•多态是指在不同类中具有相同名称的方法(操作),对于两个或多个属于这些不同类的对象,对于同一个消息或方法调用,作出不同的响应。24面向对象的基本特征多态•超类中定义的属性或者服务被子类继承后,可以具有不同的数据类型或者表现出不同的行为•在具有继承关系的类层次结构中,不同层次的类可以共享一个操作,但是各自具有不同的实现25面向对象回顾什么是面向对象?•面向对象=对象+类+继承+通信•等式可以解释为:采用对象思想将问题领域的实例进行抽象,并应用分类技术来管理对象,应用继承机制管理对象之间的相似性,并且通过对象间的消息连接来实现对象间通信,这种方法称为面向对象方法。什么是对象?•对象是系统中用来描述客观事物的一个实体,由一组属性和对这组属性进行操作的一组服务组成。对象是面向对象的核心。属性描述对象的静态特征,服务描述对象的动态特征。什么是类?•类是具有相同属性和操作的一组对象的集合。类描述了一组相似对象的共同特征,为属于该类的全部对象提供了统一的抽象描述。对象是类的一个实例,即类在某时刻的一个快照26面向对象回顾抽象类•抽象类是一种不能直接产生实例的类,它的作用仅仅是为了其他的非抽象类继承和重用。接口•接口是一组供外部访问的操作,它用于一个类为其它类提供服务的界面消息•消息是从一个对象(发送者)向另一个或几个其他对象(接收者)发送的信号,或由一个对象(发送者或调用者)调用另一个对象(接收者)的操作。是对象之间的通信方式。事件•事件通常是指一种由系统预先定义而由用户或系统发出的动作。事件作用于对象,对象识别事件并作出相应反应。事件的集合通常是固定的,用户不能随便定义新的事件。27面向对象回顾抽象•抽象识别和关注与当前目标有关的事物的本质特征,淘汰与当前状况无关的非本质信息。描述了一个对象的基本特征,可以将这个对象与所有其它类型的对象区分开来,因此提供了清晰定义的概念边界,它与观察者的视角有关。封装•封装是把对象的状态和行为绑到一起的机制,把对象形成一个独立的整体,并且尽可能的隐藏对象的实现细节。继承(泛化)•继承,是指类之间的相似性重用机制。面向对象利用继承来描述这种相似性,一个类可以通过继承来重用其他类的属性与方法,从而简化相似类的定义工作。继承是一般和特殊的关系,表明“…是一种…”。多态•多态是指在不同类中具有相同名称的方法(操作),对于两个或多个属于这些不同类的对象,对于同一个消息或方法调用,作出不同的响应。2.2UML概述统一建模语言UnifiedModelingLanguage29•所谓建模就是对系统进行抽象描述,使人们能够通过其模型去理解与设计系统。模型是系统的一种抽象表示。什么是建模?30•很多现实系统是复杂的,人们难以直接地进行系统分析与设计。•建模系统具有如下好处:①通过创建系统的模型,可使人们便于理解、分析与设计系统②通过模型可发现与解决系统中的问题,其成本低③模型可帮助进行系统项目开发的计划、交流、评估和管理•对于一个复杂的软件系统,其开发需要有多方面人员的参与、合作共同完成开发。它必须具有完整的从分析、设计、实现、使用和维护的各阶段文档。因此,软件系统象其它传统领域系统一样需要进行系统建模。为什么需要建模?31(1)准确原则模型必须准确地反映系统的真实情况,即模型在软件开发周期内必须与最终产品保持一致性。(2)分层原则模型以不同的抽象程度反映系统,这样便于在软件开发不同阶段对软件系统进行分析与设计。(3)分治原则对于复杂的软件系统,不可能使用一个模型来反映系统的各个侧面,需要采用分治方法把问题分解为多个子模型来处理。(4)标准原则模型应该是通用的和标准的,这样便于交流与重用。标准通用模型需要借助于标准的模型描述语言。软件系统建模原则32•统一建模语言•UnifiedModelingLanguage-UML•面向对象建模语言的标准用什么工具建模?33•统一建模语言,UnifiedModelingLanguage(UML)•UML是一个用于描述、可视化、构造和文档化软件系统的建模语言。它统一了GradyBooch、JamesRumbaugh、和IvarJacobson三位大师的面向对象建模描述语言(Booch、OMT、OOSE),并对其做了进一步的发展,最终成为广泛接受的面向对象建模语言。•UML已被OMG所采用,现成为业界的建模语言标准。统一建模语言UML34TheThreeAmigosGradyBooch1955-美国计算机科学家Rational、IBMBooch方法JamesRumbaugh1947-美国计算机科学家Rational、IBMOMT方法IvarJacobson1939-瑞典计算机科学家Objectory、RationalOOSE方法35UML起源与发展•20世纪70年代中期:出现面向对象建模语言•20世纪80年代末~90年代中:繁盛时期,50多种面向对象建模语言•20世纪90年代中期:Booch(GradyBooch)、OOSE(IvarJacobson)、OMT(JamesRumbaugh)•1994年10月: