本节书摘来华章计算机《数据结构与抽象:Java语言描述(原书第4版)》一书中的第2章 ,第2.1节,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. Henry) 著 罗得岛大学  新英格兰理工学院 辛运帏 饶一梅 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.1.4 让实现安全

鉴于当今黑客及对重要软件系统未经授权入侵的现实情况,程序员必须在代码中添加安全措施,以使程序对使用者是安全的。虽然Java为你管理内存,检查数组下标的合法性,且是类型安全的,但一个错误会使你的代码易受攻击。实现ADT时应该时刻铭记安全性,尽管在已有的代码中增加安全机制可能是困难的。

注:你可以在程序中检查可能出现的错误来练习有安全机制的程序设计(fail-safe programming)。安全可靠程序设计(safe and secure programming)通过验证输入给方法的数据和参数的合法性,消除方法的副作用,对客户和使用者的行为不做任何假设,来扩展有安全机制的程序设计的概念。
安全说明:保护ADT实现的完整性
当实现一个ADT时,必须问自己的两个问题是

  • 如果构造方法没有完全执行,那么可能会发生什么?例如,构造方法可能在完成初始化之前就抛出一个异常或错误。但是入侵者可能捕获异常或错误,并试图使用部分初始化的对象。
  • 如果客户试图创建一个其容量超出给定范围的包,那么可能会发生什么?
    如果这两个动作可能导致问题,则我们必须阻止它们。

对于类ArrayBag,我们想防范前面安全说明中所描述的两种情形。现在开始细化ArrayBag的不完整的实现,在类中增加下列两个数据域,以使代码更安全:

这两个修改都涉及构造方法。因为默认的构造方法调用带参数的构造方法,所以仅修改后者就足够了。为确保客户不能创建太大的包,构造方法应该检查客户所需包的容量与MAX_CAPACITY值。如果需要的容量太大,则构造方法可以抛出一个异常。
如果所需的容量处在允许范围内,则ArrayBag的构造方法为什么还不能正确完成呢?因为内存不足可能导致分配数组失败。这样一个事件会导致错误OutOfMemoryError。一般地,客户将这个错误看作致命事件。黑客可能捕获这个错误(就像你捕获异常一样),并试图使用部分初始化的对象。为防止这种情况,类的每个重要方法在执行其操作之前都可以检查域initialized的状态。这样,畸形对象就不会再有动作。对于正确初始化的对象,构造方法将把域initialized置为真。
下面是修改后的构造方法。

注意,构造方法在成功完成其他任务后,最后一个动作是将initialized赋值为真。还应注意,IllegalStateException是标准运行时异常。
下面来看看如何使用initialized。
在数组bag已成功分配的基础上,ArrayBag中的任何公有方法在继续执行之前都应该确保数据域initialized的值为真。如果initialized为假,这样的方法可以抛出一个异常。例如,可以如下所示修改方法add。

注:异常SecurityException和IllegalStateException都是包java.lang中的标准运行时异常。因此,不需要import语句。

因为我们将在多个方法中检查initialized,所以为避免代码重复定义下列私有方法。

方法add可以修改为:

应该以相同的方式修改核心方法toArray,因为它用到了ArrayBag的数据域bag。

安全说明:你所熟知的编写Java代码的某些常见准则,实际上增加了代码的安全性。这些准则是:

  • 将类的大多数数据域声明为私有的,如果不是全部。任何公有数据域都应该是静态和终态的,且有常量值。
  • 避免那些掩盖代码安全性的所谓聪明的逻辑。
  • 避免重复代码。相反,将这样的代码封装为一个可供其他方法调用的私有方法。
  • 当构造方法调用一个方法时,确保这个方法不能被重写。

安全说明:终态类。注意,我们将ArrayBag声明为一个终态类。因此,不会有从ArrayBag派生的其他类,即ArrayBag不能是另一个类的父类或基类。终态类比非终态类更安全,因为程序员不能使用继承来改变它的行为。稍后我们将细化这个方法,定义终态方法而不是整个类。

