软件构造Lab4+心得

软件构造Lab4心得

Lab4是要求面向正确性和健壮性编程,要求在Lab3的基础之上,增强代码的正确性和健壮性。
啥是正确性??啥是健壮性??
实话是说,没上这门课之前,其它老师也经常会提到这两个词,但是一直都认为这两个词就是一个意思,讲完课之后才开始理解这两个词实际是在从不同的角度衡量代码的质量:
正确性是代码能否针对规约的做出正确反应的度量,是在前置条件满足的情况下,代码能否满足相应的后置条件,这是代码的基本要求,没有正确性,其它性质再好也没用;而健壮性是代码能否针对规约之外的情况作出反应的度量,是代码能否具有一定的容错能力的度量,这是用户的基本需求。所以说,一个能够满足市场的软件这两个性质应该都要非常好。
怎么正确??怎么健壮??
感觉很长时间以来,自己的代码肯定是在关注正确性,但是往往是在关注算法的正确性,单纯的在考虑怎么怎么实现某个算法,但是在OOP里面,好像不仅仅关注算法,还很关注信息间的交互,关注他人对该段信息的访问。就像在计算机系统当中,谁谁谁对这个文件可写,谁谁谁对这个文件可读,OOP中对某个类也很关注,一般而言,都不太愿意通过其它的类的方法修改自己的类的信息,也就是说,自己类的信息对其他类而言我们希望是只读的,即信息封装。为什么这个会跟正确性挂钩,这个在不可变类型的危害里面可以知道。那为了减少这种情况的发生,我们会用private、final关键字,会用防御式拷贝,会返回不可变类型,这一系列的防御式方法不仅仅可以解决信息封装与隐藏的问题,还可以有助于提高程序的正确性。此外还有断言、异常等机制。同样,断言、异常处理机制也可以提高程序的健壮性。同时,还有测试。老师一般会要求我们要把所有的方法都写测试,可能是考虑到多人工作的时候方便,但是我觉得测试不是为了测试而测试,有的基本代码本省就不太会出错,像简单的get方法,这样的好像就没必要再单独去测试它了。【可能有一天写代码栽到一个这样的错上就不会这么想了】
另外,再记录一个在piazza上的问题:
为啥要自定义异常类??自定义异常类的好处??
在java 里使用异常的经验法则是:优先选择使用java自带的异常类型,且能够对所发生的异常进行准确的描述。如果程序中产生的异常比较特殊,用java的标准异常类型无法准确描述,那就需要自定义异常类型了。在代码中使用自定义类型,会让其他程序员看着所捕获的异常类的名字就能想象到发生的问题。如果用标准类型(极端情况:代码中全是Exception 类),那么其他程序员靠这个异常名完全想象不出发生了什么,只能靠运行时输出的异常消息才能作出判断。这对代码的可读性、可理解性、可维护性都很糟糕。想象一种场景,某方法抛出了一个异常,经过n次的传递,到了一个距离该方法非常远的客户端程序那里才被捕获,这时候客户端程序员发现捕获了一个很通用的Exception类型,他的体验会非常糟糕。所以,在使用异常的时候还应该特别注意异常的命名,以方便获取信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DeepLab V3是一个语义分割网络,它基于DeepLab V2,并通过添加一个简单有效的Decoder来细化分割结果,尤其是沿着目标对象边界的分割结果。此外,它还采用了空间金字塔池模块或编解码结构二合一的方式进行实现。 DeepLab V3的网络结构图可以参考。 目前,DeepLab V3 Plus使用Pascal VOC 2012、SBD和Cityscapes数据集进行训练。在安装方面,可以参考相关文档进行安装。 在DeepLab V3中,每个3x3的深度卷积后都跟着Batch Normalization(BN)和ReLU激活函数。此外,它还使用了ASPP(Atrous Spatial Pyramid Pooling)模块。 总结来说,DeepLab V3是一种用于语义分割的网络,通过细化分割结果和采用特定模块来提高分割质量。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [deeplab-v3+原理详解](https://blog.csdn.net/weixin_55073640/article/details/123081742)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [pytorch-deeplab-xception:PyTorch中的DeepLab v3 +模型。 支持不同的骨干网](https://download.csdn.net/download/weixin_42097668/18550251)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值