今天小编给大家主要介绍java面向对象以及带来三个小练习,看看对小伙伴们有没有帮助,希望可以帮助小伙伴们巩固一下知识:
内容简介:
第一部分:Java面向对象的介绍
一、结构化的软件开发方法简介
二、面向对象的软件开发方法简介
三、面向对象开发中的核心思想和概念
四、UML语言简介
五、类之间的关系
六、实现Panel系统
第二部分:Java面向对象三个小练习
一、通过长方形面积周长的计算再次熟悉类与对象
二、了解数组的结构,了解java方法的使用
三、回忆简单继承
下面小编通过以上目录来依次介绍今天的内容:
第一部分:Java面向对象的介绍
一、结构化的软件开发方法简介
1978年,E.Yourdon 和L.L.Constan-tine提出了结构化开发方法,即SASD方法。1979年,Tom DeMarco对此方法做了进一步的完善。 SASD方法是20世纪80年代使用最广泛的软件开发方法。它首先用结构化分析(SA, Structure Analysis)对软件进行需求分析,然后用结构化设计(Structure Design, SD) 方法进行总体设计,最后是结构化编程( Structure Programming, SP)。 这种开发方法使得开发步骤明确,SA、SD和SP相辅相成,一气呵成。结构化开发方法主要是按照功能来划分软件结构的,它把软件系统的功能看作是根据给定的输入数据,进行相应的运算,然后输出结果,如图1-2所示。
进行结构化设计时,首先考虑整个软件系统的功能,然后按照模块划分的一些基本原则(比如内聚性和松耦合)等,对功能进行分解,把整个软件系统划分成多个模块,每个模块实现特定的子功能。为了提高软件的内聚性,在模块中还会把功能分解到更小的子模块中。在完成所有的模块设计后,把这些模块拼装起来,就构成了整个软件系统。软件系统可看作是多个子系统的集合,每个子系统都是具有输入/输出功能的模块,如图1-3所示。
结构化设计属于自顶向下的设计,在设计阶段就不得不考虑如何实现系统的功能,因为分解功能的过程其实就是实现功能的过程。结构化设计的局限性在于不能灵活地适应用户不断变化的需求。当用户需求发生变化,比如要求修改现有软件功能的实现方式或者要求追加新的功能时,就需要自顶向下地修改模块的结构,有时候甚至整个软件系统的设计被完全推翻。
二、面向对象的软件开发方法简介
面向对象的开发方法把软件系统看成是各种对象的集合,对象就是最小的子系统,一组相关的对象能够组合成更复杂的子系统。面向对象的开发方法具有以下优点:
1.2.1对象模型
在面向对象的分析和设计阶段,致力于建立模拟问题领域的对象模型。建立对象模型既包括自底向上的抽象过程,也包括自顶向下的分解过程。
(1)自底向,上的抽象。
建立对象模型的第一.步是从问题领域的陈述入手。分析需求的过程与对象模型的形成过程一致,开发人员与用户的交谈是从用户熟悉的问题领域中的事物(具体实例)开始的,这就使用户与开发人员之间有了共同语言,使得开发人员能彻底搞清用户需求,然后再建立正确的对象模型。开发人员需要进行以下自底向上的抽象思维:
在自底向上的抽象过程中,为使子类能更合理地继承父类的属性和行为,可能需要自顶向下的修改,从而使整个类体系更加合理。由于这种类体系的构造是从具体到抽象,再从抽象到具体的,符合人类的思维规律,因此能更快、更方便地完成任务。这与自顶向下的结构化开发方法构成鲜明的对照。在结构化开发方法中,构造系统模型是最困难的-一步,因为自顶向下的“顶”(即系统功能)是一个空中楼阁,缺乏坚实稳定的基础,而且功能分解有相当大的任意性,因此需要开发人员有丰富的软件开发经验。而在面向对象建模中,这一工作可由一般开发人员较快地完成。
(2)自顶向下的分解。
在建立对象模型的过程中,也包括自顶向下的分解。例如对于计算机系统,首先识别出主机对象、显示器对象、键盘对象和打印机对象等。接着对这些对象再进--步分解,例如主机对象由处理器对象、内存对象、硬盘对象和主板对象等组成。系统的进一步分解因有具体的对象为依据,所以分解过程比较明确,而且也相对容易。所以面向对象建模也具有自顶向下开发方法的优点,既能有效地控制系统的复杂性,又同时避免了结构化开发方法中功能分解的困难和不确定性。
1.2.2 UML: 可视化建模语言
面向对象的分析与设计方法,在20世纪80年代末至90年代中发展到一个高潮。但是,诸多流派在思想和术语上有很多不同的提法,对术语和概念的运用也各不相同,统一是继续发展的必然趋势。需要用一种统一 的符 号来描述在软件分析和设计阶段勾画出来的对象模型,统一建模语言(Unified Modeling Language, UML) 应运而生。UML是- -种定义良好、易于表达、功能强大且普遍适用的可视化建模语言。它吸取了诸多流派的优点,而且有进- -步的发展,最终成为大众所共同接受的标准建模语言。
1.2.3 Rational Rose: 可视化建模I具
Rational Rose是Rational公司开发的一种可视化建模工具,之后归属于IBM公司。它采用UML语言来构建对象模型,是分析和设计面向对象软件系统的强有力的工具。如图1-6所示为Rational Rose 的界面。本书的许多UML图都是用Rational Rose 来绘制的。但本书并没有介绍Rational Rose工具本身的用法,读者可以参考其他相关的书籍来进一步了解它的用法。
三、面向对象开发中的核心思想和概念
在面向对象的软件开发过程中,开发者的主要任务就是先建立模拟问题领域的对象模型,然后通过程序代码来实现对象模型。到底如何建立对象模型,如何用程序代码实现对象模型,并且能保证软件系统的可重用、可扩展和可维护性呢?这不是两三句话就能回答的问题,事实上,本书所有内容都是围绕这- -问题展开的。本节主要阐述了面向对象开发中的核心思想和概念,这些核心思想为从事面向对象的软件开发实践提供了理论武器。
1.3.1 问题领域、对象、属性、状态、行为、方法、实现
问题领域是指软件系统所模拟的真实世界中的系统。随着计算机技术的发展和普及,软件系统渗透到社会的各个方面,几乎可用来模拟任意一种问题领域,如学校、医院、商场、银行、电影摄制组和太阳系等。对象是对问题领域中事物的抽象。对象具有以下特性:
(1)万物皆为对象。问题领域中的实体和概念都可以抽象为对象。例如在学校领域,对象包括学生、成绩单、教师、课程和教室等:在银行领域,对象包括银行账户、出纳员、支票、汇率、现金和验钞机等;在商场领域,对象包括客户、商品、订单、发票、仓库和营业员等;在电影摄制组领域,对象包括演员、导演、电影、道具和化妆师等;在太阳系领域,对象包括太阳、月亮、地球、火星和木星等:在用Java语言创建的图形用户界面中,窗口、滚动面板、按钮、列表、菜单和文本框等也都是对象。
(2)每个对象都是唯一 的。对象的唯一 性来自于真实世界中事物的唯- -性。世界上不存在两片一-模-一样的叶子,因此在软件系统中用来模拟每片叶子的对象也具有唯一性。例如学校领域的学生小张、学生小王、小张的成绩单和小王的成绩单,这些都是唯一的对象。在Java虚拟机提供的运行时环境中,保证每个对象的唯一性的手段是为它在内存中分配唯--的地址。
(3)对象具有属性和行为。例如小张,性别女,年龄15,身高1.6米,体重40kg,能够学习、唱歌和打羽毛球。小张的属性包括:姓名、性别、年龄、身高和体重。小张的行为包括:学习、唱歌和打羽毛球。例如一部手机:品牌名称是诺基亚,价格是2000元,银白色,能够拍照、打电话和收发短信等。这只手机的属性包括:品牌类型type、价格price 和颜色color, 行为包括拍照takePhoto()、 打电话call()、 收短信sendMessage()和发短信receiveMessage()。对象的行为包括具有的功能及具体的实现。在建立对象模型阶段,仅仅关注对象有什么样的功能,但是不考虑如何实现这些功能。对象的属性用成员变量来表示,对象的行为用成员方法来表示,如图1-7 所示是手机的UML类图。
到了编写程序代码阶段,必须为所有的非抽象方法提供具体的实现,“实现”在程序代码中体现为方法后面带有的方法主体。例如以下程序代码中的粗体字部分为方法主体,它代表方法的实现:
1.3.2 类、类型
类是一组具有相同属性和行为的对象的抽象。类及类的关系构成了对象模型的主要内容。如图1-9 所示,对象模型用来模拟问题领域,Java 程序实现对象模型,Java程序运行在Java虚拟机提供的运行时环境中,Java虚拟机运行在计算机机器上。计算机受其存储单元的限制,只能表示和操作--些基本的数据类型,比如整数、字符和浮点数。对象模型中的类可以看作是开发人员自定义的数据类型,Java 虚拟机的运行时环境封装了把自定义的数据类型映射到计算机的内置数据类型的过程,使得开发人员不必受到计算机的内置数据类型的限制,对任意-种问题领域,都可以方便地根据识别对象、再进行分类( 创建任意的数据类型)的思路来建立对象模型。
1.3.3 消息、服务
软件系统的复杂功能是由各种对象协同工作来共同完成的。如图1-10所示,电视机和遥控器之间就存在这种协作关系。当用户按下遥控器的“开机”按钮,遥控器对象向电视机对象发送一一个“开机”消息。电视机对象接受到这个“开机”消息,就执行相应的开机操作。此外,遥控器还能向电视机发送其他消息,例如选择频道、调节音量、播放VCD和关机等。
1.3.4 接口
既然每个对象是服务提供者,那么如何对外提供服务呢?对象通过接口对外提供服务。例如电视机的红外线接收器就是为遥控器提供的接口。再比如在日常生活中经常接触的电源插口,如果把整个供电系统看作-一个对象,那么它提供的主要服务就是供电。如何提供这一服务呢?很简单,只要在住宅里布置好线路,提供--些电源插口,各种电器就能从电源插口中获得电源了。电源插口就是供电系统为各种电器提供的接口。此外,鼠标上的按钮、键盘上的按钮、洗衣机上的按钮、电灯的开关都是为用户提供的接口。
在现实世界中,接口也是实体,比如电源插口、洗衣机上的按钮和电灯的开关。而在面向对象的范畴中,接口是- -个抽象的概念,是指系统对外提供的所有服务。系统的接口描述系统能够提供哪些服务,但是不包含服务的实现细节。这里的系统既可以指整个软件系统,也可以指-一个子系统。对象是最小的子系统,每个对象都是服务提供者,因此每个对象都有接口。站在使用者的角度,对象中所有向使用者公开的方法的声明构成了对象的接口。使用者调用对象的公开方法来获得服务,使用者在获得服务时,不必关心对象到底是如何实现服务的。在设计对象模型阶段,系统的接口就确定下来了,例如在手机CellPhone类的UML类图中,它的方法声明就是手机的接口,如图1-12 所示。
1.3.5 封装、透明
封装是指隐藏对象的属性和实现细节,仅仅对外公开接口。封装能为软件系统带来以下优点:
(1)便于使用者正确、方便地理解和使用系统,防止使用者错误修改系统的属性。还是以供电系统为例,过去房屋墙壁的上方都是电线,现在的房屋里电线都“不见”了,在墙壁上只露出了一些电源插口。为什么要把电线藏起来呢?理由很简单,暴露在外面的电线不安全、也不美观。再比如电视机系统,尽管它本身的实现很复杂,但用户使用起来却非常简单,只要通过遥控器上的几个按钮就能享受电视机提供的服务。电视机的实现细节被藏在它的大壳子里,没有必要向用户公开。.
(2)有助于建立各个系统之间的松耦合关系,提高系统的独立性。当某-一个系统的实现发生变化,只要它的接口不变,就不会影响到其他的系统。
(3)提高软件的可重用性,每个系统都是一个相对独立的整体,可以在多种环境中得到重用。例如干电池就是-个可重用的独立系统,在相机、手电筒、电动剃须刀和玩具赛车中都能发挥作用。
(4)降低了构建大型系统的风险,即使整个系统不成功,个别的独立子系统有可能依然是有价值的。例如相机损坏了,它的干电池依然有用,可以安装到手电筒中。
1.3.6 抽象
抽象是指从特定角度出发,从已经存在的一些事物中抽取我们所关注的特性,形成一个新的事物的思维过程。抽象思维在艺术和科学领域都得到了广泛的运用。例如图1-16显示了一张描述干旱的土地上忽然下起大雨的抽象画。它对真实世界中下雨的场景进行了抽象,着力表现大自然突然下雨,饱受干旱折磨的人们欢呼雀跃的场面,反映了人类对大自然的依赖的主题。这幅画没有展示人物的相貌、年龄、性别和服装,因为这些信息和主题无关。
1.3.7 继承、扩展、覆盖
在父类和子类之间同时存在着继承和扩展关系。子类继承了父类的属性和方法,同时,子类中还可以扩展出新的属性和方法,并且还可以覆盖父类中方法的实现方式。覆盖也是专用术语,是指在子类中重新实现父类中的方法。
四、UML语言简介
1997年,对象管理组织(Object Management Group, OMG)发布了统-建模语言(Unifed Modeling Language, UML)。UML的目标之一就是为开发团队提供标准、通用的面向对象设计语言。UML提供了一套IT专业人员期待多年的统---的标准建模符号。通过使用UML,这些人员能够阅读和交流系统架构图和设计规划图,就像建筑工人多年来使用建筑设计图-一样。UML采用一些标准图形元素来直观地表示对象模型,所以它是---种可视化的面向对象的建模语言。本节主要介绍常见的几种UML框图的用法,在本书的后面章节,会经常使用这些框图来表示对象模型。UML主要包含以下- -些框图:
●用例图 (Use Case Diagram);从用户角度描述系统功能。
●类框图 (Class Diagram):描述对象模型中类及类之间的关系。
●状态转 换图(State Transition Diagram):描述对象所有可能的状态,以及导致状态转换的转移条件。只需要为个别具有复杂的状态转换过程的类提供状态转换图。
●时序图(Sequence Diagram) 和协作图(Cooperation Diagram): 描述对象之间的交互关系。其中时序图显示对象之间的动态协作关系,它强调对象之间消息发送的时间顺序,同时显示对象之间的交互;协作图能直观地显示对象之间的协作关系。这两种图合称为交互图。
●组件图(Component Diagram):描述系统中各个软件组件之间的依赖关系,还可以描述软件组件的源代码的组织结构。
●部署图(Deployment Diagram);定义系统中软硬件的物理体系结构。它可以显示实际的计算机和设备(用节点表示),以及它们之间的连接关系,在节点中,还可以显示软件组件在硬件环境中的布局。在以上框图中,其中用例图、类框图、组件图和部署图等4个图形,构成了系统的静态模型:而状态转换图、时序图和协作图则构成了系统的动态模型。因此,UML的主要框图也可以归纳为静态模型和动态模型两大类。
五、类之间的关系
UML把类之间分为以下5种关系:
●关联: 类A与类B的实例之间存在特定的对应关系。
●依赖: 类A访问类B提供的服务。
●聚集: 类A为整体类,类B为局部类,类A的对象由类B的对象组合而成。
●泛化: 类A继承类B。
●实现: 类A实现了B接口。
六、 实现Panel系统
上一节已经采用UML语言建立了Panel 系统的对象模型,它包括以下内容:
●1.4.1 节的图1-23: Panel 系统的用例图。
●1.4.2 节的图1-24: Panel 系统的类框图。
●1.4.3节的图1-25: Panel系统的时序图。
●1.4.4 节的图1-27: Panel 系统的协作图。
●1.4.6 节的图1-30: Panel 系统的组件图。
(以上图由于篇幅,小编没有一一给出)
第二部分:Java面向对象三个小练习
一、通过长方形面积周长的计算再次熟悉类与对象
老规矩,我们创建包,然后主类,主方法。我们先建立方法,然后在主方法里面调用,就可以输入输出数据了。
运行如下:
二、了解数组的结构,了解java方法的使用
我们设置数组,然后通过for循环输出,之后输出转置之后的数组:
运行如下:
三、回忆简单继承
简单的继承,仔细看蛮有用的:
运行如下:
关注小编,小编会每天为你分享有趣的技术文章哦。偷偷告诉你私信小编“学习”会有意想不到的惊喜哟~~!