《数据结构与抽象:Java语言描述(原书第4版)》一2.1.4 让实现安全相关推荐

  1. 数据结构(c语言版) 计算机科学丛书,数据结构与算法分析--C语言描述(原书第2版)(计算机科学丛书)...

    摘要: 本书讨论数据结构和算法分析.数据结构主要研究组织大量数据的方法,而算法分析则是对算法运行时间的评估.随着计算机的速度越来越快,对于能够处理大量输入数据的程序的需求变得日益急切.可是,由于在输入 ...

  2. 数据结构与算法分析Java语言描述 原书超清第3版 下载

    链接: https://pan.baidu.com/s/135hWyCK3SssLwMmeHn4PCg    提取码: 9kk7

  3. s数据结构替换子表java版_数据结构与算法分析Java语言描述(第3版) PDF和源码免费 下载...

    <数据结构与算法分析Java语言描述(第3版)>PDF和源码免费 下载 免积分下载 用户下载说明: 图书简介: 数据结构:Java语言描述(原书第3版)是国外数据结构与算法分析方面的经典教 ...

  4. 《机器学习与R语言(原书第2版)》一2.3 探索和理解数据

    本节书摘来自华章出版社<机器学习与R语言(原书第2版)>一书中的第2章,第2.3节,美] 布雷特·兰茨(Brett Lantz) 著,李洪成 许金炜 李舰 译更多章节内容可以访问云栖社区& ...

  5. 机器学习与R语言(原书第2版)》一1.4 实践中的机器学习

    本节书摘来自华章出版社<机器学习与R语言(原书第2版)>一书中的第1章,第1.4节,美] 布雷特·兰茨(Brett Lantz) 著,李洪成 许金炜 李舰 译更多章节内容可以访问云栖社区& ...

  6. python数据科学导论_数据科学导论:Python语言(原书第3版)

    数据科学导论:Python语言(原书第3版) 作者:(意)阿尔贝托·博斯凯蒂;(意)卢卡·马萨罗 著 出版日期:2020年02月 文件大小:48.52M 支持设备: ¥50.00 适用客户端: 言商书 ...

  7. 【第5期】终于等到你!《Effective Java 中文版》原书第3版!

    "我很希望我10年前就能拥有这本书.有人可能认为我不需要任何Java方面的书籍,但是我需要这本书."  --Java之父James Gosling 这段话出自Java之父James ...

  8. 《数据结构与算法分析—Java语言描述》pdf

    下载地址:网盘下载 内容简介 编辑 "数据结构"是计算机专业的基础与核心课程之一,Java是现今一种热门的语言.本书在编写过程中特别考虑到了面向对象程序设计(OOP)的思想与Jav ...

  9. 数据结构教程(Java语言描述)前两章总结

    一.关于数据结构方面 数据结构是计算机存储,组织数据的方式.数据结构是指相互之间存在一种或多种特定关系的数据元素的集合.通常情况下,精心选择的数据结构可以带来更高的运行或存储效率.数据结构往往同高效的 ...

  10. 数据结构与算法JAVA语言描述第六章部分课后习题参考答案

    6.2: (a): (b): 6.3: (a): (b): 6.19: 6.26: 6.32:

最新文章

  1. 《算法技术手册》一2.4.6 二次方的算法性能
  2. Java:继承之super关键字,继承之私有权限,继承之方法重写,继承之object类,继承之简单工厂模式
  3. Linux下Bluez的编程实现
  4. CreateRemoteThread函数
  5. .net框架读书笔记---CLR内存管理\垃圾收集(二)
  6. python安装及配置
  7. Xstream 学习地址
  8. 2021深育杯-网络安全大赛专业竞赛部分wp
  9. redis中数据类型的使用,并发问题,list重复插入问题,redis使用实例-简单消息队列和排名统计
  10. PyTorch使用LMDB数据库加速文件读取
  11. 清华长庚医院通过医视云平台举办首次肝胆外科肿瘤远程多学科会诊
  12. 差分管电路图_差分放大器的非线性应用
  13. php ecshop二次开发,ecshop二次开发对ecshop系统框架分析
  14. 经典成功创业-36法则
  15. 任务服务器未响应,win10任务管理器没有响应的解决方法
  16. 2022年计算机二级考试WPS Office高级应用与设计考前冲刺题及答案
  17. 服务器提取用户信息,获取客户端和服务器信息
  18. 华为小艺输入法测试版 1.0.19.103 发布
  19. 一对一直播源码,实现一个简单的登录界面
  20. stm32开发之使用Keil MDK以及标准外设库创建STM32工程

热门文章

  1. 怎么取html网页中的样式,从建站到拿站 -- HTML和CSS基础
  2. js对象与字符串相互转换
  3. 交换与路由技术课程期末上机测试题目二
  4. forward和redirect有什么区别?
  5. 软件测试 图覆盖,软件测试(四)——图覆盖
  6. 在linux下实现拓扑排序,数据结构——有向图(拓扑排序算法)
  7. 兰州计算机速成班都学什么,兰州当众讲话速成班
  8. 『ES6』ES6 - 学习笔记
  9. oss可用性_对象存储OSS详解
  10. oracle schema_Oracle数据库坏块检查与修复