知识大全 分析用Javadoc形式集成文档的利与弊

Posted

篇首语:知识是种子,而好奇则是知识的萌芽。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 分析用Javadoc形式集成文档的利与弊相关的知识,希望对你有一定的参考价值。

分析用Javadoc形式集成文档的利与弊  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  Java语言按照Javadoc注释约定采用了一种集成的方法来进行API文档编制 Javadoc工具可以帮助生成好的API文档 然而大多数Java API文档却很糟糕 因为它是源代码的一部分 所以 API 的文档编制职责最终还是落到了工程师身上 在本文中 Brian 对 Java 文档编制实践的当前状态进行了严厉的批评 同时提供了一些关于如何编写更有用的 Javadoc 的准则   对于大多数 Java 类库来说 Javadoc 是唯一的文档 而且 除了商业软件组件之外 许多 Java 类不会用到 Javadoc 虽然 Javadoc 作为 API 参考工具很出色 但对于了解类库是如何组织的和应该如何使用它来说 它却是一种十分差劲的方法 并且即便用了 Javadoc 它通常只包含有关方法完成了什么的最基本信息 而忽略了诸如错误处理 参数及返回值的作用域和范围 线程安全 锁定行为 前置条件 后置条件 不变条件或副作用之类的重要特性   向 Javadoc 学习  对于包括大多数开放源码包和大多数内部开发的组件在内的许多Java工具而言 实际情况是 包括Javadoc在内 几乎所有类库或组件都不具有有效的文档 这就意味着开发人员要从Javadoc学习使用工具 而且我们应该考虑根据这一现实组织我们的Javadoc 我经常开玩笑说 现在 Java程序员需要具备的最重要的技能之一是熟练地使用Google和Javadoc来对那些文档编制得十分糟糕的 API 进行 逆向工程 这可能是真的 但却并不十分好笑   大多数 Java 包都有某种 根 对象 它是在得到该工具内的任何其它对象之前 必须创建的第一个对象 在 JNDI中 该根对象是Context 而在JMS和JDBC中 它是Connection 如果有人告诉您JDBC中的基础对象是 Connection 以及如何获得这一对象 那么接着您很可能会从 Javadoc 中通过仔细察看 Javadoc 中可用的方法列表找到如何创建并执行 Statement 以及如何迭代生成的 ResultSet 但您如何知道获得 Connection 是您的第一步呢?Javadoc 在包内按照字母顺序组织类 在类中按照字母顺序组织方法 遗憾的是 Javadoc 中没有神奇的 从这里开始(Start Here) 记号把读者带到浏览 API 的逻辑开始位置   包描述   最接近 从这里开始 记号的是包描述 但它却很少得到有效的使用 如果将文件 l 与源代码一起放在一个包中 那么标准的 doclet 会将已生成的 l 文件中的内容连同类列表一起放在该包内 遗憾的是 生成我们都很熟悉的 HTML 文档的标准 doclet 却无法使包描述易于找到 如果您单击左上窗格中的某个包 那么这会在左下窗格中产生方法列表 但并不会在主窗格中产生包的摘要 — 必须单击左下窗格中的包名称来查看摘要 但不要紧 毕竟大多数包并没有包描述   包文档是一个放置 从这里开始 文档的极好的地方 这一文档用来概述包做什么 主要摘要是什么以及从何处开始浏览包的 Javadoc   类文档   除包文档之外 特定于类的文档对于帮助用户彻底了解新工具也能起到重要的作用 类文档当然应该包括此特定类做什么的描述 但还应该描述该类与包中的其它类如何关联 特别是要标识任何与该类相关的工厂类 例如 JDBC 中的 Statement 类文档应该说明 Statement 是通过 Connection 类的 createStatement() 方法获得的 这样 如果一个新用户偶然进入 Statement 页面 那么他会发现首先他需要获得 Connection 对每个类都应用这一约定的包会迅速为用户指出根对象 用户因而能够得心应手   因为 Javadoc 是围绕对特定类进行文档编制而设计的 因此在 Javadoc 中通常没有明显的位置来放置演示几个相关类一起使用的示例代码 但由于一味地侧重于特定类或方法的文档编制 我们失去了讨论如何组合包中内容的机会 如果对于根对象 在包文档或类文档中有一个演示一些基本用法的简单代码示例 则对于许多用户来说 将是非常有用的 例如 Connection 类文档可以有一个简单示例 该示例获取连接 创建预编译语句 执行该语句并迭代结果集 从技术上说 这可能不属于 Connection 页面 因为它还描述了包中的其它类 然而 尤其是当结合了上面那种引用当前类所依赖的类的技术时 用户才能非常迅速地找到获取简单的实用示例的途径 不管类的组织方式如何   糟糕的文档=糟糕的代码  对于大多数 Java 类库来说 除了那些作为打包组件出售的商业产品之外 要么没有 Javadoc 要么非常糟糕 由于存在的事实是对于大多数包来说 Javadoc 是我们拥有的唯一文档 这基本上意味着使我们自己陷入了这样的困境 除了作者之外 其他人没法使用我们的大部分代码——如果不付出重大的 考古 一样的努力 至少会这样   由于文档现在是代码的一部分 因此我认为是软件工程社区形成一个共识的时候了 这就是 即使代码很出色 如果文档很糟糕 也应该被认为是差劲的代码 因为不能有效地重用 单元测试不久前还声誉不佳 只是到了最近它才受到了许多工程师的青睐 就和它一样 为了改善我们生产的软件的可靠性和可重用性 API 文档也必须成为开发过程的一个集成部分   编写Javadoc就是某种形式的代码检查  编写合理的Javadoc也会产生副作用 它迫使我们进行某种形式的代码检查 来研究类的体系结构和它们之间的关系 如果单个包 类或方法很难编制文档 那么或许可以尝试同时对多个包 类或方法进行文档编制 这应该是个提示 即可能它需要重新设计   文档的自我检查方面使得某些方面更加重要 即在开发过程中尽早编写Javadoc 然后随着代码的不断开发 定期对其进行检查 而不是仅仅等待代码完成再编写文档(如果有剩余时间的话) 后一种策略十分常见 它将编写文档拖到项目最后 而那时时间安排十分紧张 开发人员的压力也很大 结果再常见不过了 就是那种一文不值的文档 它只提供了 文档假象 用户真正需要的是了解该类的工作原理 而该文档却没有提供任何这样的信息   清单 典型的一文不值的 Javadoc     /**   * Represents a mand history   */   public class CommandHistory    /**   * Get the mand history for a given user   */   public static CommandHistory getCommandHistory(String user)            什么是好的文档      那么好的文档包括哪些内容呢?     上面描述的组织技术(在类描述中引用相关类或工厂类 也包括了包概述和代码样本)是形成优秀文档的好开端 它有助于新用户使用 Javadoc 了解新工具     但体系结构的概述只完成了任务的一半 另一半则是详细地解释方法做什么和不做什么 在什么条件下运行以及它们如何处理错误条件 大多数 Javadoc 都没有完全提供所需的信息 即便是那些充分描述了方法在期望情况下的行为的 Javadoc 也是如此 这些缺少的信息包括     · 方法如何处理错误条件或不合要求的输入     · 如何将错误条件传回给调用者     · 可能会抛出哪个特定异常的子类     · 哪些值对于输入是有效的     · 类不变条件 方法前置条件或方法后置条件     · 副作用     · 在方法之间是否有重要联接     · 类如何处理多个线程同时访问一个实例的情况     Javadoc 约定提供了 @param 标记 它让我们除了能够对参数的名称和类型编制文档之外 还可以对其意义编制文档 然而 并不是所有的方法都能很好地接受参数的任何值 例如 虽然可以合法地向任何获取对象参数的方法传递空值(null)而不违反类型检查规则 但并不是所有的方法都能在传入空值时正常工作 Javadoc 应该显式地描述有效的参数范围 如果它希望某个参数非 null 那么它应该这样描述 而如果它期望参数值在某个范围内 例如某种长度的字符串或大于 的整数 那么它也应该那样描述 并非所有方法都仔细检查其参数的有效性 不进行有效性检查也没有编制关于可接受的输入范围的文档 这二者的结合为灾难埋下了隐患     返回代码     Javadoc 使得描述返回值的意义变得很容易 但正如方法参数一样 @return 标记应该包括对可能返回的值范围的详细描述 对于对象取值的返回类型而言 它会返回空值吗?对于整数取值的返回类型而言 结果会限制在一个已知值或非负值的集合上吗?任何返回代码都有特殊意义吗 例如从 java io InputStream read() 返回 表示文件结束符?返回代码会被用来表示例如如果无法找到表项则返回空值那样的错误条件吗?     异常     标准 doclet 复制方法的 throws 子句 但 Javadoc @throws 标记应该更为具体 例如 NoSuchFileException 是 IOException 的子类 但 java io 中的大多数方法却只被声明为抛出 IOException 然而 方法可能独立于其它 IOException 而抛出 NoSuchFileException 这是调用者要了解的很有用的事实 — 它应该被包括在 Javadoc 中 还应该指出抛出各种异常类的实际错误条件 以便调用者知道在给定异常被抛出时该采取什么纠正措施 应该用 @throws 标记对方法可能抛出的每个经检查的或未经检查的异常编制文档 并对引发抛出异常的条件编制文档     前置条件 后置条件和不变条件     当然 您应该对方法对对象状态的影响编制文档 但您可能需要编制得更详细一些 描述方法的前置条件 后置条件和类不变条件 前置条件是在调用方法前对对象状态的约束 例如 调用 Iterator next() 的前置条件是 hasMore() 为真 后置条件是方法调用完成后对对象状态的约束 例如在调用 add() 之后 List 不能为空 不变条件是对对象状态的一种约束 它保证该状态始终 cha138/Article/program/Java/JSP/201311/19207

