热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

软件构造_软件构造知识复习可理解性编程

作为萌新,由于最开始是忽视了一些要求,导致现在带着复习来总结学习过的知识,如下便是关于可理解性编程的一些总结,主要是要从3个不同的方面进行剖析以及解释。

  作为萌新,由于最开始是忽视了一些要求,导致现在带着复习来总结学习过的知识,如下便是关于可理解性编程的一些总结,主要是要从3个不同的方面进行剖析以及解释。

可理解性的基本规范

  无论是做什么,都需要有一定的规范作为指导,因此首先针对基础概念进行讨论。

  1.首先就是我们老生常谈的命名,我们在代码中离不开命名。然而,在编程的过程之中,我们很有可能忽视命名的重要性,因为我们很多时候认为算法,结构才是我们关注的重点。但是。。。。你经历过看不懂自己代码的恐惧吗(尤其是对于初学者),不规范的javadoc以及不明所以的变量命名都会让人头大,因此下面会针对这一个方面给出一点建议。

  (1).trade-off是必须的。

  因为虽然命名时名字越长,给出的信息越充足,然而名字长也会使得原本简单的程序看上去冗长,这同时也直接会导致程序低效。(害怕.jpg)

  (2).尽量避免同名变量的使用,虽然很方便。

  针对这点,我深有体会,虽然a,b,c这种变量真的很方便,但是当你的代码体量很大时,你就很难通过自己的变量明白该名称的意义,特别是针对不同的逻辑的变量使用相同的变量名时,更是会使得程序员自己在检查以及debug时碰到很大的问题。

  2.其次便是文档以及文件夹的组织问题,如果将自己创建的类随意地进行防治,A包中放置原本属于B包中的内容,B包中放置原本属于C包中的内容,这就会直接导自己在看文件结构时一脸懵逼,特别是当报错时,e.printstackTrace重重叠叠的跳转,会让人真的爆炸,因此,下面给出一点建议。

  (1).注意构思规划

  对号入座,每一个java的类,每一个包都应该负责一个特定的功能模块,只有把每一个类的功能想好,才能保证在创建类的时候能够较好地保证层次以及逻辑清晰

  (2).注意包名以及类名

  这又是涉及到命名了,如果较好地完成了命名,那么看层次时就会有一目了然的快感,无论是进行测试还是代码走查,都会很轻松地完成。

  伪代码

  伪代码作为表示代码思路的一个利器,当然也是需要一些规范的,否则就乱成一锅粥了。

  1.首先是基本的原则:  

    (1)每一个指令都是单独一行的
    (2)缩进以及关键字词都是用来强调和区分控制结构的
    (3)指令集合都只有一个入口以及一个出口
    (4)一堆的声明或者赋值被装到一个模块当中

 

  2.其次便是针对一些操作的表示,如果是随意选择表示意思的代词那么在进行交流的时候就会十分困难,因此这里给出了6条基本标准。

技术分享图片

  3.最后就是对上述的表达进行的一些描述以及解释:

    (1)Read 从文件中的记录读取数据作为输入
    (2)Get 从键盘获得输入
    (3)Print 输出到打印机中
    (4)Write 输出到文件中
    (5)Put,Output,Display均意指输出到屏幕上
    (6)Prompt需要有一个键盘输入,应为它是需要用户响应的
    (7)Compute,Calculate也就是简单的计算啦
    (8)Set 赋初值,<-以及=是后继赋值,store是将值进行保存
    (9)If-then-else,这是选择语句
    (10)最后就是类似于编程语言中的循环语句

Grasp和Solid

    提到代码的可理解性就不得不提到solid和grasp,上课的时候听得一脸懵,那么如今思考之后,发现了一些有意思的新东西。

  首先就是Solid:

  SOLID的解释为:1.Single responsibility principle,2.Open/closed principle,3.Liskov substitution principle,4.Interface segregation principle,5.Dependency inversion principle

  其实我认为针对这上面的任意一条都可以大书特书,但是我想要谈论的主要是DIP,DIP是SAP以及SDP共同组成的。SAP(The Stable Dependencies Principle)即稳定抽象原则,即如果一个类是稳定的,比如说我们的基类,就应该构造成抽象类,抽象类是最稳定的,而具体类的稳定性则是比抽象类差的。SAP(The Stable Abstraction Principle)则是被依赖的类需要比依赖其的类更加稳定。如此,两者共同组成了DIP(依赖倒置原则),如下图所示,我们应该避免圈的产生,从而使得结构更加明晰,更加好就行维护。

  技术分享图片

 

  接下来便是Grasp,关于grasp的解释为Information Expert,Creator,Controller,Low Coupling,High Cohesion,Polymorphism,Pure Fabrication,Indirection,Protected Variations。

  个人感觉grasp不如solid具体,更多的是设计的思想而不是规范。当然,其中最经典的莫不是高聚合,低耦合两兄弟了。高聚合,让程序的指向性更加明确,即为一个共同的目标而编写,而低耦合则是避免程序之间的互相调用,从而使得结构难以解析,到时debug困难!

 

 

   上面就是我的一些总结当然,我们在学习的时候应该努力践行上面的相关理论。希望所有的人代码不出错!

 

 

  

  

  

 

  














推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • 本文详细介绍了在Linux虚拟化部署中进行VLAN配置的方法。首先要确认Linux系统内核是否已经支持VLAN功能,然后配置物理网卡、子网卡和虚拟VLAN网卡的关系。接着介绍了在Linux配置VLAN Trunk的步骤,包括将物理网卡添加到VLAN、检查添加的VLAN虚拟网卡信息以及重启网络服务等。最后,通过验证连通性来确认配置是否成功。 ... [详细]
  • uboot与linux驱动1.uboot本身是裸机程序(1)在裸机中本来是没有驱动概念的(狭义的驱动概念是指在操作系统中用来具体操控硬 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • SpringBoot简单日志配置
     在生产环境中,只打印error级别的错误,在测试环境中,可以调成debugapplication.properties文件##默认使用logbacklogging.level.r ... [详细]
  • 使用这个技巧要达到的目标:一般来说,模型和控制器你都不会有相同的类名字。让我先创建一个取名为post的model。classPostextendsModel{}现在 ... [详细]
  • [转载]从零开始学习OpenGL ES之四 – 光效
    继续我们的iPhoneOpenGLES之旅,我们将讨论光效。目前,我们没有加入任何光效。幸运的是,OpenGL在没有设置光效的情况下仍然可 ... [详细]
  • Yii framwork 应用小窍门
    Yiiframework应用小窍门1.YiiFramework]如何获取当前controller的名称?下面语句就可以获取当前控制器的名称了!Php代码 ... [详细]
  • 一、Struts2是一个基于MVC设计模式的Web应用框架在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts2优点1、实现 ... [详细]
author-avatar
傻瓜等傻子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有