重点:了解模型的作用和特点熟悉面向对象的优点、掌握面向对象的三大要素、熟悉面向对象的三大模型、掌握面向对象的常用三层、熟悉面向对象的常用开发方法了解软件建模的目的、熟悉软件建模的三要素、掌握面向对象建模的3个特征、熟悉建模的分类1目录21.1模型31.1模型它是抓住现实系统的主要方面而忽略次要方面的一种抽象。简单来说,模型是对现实的简化和抽象化。可以说模型既反映现实系统,却又不等同于这个现实系统。模型是理解、分析、开发或者改造现实系统的一种常用手段,例如图1-1显示了模型和现实系统之间的关系。系统的模型现实系统确认抽象图1-1模型和现实系统之间的关系4模型是基于图形的表示,以可视化方式、形象直观地描述系统的特征。一个模型往往针对同一个被建模事物,由多个图形组成,这些图大致可以分为结构图和行为图两类,分别描述事件的结构特征和行为特征。促进项目有关人员对系统的理解和交流。模型对于问题的理解、项目有关人员之间的交流、文档的准备以及程序和数据库的设计都非常有益。它能促进人们对需求的理解,从而可使得人们直接研究大型的复杂软件系统。有助于挑选出代价较小的解决方案。在研究一个比较大型的软件系统的模型时,可以提出多个实际方案并对它们进行相互比较,然后挑选出一个最好的方案。缩短系统的开发周期。模型实际上是通过过滤掉一些不必要的细节而刻画复杂问题或者结构的必要特性的抽象,它使问题更加容易理解。软件系统的开发过程变得更快,同时也降低了系统的开发成本。1234模型的作用5ACDB模型是局部性的,以放映事件的不同侧面模型的目的非常明确,一个模型总是出于特定的目的或意向去建立的。模型不是实际的、物理性的系统,而是抽象的,且有不同的抽象级别。模型与原型不同。原型是一个缩小的、局部的、可执行的系统;对于模型来说,无论多么详细具体的模型都难以直接执行。模型的特点模型的特点61.2面向对象的思想1.2.1了解面向对象1.2.2面向对象的三大要素1.2.3面向对象的三大模型1.2.4面向对象的常用三层1.2.5面向对象的开发方法7在面向对象出现之前,传统的程序设计方法大都是面向过程的,还有一少部分是面向数据结构的。1.2.1了解面向对象面向过程的程序设计结构清晰,为缓解软件危机做出了贡献。但是,它的模块独立性较差,各个模块之间的耦合度非常高,一个模块的修改可能会造成许多其他模块功能上的改变。因此,面向对象的程序设计应运而生。面向对象是一种新兴的程序设计方法,它是对面向过程程序设计强有力的补充,它使用类、对象、继承、封装和消息等基本概念来进行程序设计。8问题空间与解空间的结构一致,符合人们的日常思维习惯,降低了大规模系统的分析和设计难度。概念连贯结构良好便于复用Becausecompaniesarelegalpersons,theyalsomay方便理解软件开发全过程始终以“类和对象”为中心概念,方便阶段结果的跟踪、管理和持续演进。它表现在两个方面:一是对象的内聚性和“粒度”便于复用;二是继承机制为代码复用提供了内在支持。面向对象程序设计的优点对象具有良好的内聚性和局部独立性,从而使软件体系结构的可靠性、可维护性和可扩展性显著增强。9010203面向对象程序开发面向对象只是一种思想,或者是说一种开发方法,而不是一种编程技术。它的最大好处在于帮助规划人员、开发者和客户清晰地表达抽象的概念,并将这些概念互相传达。面向对象的思想已经涉及到软件开发的各个方面,例如面向对象分析、面向对象设计、面向对象编程和面向对象测试等。面向对象分析,简称OOA。它是面向对象方法从编程领域向分析领域发展的产物。从根本上讲,面向对象是一种方法论,不仅仅是一种编程技巧和编程风格,而是一套可用于软件开发全过程的软件工程方法,OOA是其中的第一个环节。面向对象设计,简称OOD,中文被称为“面向对象设计”。OOD在软件设计生命周期中发生于OOA之后或者后期,其目标是建立可靠的、可实现的系统模型;其过程是完善OOA的成果,细化分析。OOD与OOA的关系是:OOA表达了“做什么”,而OOD则表达了“怎么做”。简单来说,OOA只解决系统“做什么”,不涉及“怎么做”;而OOD涉及解决“怎么做”的问题。面向对象编程,简称OOP。它就是使用某种面向对象的语言,实现系统中的类和对象,并使得系统能够正常运行。在理想的OO开发过程中,OOP只是简单地使用编程语言实现了OOA和OOD分析和设计模型。10封装继承多态Therearemanyvariationspassagesofloremipsumavailablemajorityhavesufferedalteration.添加您的标题0102031.2.2面向对象的三大要素1132136598封装封装是指把对象的状态(或属性)和行为(或动作)绑定到一起的机制,把对象形成一个独立的整体,并且尽可能的隐藏对象的内部细节。封装包含两个含义:①结合性:把对象的全部状态和行为结合在一起,形成一个不可分割的整体。对象的私有属性只能够由对象的行为来修改和读取。②信息隐蔽性:尽可能隐蔽对象的内部细节,与外界的联系只能通过外部接口来实现。定义有编程经验的读者都知道,Java或者C#等语言开发的程序都会用到封装。例如,如下代码显示了C#中的一段封装代码:privatestringcustomNo;//客户编号privateintcustomAge;//客户年龄publicstringCustomNo{get{returncustomNo;}set{customNo=value;}}publicintCustomAge{get{returncustomAge;}set{if(customAge10||customAge100)customAge=10;elsecustomAge=value;这段代码首先通过private声明两个私有变量,然后将它们封装为公有属性。在CustomAge中,还对customAge变量的值进行了判断。这样,用户可以直接调用该类的公有属性并进行赋值,而不必关心是怎么实现的,直接调用即可。示例12封装(续)封装优点:•封装使得对象内部成为一个结构完整、可自我管理、自我平衡、高度集中的整体。•而对外则是一个功能明确、接口单一、可在各种合适的环境下都能独立工作的有机单元。•对象的接口就是它的公共属性及方法•软件芯片具有封装性的条件:(1)有一个清晰的边界;(2)有明确的接口;(3)受保护的内部实现。实现接口13传统方法数据与过程是分离的过程1输入输出过程2过程3数据实体属于该对象的数据对象处理数据的方法消息消息对象把数据和处理数据的方法封装成一个单元1432136598继承继承是一种连接类与类之间的层次模型,它是指特殊类的对象拥有其一般类的属性和行为。继承意味着“自动地拥有”,即在特殊类中不必重新对已经在一般类中所定义过的属性和行为进行定义,而是特殊类自动地、隐含地拥有其一般类的属性和行为。定义示例继承对类的重用性,提供了一种明确表述共性的方法。即一个特殊类既有自己定义的属性和行为,又有继承下来的属性和行为。例如,图所示了一个简单的继承结构图。在该图中,苹果、香蕉和橘子等水果都继承自水果的属性和行为。还将香蕉分为高干型香牙蕉、中干型香牙蕉和矮干型香牙蕉等多个品种,它们不仅继承香蕉的属性和行为,还继承了水果的属性和行为。水果苹果香蕉...橘子高干型香牙蕉中干型香牙蕉矮干型香牙蕉15继承(续)•继承性是面向对象程序设计语言不同于其他语言的最主要特点。•广义地说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们。在面向对象的软件技术中,继承是子类自动地共享基类中定义的数据和方法的机制。•继承是指子类可以自动拥有父类的全部属性与操作的机制。•父类(超类)•子类(派生类)•继承性又分为单重继承和多重继承两类。16继承的描述17单重继承和多重继承的描述18A的操作A的变量类A类AA的实例变量A的实例a1B的操作B的变量类B:A的子类从A继承特性继承来的A的实例变量B的实例变量B的实例b1类B.子类父类的实例父类子类的实例继承具有传递性,如果类C继承类B,类B继承类A,则类C继承类A。图实现继承机制的原理1932136598多态定义来自于希腊语,意思是“有许多特性”。定义:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。具体到面向对象程序设计,多态性是指在两个或多个属于不同类的同一函数名对应多个具有相似功能的不同函数,可以使用相同的调用方式来调用这些具有不同功能的同名函数。多态性机制不仅增加了面向对象软件系统的灵活性,进一步减少了数据冗余,而且显著提高了软件的可重用性和可扩充性。多态性的实现方式:①通过接口实现多态性②通过继承实现多态性③通过抽象类实现的多态性图形画图()距形画图()椭圆画图()△2032136598多态示例(2)分别创建两个继承自Animal类的Dog类和Sheep类。以Dog类为例,代码如下:classDog:Animal(3)在main()方法中分别创建Dog类和Sheep类的实例,为Name属性赋值,然后调用AnimalSound()方法。代码如下:staticvoidMain(string[]args){Dogdog=newDog();dog.Name=牧羊犬;dog.AnimalSound(汪汪);Sheepsheep=newSheep();sheep.Name=小绵阳;sheep.AnimalSound(咩咩);(4)运行程序查看输出结果,控制台的输出内容如下:牧羊犬的叫声是:汪汪小绵阳的叫声是:咩咩21对象模型动态模型功能模型1.2.3面向对象的三大模型对象模型表示了静态的、结构化的系统数据性质,描述了系统的静态结构,它是从客观世界实体的对象关系角度来描述,表现了对象的相互关系。该模型主要关心系统中对象的结构、属性和操作,它是分析阶段三个模型的核心,是其他两个模型的框架。动态模型是与时间和变化有关的系统性质,描述了系统的控制结构,表示了瞬时的、行为化的系统控制性质。动态模型关心的是系统的控制,操作的执行顺序,它表示从对象的事件和状态的角度出发,表现出对象的相互行为。功能模型描述了系统的所有计算。功能模型指出发生了什么,动态模型确定什么时候发生,而对象模型确定发生的客体,即对象可感知或可想象到的任何事物。功能模型表示一个计算如何从输入值得到输出值,它不考虑计算的次序。221.2.3面向对象的三大模型功能模型通常由多张数据流图组成。数据流图用来表示从源对象到目标对象的数据值的流向,它不包含控制信息,控制信息在动态模型中表示,同时数据流图也不表示对象中值的组织,值的组织在对象模型中表示。数据流图包含有处理、数据流、动作对象和数据存储对象。在面向对象方法中,数据流图没有在结构化分析中重要,有时可以省略。处理数据流图中的处理用来改变数据值,最低层处理是纯粹的函数,一张完整的数据流图是一个高层处理。数据流数据流图中的数据流将对象的输出与处理、处理与对象的输入、处理与处理联系起来。在一个计算机中,使用数据流表示中间数据值,数据流不能改变数据值。动作对象它是一种主动对象,通过生成或者使用数据值来驱动数据流图。数据存储对象数据流图中的数据存储是被动对象,用来存储数据。它与动作对象不一样,数据存储本身不产生任何操作,它只响应存储和访问的要求。23又被称为DAL层或者持久层,主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据。也就是说,数据访问层是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务。数据访问层界面表示层又被称为界面层、用户界面层或者UI层。简单来说,表示层就是向用户展现界面的,即用户在使用一个系统时的所见所得,例如菜单、列表、按钮和输入框等都属于这一层。界面表示层业务逻辑层是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那么逻辑层就是对这些积木的搭建。业务逻辑层1.2.4面向对象的常用三层