OO作业总结(三)
OO作业总结(三)
一、前言
pta三次作业题目说明
1、 Java_Homework9
1)雨刷程序功能扩展设计
2、 Java_Homework10
1) 统计Java程序中关键词的出现次数
3、 Java_Homework11
1)表达式求值
二、作业过程总结
1、 三次作业之间的知识迭代关系

2、 作业过程中遇到的问题及解决方法
1)Java程序中关键词
原因:正则表达式错误。
解决方法:检查并修改了正则表达式。
2)中序转后序数组越界
原因:入栈出栈时链表下标错误。
解决方法:通过调试修正。
3、 每次作业花费的时间比例
第九次作业:第十次作业:第十一次作业 = 1 :10 :2
原因:三次作业代码的实现都不难。第十次作业之所以用这么久是因为搞不懂测试点,不会测试,想不出方法应该怎么写。
4、 对编程过程的逻辑严谨性的认识及教训
第十次作业写了很久依旧搞不懂暴露了我编程逻辑不够严谨的问题。第十一次作业表达式求值,我确实拿到了满分。但是后面继续测试发现,我没有考虑负数的情况。这样的情况很多。一般而言,代码不会出错,出错的是写代码的人。
三、OO设计心得
1、 面向对象三大技术特性
1)封装性:实现的细节经过封装对用户隐藏起来,这称为类的封装。
2)继承性:可以从现有的类定义新的类,这称为类的继承。
3)多态性:如果一个方法的参数类型是父类(例如Object)。可以向该方法的参数传递任何子类(例如circle类或string类的对象),这称为多态。
2、 面向对象设计的基本原则理解
1)单一职责原则(SRP):对于一个类而言,应该仅有一个引起它变化的原因。
一个类有且只有一个职责。一个类可以包含多个方法,但是它们都是为了一个目的。如果一个类多于一个职责,则需要根据它们的职责把这个类拆分成多个类。因为每个职责是轴向变化的,如果类包含多个职责,代码会变得耦合。一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。
2)开放-封闭原则(OCP):软件实体(类、模板、函数等等)应该可以扩展,但是不可以修改。
开放-封闭原则是面向对象编程的核心所在。我们应该在不修改类的前提下扩展一个类的行为。对扩展开发,对更改封闭。对扩展开发意味着类或模块的行为能够改变,在需求变化时我们能以新的、不同的方式让模块改变,或者在新的应用中满足需求。
3)里氏替换原则(LSP):子类型必须能够替换它们的基类型。
使用基类应用的函数必须能够使用继承类的对象而不必知道它。只有当子类型可以替换掉父类,软件单位的功能不受影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。正是由于子类型的可替换性才使得使用父类类型的模块在无需修改的情况下就可以扩展。
4)依赖倒置原则(DIP):高层模块不应该依赖底层模块,两个都应该依赖其抽象。
抽象不应该依赖具体。具体应该依赖抽象。依赖倒转是面向对象设计的标志,如果编写时考虑的都是如何针对抽象编程,而不是针对细节编程,即程序中所有的依赖关系都是终止于抽象类或者接口,那就是面向对象的设计,反之那就是面向过程的设计了。
5)接口隔离原则(ISP):客户端不应该依赖它不需要的接口。
一个类对另一个类的依赖应该建立在最小的接口上。以便外部能够知道这些类有哪些可用的功能,客户端代码也能根据接口来设计。如果接口太大,包含很多暴露的方法,在外界看来会很混乱。接口包含太多的方法也使其可用性降低,像这种包含了无用方法的接口会增加类之间的耦合。
3、 OO编程思维的理解
OO编程思维就是面向对象编程思维。从本质概念上讲,面向对象大致有两个层次的内涵:1、基于对象。把数据和函数放在一起。2、多态。首先,方法可以在子类中重写;调用对象方法的时候,调用父类还是子类还是孙类的方法,能否自动选择到合适的呢?解决这个问题的设计就是“多态”。“基于对象”最重要、最常用、最根本。不关心处理的细节,只关心谁可以和结果!
4、 类设计心得
在第三阶段的学习中,只有第一题是让我们改善代码的设计模式,其余都让我们自己去完成题目给的要求。第一题让我们初步了解了设计模式。而第二题和第三题又极易让我们写成面向过程的代码,我一开始的构想根本没有出现类。为什么会这样的情况?根本上来讲还是因为我们的思维还停留在面向过程的思维。在实现第二题和第三题的代码之前,我先把设计思路写出来,分离出里面的对象。根据对象设计类,设计类时,考虑类的职责只有一个以及我们需要将类设计得简单。在一步一步的写的过程中,我开始对面向设计的五大原则有了新的感悟。
四、测试的理解与实践
1、测试对于编码质量的重要性
在表达式求值这一题,我中序转后序的代码,虽然没有一次性写对。但是经过我debug调试之后,我一次性通过了。这次代码我在运行时,就出现了错误。经过debug,我进一步了解了代码的运行逻辑。调试了很久,运行终于不再出现问题!测试可以帮助我们理解代码,找到代码隐藏的错误,帮助于我们改善代码的质量。
五、课程收获
在第一阶段的学习里,我们学习了Java的基本语法。第二阶段的学习里,我进一步掌握了Java的三大特性(封装、继承与多态)、单一职责原则和开放-封闭原则。在第三阶段里。通过第一题,我粗略了解了23种设计模式,熟悉掌握了简单工厂模式和工厂模式。通过第二题,我熟悉掌握了映射Map,进一步熟练了正则表达式。通过第三题, 我了解了栈,熟悉掌握了中序后序,后序求值法。通过第三阶段的实验,我学习了javafx、事件驱动和lambda表达式。java课程给我最大的收获就是我学会了自己独立思考自主学习学科的不同知识。在面向对象的路上,我才刚刚入门。在接下来的学习生涯里,我会继续努力的。
六、对课程的建议
希望老师可以讲解pta上的题目。

浙公网安备 33010602011771号