zoukankan      html  css  js  c++  java
  • 【现代程序设计】加分作业2-《代码大全》第18章表驱动法阅读报告

    摘要:笔者对《代码大全》第18章 表驱动法进行了仔细地学习和理解,并将阅读报告记录在此文中。第18章 表驱动法:将复杂的逻辑判断转换为查表,从而简化代码的编写与维护。另外,本章中的一个示例说明了,面向对象设计并不只要因为它是“面向对象”,就一定会好于其他的设计。

    引言

    表驱动法是一种编程模式——从表里面查找信息而不使用逻辑语句(if和case)。凡是能通过逻辑语句来选择的事物,都可以通过查表来选择的事物,都可以通过查表来选择。对简单情况而言,使用逻辑语句来选择的事物更加容易和直白。但是随着逻辑链越来越复杂,查表法就愈发显得更具吸引力。

    表驱动法使用总则

    适当环境下,采用表驱动法,生成的代码会比复杂逻辑代码更简单和更容易修改,同时效率更高。对字符进行分类的操作,如果使用逻辑,代码将会显得多而复杂,而使用刚查询表,只需从建好的表中查询就可得到。

    在使用表驱动法之前,要解决两个问题。

    一是怎样从表中查询,或者说如何访问。这里可采用如下几种方法:

    1、直接访问

    2、索引访问

    3、阶梯访问

    以上这三种方法将在下面展开讨论。

    第二个问题是在表里应该存储什么。保存数据还是动作代码,或者引用。

    直接访问表

    意即无需绕过复杂的圈子就能在表里找到自己想要的信息。

    示例 确定每个月的天数

    假设要计算每个月的天数(你考虑闰年),比较笨的方法是写一个if语句。另一种更简单更容易的方法就是把这些数据存到表里,int Month[12]={31,28,31,30,31,30,31,31,30,31,30,31}。于是直接用下标访问即得所要数据。

    示例 保险费率

    根据不同年龄,性别,婚姻状况等情况计算保险费率,若采用逻辑控制结构,代码将冗长而不清晰。而实质上更好的做法是把这些情况都放进各自的一个表里,通过查询的方式计算出来。

    以上几个例子,包括类似与以上例子的应用场景,如果采用逻辑控制的方法,可以想象,这将写出十分难看、不清晰、冗长的代码,即使是面向对象的方法,逻辑被封装在结构中,但是实际上的代码还是那样复杂。而表驱动法得显得清晰直观,又易于编写与修改。

    构造查询键值

    以上示例,可以将数据作为键值直接访问表。当然你也总是希望能直接得到访问表的键值,但是有时候这样做并不成功。例如每个年龄段有一种费率,便不能直接用年龄作为表的键值。因为这些表只为一些年龄保存了费率。有几种方法可以构造键值:

    1、复制信息从而能够直接使用键值。为每个年龄复制一份费率。这种方式结构简单,操作简单。但是信息冗余,浪费空间,且表中错误可能性增加。

    2、转换键值以使其能够直接使用。

    3、把键值转换提取成独立的子程序。避免不同位置执行了不同转换,也是操作修改起来更容易。

    索引访问表

    有时候只用一个简答的数学运算还不能把数据转换为表键值,那也许可以采用索引访问的方法解决。使用索引时,先用一个基本类型的数据从一张索引表中查出一个键值,然后再用这个键值查出主数据。

    优点在于:空间小,操作更方便和廉价,可维护性高。

    阶梯访问表

    不像访问索引结构那样直接,但比索引方法节省空间。实质上就是给数据划分区间,在区间内做索引。灵活而容易修改。但是需要注意一些细节:

    1、留心端点。确认考虑到每个阶梯区间的上界。

    2、考虑用二分查找取代顺序查找

    3、考虑用索引访问取代阶梯技术。阶梯操作可能比较耗时

    4、把阶梯表查询操作提取成单独的子程序

    阅读感想和总结

    在仔细地看了第18章之后,我发现这个“表驱动法”,听起来高端,但实质上我们平时最可能用上的就有直接访问表。当然只是一个初级的应用,但是确实感觉到书里所说的表驱动法的优势和吸引力。看完这章,在学到书面上的知识之外,我还深深感觉到:代码是一门艺术。每个细节都可以做得更好!事实上,当我第一次看到书前面部分对整本书的介绍时,我感到这本书不愧是经典。如果真的学完了,那代码的编写水平定当上一个台阶,甚至一个境界。这本书值得看,我也应该抽出时间好好学习它。

  • 相关阅读:
    小白成长建议(7)-蛛丝马迹-云层
    小白成长建议(5) 缺陷与管理-云层
    小白成长建议(6)-测试的灵魂-云层
    小白成长建议(4) -从头开始-云层
    小白成长建议 (3)-看书和选书-云层
    小白成长建议(2)-扎实基础-云层
    创业神人&当时钢铁侠:Elon Musk
    Oracle数据库学习笔记5
    Oracle数据库学习笔记4
    Oracle数据库学习笔记3
  • 原文地址:https://www.cnblogs.com/Lmeng/p/3479118.html
Copyright © 2011-2022 走看看