相关参考

知识大全 学生玩电脑的利与弊

学生玩电脑的利与弊我自我认为学生玩电脑不一定是坏的.1.如果是用来查资料那是对学习有好处的.2.根据老子的观点,事物总有对立面,好坏不可随意下定论,因为他们可以互相转化.3.用来玩游戏的话时间要掌握的

吃火锅的利与弊

在冬天,火锅是颇受欢迎的烹食方式。好处有:(1)营养损失少,入锅食物的营养素几乎可以完全吃进去。(2)调味品可自行控制。(3)能始终保持菜肴的温度。(4)食物的新鲜程度和卫生情况看得见,吃起来放心。 

万能保险的利与弊

万能保险的保障额度和投资额度的设置主动权在投保人手中,投保人可根据不同时期的需求进行调节;投资账户的资金由保险公司代为投资,投资利益上不封顶,下设最低保障利率。万能保险之利1.缴费灵活投保人可以任意选

咖啡对健康的利与弊

咖啡是一种洋饮料,在世界三大饮料排名榜上雄居第一。它先是风靡欧美,近年来又席卷亚洲,几乎征服了世界。国人对这种洋饮料的兴趣日浓,城市中咖啡厅不断增多,咖啡族的队伍不断扩大。可你是否知道,对于这“味道好

