OO第三次博客作业

一、 前言:

第七次题目集

题量:两道题,每道题的代码在四百行左右,难度适中。

知识点:类的继承,多态的使用方法以及接口的应用。

第八次题目集

题量:一道题,每道题的代码在四百行左右,难度适中。

知识点:类的封装性及类间关系设计(关联、组合及依赖)。

第九次题目集

题量:一道题,每道题的代码量在八百行左右,难度较第八次题目集有明显增加。

知识点:类的封装性及类间关系设计(关联、组合及依赖),和抽象类、继承与多态的应用。

二、 设计与分析:

题目集七:

第一题

 

 

 

 

本题根据所给的类图,创建Shape类作为父类,注意:Shape类为抽象类,再创建Circle,Rectangle,Triangle,Traperoid 类都继承Shape类,作为其子类,并要重写其方法。创建一个Card类重写compareTo方法,再创建一个DealCardList类处理输入的数据。

抽象类:在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。

由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。

父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。

在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。

 

第二题

 

 

 

 

本题类图和上一题的类图没有太大的变化。

本题和上一题不同的是,在该题中创建了5个ArrayList<Card> list.分别用来储存输入图形圆,矩阵,三角形,梯形,以及全部图形的数据。最后用DealCardList来处理这5个list中的数据。

 

题目集八:

第一题

类图

 

 

 

 

 

 

通过老师所给的作业要求,可以从中推断出类与类之间的关系。银联中有银行,银行中有ATM机,账户,账户里有银行卡,有用户。

创建银联类,其中有银行。创建银行类,银行类中有银行代号,及银行名字。创建ATM类,该类中有ATM机的编码,和该ATM机隶属的银行。创建用户类,用户类中有用户的身份证号码,用户名字,用户的电话号码。创建账户类,账户中有账户号码,账户余额,账户的隶属用户以及该账户隶属的银行。创建银行卡类,类中有银行卡的卡号,银行卡的密码,及银行卡隶属的账户。创建取款的业务类和判断数据的业务类。初始化数据后根据输入数据的情况来判断是查询业务还是取款,存款业务。(如:用split(\\s+)分离出以空格分开的数据,如果数据数量为一,则为查询业务,否则为取款存款业务。)然后进行数据的判断,依次进行校验该银行卡是否存在,ATM机是否存在,银行卡的密码是否正确,校验是否跨行,是否透支。若数据均正确则进行相应的操作。

 

题目集九:

类图:

 

 

 

 

本题代码在老师给的代码进行修改完成。根据图中可以看出代码的圈复杂度降低了许多,if-else语句少了许多,并将对于数据的校验放到一个专有的业务类中。

本题与题目集八中的题不同,该题中银行账户分为借记账户和贷记账户两种,其中,借记账户不能够透支 取款,而贷记账户可以透支取款(可能需要支付手续费)。所以我在银行类中增加了跨行取款手续费的成员属性。将借机账户和贷记账户继承账户类,重写账户类中的取款方法,其中贷记账户中的取款方法中余额可以透支及余额小于负五万才算余额不足。而借机账户的余额小于零就算余额不足。在本题中值得注意的是,在贷记账户中,透支,跨行,透支取款手续费,跨行手续费。

 

一、 踩坑心得:

1、Comparable接口

:所有可以 “排序” 的类都实现了java.lang.Comparable接口,Comparable接口中只有一个方法。

:public int compareTo(Object obj) ;

该方法:

返回 0 表示 this == obj

返回整数表示 this > obj

返回负数表示 this < obj

实现了 Comparable 接口的类通过实现 comparaTo 方法从而确定该类对象的排序方式。

2、abstract不能与final并列修饰同一个类。

abstract不能与private、static、final或native并列修饰同一个方法,如

 

 

输出结果:

此处不允许使用修饰符static ,abstract static class A {

3、看明白题目需求,根据题目意思来写代码,而不是自己认为怎样就是怎样(老师说:对于现阶段的我们认为的 都是错的!)

一、 改进建议:

在第八次和第九次题目集中可以使用双向指针,效率高。

(双指针就是在遍历对象时,不是使用单个指针进行访问,而是使用两个相同方向或者相反方向的指针进行遍历,从而达到相应的目的。)

 

二、 综合性总结:

 

1、抽象类使用的目的

在抽象类中只实现所有该类型共有的特性,定义了所有该类型应该有但是父类又不知道子类怎么实现操作。一定程度上实现代码复用,统一管理的效果。

 

2、抽象类特点

类需要用abstract修饰符修饰,类中有抽象方法(abstract修饰的方法,),不过并不是强制的,一个抽象类可以没有任何一个抽象方法。但是只要类是抽象的则不能违反抽象类原则,即抽象类不能实例化(即使有构造方法)

 

3、抽象类和接口

相同点:都不能进行实例化,需要更具体的内容来完成该类型的实例化操作

 

不同点:抽象类可以有构造方法,接口没有。抽象类可以有具体方法,接口中具体实现只能是default,static或者private类型,抽象类可以有实例变量,接口不能(抽象类和接口的本质区别)

final关键字,修饰三个位置:

1, 修饰变量,是不可变变量,只能有一次赋值。
2

2, ,修饰类,表示这个类不能被继承
3,修饰方法,表示这个方法无法被其子类覆写。

 

posted @ 2021-06-20 21:32  赵默一  阅读(59)  评论(0)    收藏  举报