精华内容
下载资源
问答
  • 这一章是对面向对象的程序设计(OOP)的一个综述,其中包括对“什么是对象”之类的基本问题的回答,并讲述了接口与实现、抽象与封装、消息与函数、继承与合成以及非常重要的多形性的概念。这一章会向大家提出一些...
  • Chapter5 Information hiding

    2020-03-15 10:43:30
    基本思想是在设计模块时候,应该带有为什么这么设计的信息,这些信息应该出现在实现上,而不是在接口上。 一个模块背后的隐藏信息通常包括如何实现一些机制细节。下面是一些常见的隐藏信息: 如何在B-Tree中...

    Information hiding(and leakage)

    隐藏信息

    在设计深模块时,最重要的技术就是隐藏信息。基本思想是在设计模块的时候,应该带有为什么这么设计的信息,这些信息应该出现在实现上,而不是在接口上。
    一个模块背后的隐藏信息通常包括如何实现一些机制的细节。下面是一些常见的隐藏信息:

    1. 如何在B-Tree中存储信息,如何高效地访问
    2. 如何在一个文件中进行物理块和逻辑块的映射
    3. 如何实现TCP协议
    4. 如何在多核处理器上调度线程
    5. 如何转换json文档
      隐藏信息主要包括数据结构和算法。
      也可以包含底层信息,比如一页的大小;也可以包含一些高层的信息,比如预计大多数文件都很小
      隐藏信息在下面两个方面减少复杂性:
      1.简化了接口,比如使用B-Tree的开发者就不需要管如何使树平衡
    6. 如果信息被隐藏,在该模块的外部就不会对该信息产生依赖,所以和该信息相关的修改就不会影响到其他模块;比如需要修改TCP协议,我们只需要修改实现即可,不会对其他的模块产生影响,因为我们隐藏了信息
      当我们设计新的模块时,应该尽量地隐藏信息,从而使接口足够深

    信息泄露

    信息隐藏的反面就是信息泄露
    信息泄露的原因就是在多个模块中都涉及到了同一个设计决定,这就使这些模块之间产生了依赖,当需要修改设计决定时,我们就需要修改和该设计决定相关的全部模块。
    比如一个类用来读取指定格式的文件,另外一个类用来向指定格式的文件进行写入,如果此时文件的格式变化,那么两个类都需要重新设计。

    解决信息泄露的比较好的方法有

    • 如果受到影响的类都比较小,那么可以考虑将他们合并到同一个类中
    • 将导致影响的那部分信息抽取出来,单独创建一个类,来包含这个信息,但是这种方法只有在你能找到一个简单的接口来抽象信息的时候才有效,如果新创建的类通过接口来暴露大部分的信息,那么仍然会造成信息泄露

    时间分解

    导致信息泄露的原因中,最常见的就是时间分解。举一个例子,一个系统包括读取文件,修改文件内容,然后写入文件,如果使用时间分解,那么就会产生三个类:一个类用来读取文件,一个类用来修改文件内容,一个类用来写入文件
    这就会导致读取文件和写入文件会和文件的格式产生耦合,从而导致消息泄露。这种情况下的解决方法就是将读文件和写文件的核心机制放到一个类中,在读取和写入过程中去调用那个类。
    在设计系统的时候,应该重点关注执行每个任务需要的信息而不是这些任务执行的顺序

    例子:http服务器

    举一个例子,实现一个http服务器来接收请求和回送响应
    在这里插入图片描述
    在实现过程中,常见的错误主要有:

    • . 使用两个不同的类来接收http请求,其中一个类使用字符串来接收来自网络的连接,第二个类解析这个字符串,这就是典型的时间分解问题:首先接收,然后解析。在读取http请求的时候,如果完全不对http请求的内容进行转化,是无法接收http请求的,Content-length字段表示请求体的长度,所以在接收http请求时,我们必须知道这个http请求的内容有多长,因此必须对http的请求头进行解析。这就导致了两个类中都需要了解http请求的格式,并且解析代码会重复使用。

    解决这个问题的方法就是将读取http请求和解析http请求放在一个类中,这样做的好处有:

    • . 将http请求头格式这部分的信息隐藏在了当前类中
    • . 并且对使用人来说更加方便,只需要调用一个类的方法即可
      通过让一个类稍微变大,会提高消息隐藏的效果
      这样做的原因是:
    • 将和某种能力相关的代码都放到一个类中,这样该类就包含该种能力的所有代码
    • 和将计算步骤中的不同步骤都放到不同的方法中,将全部的计算步骤都放到一个方法中会使接口更加简单,使得接口更加深

    处理http请求的参数

    在获得解析后的http请求参数时,很多人会直接返回一个map

    public Map<String, String> getParams() {
    	return this.params;
    }
    

    首先这个接口很浅,并且暴露了内部用来存储参数的数据结构,如果改变了内部的数据结构,那么涉及到的接口都需要重新修改。另外,调用者还需要注意不能修改map中的内容,因为会改变http请求的状态
    改进方法是将数据结构部分的信息隐藏在接口中,

    public String getParameter(String name) { ... }
    public int getIntParameter(String name) { ... }
    

    隐藏底层使用到的数据结构和算法

    http响应的默认值

    http响应的http协议的版本必须和http请求协议的版本一致。
    一种常见的错误方法是在响应接口中包含http协议的版本号,由调用者来指定版本号。并且一般调用者并不知道需要指定什么版本,如果调用者指定了版本,那么就在http库和调用者之间产生了泄露。因此针对一般情况,应该使用默认值
    接口的设计应当使常见的调用情况尽量简单,一些较少情况,再由调用者来覆盖这个默认值
    在任何时候,尽管调用者没有调用,类都应该做正确的事,比如io中的BufferedInputStream,就是一个反面例子

    展开全文
  • Java的产生与流行是当今Internet发展的客观要求,Java是一门各方面性能都很好的编程语言,它的基本特点是简单、面向对象、分布式、解释的、健壮的、安全的、结构中立的、可移植的、性能很优异的、多线程的、动态的,...
  • ASP.NET网页代码模型及生命周期

    热门讨论 2009-07-28 14:22:11
    在ASP.NET中,同样具有隐藏域来保存页面的信息,作为维护页面状态一种形式,但是隐藏安全性并高,最好不要在隐藏域保存过多的信息隐藏域具有以下优点。 q 需要任何服务器资源。 q 支持广泛,任何客户端...
  • 翻译的过程中,译者感到此言虚:作者从数据库的基本概念到数据库建模,从如何运用规范化原则到如何做成实际的数据库表,从如何保护数据库完整性到如何提高数据库的性能,从数据库的安全机制到并发事务控制,从...
  • 翻译的过程中,译者感到此言虚:作者从数据库的基本概念到数据库建模,从如何运用规范化原则到如何做成实际的数据库表,从如何保护数据库完整性到如何提高数据库的性能,从数据库的安全机制到并发事务控制,从...
  • 除在保密期内保密论文和在技术保护期限内论文外,允许论文被查阅和借阅,可以公布(包括以电子信息形式刊登)论文全部内容或中、英文摘要等部分内容。论文公布(包括以电子信息形式刊登)授权东南大学研究生...
  • 超爽自学课件(java)

    2007-09-16 16:04:04
    1) 第1章:对象入门 这一章是对面向对象的程序设计(OOP)的一个综述,其中包括对“什么是对象”之类的基本问题的回答,并讲述了接口与实现、抽象与封装、消息与函数、继承与合成以及非常重要的多形性的概念。...
  • 分),而某些部分却是隐藏的(私有部分)。特殊的类方法(构造函数和析构函数)在对象创建和释放时发挥作 用。在本章中,读者将学习所有这些内容以及其他类知识,了解如何使用类来实现ADT,如堆栈。 第11章:使用类 ...
  • 分),而某些部分却是隐藏的(私有部分)。特殊的类方法(构造函数和析构函数)在对象创建和释放时发挥作 用。在本章中,读者将学习所有这些内容以及其他类知识,了解如何使用类来实现ADT,如堆栈。 第11章:使用类 ...
  • 分),而某些部分却是隐藏的(私有部分)。特殊的类方法(构造函数和析构函数)在对象创建和释放时发挥作 用。在本章中,读者将学习所有这些内容以及其他类知识,了解如何使用类来实现ADT,如堆栈。 第11章:使用类 ...
  • 分),而某些部分却是隐藏的(私有部分)。特殊的类方法(构造函数和析构函数)在对象创建和释放时发挥作 用。在本章中,读者将学习所有这些内容以及其他类知识,了解如何使用类来实现ADT,如堆栈。 第11章:使用类 ...
  • 裘宗燕教授是北京大学数学学院信息科学系,关心主要学术领域包括计算机软件理论、程序设计方法学、程序设计语言和符号计算。已出版多部著作和译著,包括《程序设计语言基础》(译著,1990),《Mathematica数学...
  • 裘宗燕教授是北京大学数学学院信息科学系,关心主要学术领域包括计算机软件理论、程序设计方法学、程序设计语言和符号计算。已出版多部著作和译著,包括《程序设计语言基础》(译著,1990),《Mathematica数学...
  • C++程序设计语言(特别版)--源代码

    热门讨论 2012-04-23 07:33:51
    裘宗燕教授是北京大学数学学院信息科学系,关心主要学术领域包括计算机软件理论、程序设计方法学、程序设计语言和符号计算。已出版多部著作和译著,包括《程序设计语言基础》(译著,1990),《Mathematica数学...
  • 本书给出了能说明每个设计思想的实现方法,讨论了包括应用层网关和管道在内各种技术,回顾了几个标准应用协议,并使用它们说明一些算法和实现技术。本书包含一些例子程序显示了每个设计实际上如何操作,大多数...
  • asp.net知识库

    2015-06-18 08:45:45
    XCodeFactory3.0完全攻略--基本思想 XCodeFactory3.0完全攻略--简单示例 XCodeFactory3.0完全攻略--IDBAccesser XCodeFactory2.0完全手册(中) XCodeFactory2.0完全手册(上) XCodeFactory3.0Beta1推出 ! ...
  • Thinking.In.Java

    2012-03-21 22:35:53
    这一章是对面向对象的程序设计(OOP)的一个综述,其中包括对“什么是对象”之类的基本问题的回答,并讲述了接口与实现、抽象与封装、消息与函数、继承与合成以及非常重要的多形性的概念。这一章会向大家提出一些...
  • 算法的基本运算和操作包括:算术运算、逻辑运算、关系运算、数据传输。 (3)算法的3种基本控制结构 算法的3种基本控制结构是:顺序结构、选择结构、循环结构。 (4)算法基本设计方法 算法基本设计方法:列举法、...
  •  本书还提供了dba完成本职工作必备的基本的uniix、sql、pl/sql和数据建模的知识,也给出了许多富有趣味性的例子,通过这些实例详细、循序渐进地说明了oracle database 11g数据库的各个概念和特性。 作译者  Sam...
  • php高级开发教程说明

    2008-11-27 11:39:22
    含了成功开发的基本知识,如果你对所讨论的题目已很熟悉,也应该花时间浏览一下, 你可能会发现新的信息—新的题观点、新的解决方法、新的答案,你对解决未来项目 的不同方面的问题了解得越多,你就能越好地抓住关键...
  • 软件工程教程

    热门讨论 2012-07-06 23:10:29
    传统手工方式对图书信息的管理已越来越能适应社会发展需要,尤其是随着计算机网络和Internet普及,运用先进的信息管理系统对信息进行科学化和网络化管理,已成为图书信息管理系统发展趋势。 系统研发...
  • 使用活动基本不受限制(只要你将它用于商业目的),而不必像使用微软产品是那样, 2需要为购满许可证付出高价还要受到系统安装数量限制。我在讲义最后面附有 GPL 非官方中文译稿。目前 Linux 中国...
  • 精通Oracle PL/SQL--详细书签版

    热门讨论 2012-08-21 13:06:28
     最近,我在一家网上书店搜索关于PL/SQL图书,结果返回38条记录,还不包括这本书。38本书!据我所知,它们中没有一本书可以作为风靡全球畅销书摆放于哈利·波特那些书旁边,那么究竟是什么鼓舞着我们这群作者...
  • 这一章是对面向对象的程序设计(OOP)的一个综述,其中包括对“什么是对象”之类的基本问题的回答,并讲述了接口与实现、抽象与封装、消息与函数、继承与合成以及非常重要的多形性的概念。这一章会向大家提出一些...
  • 第13 章集中在一般的类机制上怎样定义一个类信息隐藏的概念即把类的公有 接口同私有实现分离以及怎样定义并封装一个类的对象实例这一章还有关于类域嵌 套类类作为名字空间成员的讨论 第14 章详细讨论C++为类对象的...

空空如也

空空如也

1 2 3 4
收藏数 75
精华内容 30
关键字:

信息隐藏的基本思想不包括