浅析农业机械深耕的利与弊

深耕的优点:深耕可打破犁底层,扩大了根系吸收养分的范围,提高土壤保水保肥能力,扩大小麦抗旱防涝能力,掩埋有机肥料、粉碎的作物秸秆、杂草和病虫害。深耕的缺点:一是小麦当年不易增产或减产,二是每年深耕,耗

浅析农业机械深耕的利与弊

深耕的优点:深耕可打破犁底层,扩大了根系吸收养分的范围,提高土壤保水保肥能力,扩大小麦抗旱防涝能力,掩埋有机肥料、粉碎的作物秸秆、杂草和病虫害。深耕的缺点:一是小麦当年不易增产或减产,二是每年深耕,耗

海鲜对牛皮癣患者的利与弊

在生活中大家基本上都知道患有皮肤病的患者是不能食用海鲜的,那么经过医学专家的研究推翻了这种说法。其中鱼油就是对牛皮癣患者有帮助的食物,那么还有些海鲜也是,我们仔细的了解一下。“鱼油”听起来好油腻,让人

豆浆给白癜风患者带来的利与弊

豆浆一直是中国人们的最爱,尤其是上班族,早上喝一杯豆浆,更是保障一天工作顺顺利利的前提,专家说,豆浆也能够帮助白癜风患者有效的缓解他们的病情,但是并不是所以的人都适合饮用豆浆的,接下来我们详细的了解下

2型糖尿病患者使用胰岛素的利与弊有哪些?

利主要包括有效降低空腹及餐后血糖、减少肝糖输出、改善外周组织的胰岛素敏感性、改善葡萄糖的氧化及贮存、改善脂质代谢异常、减轻蛋白质及脂蛋白的非酶糖基化。弊端主要指会导致低血糖和使体重增加。

2型糖尿病患者使用胰岛素的利与弊有哪些?

利主要包括有效降低空腹及餐后血糖、减少肝糖输出、改善外周组织的胰岛素敏感性、改善葡萄糖的氧化及贮存、改善脂质代谢异常、减轻蛋白质及脂蛋白的非酶糖基化。弊端主要指会导致低血糖和使体重增加。