进一步改进的 3位减法器 示例, 被减数和减数均可以为负数(并能正确显示), 最终运算结果在 -8~7 之间也能正确显示, 超出此范围的将不能正确显示:
在线可互动操作的 被减数和减数均可为负数的 3 位减法器示例
得益于之前 LED 补码解码显示模块的封装, 使得可以同时显示三个负数, 而界面也不至于过于拥挤及杂乱.
进一步改进的 3位减法器 示例, 被减数和减数均可以为负数(并能正确显示), 最终运算结果在 -8~7 之间也能正确显示, 超出此范围的将不能正确显示:
在线可互动操作的 被减数和减数均可为负数的 3 位减法器示例
得益于之前 LED 补码解码显示模块的封装, 使得可以同时显示三个负数, 而界面也不至于过于拥挤及杂乱.
一个简化的 3位减法器 示例, 通过对模块的进一步封装及抽象, 引入了 求补器, 补码LED解码器(其内部封装了求补器及多位选择器) 等模块,从而使得各种细节得以隐藏, 大为减少各种连线:
在线可互动操作的 更为简化的 3 位减法器示例
当然, 由于 circuitjs 本身的一些局限, 比如无法封装一个显示模块(如 LED 七段数码管), 无法使用总线(比如数据总线, 地址总线)等限制, 想要构建更多位的更复杂的电路还是比较麻烦的.
为文章内容增加了目录, 从 heading 标签中自动抽取.
对于一个比较长的文章来说, 有了目录导航也更加方便, 也便于用户掌握文章整体结构.
对于写作者而言, 先有一个清晰的写作大纲也有助于写出更有条理的文章.
这一点对于写代码而言也是类似的, 也是抽象原则的体现, 低层次的目录类似于函数(方法), 高层次的目录类似于类(class)乃至模块(module).
一个目录示意图:
什么是抽象及它在重复性管理中的作用
什么是抽象及它在重复性管理中的作用
Haskell 语言的设计者之一 Paul Hudak 曾说过一句略带夸张的话(overstatement):
编程中最重要的三件事是: 抽象, 抽象, 抽象.
"abstraction, abstraction, abstraction" are the three most important things in programming.
如果你去问一些资深开发者, 程序员最重要的的能力之一有哪些? 那么"抽象的能力"是绝对能排得上号的.