• OO第三阶段作业总结


    0 前言
    第三阶段是我们java基础学习的最后一个阶段,也是本学期教学的最后的内容,主要在于让我们深入了解java编程的各种模式,比如单一职责,开闭原则,里氏替换原则,依赖倒置原则,接口隔离原则等。第三阶段要求我们熟练理解这些原则的具体使用,力求实现改变需求的却不修改代码以及代码的简洁。
    1 作业过程总结
    0 作业具体要求 :
    第七次作业要求实现雨刷功能拓展,第八次要求统记java关键词次数以及第九次要求使用栈来实现表达式的计算。这一阶段作业没有给出具体的类图,要求我们自行设计,这也给题目增加了难度,要在原题的基础上设计出符合编程设计模式的代码对于初学者来说思路较为模糊,需要一定的时间考虑设计思路 。
    1 作业迭代关系
    三次作业的基本设计思路在于满足基本的设计模式,第一次作业对于雨刷功能的扩展要求我们在已知基本代码的情况下对雨刷的功能拓展,基本应用了单一原则和开闭原则。这里使用了四个类,分别是主类Main 代理类Agant 雨刷等级类Lever 刻度类 Dail ,每个类都是单一职责。在这个题目中主要是对Level 和Dail类进行拓展,不修改源代码的情况下增加部分功能。在已知部分代码的情况下这题的拓展相对简单。第二次作业是编写程序统计一个输入的Java源码中关键字(区分大小写)出现的次数。设计原理与第一次作业大体相同,这次作业要求题目必须使用List、Set或Map中一种或多种。这里我选择使用了Map来解题。我总共设计了四个类,分别是Main (对基础字符串的一般处理,解决非法输入问题),Count类为主要功能类,实现关键词的计数,translate类将一段输入字符串转为单个关键字或字符,Sort类在于把关键字进行排序。第三次作业要求使用堆栈计算表达式,这是一个较为经典的堆栈问题,在学习数据结构时我们已经有啦深入的了解,所以写出基本代码并不困难,这题主要的问题在于字符串的处理。
    运算数均为整型数(即不带小数点)
    运算符只支持加减乘除四种(+、-、、/)以及小括号(())
    *计算规则为实型数运算规则,例如1/2=0.5
    *输出计算结果保留两位小数(四舍五入)
    *表达式中不允许出现如下情况 以上几点实现较为简单 主要利用正则表达式进行字符串的判断。

    (2)对面向对象的封装性、继承性与多态性三大技术特性的理解
    这三次作业主要就是使用了这三大计数特性,也让我对题目有了更深入的理解。封装性--我把他理解为深入版的单一职责性。实现高内聚、低耦合。力求可拓展不修改,雨刷器功能的拓展很好的体现了这个特性,不修改原有代码,只在原有代码的基础下实现功能拓展。继承性在这三题中并没有太大的使用,我没有涉及父类与子类的关系。我对继承的理解是儿子可以使用父亲的东西,类似于父亲留给儿子的财产,儿子可以继承。多态性--(该特性是在继承性的基础上来说的,父类可以有多个子类,每个子类可以有各自的不同的方法)
    (3)作业过程中遇到的问题及解决方法
    作业遇到的大问题在于类的设计,已经数据校验的处理,具体来说在于正则表达式的处理问题。这个问题在每次作业中都出现,还是对正则表达式不是很熟悉,我的解决方法就是学习,理解加上查资料。对设计问题主要在于深入理解各个设计模式,把功能细化。
    (4)每次作业花费的时间比例
    三次作业难度不大每次大概三个小时左右,比例1:1:1
    (5)对编程过程的严谨性的认识及教训
    对面向对象编程我们不经需要考虑对某个问题的具体求解,而要考虑代码的复用性,使这段代码能够解决这类问题,不能为了针对某个问题简化而牺牲了大类的部分实现。
    2 OO设计心得
    (1)对面向对象三大技术特性之间关系的理解
    三大技术,继承,封装和多态可以分开使用也可以结合使用,封装使得代码可以继承,继承使得类代码可以使用多态,三大技术可以相互叠加拥有更简洁更好的效果。
    (2)面向对象设计的基本原则理解(单一职责原则及“开-闭”原则)
    单一职责相对好理解,一个类具有自己的属性和方法,只管理这类事务的处理,其他类型事务交由其他类去实现,开闭原则则是相对于封装而言的,开既程序可以开放,可以拓展,闭则是程序不能被修改,对于扩展是开放的,对于更改是封闭的。
    (3)OO编程思维的理解
    就一个类而言,无需顾忌其他大体,只要专心思考这个类的功能,作为宏观对象的微观表现。 所设计的类应该是以类复用为思考点,最大程度实现代码的复用,不仅仅是面向过程的一个代码针对一个问题;OO面向对象其实就是把程序看做一个个个体,个体进行分类,分级,整合的思想。具体分为封装,继承,多态,抽象。
    3 测试的理解与实践
    对代码的测试能够发现我们对一些细节问题的处理是否恰当,以及可以知道所写代码的质量,他是否能满足我们的需求。
    如果我测试代码我会从数据型,数据边缘,已经需求方面进行测试,也可以把代码进行拆分,分段进行测试;其次我们的代码编写要符合实际,前后的衔接应该流畅。类及变量的命名使用英文单词及驼峰命名规则

  • 相关阅读:
    线程(中)
    线程
    生产者消费者模型
    进程的常用方法
    HTML中head与body标签
    HTTP协议
    mysql:视图,触发器,事务,存储过程,函数。
    关于MySQL中pymysql安装的问题。
    MySQL多表查询,pymysql模块。
    MySQL之单表查询
  • 原文地址:https://www.cnblogs.com/qiuqian0123/p/13048259.html
Copyright © 2020-2023  润新知