`
luckybat
  • 浏览: 32692 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论
阅读更多

(2005~2006年)

  1. 结构化程序设计是过程式程序设计的一个子集,它对写入的程序使用逻辑结构,使得理解和修改更有效更容易。AdaPascal以及dBase等语言鼓励和实行逻辑程序结构。结构化程序设计通常使用自上往下的设计模型,开发员将整个程序结构映射到单个小部分。已定义的函数或相似函数的集合在单个模块或字模块中编码,这意味着,代码能够更有效的载入存储器,模块能在其它程序中再利用。模块单独测试之后,与其它模块整合起来形成整个程序组织。程序流程遵循简单的层次化模型,采用“for”“ repeat ”“while”等循环结构,不鼓励使用“Go To”语句。几乎任何语言都能使用结构化程序设计技术,大多数现代过程式语言都支持结构化程序设计。
  2. 派生是强关联!最直接的表现是:你无法使用向前引用使派生单元与引用单元解耦,大量使用派生会使软件的耦合度难以忍受。

  3. 包与架构都是演化而来的,一开始就从包与架构的设计入手,其实质就是结构化的自顶向下功能分解,实践证明是错误的。初始的时候,应专注于领域模型中小范围类的设计,随着类体系的增长、演化,设计也逐步明朗化,在恰当的时候才做出包与架构相关的重大决策(即所谓的推迟决策)。

  4. 重用LibDll都是相当笨重、不灵活的,不如直接重用源代码单元(.h/cpp)。在同名文件拷贝的情况下,追踪比较容易。

  5. 测试优先的好处
    1.轻松省力: 测试一旦通过,工作随之结束,不需要再仔细地、殚精竭虑地检查、核对代码;
    2.精简需求: 测试代表最小功能需求,不多不少,防止过度设计和冗余代码;
    3.自由重构: 重构是一项极耗精力的工作,有了测试的支持,重构可以随时随地地自由进行,不用担心引入Bug;
    4.影响设计: 测试迫使我们从程序调用者的角度去观察问题,在关注程序功能的同时,直接关注它的接口;
    5.改善结构: 可测试性迫使我们解除程序和它的周边环境的耦合,以求快速构造测试并通过;
    6.活的文档: 测试是文档,是范例,它可编译,可运行,永远最新,永无歧义;
    7.体现意图: 只有按照测试所暗示的结构去编程,才能通过测试,这称为意图导向的编程,它使程序简单、清晰、易读;
    8.忽略细节: 测试迫使程序员直接面向领域层,暂时忽略界面、数据库等细节问题。
  6. 开发项目的关键步骤:       
         搜集用户素材 ->
            {
                整理用户素材 -> 排列优先级 -> 制定迭代计划 ->
                   {
                       简单设计 -> 写测试代码 -> 写产品代码(使测试通过)
                   }
            }
    注意:在开发期间的每一环节内,添加用户素材与重构代码都是必须的。
  7. 不要完美主义 完美主义的态度排斥变化、拒绝发展,其实质是保守主义的态度。完美主义的根源在于传统的结构化、过程式设计方法:底层模块责任重大,改动困难,想不完美也不行!新的面向对象设计方法,以OCP为核心,以DIP为标志,其目的就是为了响应变化、渐进演化,其态度与完美主义正好相反,是积极的、向上的。

  8. 设计脚本参数 用例就是很好的指导,用例有参与者、前置条件、后置条件、可观察的结果,不妨按照用例的模式去设计脚本。

  9. 由概念出发设计对象 这种方法很简单,结果当然不理想。很可能设计出的对象大而空泛,没有实施上的意义,也可能变成了功能分解的模块化设计,毫无用处,反而有害。关于职责设计,职责究竟是什么,很难说清,但绝对不是按照功能设计。从某种意义上可以说,由概念出发设计对象的方法已被宣布为错误或不当,Robert C. Martin说: I don't know who came up with "Objects should model the real world." but we need to find the guy and trash him soundly.

  10. 关于命令模式 Command(命令) 模式被Robert C. Martin称为最"优雅"的模式,但也有人说该模式不是对象方法,而是结构化方法的残余。我认为,有关该模式的争论深刻地揭示出我们头脑中结构化的毒害到底有多深,我们离真正的对象方法到底有多远。结构化思维的一大特征是隐含的时间上的顺序性,也就是控制流程的迁移,类似于流程图的结构。对象不是的,对象没有先后关系,没有流动性,只有职责的关联,组成网状的结构。在设计对象的时候,考虑的不是控制的转移,而是职责的转移。最典型就是Command模式,其次还有State(状态)模式,在这里时间不具有意义,没有先后,只有职责的本质。理解Command模式、State模式,是打破结构化思维,上升到对象思维的突破口。

  11. 编程的自然过程 从手边收集的较为熟悉的用户描述(或用例)开始,按照测试优先及低耦合的原则,快速展开迭代,并随时重构,每次小的周期都产生一个可运行、可观察、可自动测试的程序。然后备份,开始下一个周期...

  12. 两条至高无上的原则 低耦合与测试优先!这两条原则超越所有方法,是必须遵守与体现的最高原则。

  13. 模型论 对象的概念不如模型的概念,模型是由两个以上的对象组成的超稳定结构(试想一下水分子模型),孤立的对象则是毫无用处的,也无法进行评价。模型无法用结构化的方法设计与实现。模型只有创建与销毁两种与时间有关的概念,除此之外,在模型的生存期,没有时间性,没有顺序性--任何时候的观察与测试,模型都按照其自身逻辑返回同样的结果。模型收到消息并处理之后,模型的内部状态有可能改变,但总是满足其自身内部逻辑的约束(有的说法叫"不变式")。通常,在OO方法的论述中(比如UML),就连调用一个对象的方法这么简单的事也被改称为向对象发送一个消息,这样做是极有道理的,前者是结构化方法的体现,后者则是面向对象方法的体现。模型不是数据结构+算法,模型是对象+消息。模型具有封闭性(是一个自闭包),也就是说,模型为了实现自身的逻辑,无须借助任何外部对象,也无须了解任何外部信息,模型为外部对象提供服务或支持。

  14. 享元(Flyweight)模式的要点是分离对象的内部状态与外部状态,当两个对象的内部状态恒等,或者是根本没有内部状态(即无状态对象)时,可以让它们共享一个实例(只创建一个共享实例)

  15. XOL2的作用: 一、创建并装配对象,使之构成可工作的对象网络或模型;二、在对象行为的插入点执行特殊的上下文操作,实现类似于回调函数或事件句柄的灵活性。(注:XOL2是笔者开发的一种类C++语言)

  16. 策略(Strategy)模式的一个经典描述是:改变对象的内容。当一个对象需要根据客户的请求改变自身的内存结构时,通常只能采用策略模式。

  17. 正是由于很难对界面采用TDD开发,所以应尽可能将代码集中在领域模型,最终的界面仅仅是领域模型的"简单"映像(MVC)

  18. 架构论 有时候,难点在于无法想出合适的对象,使之能够平滑地连入现有的对象网络,完成较为独立的任务,并与其它对象保持相对简单的交互。这种需要极力想出来的新对象往往是提供新服务、新功能的对象,是被动的,而不是一些支撑架构的主控对象--主控对象早就想出来了。由于目的性很强,意图明显,这些新对象的职责是明确的,难就难在要尽可能少的影响原有的设计,要求这些新对象的连接或控制应该是简单的。
    结构化的方法往往倾向于优化底层结构,精简已有代码,使之更加通用,然后就可以在此基础上建筑更复杂的结构--库函数大多是这样做出来的。面向对象的方法正好相反,面向对象的方法是要极力保留最先想出来的设计,这些设计往往简单、直观,意图明显,因此特别强悍,强悍的结构也就适合于架构。从方向上看,结构化的方法总是企图降低原有代码的层次,使之更加底层、通用,面向对象的方法则要提升原有代码的层次,使之更加高层、抽象。
    本质上来说,架构是简单、直观、强悍的,大多数架构都可用一句话进行描述,例如"层模式":将代码分割成几个相互独立的层,层与层之间仅接口可见。
    如果想破坏架构,最常见的做法就是将架构变小,然后使用组合、中介等几种模式在其上组织更大的结构,这样做下去,软件的架构慢慢损毁,最终架构不复存在--软件越来越复杂,越来越不直观,难以理解。
    借用互联网成功的KISS原则:Keep It Simple and Stupid,可以说,架构的成功在于简单并直观

  19. 软件的根本问题是找出简单的模型模拟复杂的现实世界。简化模型的关键是简化限制条件。通过模型与模型的层层虚拟组织,简单的模型可以处理复杂的现实问题。(参见:李国杰《对计算机科学的反思》摘要)

  20. 开发软件的过程完全值得重新学习!在努力发现并学会解决复杂的问题之后,随之而来的难题是:如何发现并解决简单的问题。开发软件的基本理念应该是:简单、完整地模拟一个现实事务。在初步建立软件的前几次迭代过程中,尤其应该尽可能忽略限制条件,在近乎理想的状态下,完整地处理一个事务。这也许是做事的普遍规律:万事开头难,如果你想的过多的话,可能就什么也做不了。一句话: 不求完美,只求完整

  21. TDD的精髓是: 先增加一个失败的测试,然后使之通过。关键在于前者,除非由于缺少某些代码将导致测试失败,否则就拒绝在程序中增加哪怕一行代码。这样做,可以保证所写的代码都是确实有验证的,也就无需人为的加大测试覆盖。
    学会小步前进是不容易的事,而这正是TDD的要点。
    Robert C. Martin
    : 编写单元测试是一种验证行为,更是一种设计行为。同样,它更是一种编写文档的行为。

  22. 太多的技术是无用的技术。搞技术要抱着任它弱水三千,我只取一瓢饮的心态,坚持自主创新精神,开发出既省钱又省力的产品。
    创新就是不迷信任何人、任何技术,直面问题本身,找出最适合自身的解决方案。创新是捷径,既省钱又省力,可以带来巨大的利益。
    主流技术是要学的,但不能追求学全、学满,那样成本太高,得不偿失。要能解决面临的问题,找出自己的道就行
    一种技术所要解决的问题通常是抽象的、全面的,而现实问题却是具体的、有针对性的。成功的技术人员能够审时度势,花最小的时间和代价,以自主创新为主,以参考吸取为辅,既快又省地完成任务。
    听来的,学来的,都不十分可靠,因为没有经过解决问题的实验。

  23. 测试驱动的代码,要加上简短的注释,说明测试的意图,或者解释测试的结果,这样的加注释的代码就是最好的文档,既是设计说明,也是使用说明。



分享到:
评论

相关推荐

    分享一个寨板H81主板的编程器BIOS 附主板图 ZX-H81 V1.1

    【标题】:“分享一个寨板H81主板的编程器BIOS 附主板图 ZX-H81 V1.1” 【描述】中的信息涉及到的是一个关于寨板(非原厂)H81主板的编程器BIOS的分享,其中包含了主板的图片供用户对比参考。用户在描述中提到,这...

    ZX_1开发板用户手册1

    《ZX_1开发板用户手册1》是一份详尽的指南,主要针对ZX_1开发板的使用和功能展开介绍,旨在帮助用户更好地理解和操作该开发板。开发板是电子工程师进行项目开发、学习和实验的重要工具,ZX_1开发板集合了多种常见...

    Zx81

    总的来说,ZX81是一款具有历史意义的个人电脑,它开启了家用电脑的新时代,为后来的ZX Spectrum和其他8位电脑奠定了基础。同时,它也是计算机爱好者和程序员的宝贵记忆,那些简单的像素艺术和Basic代码构建了早期的...

    ZX信息安全概论 ZX信息安全概论

    一、ZX 信息安全概论简介 ZX信息安全概论是指对信息安全的总体概述,涵盖了信息安全的基本概念、信息安全的重要性、信息安全的威胁和防护措施等方面的知识。信息安全是指保护信息免受未经授权的访问、泄露、修改、...

    zx-du99d4-1.12通用鸡血BIOS

    【标题】"zx-du99d4-1.12通用鸡血BIOS" 指的是一款针对ZX-DU99D4型号主板的BIOS固件更新,这里的“1.12”代表该BIOS版本号。在计算机硬件领域,BIOS(基本输入输出系统)是计算机启动时加载的第一个软件,它负责初始...

    杰赛s65中星微ZX296716

    【杰赛s65中星微ZX296716】是一款基于中星微(ZTE Microelectronics)ZX296716芯片的网络电视盒设备,由杰赛公司生产。这款设备通常配备有强大的处理能力,支持高清视频播放,包括4K分辨率,为用户带来优质的视听...

    逆变焊机ZX7 图纸 驱动

    逆变焊机ZX7-400ST作为一款高性能的焊接设备,其核心在于先进的逆变技术和精确的驱动控制。本篇将深入解析逆变焊机ZX7-400ST驱动板的关键电路设计,帮助读者理解其工作原理和技术细节。 ### 1. 驱动板总体架构 ...

    中兴微 ZX279110A 硬件设计文件

    ZX279110A是中兴微电子精心研发的一款集成电路,其设计文件以CADENCE HDL和Cadence Allegro为平台,这两大工具在业界享有盛誉,是专业电子设计自动化(EDA)软件的代表。CADENCE HDL主要用于描述数字逻辑电路,而...

    ZX240128M1 液晶显示使用程序

    ZX240128M1是一款常见的液晶显示屏,尤其适用于嵌入式系统和工业设备,它提供了240x128像素的分辨率,能够清晰地展示图形和文本信息。在本教程中,我们将深入探讨如何通过串行接口与ZX240128M1进行通信,并利用提供...

    ZX中心线V1.0_LSP_cad中心线lsp_ZX中心线V1.0_生成中线_CAD插件_

    总的来说,"ZX中心线V1.0"插件是CAD用户特别是建筑和结构工程师的一个有力工具,通过LISP编程技术,它解决了平行线中线绘制的难题,提高了PKPM模型创建的效率。对于那些需要频繁处理这类问题的设计师来说,这是一个...

    Zx_Roles tool v2.5 免费版.rar

    "Zx_Roles tool v2.5 免费版"便是这样一款专为用户提供便捷服务的工具,旨在帮助用户更有效地管理和控制角色权限。在本文中,我们将深入探讨这款工具的功能、使用方法及其在IT管理中的价值。 首先,我们需要了解"Zx...

    神舟zx6cp5s1 蓝天公版 bios NB5TJTK

    标题“神舟zx6cp5s1 蓝天公版 bios NB5TJTK”涉及到的是神舟品牌的一款游戏笔记本电脑——ZX6CP5S1的BIOS更新,特别是蓝天公版的BIOS版本NB5TJTK。BIOS(Basic Input/Output System)是计算机启动时加载的第一个软件...

    :\ZX7--400逆变式电焊机的电路图.rar

    ZX7-400逆变式电焊机是其中的一种,主要适用于低碳钢、不锈钢、铝及铝合金等材料的焊接工作。 电路图是理解和分析电气设备工作原理的关键,对于ZX7-400逆变式电焊机来说,电路图包含了以下几个关键部分: 1. 输入...

    杰赛s65中星微ZX296716.zip

    【杰赛S65中星微ZX296716.zip】是一个针对网络电视盒进行OTA(Over-the-Air)升级的软件包,主要用于提升设备性能、修复系统漏洞或添加新功能。这个升级包是第三方提供的,意味着它并非来自官方制造商,而是由社区...

    华硕zx50jx4200黑苹果.zip

    华硕ZX50JX4200是一款非苹果品牌的笔记本电脑,但通过"黑苹果"(Hackintosh)技术,用户可以安装并运行苹果的操作系统macOS。这个过程需要对硬件驱动、EFI(Extensible Firmware Interface)配置以及macOS的兼容性有...

    蓝天ec (神舟ZX8cp5s1)原版副ec文件

    蓝天电脑(蓝天P751tm)是一款知名的高性能游戏笔记本电脑品牌,被广泛用于电竞和专业用户群体。神舟ZX8CP5S1是蓝天电脑的定制型号,它搭载了强大的硬件配置,提供了出色的计算性能。在这款电脑的维护和升级过程中,...

    基于ZX465高频功放AD设计资料 包含原理图及PCB文件

    在电子工程领域,ZX465是一款常用的高频功率放大器,尤其在通信系统、射频(RF)设备以及微波电路中广泛应用。本资料包针对ZX465高频功放的AD(Analog Devices,模拟器件)设计,包含了重要的设计元素——原理图和PCB...

Global site tag (gtag.js) - Google Analytics