Java语言程序设计实用教程第五讲面向对象解决方案.ppt_第1页
Java语言程序设计实用教程第五讲面向对象解决方案.ppt_第2页
Java语言程序设计实用教程第五讲面向对象解决方案.ppt_第3页
Java语言程序设计实用教程第五讲面向对象解决方案.ppt_第4页
Java语言程序设计实用教程第五讲面向对象解决方案.ppt_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java语言程序设计实用教程,第五讲面向对象解决方案,3,本章学习要点:,分析面向对象的项目案例,了解UML的使用理解类、对象的概念以及对象与类之间的关系理解类、对象的属性和方法理解抽象与封装理解继承与多态,5.1面向对象项目案例,开发一个会员管理系统,怎么去做呢?,会员管理系统分析,背景:在激烈的商业竞争中,越来越多的企业意识到想在市场中立足,不但需要提高产品的质量,更需要为客户提供高水平的服务系统的要求:中小规模系统单机版或网络版系统的定位:应用于商业、美容、娱乐、宾馆等面向客户的领域;系统功能:系统维护管理会员资料录入、会员资格管理、会员档案信息管理客户关系管理会员积分管理查询与统计报表使用数据库:Access等桌面型数据库系统,怎样更好地和客户、程序员沟通?,面向对象建模(Object-OrientedModeling),面向对象思想比较自然地模拟了人类认识客观世界的方式,面向对象的分析和设计应该从建模开始。构造模型通常出于以下几个目的:在着手解决一个复杂问题之前,对解决方案进行检测;用于同客户或其他相关人员进行交流;加强视觉效果;对复杂问题进行简化。,模型的意义,模型是对事物的一种抽象,人们常常在正式建造实物之前,首先建立一个简化的模型,以便更透彻地了解它的本质,抓住问题的要害;在模型中,人们总是剔除那些与问题无关的、非本质的东西,从而使模型与真实的实体相比更加简单、易于把握;,UnifiedModelingLanguage(UML),UML的设计目标:运用面向对象概念来构造系统模型建立起从概念模型直至可执行体之间明显的对应关系着眼于那些有重大影响的问题创建一种对人和机器都适用的建模语言,UML概要,UML由OMG与1997年11月批准为标准建模语言。UML建立在当今国际上最有代表性的三种面向对象方法(Booch方法,OMT方法,OOSE方法)的基础之上。UML是一种建模语言而不是一种方法,UML本身是独立于过程的。,UML模型图,UML为人们提供了从不同的角度去观察和展示系统的各种特征的一种标准表达方式。在UML中,从任何一个角度对系统所作的抽象都可能需要用几种模型图来描述,而这些来自不同角度的模型图最终组成了系统的完整模型。,UML模型图,UMLUseCaseDiagrams(用例图),用例图描述系统外部的执行者与系统的用例之间的某种联系。着重于从系统外部执行者的角度来描述系统需要提供哪些功能,并且指明了这些功能的执行者是谁。该概念非常重要,有人称UML是一种用例图驱动的开发方法所谓用例是指对系统提供的功能(或称系统的用途)的一种描述,本质上是用户与计算机之间为达到某个目的的一次典型交互作用;用例描述了用户提出的一些可见的需求;用例可大可小;用例对应一个具体的用户目标执行者(角色)是系统之外的元素,例如使用用例的人或外部系统;用例和执行者之间的联系描述了“谁使用哪个用例”,用例图中的图符,用例执行者(角色):分主要角色、次要角色、外部硬件和其他系统系统:用于界定系统功能范围,描述该系统功能的用例都置于其中,而描述外部实体的执行者都置于其外。关联:连接执行者和用例,表示执行者所代表的系统外部实体与该用例所描述的系统需求有关。,消费用例图(P80),商品采购用例图-多角色(P81),结构视图,结构视图又称为设计视图,代表系统的静态方面,包含类图和对象图。类图用于描述用例图中的系统功能的类和它们之间的关系对象图是类图在某一时刻的快照或实例,描述不同对象以及它们之间的连接类具有下列三种不同类型:边界类:在用例图中,直接与外界交互的类,用图标控制类:控制用例功能执行的类,用图标实体类:形成实体的类,不与外界类直接关联,通过控制类联系,用图标,输入会员消费单信息-类图(P81),根据用例图,映射的类为:收银员(Clerk)消费单控制器(BillControler)消费单(Bill)消费品(Product),行为视图,行为视图表现系统模型的动态方面,包括了时序图、协作图和活动图。时序图(SequenceDiagram):描述类的实例之间的交互,这种交互是按照时间顺序传递消息,能够反映出类的操作。协作图(CollaborationDiagram):描述类的实例之间的交互,这种交互的消息传递体现对象之间的结构布局,可检查是否出现消息传递瓶颈,不强调时间顺序,时序图和协作图语义等价,可以转换状态图(StatechartDiagram):描述类的实例被外部进程或实体访问时执行动作的状态和响应活动图(ActivityDiagram):描述类的实例被内部进程或实体访问时的行为,会员消费时序图、活动图、状态图,请参考P82页图5-6会员消费时序图:对象之间按照时间顺序传递消息。注意:每个对象都带有一条竖线(长方形表示激活),成为对象的生命线,对象间的消息存在于两条虚线间。图5-7会员消费协作图:描述和对象结构相关的信息,用于表示一个类操作的实现图5-8消费单对象(Bill)状态图:体现对象的状态与转换图5-9消费单对象(Bill)的事件活动图:表示一个进程中的步骤或任务,类似于流程图,会员管理系统实现视图与环境视图,请参考P83页图5-10消费单类和消费品类的组件图:组件图又称实现视图,描述系统实现的不同,涉及源代码结构、运行时的实现结构和软件发布的配置管理等图5-11部署图:部署图又称环境视图,描述系统中组件的物理分发,包含网络设计的节点,5.2类,面向对象(Object-OrientedParadigm),“面向对象”是一种认识客观世界的世界观,这种世界观将客观世界看成是有许多不同种类的对象构成的,每个对象有自己的内部状态和运动规律,不同对象之间的相互联系、相互作用就构成了完整的客观世界。“面向对象”是从结构组织的角度去模拟客观世界的一种方法,这种方法的基本着眼点是构成客观世界的那些成分-对象。用“面向对象”的观点去认识客观世界,用“面向对象”的方法去模拟客观世界,这就构成了“面向对象”的完整含义。,对象的概念,对象(Objects):对象是现实世界中个体或事物的抽象表示,是其属性(Attributes)和相关操作(Operations,Methods)的封装。属性表示对象的性质,属性值规定了对象所有可能的状态。对象的操作是指该对象可以展现的外部服务。对象之间的通讯通过消息(Messages)传递进行,类和对象,类是一种模板,是一种组合各个对象(类的实例,即实例是从某类创建的一个对象)所共有的行为和属性的机制。相同类的对象在它们的操作和它们的信息结构两个方面都有相同的定义。要使用对象的属性状态和方法,必须先由类创建对象,再由对象调用属性和方法。类的特性:封装、继承和多态,类和对象,类是具有共同属性和行为的对象的抽象。,类,对象,抽象,实例化,封装的实体=数据+方法,操作或行为,属性或状态,方法,数据或变量,对象具有特殊属性和行为方式的实体,类的定义格式,类修饰符classnameextends父类名implements接口列表变量修饰符类型变量名1;变量修饰符类型变量名N;方法修饰符类型方法名1(参数列表)throws异常列表方法体方法修饰符类型方法名N(参数列表)throws异常列表方法体,成员变量(对象属性),成员方法(对象行为或操作),修饰符(可见性的作用范围),类修饰符-public,提供给其他类完全的存取权限。也就是说在同一包中的类可自由取用此类,而别的包中的类可通过import关键词来引入此类所属的包加以运用。而用此修饰符的类有几个特性:1.一个程序里只能有一个类被修饰为public,不可以声明为private或者protected,否则编译会错。PublicxxxClass()classaaaClass()classbbbClass()2.源文件存储文件名,必须是用public修饰的类名3.若程序中没有任何public类,则默认为default(即书上的friendly),并且文件名可任取。而如果文件名是程序中的一个类名,则该类被视作public,可供别的类存取。,类修饰符-abstract(P85,例5-1),Abstract此字的英文意思是”抽象的”,”非实际的”。此修饰符可修饰类及方法。属性没有用到这个修饰符。用此修饰类是表示此类的功用不完全在于提供实际的程序代码,而只是先定义一些方法规格。然后让继承此类的次类来覆盖此规格的内容。abstract类与方法有下列特性:1.一个抽象类里可以没有定义抽象方法。但只要类中有一个方法是被声明为abstract,则该类必须为abstract。2.抽象类不能被实例化,即不能被new生成一个实例对象。3.若一个子类继承一个抽象类,则子类需用覆盖的方式来实化该抽象超类中的抽象方法。若没有完全实例化所有的抽象方法,则子类仍是抽象的。注意:抽象方法可再与public、protected复合使用,但不能与final、private和static复合使用。,类修饰符-final(P86,例5-2),表示此类为“最终”类,别的类不能继承此类,其方法也不能被覆盖。例如java.lang.System类即为final类:publicfinalclassSystemextendsObject我们可使用该类,但不能继承并覆盖其内容。用重复的两个修饰符public+final的意思是:此final类可被import来引用,但不能被继承。System类关系到系统层级控制,为了安全性,故必须为final类,以避免被覆盖。但final与abstract就不能复合来用,因为二者是相冲突的。,对象,对象的声明和创建:类名对象名;/声明对象名=new类名(参数);/创建一个对象类名对象名=new类名10;/创建多个对象注意:当定义基本数据类型变量或者字符串变量时,不必用new操作符,基本数据类型数据在数据存储区中分配了真实的内存空间,String类型的对象可以用加引号字符串初始化对象的使用:对象名.成员变量名;对象名.成员方法名(参数列表);对象的销毁:自动垃圾回收机制周期性的释放无用的对象,Java的垃圾回收机制,使用new运算符可以把空闲内存空间分配给对象。当不再需要一个对象时,就应该释放该对象所占用的内存,以使内存用于后面的分配在许多程序设计语言中,释放已经分配的内存是手动处理的。例如,在C+中,需要使用delete运算符来释放分配的内存Java使用一种不同的、更方便的方法:垃圾回收,即:垃圾回收器在系统空闲时(可能在任意时间运行)由系统自动启动的一个线程,并与用户程序并行运行,它自动扫描对象的动态内存区,对没有被引用的对象进行收集并释放内存。,成员变量,作用范围是整个类,与局部变量不同。可以使用修饰符来控制变量的作用范围。格式:(=)修饰符可以为:static:用于定义类变量(又称静态变量,而其它的变量称为实例变量);只存有一份数据,类的所有对象可以共享该属性。final:用来声明常量,值只能用不能改。finalstatic类型成员变量。static使得变量只存在一个拷贝,final使得它不能改变。transient:定义暂时性变量,串行化(序列化)时不能保持。volatile:定义共享变量,用于多线程共享。对于父类,建议使用protected封装成员变量;对于子类,建议用private封装成员变量,然后通过public设置或者获取(P93),this关键字,this表示当前对象通过this后加圆点,然后是成员变量或者成员方法,可调用本类当前对象的变量和方法采用this可以解决方法中参数名与成员变量名相同的问题(可参阅P91例子),例如:publicvoidsetName(Stringname)=name;,方法的修饰符,static:表示被修饰的方法是静态方法,也称为类方法(其它的方法成为实例方法)。由于静态方法是在当类装载到虚拟机时自动分配空间运行的,即它的运行与类的任何实例化对象没有关系,可以通过类名直接调用。static方法只能使用static字段abstract:表示被修饰的方法是抽象方法,abstract方法必须被覆盖。声明抽象方法时,并不用写出大括号,否则报错。final:表示被修饰的方法是最终方法,不能被该类的子类重写native:表示集成其他语言的代码,表示该方法是用非Java语言写成的,例如C、C+或者汇编语言,需要通过JNI(JavaNativeInterface)与程序连接synchronized:控制多个并发线程的访问,在同一时间内,只有一个此种的方法在执行,构造函数(P93),构造函数是一种特殊的方法。用于对象由类产生时,对对象内容做一些初值设置(初始化)。当new一个类要产生实例时,便会自动调用该类的构造函数。构造函数的声明格式:修饰符类名(参数行)throws异常种类构造函数主体构造函数名称与类名称相同构造函数没有返回类型其任务是在创建对象时初始化其内部状态若无定义系统默认有一个无参构造方法,继承(Inheritance),如果类B继承类A,那么类A中描述的操作和信息结构将成为类B的一部分。借助继承,可以表示类之间的类似性,并且在其他类能继承的一个类中描述这些相似性。因此,就能够复用公共的描述。继承常常被提倡为软件工业界中关于复用的一个核心思想。继承还有利于软件维护。通过抽取和共享公共特性就能够通用化一些类,并且把它们放在继承层次的更高位置。同样,如果希望增加新类,可以寻找这样一个类,它已经提供了适用于该新类的某些操作和信息结构。然后,让新类继承这个类,只需增加该新类所独有的那些内容。然后,使这个类专用化。,类继承的实现1,被继承的类称为父类继承父类的类称为子类执行继承时,子类将获得父类的属性,并具有自身特有的属性。,工人类,继承了父类的姓名和性别属性外还包含类别和是否有服装津贴属性,经理类,还包含级别和是否配备交通工具属性,职员类,具有姓名和性别两个属性,类继承的实现2,extends关键字用于表示继承关系。声明一个继承父类的类的通常形式如下:类修饰符class子类名extends父

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论