版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章面向对象程序设计概述3.1类与对象3.2消息和方法3.3什么是面向对象程序设计3.4数据抽象3.5封装性和信息隐藏3.6继承性与软件重用3.7多态性3.8面向对象的程序设计语言3.9面向对象的软件工程3.1类与对象3.1.1对象3.1.2类3.1.3对象与类的关系对象什么是对象(object)?现实世界中的任何一个事物都可以看成是一个对象。自然的实体:一个人,一辆汽车,一个教师抽象的逻辑结构:一个银行帐号,一个学生的学籍档案一条客户通信录对象的广义定义和特性对象是人们要研究的任何事物,其特性是:1、每一个对象必须有一个名字以区别于其它对象;2、用属性(或叫状态)来描述它的某些特征;3、有一组操作,每一个操作决定对象的一种行为。举例例如,教师张三是一个对象。对象名是:张三对象的属性:职称:副教授;学位:博士;专业:微生物;出生日期:1963年10月1日;对象的操作:授课;做实验;报出自己的名字;面向对象的系统中的对象对象是基本的运行时实体,它既包含数据(属性),也包括作用于数据的操作(行为)。一个对象把属性和行为封装成一个整体。从程序设计者来看,对象是一个程序模块;从用户来看,对象为他们提供了所希望的行为。例如,图形用户界面上的一个按钮或一个文本框就是一个对象。什么是类?人类水果类鱼类“类”是对一组具有共同属性特征和行为特征的对象的抽象。什么是类?在C++语言中,一个类是一个新的数据类型。在新的数据类型中,既包含数据又包含对数据的操作。一个类所包含的操作和数据描述一组对象的共同行为和属性。OOP中类的例子classStudent{
intnumber; char*name; floatscore;public:
Student(intnumber1,char*name1,floatscore1); ~Student(); voidmodify(floatscore1); voidprint();};属性操作
类的确定和划分
类的确定与划分非常重要,是软件开发中的关键环节,科学合理地划分将有效提高程序质量和代码的可重用性。基本原则
将系统中具有共性的部分确定为一个类。分类所依据的基本原则是抽象,即忽略事物的非本质特征,只注意那些与当前目标有关的本质特征,从而找出同类事物的共性,把具有共同性质的事物划分为一类。类的确定和划分另外,还要知道什么事物不能被划分为类。不能把一组函数组合在一起构成类,也就是说,不能把面向过程的若干个函数简单组合变成类,类不是函数的集合。对象与类的关系类是对一组性质相同的对象的描述。对象则是类的具体化,是类的实例。例如:“学生”是一个类,是对所有学生个体的共同特征的描述,张三、李四等学生个体则是学生类的实例。第3章面向对象程序设计概述3.1类与对象3.2消息和方法3.3什么是面向对象程序设计3.4数据抽象3.5封装性和信息隐藏3.6继承性与软件重用3.7多态性3.8面向对象的程序设计语言3.9面向对象的软件工程消息Message对象之间通过消息进行交互。消息是要求某个对象执行某个功能操作的规格说明。OOP中的一条消息由消息名(“消息操作”或“消息选择器”)及若干个参数和接受消息的对象三部分组成,例如:Studentstudent1;student1.modify(score1);消息的例子接受消息的对象参数↓↓student1.modify(score1);
↑
消息名消息的性质同一对象可接收不同形式的多个消息,产生的响应各不相同;相同形式的消息可以送给不同的对象,产生的响应各不相同;一个对象可以立即响应发送给它的消息,也可以暂时不响应消息。消息的分类:要求返回对象内部属性(状态)的消息;要求改变对象内部属性(状态)的消息;要求改变系统状态的消息,或产生特定结果的消息。
面向对象软件系统中,程序的执行取决于事件发生的顺序,完全由所产生的消息来驱动程序的执行,无须预先确定消息产生的顺序,因而更符合客观世界的实际情况。发送消息与函数调用的比较1)消息中必须包含接收消息的对象,而一般的函数调用不需要指明对象。2) 消息名告诉对象应做些什么,类似于函数名,但二者之间的本质差别在于:函数名仅仅代表一段可执行的代码,其功能是固定的;而消息名对应的具体功能的实现取决于所接收消息的对象。尽管消息名相同,如果接收消息的对象不同,可能有不同的响应。方法(method)“方法”对应于对象的行为(能力),它是实现对象所具有的功能操作的代码段。在C++程序中,方法即是类中定义的成员函数,它是该类对象所能执行的操作的算法实现。通常每个类中包含多个方法(即成员函数),每个方法由方法名(函数名+参数表)和说明该成员函数的算法实现的一段代码所组成。方法的例子voidStudent::print(){
cout<<”number:”<<number<<”name:”<<name<<”score:”<<score<<’\n’;}消息通过调用对象的方法来完成其功能,例如:student1.print();第3章面向对象程序设计概述3.1类与对象3.2消息和方法3.3什么是面向对象程序设计3.4数据抽象3.5封装性和信息隐藏3.6继承性与软件重用3.7多态性3.8面向对象的程序设计语言3.9面向对象的软件工程程序设计方法的发展过程1946~1957:面向机器的程序设计1957~1972:面向过程的程序设计1968~1990:面向过程的结构化程序设计1984~今:面向对象的程序设计程序设计方法的发展过程(续)1990~今:面向组件的程序设计(component-orientedprogramming,COP,例如DCOM,CORBA,andJavaBeans)1994~今:面向服务的程序设计(serviceorientationprogramming)COP大型软件系统是由许多组件(Component)构成的,每个组件实现一组功能,对外提供一组服务接口。组件的粒度可大可小,可以只包含一个类,也可以由多个类组成。组件通常运行在容器中,容器负责组件的初始化、配置和销毁等。组件符合一定的通用规范,例如EJB,DCOM,CORBA。面向服务的程序设计软件由一组可互操作的服务组合而成。这些服务既可以灵活组合在一起,也可以单独运行。服务之间通过定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的操作系统和编程语言。服务的使用者通常使用一种代理机制来找到服务提供者,因此它们之间是松耦合的。面向服务的程序设计主要是考虑如何把服务拆分开发,如何把服务组合运行。选择目的地:天气预报:汇率:飞机票价:雨Redmond$1.56$1,999.98Northwind
商务旅游网XMLWebService应用案例Internet天气预报
XMLWebService汇率XMLWebService飞机票价数据库飞机票价XMLWebService结构化程序设计的基本思想按功能划分模块,分而治之。分解系统时按照自顶向下的顺序,逐步求精。设计时使各模块间的关系尽可能简单,功能上相对独立,从而可单独验证模块的正确性。
结构化程序的组成
主控模块功能模块1功能模块7功能模块2功能模块3功能模块6功能模块5功能模块4图3.3结构化程序的组成结构化程序设计方法的基本特点把数据结构和处理数据的操作过程分离为相互独立的实体。用数据表达实际问题中的信息;程序代码则实现用于处理加工这些数据的算法。简而言之,就是数据和操作代码分离。
数据和操作代码分离产生的问题给程序员增加了负担:必须确保数据和代码匹配。当数据结构改变时,所有相关的处理过程都要进行相应的修改。可维护性差。没有数据保护机制,所以在程序中常常由于某些数据被无意中修改而造成一些十分隐蔽的错误。面向对象程序设计用程序中的对象直接模拟现实世界中的对象,将问题空间直接映射到软件空间。从而设计出尽可能直接、自然地表示问题求解方法的软件。它把求解问题中客观存在的事物看作各自不同的对象,再把具有相同特性的一些对象归属为一个类。面向对象的这种设计方式符合人类的自然思维习惯,使我们能够在程序中自然地描述现实世界的实体和问题,增强了程序代码的可读性,有利于控制软件的复杂性。模块化将一个复杂的大规模软件系统划分成若干个规模较小、相对简单的模块,即分而治之。面向对象程序设计方法是按对象来划分,对象是基本的软件模块。面向对象的软件系统由对象组成,对象之间通过消息传递互相联系。面向对象的软件系统的组成
对象1对象2对象3对象4图中箭头表示对象之间的消息传递对象作为程序模块对象是由数据和对数据的操作(代码)形成的一个整体。对象具有封装性,使对象的内部实现与外界隔离,实现了信息隐藏,从而提供了更理想的模块化机制,显著地减少了程序模块间的相互干扰和依赖性。每一个模块都是高度独立的对象,使模块间的关系更为简洁清晰,有效降低了系统的复杂性,有利于大型复杂软件的开发。数据抽象技术
面向对象程序设计采用数据抽象技术,将具有相同特征的对象抽象成一个新的抽象数据类型——类。并且考虑不同对象之间的联系,引入了类之间的继承机制,为我们提供了十分理想的可重用性的软件成分。面向对象程序的主要结构特点是:第一,程序一般由类的定义和类的使用两部分组成,在主程序中定义各对象并规定它们之间传递消息的规律;第二,程序中的一切操作都是通过向对象发送消息来实现的,对象接收到消息后,启动有关方法完成相应的操作。第3章面向对象程序设计概述3.1类与对象3.2消息和方法3.3什么是面向对象程序设计3.4数据抽象3.5封装性和信息隐藏3.6继承性与软件重用3.7多态性3.8面向对象的程序设计语言3.9面向对象的软件工程1抽象(Abstract)
抽象是指从具体的例子中抽出共同的性质,强调与目标系统有关的某些本质特性,忽略与目标无关的非本质特征,进行简化描述的过程。简单的说就是对实例进行分析,抽取出共同性质。抽象包括两个方面:数据抽象(对象属性的描述)行为抽象(对象行为的描述)例:
学生对象的属性和行为抽象性的例子classstudent{
intnumber; char*name; floatscore;public: student(intnumber1,char*name1,floatscore1); ~student(); voidmodify(floatscore1); voidprint();};抽象是有选择地忽略。抽象性(Abstraction)抽象是对复杂的现实世界的简明的表示。抽象强调了我们所关心的(感兴趣)的信息,而将我们不关心的其他信息忽略。通过抽象,可形成抽象数据类型。抽象数据类型一个值集和作用在值集上的操作集
C++语言中的一个类就是一个抽象数据类型每个抽象数据类型自成一个模块,模块的接口和内部实现分离开来,使用模块的应用程序员只需要知道如何使用该模块,而不必知道模块内部是如何实现的,也就是说,可以忽略模块内部的实现细节。这样就降低了软件开发的复杂性。
第3章面向对象程序设计概述3.1类与对象3.2消息和方法3.3什么是面向对象程序设计3.4数据抽象3.5封装性和信息隐藏3.6继承性与软件重用3.7多态性3.8面向对象的程序设计语言3.9面向对象的软件工程3.5封装性和信息隐藏所谓封装(encapsulation)
,就是包含和隐藏对象信息,如内部数据结构和代码的能力。在面向对象的程序中,对象是支持封装的元素。对象把一个实体的属性和行为封装成一个整体。从外部只能看到它提供的接口,而看不到其内部的实现细节。类的封装性类成员的存取权限分为:
private(私有的)protected(受保护的)public(公有的)private和protected的成员构成了类的私有部分,实现了封装。public的成员构成了类的接口。信息隐藏(informationhiding)
信息隐藏(InformationHiding)的含义:有效的模块化可以通过定义一组独立模块来实现,这些模块相互之间只交流软件功能必需的信息。换句话说:
模块所包含的信息,不允许其它不需要这些信息的模块访问,独立的模块间仅仅交换为完成系统功能而必须交换的信息。封装的好处封装性降低了程序设计的复杂度。
封装将操作对象的内部复杂性与应用程序的其他部分隔离开来。应用程序员只需要通过对象的接口来操作对象完成特定的任务,而不需要知道对象内部复杂的细节。
封装的好处(续)提高了代码的安全性和可靠性;外部代码不能访问对象内部的私有数据,避免了对这些数据的非法操作。通过类实现封装,集中和统一了对类中数据成员的所有操作,从而可避免因分散操作造成的错误。封装的好处(续)能有效提高软件的可维护性;由于封装,对象作为一个程序模块,其内部状态不受外界干扰,也不会影响其它模块。即模块独立性强,模块间依赖性极小或者没有。这样,当修改软件模块时,大部分改动将局限在模块内部,不影响软件的其他部分。同时,还可以大大缩短我们查找程序错误的时间。封装的好处(续)封装也改善了程序模块可重用性。封装隐藏了模块内部的复杂性,提供给使用者一个简单的接口。使得重用一个模块变成一件相当容易的事情。面向对象程序设计的主要特征抽象性封装性继承性多态性第3章面向对象程序设计概述3.1类与对象3.2消息和方法3.3什么是面向对象程序设计3.4数据抽象3.5封装性和信息隐藏3.6继承性与软件重用3.7多态性3.8面向对象的程序设计语言3.9面向对象的软件工程3.6继承性与软件重用继承性是面向对象程序设计的主要特征之一,继承的目的就是为了重用(reuse)。
继承,就是在一个已有的类的基础上创建一个新类
,这个新类获得了已有类的数据和操作代码,并且新类可以增加新的数据和操作代码。
继承与派生问题举例继承继承与派生的目的继承实现了对父类的代码重用,同时子类可以扩充新的属性和功能,解决新的问题。继承的好处(1)继承性很好地实现了代码的重用。(2)能改进软件系统的可维护性。C++中类的继承层次自然地表达了人们分析问题时所用的分类结构。大大改善了软件系统的可理解性和可维护性。
(3)继承性使已有的程序库具有清晰的层次结构关系。便于程序代码的管理和使用。第3章面向对象程序设计概述3.1类与对象3.2消息和方法3.3什么是面向对象程序设计3.4数据抽象3.5封装性和信息隐藏3.6继承性与软件重用3.7多态性3.8面向对象的程序设计语言3.9面向对象的软件工程3.7多态性广义多态性:自然语言中的多态性;面向对象程序设计中的多态性什么是多态性?(广义)polymorphism,“manyforms”:即多种形态在自然语言中,多态性即是“一词多义”;更准确地说,多态性是指相同的动词作用到不同类型的对象上,例如:
驾驶摩托车 驾驶汽车 驾驶飞机 驾驶轮船驾驶宇宙飞船什么是多态性?(OOP)当不同对象接收到相同的消息产生不同的动作,这种性质称为多态性。通俗地说,多态性是指用一个名字定义不同的函数,这些函数执行不同但又类似的操作,即用同样的接口访问功能不同的函数,从而实现“一个接口,多种方法”。多态性的例子在C语言中,由于不支持多态,求绝对值的动作要求三个不同的函数名字:
abs(),labs(),fabs()分别用来求整数,长整数、浮点数的绝对值。在C++语言中,由于支持多态,求绝对值的动作可以只用一个函数名:abs()多态性由重载(编译时)或虚函数(运行时)来实现重载包括函数重载和运算符重载因此:多态分为两类:编译时的多态:编译时确定消息的具体操作对象,如函数重载和运算符重载。运行时的多态:运行时才具体确定对象所属类层次中的具体类,从而确定外部程序所发消息的匹配对象和匹配方法,如虚函数。应用多态性的好处多态应用于OOP的目的是允许用一个名字来指定一类动作(即逻辑上相似的动作)。从而带来以下的好处:提高了处理问题的抽象级别;降低了程序设计时的复杂性;增强了软件的灵活性。
多态性使得同一个属性或行为在父类及其各派生类中具有不同的语义。从同一基类派生出的多个对象具有同一接口,因此能响应同一格式的消息,但是响应的方式可以因对象具体类型的不同而不同,也就是说,每个对象可用适合自身的方式去响应共同的消息。由此而带来的好处是,使用这类对象提供的服务时,不必区分具体是哪种对象类型,只要发送相同的消息就可以了。
继承性和多态性的组合,可以轻易生成一系列虽类似但独一无二的对象。由于继承性,这些对象共享许多相似的特征。但由于多态性,一个对象可以有独特的表现方式,相对另一个对象有另一个表现方式。面向对象程序设计的优越性重用性好:有利于软件生产率的提高;符合人类的自然思维习惯,能够自然地描述现实世界的实体和问题:有利于控制软件的复杂性;更好的模块化,便于多人分工和合作开发软件;编写的代码有更好的可维护性;第3章面向对象程序设计概述3.1类与对象3.2消息和方法3.3什么是面向对象程序设计3.4数据抽象3.5封装性和信息隐藏3.6继承性与软件重用3.7多态性3.8面向对象的程序设计语言3.9面向对象的软件工程面向对象程序设计语言应该具备下述特征:支持对象的概念(包括对象所有的特性,如封装等);要求对象属于类;提供继承机制非面向对象语言
Fortran(50年代中期)
Algol(60年代)Pascal(68年
)Basic(64年)C语言(72年
DennisRitchie创建〕面向对象语言Smalltalk(72年开始)C++(80年由Bell公司Stroustrup
创建)Java(95年由SUN
公司创建)
C#(2000年由微软推出)面向对象的程序设计语言Smalltalk是第一个真正的面向对象程序设计语言,它是由美国的Xerox公司于1970年代初研制的。被认为是最纯正最具代表性的面向对象程序设计语言。由于Smalltalk是基于Xerox的特定硬件平台开发的,再加上它的动态联编的解释执行机制而导致的低运行效率,使得该语言并没有得到广泛的应用。面向对象程序设计语言的分类纯面向对象程序设计语言:仅支持面向对象方法的软件开发,其中最具有代表性的语言是Java、Smalltalk和Eiffel。混合型面向对象程序设计语言:对传统语言进行面向对象程序设计的扩展,既支持面向对象方法的软件开发,也支持面向过程方法的软件开发,其最典型的代表是C++。C++语言允许使用类和对象。类是支持数据封装的工具,对象是数据封装的实现。类中成员有不同的访问权限。C++语言对面向对象程序设计的支持1.支持封装性C++语言支持面向对象方法中的继承性,它不仅支持单继承,而且支持多重继承。继承和封装是衡量一种语言是否是面向对象的程序设计语言的两个重要标准。2.支持继承性
多态性是在继承性基础上的面向对象方法中的重要特性之一。①支持函数重载和运算符重载。②支持虚函数和动态联编。3.支持多态性C++、Java和C#C++是Java和C#的父语言。三者的语法几乎是一样的。C++适合在特定的操作系统上编写高性能的程序。Java适合创建分布式网络环境下跨平台的可移植性的程序。C#是为微软的.Net框架设计的,适合在.NET框架支持的网络环境下编写基于组件的代码。第3章面向对象程序设计概述3.1类与对象3.2消息和方法3.3什么是面向对象程序设计3.4数据抽象3.5封装性和信息隐藏3.6继承性与软件重用3.7多态性3.8面向对象的程序设计语言3.9面向对象的软件工程3.9面向对象的软件工程面向对象的分析(Object-OrientedAnalysis,简称OOA)面向对象的设计(Object-OrientedDesign,简称OOD)面向对象的编程(Object-OrientedProgramming,简称OOP)面向对象的测试(Object-OrientedTest,简称OOT)面向对象的软件维护(Object-OrientedSoftwareMaintain,简称OOSM)面向对象分析OOA在采用面向对象方法开发软件的过程中,抽取和整理用户需求并建立问题域精确模型的过程叫面向对象分析。分析阶段建立的模型叫做“分析模型”。1面向对象分析步骤确定类确定类属性确定类方法确定对象模型(1)确定类 确定如何将现实世界的对象关系映射到计算机的虚拟世界中去,对于现实世界来说,对象可分为三类:实体和概念、人或角色、事件
需求分析得到的类包括可感知的实体和抽象的概念。可感知的实体如电脑、防盗门、出租车、茶杯、台灯等,抽象的概念如学校校规、交通法规等。一个类主要包括类名、属性和方法三部分。类可分为两种:对象类(可创建对象实例的类)抽象类(不可创建对象实例的类)主要在继承中使用,为子类定义统一的接口,使得不同的对象类统一在一个类族中。例如,圆、三角形、矩形等类继承了“图形”类。对于圆类来说,它的一个对象就是一个圆心明确,半径固定,颜色清晰的圆。对于一个“图形”类。如果产生它的一个实例,即用图形类产生一个图形,则我们无法准确描述具体它的特征,也就是说,不可能创建出没有具体形状的图形对象,因此图形类是抽象类。圆圆心位置半径颜色移动选择旋转打印几何图形位置颜色移动选择旋转打印对象类抽象类(2)确定类的属性类的属性是类所具有的性质、特征或状态。通常,在分析阶段不可能确定类的所有属性,但在分析阶段要确定每个类的基本属性。类的属性可分为两种:一种称做实例属性,它是类中各对象实例具有不同属性值的属性项;另一种称做类属性,它是类的所有对象实例都具有相同属性值的属性项。(3)确定类的方法类的方法分为两种:一种称做常规性方法(或辅助性方法),主要包括设置对象属性值方法和获取对象属性值方法等;另一种称做功能性方法(或需求性方法),功能性方法反映了该类对象实例所具有的功能。确定类的方法主要是确定类的功能性方法。常规性方法通常在实现阶段才具体考虑。(4)确定对象模型就是建立起对象之间的联系方式。模型人们对现实世界中复杂事物以及这些事物之间关系的抽象的、可视化的表示。人们把握复杂事物及事物之间关系本质、并进行分析和交流的工具。由一组图示符号、图示符号规则以及必要的文字说明组成。利用模型把问题规范地表示出来,并可以作为下一步构造实际系统的设计依据。对象模型整体-部分模式(组成、聚集关系)表示一个整体对象概念由若干个部分对象概念合成构成。具有传递性例如计算机由机箱、主板、键盘和显示器等部件构成一般-特殊模式(分类关系)表示一个对象是另一个对象的特例用继承关系来反映对象一般-特殊联系方式例如工人和经理类继承了雇员类,工人和经理类是特殊类,雇员类是一般类。连接模式(消息模式、关联关系)一个对象与另一个对象有某种联系,之间可以发送消息。用一条直线直接连接存在消息模式的两个类。直线上方用文字表示连接的含义。
生产厂商……计算机商品生产厂商……制造1*2.面向对象的设计(OOD)面向对象的设计(OOD)的工作可以分为两步:第一步是把OOA阶段建立的分析模型直接作为初级的OOD模型;第二步是要对初级的OOD模型进行扩充,添加与编程细节有关的具体细节。面向对象设计的任务修改完善对象模型写出所有类的定义构造基于特定计算机环境的软件系统所要求的额外的、与实现有关的类和对象模型。软件系统要求的其它设计修改完善对象模型
主要包括对类做修改和补充,对对象模式做必要的调整,如重新设计类的继承关系等。写出所有类的定义
包括类名、属性、方法(方法名、方法函数的数据类型、参数、参数类型)、继承关系。还可在综合分析的基础上,对类的方法重新进行设计或划分,达到功能单一、高度共享、可重复使用程度高等设计要求。构造基于特定计算机环境的软件系统所要求的额外的、与实现有关的类和对象模型
主要有人机接口部分、数据管理部分和系统接口部分对象及对象模型的补充。人机接口是实际使用的软件系统中人与系统的交互接口。数据管理完成软件系统中系统需要保存和维护的类。系统接口是本系统设备和其它系统设备的接口。目前市场上提供支持软件和类库包。软件系统要求的其它设计
实际的软件系统要求的其它设计。这主要包括系统分布模式设计和物理设计。系统的分布模式有五种:单机模式、集中模式、文件服务器模式、客户/服务器模式和浏览器/服务器模式。物理设计一般包括网络设计和软件平台设计。面向对象设计的基本准则模块化抽象信息隐藏低耦合、高内聚可扩充可重用
还要充分考虑具体实现中的基于特定计算机环境的人机接口、数据管理和系统接口等因素。设计模式DesignPatterns《设计模式:可复用面向对象软件的基础》(DesignPatterns:ElementsofReusableObject-OrientedSoftware,ISBN0-201-63361-2)August1994该书作者为:ErichGamma,RichardHelm,RalphJohnson,JohnVlissides,后以“四人帮”(GangofFour,GoF)著称一个设计模式(designpattern)定义了一个通用的设计结构,这种设计结构能够用来解决特定的面向对象设计问题。设计模式的描述:(1)模式名称。用一两个词作为模式的标记,简略描述模式的问题、解决方案和效果。(2)问题。描述了在何时使用设计模式。它解释了模式用来解决什么设计问题。(3)解决方案。描述了设计模式的组成成分,它们之间的关系及各自的职责和协作方式。(4)效果。描述了模式应用的效果和使用模式应权衡的问题。创建模式(范例)抽象工厂(AbstactFactory)构造器(BuilderPattern)工厂方法(FactoryMethodpattern)原型(Prototypepattern)单例模式(Singletonpattern)结构模式(范例)适配器(Adapterpattern)桥接(Bridgepattern)组合(Compositepattern)装饰(Decoratorpattern)外观(Façadepattern)享元(Flyweightpattern)代理(Proxypattern)行为模式(范例)职责链(Chain-of-responsibilitypattern)命令(Commandpattern)翻译器(Interpreterpattern)迭代器(Iteratorpattern)仲裁器(Mediatorpattern)回忆(Mementopattern)观察器(Observerpattern)状态机(Statepattern)策略(Strategypattern)模板方法(Templatemethodpattern)参观者(Visitor)UnifiedModelingLanguage(UML)UML即统一建模语言,它是一个支持模型化和软件系统开发的图形化语言,为面向对象分析和设计提供模型化和可视化支持。面向对象的分析与设计(OOA&D,OOAD)方法的发展在80年代末至90年代中出现了一个高潮,UML是这个高潮的产物。它不仅统一了Booch、Rumbaugh和Jacobson的表示方法,而且对其作了进一步的发展,并最终统一为大众所接受的标准建模语言。3.面向对象的编程(OOP)面向对象的编程(OOP),又叫做面向对象程序设计,或者编码(coding),这是软件工程的实现阶段,相当于建筑工程的施工阶段。OOP的工作就是用一种面向对象的编程语言把OOD模型中的每个成分书写出来,是面向对象的软件开发最终落实的重要阶段。这一步实际上是将OOD模型转换成可以运行的软件系统。4面向对象测试
软件测试的目的是检查和排除软件中存在的各种隐含错误。任何一个软件产品在交付使用之前都要经过多次严格的测试。一般要经过:面向对象分析的测试(OOATest)、面向对象设计的测试(OODTest)、面向对象编程的测试(OOPTest)、面向对象的单元测试(OOUnitTest)、面向对象的集成测试(OOIntegrateTest)、面向对象的系统测试(OOSystemTest)
等环节。面向对象测试以类做为基本测试单位,可以更准确地发现程序错误,提高测试效率。一般情况下,大型商用软件项目需要经过内部反复测试、小范围试用、大范围试用和再测试等多个环节,必要时上述过程需要反复进行。
由于软件代码的规模越来越庞大,无论经过多少次测试,或经过了多么严格的测试,软件中依然难免存在各种各样的隐含错误。而且用户在使用软件的过程中可能会提出修改和扩充软件的要求。因此软件在使用的过程中,需要开发人员或专业软件维护人员进行必要和合理的维护。维护人员在重构“源设计图”,并掌握原设计人的设计思想和方法、策略的前提下主要以类及对象为基本单位进行维护。一般情况下不应改变类与对象的基本特性,同时不应影响其他类。5.面向对象软件维护面向对象软件维护由于面向对象的软件实现方法的解空间与被解决问题的问题空间的结构是一致的,软件工程各个阶段的分析、描述、表达和实现也是一致的,所以无论是发现了程序中的错误而追溯到问题本身,还是因需求发生变化而追踪到程序代码,解决起来都相对比较简单和方便。另一方面,面向对象的封装性可使一个对象的修改对其他对象的影响较少。因此,运用面向对象程序设计方法可以大大提高软件维护的效率。第3章面向对象程序设计概述3.1类与对象3.2消息和方法3.3什么是面向对象程序设计3.4数据抽象3.5封装性和信息隐藏3.6继承性与软件重用3.7多态性3.8面向对象的程序设计语言3.9面向对象的软件工程3.10C++编程环境简介1C++程序的开发过程2VisualC++6.0集成开发环境简介常用的面向对象软件开发环境
PowerBuilder、C++Builder、VisualC++、Delphi、JavaBuilderVC++6.0是Microsoft公司1998年推出的功能强大的可视化编程环境,是流行的Windows应用程序开发的集成开发环境(IDE)。项目与项目工作区所谓项目就是文件的集合,它包括了资源文件、头文件、源代码文件、程序结构消息文件和系统参数设置文件。要编写一个应用程序,必须创建一个项目,项目文件的扩展名为.dsp。项目工作区文件(.dsw)含有工作区的定义和项目中所包含文件的所有信息。根据项目工作区文件,在工作区窗口中便可以打开相应的文件进行编辑,大大方便了程序员多项目的管理。3控制台应用程序实例方法1:启动VisualC++6.0集成开发环境。建立新工程。添加源文件。编辑源程序。编译、连接源程序。运行程序。
(1)启动VisualC++,单击“File/New”菜单项,打开新建窗口,如图所示。
(2)在“Projects”选项卡中选择“Win32ConsoleApplication”选项,在“Projectname”编辑框中输入工程名称,单击“OK”按钮进入向导窗口,开始创建工程。
(3)在向导窗口中选择“A‘Hello,Word’Application”选项,单击“Finish”按钮完成工程的创建。这样就完成了一个控制台工程的创建。在工具栏中单击按钮,编译并执行应用程序。
方法2:启动VisualC++6.0集成开发环境。新建文件。编辑源程序。保存源程序。编译、连接源程序。运行程序。
1.创建工作文件夹
创建VisualC++6.0的工作文件夹“D:\VisualC++应用”,以后所有创建的C++程序都在此文件夹下,这样既便于管理,又容易查找。在文件夹“D:\VisualC++应用”下再创建一个子文件夹“第1章”用于存放第1章中的C++程序;对于第2章程序就存放在子文件夹“第2章”中,依此类推。2.启动VisualC++6.0图1.3“每日提示”对话框
选择“开始”→“程序”→“MicrosoftVisualStudio6.0”→“MicrosoftVisualC++6.0”,运行VisualC++6.0。第一次运行时,将显示“每日提示”对话框。单击[下一条]按钮,可看到有关各种操作的提示。如果在[启动时显示提示]复选框中单击鼠标,去除复选框的选中标记,那么下一次运行VisualC++6.0,将不再出现此对话框。单击[关闭]按钮关闭此对话框,进入VisualC++6.0开发环境。3.添加C++程序
(1)单击标准工具栏上的“新建”()按钮,打开一个新的文档窗口,在这个窗口中输入下列C++代码。
(2)选择“文件”→“保存”菜单或按快捷键Ctrl+S或单击标准工具栏的保存按钮,弹出“保存为”文件对话框。将文件定位到“D:\VisualC++应用\第1章”文件夹中,文件名指定为“Ex_Simple.cpp”(注意扩展名.cpp不能省略,cpp是CPlusPlus的缩写,即“C++”的意思)。[例Ex_Simple]一个简单的C++程序/*第一个简单的C++程序*/#include<iostream.h>
intmain(){ doubler,area; //定义变量
cout<<"输入圆的半径:"; //显示提示信息
cin>>r; //从键盘上输入变量r的值
area=3.14159*r*r; //计算面积
cout<
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中国智能建筑行业市场技术发展现状投资评估规划分析研究报告
- 2026中国投资银行业务托管托管托管托管托管托管托管代理行业市场深度调研及投资前景与投资策略研究报告
- 2026中国智能家居前装市场渠道变革与全屋解决方案竞争格局
- 2026汽车零部件行业竞争格局分析及投资前景深度展望
- 2026中国玩具制造行业市场现状供需分析及产业评估规划发展方向研究报告
- 2026中职口腔面试题及答案
- 2026年中小学安全教育日专题课件(知识竞赛版)
- 2026年医德医风先进典型事迹宣讲课件
- 2026年造价工程师考试《土建》科目重点难点试卷
- 2026年城市规划类公务员《城乡规划法规》专项训练试卷
- 贫困村互助资金试点指导手册试行
- GB/T 10213-2025一次性使用医用橡胶检查手套
- 高端汽车洗车流程标准
- NBT11402-2023火力发电厂安全设施设计专篇编制导则
- 特种设备安全管理制度特种设备安全操作规程
- 2023海上渔业养殖设施检验指南
- 广东省佛山市南海区2023-2024学年六年级下学期语文期中考试试卷(含答案)
- 2024-2025学年浙江省金华市义乌市六年级(上)期末数学试卷
- 部队安全驾驶教育
- 竣工图绘制规范及标准
- 西北大学2023年856物理化学考研真题
评论
0/150
提交评论