OOP第二阶段总结
0. 前言
本阶段,我们的三次作业,主要是为了练习正则表达式,学会运用面向对象编程中类的继承,多态性来编写程序。三次作业均为满分,所花时间递减。
1. 作业过程总结
① 本阶段三次作业的目的,分别是练习正则表达式,然后初步了解面向对象的继承与多态,之后再学会按照面向对象的原则进行编程。
② 首先,第五次作业,主要根据单一职责原则,来要求我们学会减少类的功能,一个类一个功能。而后,第六次作业,开始涉及到抽象类的用法,引入继承和多态。最后,第七次作业对此进行难度强化,让我们熟练掌握使用。
③ 作业常遇见空指针的问题,调试后发现一些地方没分配内存或者是访问了空的区域,而后对代码进行修改分配内存,解决了该类问题。
④ 第五次作业,由于是刚接触正则表达式,不是很熟练,写完功能加上debug,大概花了5天。第六次花费3天,第七次花费1天。
⑤ 关于编程,关键的是要在写代码之前,先把自己的思路理清,写下来,再进行编写代码。
2. OO设计心得
①封装
封装,就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。 一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。
继承
继承,指可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。 继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。要实现继承,可以通过 “继承”(Inheritance)和“组合”(Composition)来实现。继承概念的实现方式有二类:实现继承与接口继承。实现继承是指直接使用 基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力。
多态
多态,是指一个类实例的相同方法在不同情形有不同表现形式。 多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。
②单一职责原则SRP(Single Responsibility Principle)
是指一个类的功能要单一,不能包罗万象。如同一个人一样,分配的工作不能太多,否则一天到晚虽然忙忙碌碌的,但效率却高不起来。
开放封闭原则OCP(Open-Close Principle)
一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的。比如:一个网络模块,原来只服务端功能,而现在要加入客户端功能,那么应当在不用修改服务端功能代码的前提下,就能够增加客户端功能的实现代码,这要求在设计之初,就应当将服务端和客户端分开,公共部分抽象出来。
④类的设计心得
保证数据的私有性(private):
为了实现一个类的良好封装性,一定不要使用其他的方式去声明成员变量,这是为了后期代码维护做的基本准备.
对数据初始化:
虽然编译器会自动对成员变量进行隐式初始化,但是为了可读性,应该为变量提供初始化或是利用构造器进行初始化(局部变量必须初始化).
不要在类中使用过多的基本类型:
意思是当类中存在多个基本数据类型时,用一个引用类型来包装这些基本类型,这样可以增强其可读性,且后期要替换这个类的名称也更简单.
并非所有的域都需要getter/setter:
例如:在一个Employee类中,雇员的薪水是可以有getter和setter的,但是雇员的雇佣日期就不应该有setter.一个类的功能尽量不要太繁杂:如果一个类的某些功能明显的可以分为两类,就应该将其分解.
类名/方法名的名称要可以体现其职责
3. 测试的理解
① 再刚开始,没写测试,相当于欠下债务。在之后,程序出现bug时,需消耗大量时间和精力去debug。而如果在最开始写一个测试,可能只需要1分钟就能搞定。
② 先找一些常见样例,再往一些比较特殊的情况考虑,比如说范围最大最小,特殊情况等。
4. 课程收获
面向对象程序设计,要遵守五大原则,熟连运用三大特性(封装,继承,多态)。写程序时,也要常常测试,以免写完后出现bug时的难以修改。
5. 对课程的建议
①第三阶段,希望不要采用pta的这种方式。这样子写代码,失去了我们本来的意义,相当于把面向对象硬生生写成面向过程。
②希望老师能抽出时间回答一下同学们的问题,不要总是让人有种本门课程全是靠自学的感觉。