• OOP第一阶段总结


     

    0. 前言

    本篇博客主要针对第一阶段三次作业进行总结。三次得分均为100分。

    1. 作业过程总结

    ① 第一次作业主要还是在面向过程编程,了解java语法。第二次作业也还是面向过程编程,不过难度比第一次要大很多。第三次作业先开始引入类,而后加大难度,转向面向对象编程,要求根据UML类图来写代码。

    ② 第一次作业,难度低,代码量少。当写到第二次作业时,难度增大,重用性低,往往因为细微的差别就重写函数。到第三次作业,如果用面向过程编程,代码量很大,而且很难修改,而采用面向对象编程,符合思维方式,稳定性好,可重用性强

    ③ 前两次作业难度低,并无问题。而第三次作业,是由面向过程到面向对象的一个分水岭,由于刚接触面向对象,对于其中的内容并不是特别了解,所以整体写错了。而后,重写了一遍,将每个方法的用法都搞懂了,再又重写一遍,将代码规整了,解决了问题。

    ④ 第一次作业花了3小时左右,第二次花了4小时左右,第三次花了10小时左右。

    ⑤ 编程过程的逻辑严谨性

    认识:

    关键就是不断拆分。

    比如:

    喝水 = 倒水到杯子 -> 举起杯子 ->

    倒水到杯子 = 准备水 + 准备杯子 +

    ...

    直到你的程序不可再分,或者准确的说在当前的基础框架基础上不可再分,就是你的程序了。

    教训

    在写代码之前,把自己的思路理清,写下来,再进行写代码

    2. OO设计心得

    ① 

    面向过程:面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

      优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源,比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。

      缺点:没有面向对象易维护、易复用、易扩展

    面向对象:面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

      优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护

      缺点:性能比面向过程低

    ② 在程序设计领域, SOLID(单一功能、开闭原则、里氏替换、接口隔离以及依赖反转)是由罗伯特·C·马丁在21世纪早期引入的记忆术首字母缩略字,指代了面向对象编程和面向对象设计的五个基本原则。当这些原则被一起应用时,它们使得一个程序员开发一个容易进行软件维护和扩展的系统变得更加可能。SOLID所包含的原则是通过引发编程者进行软件源代码的代码重构进行软件的代码异味清扫,从而使得软件清晰可读以及可扩展时可以应用的指南。SOLID被典型的应用在测试驱动开发上,并且是敏捷开发以及自适应软件开发的基本原则的重要组成部分。

    单一功能原则:认为对象应该仅具有一种单一功能的概念。

    开闭原则:认为软件体应该是对于扩展开放的,但是对于修改封闭的概念。

    里氏替换原则:认为“程序中的对象应该是可以在不改变程序正确性的前提下被它的子类所替换的”概念。

    接口隔离原则:认为“多个特定客户端接口要好于一个宽泛用途的接口”。

    依赖反转原则:认为一个方法应该遵从“依赖于抽象而不是一个实例”的概念

    依赖注入所以该原则的一种实现方式。

    ③ 面向对象将事物都看成对象,将具有相同特征的实物看作类。通过对类与对象的继承封装多态的实现,完成模拟现实从而决绝问题。

    3. 测试的理解与实践

    ① 再刚开始,没写测试,相当于欠下债务。在之后,程序出现bug时,需消耗大量时间和精力去debug。而如果在最开始写一个测试,可能只需要1分钟就能搞定。

    ② 先找一些常见样例,再往一些比较特殊的情况考虑,比如说范围最大最小,特殊情况等。

    4. 课程收获

    1.要把一个程序写好,不要先想这去实现最简单的功能,老是这样子去想的话,可能就会连最简单的功能都实现不了,而是应该一边写的时候一边去思考,一边去学习。

    2.在做一件比较难的事情(比如要去实现一个比较麻烦的功能的时候)最好要和别人有多一点的交流,学院里面那么多的大,脸皮厚一点去问,人家也不会不愿意教你,只要能和别人保持差不多的进度,那么别人可以写得出来我为什么会写不出来呢?

    5. 对课程的建议

    老师可以加强对学生上课积极性的培养,在将知识点的时候,可以从不同的面去切入。比如一些例子,可以考虑自己修改,而不是直接套用教程上特别古老的例子。

  • 相关阅读:
    $router和$route的区别
    提莫攻击
    paste命令
    数组中的第K个最大元素
    od命令
    被围绕的区域
    不用虚机不用Docker使用Azure应用服务部署ASP.NET Core程序
    面试官:对象可能会迟到,但它永远不会缺席
    Kubernetes 的层级命名空间介绍
    每日一道 LeetCode (21):对称二叉树
  • 原文地址:https://www.cnblogs.com/czp0116/p/12634760.html
Copyright © 2020-2023  润新知