面向对象
面向对象设计的过程就是抽象的过程,分为3部来完成
1)发现类
2)发现类的属性
3)发现类的方法
面向对象方法开发概述:!!
开发经历 的生命周期
1)软件分析:分析问题领域,了解用户的需求
2)软件设计:确定软件的总体构架,把整个软件系统划分为大大小小的多个子系统,设计每个子系统的结构
3)软件编码:用选定的编程语言来编写程序代码,实现在设计阶段勾画出来的软件蓝图
4)软件测试:测试软件是否能实现特定的功能,以及测试软件的运行性能
5)软件部署:为用户安装软件系统,帮助软件正确的使用软件
6)软件维护:修复软件中存在的bug,当用户需求发生变化时(增加新的功能,或者修改已有的功能的实现方式),修改相应的软件部分.
为了提高软件效率,降低软件开发成本,一个优良的软件系统应该具备的特点
1)可重用性:减少软件中的重复代码.避免重复编程
2)可扩展性:当软件必须增加新的功能时,能够在现有的系统结构的基础上,方便的创建新的子系统,而不需要改变软件结构现有的结构,也不会影响已经存在的子系统.
3)可维护性:当用户需求发生变化时,只需要修改局部的子系统的少量程序代码,而不会牵一发动全身,修改软件系统中多个子系统的程序代码.
软件中的子系统具有以下特点 :
1)结构稳定性:软件在设计阶段,在把一个系统划分成更小的子系统时,设计合理,使得系统的结构比较健壮,能够适应用户变化的需求
2)可扩展性:当软件必须增加新功能时,可在现有子系统的基础上创建出新的子系统,该子系统继承了原有子系统的一些特性,并且还有一些新的特性,从而提高软件的可重用性和可扩展性.
3)内聚性:每个子系统只能完成特定的功能,不同的子系统之间不会有的重叠.为了避免子系统之间功能的重叠,每个子系统的粒度都尽可能要小,按这种方式构成的系统结构被称为精粒度系统结构.子系统的内聚性会提高软件的可重用性和可维护性
4)可组合性:若干精粒度的子系统经过组合,就变成了大系统.子系统的可组合性会提高软件的可重用性和可维护性,并且能简化软件的开发过程
5)松耦合:子系统之间的相互独立,修改一个子系统,不会影响到其他的子系统.当用户需求发生变化时,只需要修改特定子系统的实现方式,从而提高软件的可维护性
1.1结构化软件开发简介(SASD)
它首先用结构化分析对软件进行需求分析,然后用结构化设计方法进行总体设计,最后进行结构化变成。这种开发方法使得开发步骤明确,SA、SD和SP相辅相成,一气呵成。
结构化设计是属于自顶向下的设计,无法灵活的适应用户不变变化的需求。
例:根据客户输入信息来打印图形,若客户需求改变,需要增加一个画某一种图形的功能,那么需要增加一个常量、增加一个方法、增加一个case分支。
可见,结构化开发制约了软件的可维护性和可扩展性,模块间的松耦合性不高。
1.2面向对象的软件开发简介
面向对象的开发方法把软件系统看成各种对象的集合,对象就是最小的子系统,一组相关的对象能够组合成更复杂的子系统。具有以下几个优点:
①把软件系统看成是各种对象的集合
②软件需求的变动往往是功能的变动,二功能的执行者——对象一般不会有大的变化。这使得按照对象设计出来的系统结构比较稳定
③对象包括属性(数据)和行为(方法),对象把数据及方法的具体实现方式一起封装起来,这使得方法和与之相关的数据不再分离,提高了每个子系统的相对独立性,从而提高了软件的可维护性。
④支持封装、抽象、继承和多态,提高了软件的可重用性、可维护性和可扩展性。
1.2.1对象模型
在面向对象的分析和设计阶段,致力于建立模拟问题领域的对象模型。建立对象模型既包括自底向上的抽象过程,也包括自顶向下的分解过程。
1.自底向上的抽象
在自底向上的抽象过程中,为使自雷能更合理地继承父类的属性和行为,可能需要自顶向下的修改,从而使整个类体系更加合理。由于这种类体系的构造是从具体到抽象,再从抽象到具体,符合人类的思维规律,因此能更快、更方便的完成任务。
2.自顶向下的分解
既能有效的控制系统的复杂性,又能同时避免结构化开发方法中功能分解的困难和不确定性。
1.2.2UML:可视化建模语言
UML:是一种定义良好、易与表达、功能强大且普遍适用的可视化建模语言。它吸取了诸多流派的优点,而且又进一步的发展,最终成为大众所共同接受的标准建模语言。
1.2.3Rational Rose:可视化建模工具
1.3面向对象开发中的核心思想和概念
问题领域、对象、属性、状态、行为、方法、实现
对象是对问题领域中事物的抽象。对象特征:
1.万物皆为对象
2.每个对象都是唯一的
3.对象具有属性和行为
4.对象具有状态
5.对象都属于某个类
1.3.2类、类型
类是一组具有相同属性和行为的对象的抽象。类及类的关系构成了对象模型的主要内容
1.3.3消息、服务
每个对象都具有特定的功能,相对于其他对象而言,它的功能就是为其他对象提供的服务。例如电视机具有的功能包括:开机、关机、选择频道、调节音量和播放VCD等。遥控器为了获得电视机的服务,需要向电视机提出获得特定服务的请求,提出请求的过程被称为发送消息
1.3.4接口
在现实世界中,接口也是实体,比如电源插口、洗衣机上的按钮和电灯的开关。而在面向对象范畴中,接口是一个抽象的概念,是指系统对外提供的所有服务。
在Java语言中,接口有两种意思:
1、指系统对外提供的所有服务,在对象中表现为public类型的方法的声明
2、指用interface关键字定义的实实在在的接口,也称为接口类型。用于描述系统对外提供的所有服务,更加清晰地把系统的实现细节与接口分离
1.3.5
封装是指隐藏对象的属性和实现细节。
两个原则:
1、把尽可能多的东西藏起来,对外提供简捷的接口
2、把所有的属性藏起来
1.3.6抽象
抽象是一种由具体到抽象、由复杂到简洁的思维方式。在面向对象的开发过程中,抽象体现在以下方面
1、从问题领域的事物到软件模型中对象的抽象
2、从对象到类的抽象
3、从子类到父类的抽象
1.3.7继承、扩展、覆盖
在父类和子类之间同时存在着继承和扩展关系。子类继承了父类的属性和方法,同时,子类中还可以扩展出新的属性和方法,并且还可以覆盖父类中方法的实现方式。覆盖也是专业术语,是指在子类中重新实现父类中的方法。
注:
子类只能继承父类的部分属性和方法,父类中用private修饰的属性和方法对子类是透明的。
目前在Java领域比较流行的架构软件包括:
① J2EE
② Struts
③ JSF
④ Spring
1.3.8组合
组合是一种用多个简单子系统来组装出复杂系统的有效手段。个人计算机系统就是一个典型的组合系统。它由主机、键盘、鼠标、显示器、和外围设备打印机等组成。而主机由处理器、内存、一个或多个硬盘、显卡、网卡和声卡等组成。
1.3.9多态、动态绑定
1.4UML语言简介
1.5类之间的关系
关联:类A与类B的实例之间存在特定的对应关系
依赖:类A访问类B提供的服务
聚集:类A为整体类,类B为局部类,类A的对象由类B的对象组合而成
泛化:类A继承类B
实现:类A实现了B接口