程序设计中的设计

简介: 通常我们所谓的程序设计,其实包含编码与设计两个部分,编码行为一般为人们所熟知,被称为coding,然而设计过程却容易为大家所忽视。

通常我们所谓的程序设计,其实包含编码与设计两个部分,编码行为一般为人们所熟知,被称为coding,然而设计过程却容易为大家所忽视。

设计的作用

image

日常生活中优秀的设计产品很容易被人所铭记。iPhone就是一个经典的设计案例。当人们还在使用复杂的布满按键的小屏幕Nokia手机的时候,苹果用一款简洁的设计征服了用户的心。

image

手机本质上是人们完成日常办公的工具,大家之所以热爱iPhone,是由于iPhone的设计让使用者更加的方便,更加的高效。

image

现在的程序系统日趋庞大和复杂,程序员们通常用类似搭积木的方式完成更高级功能的开发,我们所编写的每一段程序都可能是另一端代码实现其功能的工具。

设计优秀的程序,会让使用它的人事半功倍,而设计糟糕的程序往往会让使用者手忙脚乱,摸不着头脑。

以下是W3C标准委员会设计的文档对象模型(DOM)中早期用来访问元素的一些API。最后的代码动态的创建了一个div元素,设置样式属性,并把它追加到了页面文档中

image

光是复杂而冗长的命名就足以令人生畏,我们再看看一款优秀的前端框架jQuery的API设计

image

同样的功能,是不是简单易懂的多。

设计的层级

image

优秀的设计通常并不能一蹴而就,需要精细的思考。有一个合理的思维过程更有助于我们做出良好的设计决策。这就是设计的层级。大胡子习惯把它分成以下几个部分:

需求

在需求阶段,我们需要明确程序要解决的问题和使用场景。最好的办法是尽早开始使用你的程序,甚至在他们还没有被设计出来之前。比如:“测试驱动” 就是一个比较不错的办法。

结构

在结构设计阶段,我们会设计出程序需要哪些信息、分为哪些模块以及如何组织他们。其中比较有帮助的两个工具是:

  1. 信息架构分析
  2. 领域模型

信息架构模型有助于帮你分析出你的程序需要获取那些类型信息,需要什么样的功能,如何表达。

image
以一个IO库的设计为例分析信息架构

领域模型有助于你更好的组织你的程序模块

image
领域模型的例子

接口

在接口设计阶段,我们则需要更加具体的明确我们接口的定义:即命名,参数、返回值、调用流程等。
其中值得注意的点是:

  1. 命名是否足够清晰,容易理解和记忆。
  2. 参数应该以合理而一致的顺序组织,便于记忆和了解。
  3. 返回值是否传达了足够的信息。
  4. 调用流程是否合理,能否简化。

image

在这个例子里 string.h 中 strcopy 和 bcopy 就是糟糕的例子,不看文档很难记住参数的顺序,而java的Collections和concurrent包里的设计则要好的多

链式调用可以很好的解决复杂的调用流程,尤其是在IDE工具的支持下,我们几乎可以不用看文档就可以完成大段代码的编写。

image
非链式调用

image
链式调用

总体的原则就是:

  1. 容易学习
  2. 自说明,甚至不需要文档就可以使用
  3. 防呆设计,很难出错
  4. 容易维护和扩展

实现

在实现阶段更多的是算法与具体逻辑的选择,更多的就是大家所熟知的coding过程了,可能需要根据性能考虑一些设计方案的取舍。不在赘述。

小结

设计优秀的程序对于公司来说是一笔价值连城的资产,对于程序员自身来说就如同给深处地狱的我们送上一杯清凉的冰水。以上是大胡子对于程序设计方面的一些思考,希望能够帮助到大家。

目录
相关文章
|
1月前
什么是面向对象领域软件设计的 Contravariance 概念
什么是面向对象领域软件设计的 Contravariance 概念
20 0
|
3月前
|
数据可视化 测试技术
面向对象系统分析与设计
【1月更文挑战第10天】面向对象系统分析与设计。
32 0
|
1月前
|
算法 数据安全/隐私保护 C++
【软件设计师备考 专题 】程序设计的核心:结构化程序设计与面向对象程序设计(一)
【软件设计师备考 专题 】程序设计的核心:结构化程序设计与面向对象程序设计
35 0
|
1月前
|
设计模式 机器学习/深度学习 存储
|
1月前
|
SQL 算法 测试技术
【软件设计师备考 专题 】程序设计的核心:结构化程序设计与面向对象程序设计(二)
【软件设计师备考 专题 】程序设计的核心:结构化程序设计与面向对象程序设计
41 0
|
1月前
|
算法 测试技术 程序员
程序设计的任务与实现
程序设计是一项复杂且富有挑战性的任务,它要求程序员不仅掌握编程语言的基础知识,还需要具备逻辑思考、问题分析和解决问题的能力。在程序设计的过程中,我们会遇到各种各样的任务,包括需求分析、算法设计、代码编写、测试与调试等。本文将详细讨论程序设计的任务,并通过一个实例代码来展示其实现过程。
21 1
|
1月前
|
程序员
程序设计 (3)
程序设计 (3)
15 0
|
1月前
|
算法 开发者
程序设计 (4)
程序设计 (4)
13 0
|
1月前
|
Python
程序设计 (2)
程序设计 (2)
13 0
|
5月前
|
C++
20 C++ - 面向对象程序设计案例
20 C++ - 面向对象程序设计案例
53 0