面向对象复习笔记.docx
《面向对象复习笔记.docx》由会员分享,可在线阅读,更多相关《面向对象复习笔记.docx(19页珍藏版)》请在冰豆网上搜索。
面向对象复习笔记
基于Java的面向对象程序设计
维亚
weiya_chenhust.edu.
华中科技大学软件学院
第34讲:
课程总结目录
1.课程容总结
1)面向对象概念
2)面向对象编程(Java)
3)面向对象设计
2.考试形式与安排
3.复习建议
21.课程容总结
+++很重要
++重要
+一般
面向对象概念(+++)
如何保证软件系统可扩展,可重用,可维护?
结构稳定,聚性好,松耦合
类与对象
•面向过程和面向对象
•类和对象的概念、关系、组成
类是对象的抽象,对象是类的实例,方法操作对象部属性(状态)的改变,对象的相互调用也是通过方法来完成。
•构造函数,对象的初始化、使用
创建对象需要以下三步:
声明:
声明一个对象,包括对象名称和对象类型。
实例化:
使用关键字new来创建一个对象。
初始化:
使用new创建对象时,会调用构造方法初始化对象。
封装、继承、多态
•封装的好处、实现方式
好处:
从设计上讲,为了实现模块化
1.以类为最小单元,减少修改带来的连锁效应;
2.可以对成员变量进行更精确的控制(getter,setter);
从使用上讲,减少了复杂度
1.代码使用者无需考虑实现细节就能直接使用一个类;
2.更有效的协作;
良好的封装能够减少代码的耦合,抵御变化
实现:
依靠4种关键字,可修饰类、属性及方法
private:
只能被该类的对象访问。
default:
即不加任何访问修饰符,只允许在同一个包中进行访问。
protected:
只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
public:
不仅可以跨类访问,而且允许跨包(package)访问。
理想的封装状态是:
只有一些精心设计的、注释清晰的接口方法为public;
成员变量和其他的方法都是private,它们组成了一个类的部实现,与类的外部无关
•继承的概念、好处、实现,super,重写,向上转型
概念:
继承是一种类和类之间的关系,是一种“isakindof”的关系。
好处:
•在设计时,它允许创建分等级层次的类,思路更清晰,减少了冗余代码,易于修改;
•定义新类时,可以以原来的类为基础,借助代码的重用,使系统变得容易扩展,提
高了开发效率。
•继承帮助我们统一了函数的调用接口,在增加新类后减少对已有系统的修改。
注:
final关键字声明类可以把类定义为不能继承的,即最终类;
向上转型:
对象a是子类对象b的上转型对象,上转型对象可以操作被子类继承和重写的方法,但不能操作子类新增的成员变量和方法。
或者用于修饰方法,该方法不能被子类重写。
尽量使用组合,慎用继承
•多态的定义、分类、实现方法(继承、接口),如何使用
定义:
多态就是指一种名称定义不同的方法。
1.译时多态-方法的重载(overload)
2.运行时多态(runtimepolymorphism)
程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程
时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实
例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运
行期间才能决定。
抽象类和抽象方法
•定义,格式,使用情景
概念:
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所
有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的
对象,这样的类就是抽象类。
格式:
抽象方法没有定义,方法名后面直接跟一个分号,而不是花括号。
1)抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
2)抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类是抽象类。
静态方法和静态变量
使用场合:
1.某个变量被该类所有变量需要,如定义常量、计数的变量、数组等;
2.只需访问静态变量的方法可定义为静态方法;
3.特殊类型的类,没有对应实例,其所需参数都是通过显式参数提供,比如Math类;
静态变量在程序初始化时被创建,可被该类所有的实例使用和修改;
4.静态类只能初始化一个实例。
接口(Java)
•定义,调用,特性,功能,与类的比较,与抽象类的比较
定义:
软件项目通常由团队完成,各成员独立完成不同子模块后再进行组合
为使组合顺利进行,开发成员之间需达成某种“协议”,我们称之为接口。
特性:
接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字
接口中可以含有变量,变量会被隐式的指定为publicstaticfinal(用private修饰
会报编译错误)
接口中的方法会被隐式的指定为publicabstract
功能:
1.接口提供了一组功能的命名集合
2.接口定义了不同类交互的标准日
=>实现了“多继承”,分离了方法的声明和方法的实现
接口与类的区别:
接口不能用于实例化对象。
接口没有构造方法。
接口中所有的方法必须是抽象方法。
接口只能包含staticfinal成员变量。
接口不是被类继承了,而是要被类实现。
接口支持多继承。
•接口名作为类型,接口继承(++)
接口无法被实例化,但是可以被实现。
一个实现接口的类,必须实现接口所描述
的所有方法,除非声明为抽象类。
可以把使用实现了某一接口的类创建的对象的引用赋给该接口声明的接口变量,
那么该接口变量就可以调用被类实现的接口的方法。
•Java8接口新特性(+)
接口中也可以放入方法的实现,避免修改实现该接口的类的代码,但是无法像静态方法那样使用。
接口中也可以放入静态方法,以增加一些帮助性质的工具函数。
类之间的关系
•1+3+1,各种关系的定义、比较和选择
继承+关联、聚合、组合+依赖
依赖:
简单的理解,就是一个类A中的方法使用到了另一个类B。
关联:
一个类作为另一个类的成员变量出现。
被关联类B以类属性的形式出现在关联类A中,就叫关联关系。
关联可以是单向(箭头指向被关联类)、双向的(无箭头)。
注意一对多表示形式。
聚合:
聚合关系中,两个类是处在不同层次上的,一个代表整体,另一个代表部分。
虽然是整体和部分的关系,但是整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以被多个整体对象共享。
聚合是关联关系的一种特例,它体现的是整体与部分的拥有关系,即has-a的关系;
组合:
整体与部分之间是不可分离的,整体的生命周期结束也就意味着部分的生命周期
结束-同生共死。
组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合。
•UML关系画法
•组合与继承
UML
静态模型:
用例图(UseCaseDiagram):
从用户角度描述系统功能。
以图形化的方式表示了:
1)系统部的功能
2)系统外部的参与者
3)以及它们之间的交互关系
录入订单registerOrder用例如下:
简要说明:
Salesman根据客户的要求录入商
品订单到系统中。
主事件流:
Salesman先查询有没有客户想订
购的商品,如果有则输入客户,查询该客户
是不是新客户,如果是则创建客户资料,再为客
户填写订单。
其他事件流:
无。
前提条件:
有客户要下订单。
事后条件:
无。
类图(ClassDiagram):
描述对象模型中类与类之间的关系。
组件图(ComponentDiagram):
描述系统中各个组件之间的依赖关系,还可以描
述组件的源代码组织结构。
部署图(DeploymentDiagram):
定义系统中软硬件的物理体系结构。
动态模型:
时序图(SequenceDiagram):
显示对象之间的动态协作关系,强调对象之间消息
发送的时间顺序。
主要用来显示具体用例的详细动作或事件流程
构成:
对象生命线(垂直的虚线);
•对象激活框(细长矩形);
•消息(带箭头的水平线+消息名);
o调用:
实线段,实心箭头
o返回:
虚线段,枝状箭头
•顶部方框表示类的对象或类,有3种写法
o对象名和类名间用冒号隔开,如c:
Car
o省略对象名称,:
Car
o只保留对象名,c
活动图(ActivityDiagram):
显示活动的顺序控制流。
状态转换图(StateTransitionDiagram):
描述对象所有可能的状态,以及导致状
态转换的条件。
Java面向对象编程(+++)
Java标准库
•package的作用、命名和使用方式
公司一般使用域名反转作为包名
example.=>.example.mypackage
注意:
域名
包名
hyphenated-name.example.org
org.example.hyphenated_name
example.int
int_.example
123name.example.
.example._123name
•包名的声明必须出现在第一行;
•默认包没有名称;
•父包与子包:
o子包需要显式引用
o父包不包含子包
•Java基础类:
Object,包装类,Math(++)
•Java工具类:
Random,Date,BigXXX(++)
•String(初始化、方法、类型转换)
Stringstr1=newString("ABC");
Stringstr2=newString("ABC");
System.out.println(str1==str2);//false
Stringstr3="ABC";
Stringstr4="ABC";
Stringstr5="AB"+"C";
System.out.println(str3==str4);//true
System.out.println(str3==str5);//true
Stringa="ABC";
Stringb="AB";
Stringc=b+"C";
System.out.println(a==c);//false
常用方法:
indexOf()
charAt()
contains()
substring()
split()
replace()
StringBuilder和String类似,但不同的是,StringBuffer和StringBuilder类的对象能够被多次的修改.
append(xxx)
insert(xxx)
JavaIO
•Stream的概念,IO包的构成(++)
•控制台IO,文件IO,缓冲区IO,Scanner
•数据流与对象流(+)
泛型
•定义,好处,格式,通配符
好处:
减少了cast带来的运⾏时异常
使算法和框架更为通⽤,减少了冗余代码
有界通配符:
extendsT>上界为T
superT>下界为T
有界通配符
T
?
superT
•泛型类、泛型接口(++)
51.课程容总结
Java面向对象编程(+++)
集合框架
•集合框架定义(组成),好处
•集合接口:
Set、List、Queue、Deque、Map
•集合实现类:
各种集合遍历方法,Hash集合,动态数组,有序集合
•集合实用类:
Collections,Arrays(++)
Set和Collection功能基本一致,用于存放无重复的元素,类似数学意义上的集合,不保证存放顺序。
如:
HashSet,TreeSet
List是一个有序的Collection,List为一个长度可变的数组,即动态数组,可包含重复元素,增加了按位置访问、查找和遍历功能。
如:
ArrayList,LinkedList
Queue:
队列,add(e)offer(e)remove()poll()element()peek()
Dequeue:
双向队列,addFirst(e)offerFirst(e)addLast(e)offerLast(e)RemoveremoveFirst()pollFirst()removeLast()pollLast()getFirst()peekFirst()getLast()peekLast()
Map
Comparable(compareTo),Comparator(compare)
使用:
Setset=newTreeSet(newCustomerComparator());
•枚举(++)
Enum(属性publicstaticfinal),EnumMap
•集合的使用建议(++)
异常处理
•异常的定义、分类、方法调用栈(++)
•异常处理机制,try-catch-finally,throws和throw
•异常类、自定义异常类,异常处理规则和原则
61.课程容总结
Java面向对象编程(+++)
线程(++)
创建一个实现了Runnable接口的对象,该对象被用作Thread对象的参数。
publicclassHelloRunnableimplementsRunnable
Thread类本身也实现了Runnable接口,我们可以创建Thread类的子类,重写其run方法。
publicclassHelloThreadextendsThread
•定义,生命周期,创建方法
•线程的阻塞、中断、等待、同步(+)
Thread.sleep()暂停执行当前线程一段时间。
t.join()表示当前线程必须等t执行完毕后才能继续执行。
synchronized同步
图形编程
•JFC简介(AWT,Swing)(++)
•Swing组件的使用
•布局器(常见种类,嵌套)
•事件监听机制、接口(Action、Mouse、Key)
71.课程容总结
Java面向对象编程(+++)
数据库
•数据库概念、分类(++)
•关系数据库,SQL
•Java数据库开发(JDBC)(++)
•ODBC,UCanAccess(+)
•数据访问类DA的设计方法和使用流程
代码规
•代码风格:
排版,命名(++)
•Javadoc常见标记
81.课程容总结
面向对象设计(+++)
•OOD原则(SOLID)
•OOD设计模式(++)
•OOD构架(MVC、三层)
102.考试形式与安排
考试时间
第13周周二(2017年11月28日)晚上;
时长:
2小时(待定)
考试形式
笔试
闭卷:
建议带铅笔、橡皮画图,不需要计算器、字典等任何工具
112.考试形式与安排
考试容
围不超出课本和课件
难度基本不超过上机和大作业
侧重考概念的同时,也会考察重要的编程细节
中文,但会考察英文术语
考试题型
小题:
单选、多选、填空(50%)
大题:
简答、补充代码、UML图和代码的相互转换、建模(分析问题、画图、
完成代码)(50%)
所有画图的部分都只需画出核心的属性和方法;
所有写代码的部分都不以简单的语法错误作为扣分点(语句甚至可用伪代码);
会给出所用Java标准类的API
123.复习建议
结合课件去看课本(或者其他书籍、帖子等),不要放过细节;
独立完成课件上的例题、所有上机容、大作业;
独立完成所有微助教上的题目;
多动手,很多问题写代码一试就有答案。
13总结的总结
合理运用抽象
14总结的总结
Seizetheday!