软件设计美学之道第2回─软件的美丽元素─设计思维

2024-02-05 17:18

本文主要是介绍软件设计美学之道第2回─软件的美丽元素─设计思维,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

世界上大大小小的事件、每个人的想法、做法,只要不是具象的事物,就都是抽象的,而软件设计的思维亦是如此。

  在软件设计的领域中,对象导向的设计方式是个抽象的分析思考法,很适合在虚拟世界里面表达出真实世界的需求。

  虽然对象导向的技术已经行之有年了,但是真正了解其观念,并且能将其思维放到实际设计与实作上的人并不多,可能是因为受到现实环境的影响。

  以Java来说,笔者就看过许多使用Java写出C程序风格的例子,以应用面来看,这样实在谈不上有设计思维,只能说是透过程序撰写一行行地列出工作而已。然而也许是因为这样的观念不清,导致利用Java开发的系统效率不张或者幽灵问题不断,而让人误解Java系统的好坏。

  对象导向的关键哲理-抽象

  对象导向是一种很有趣的分析「哲学」,它试图从人们对真实世界的看法及感受来解释属于虚拟世界的软件。从分析问题领域,进而转成相对应的程序代码,都是在模拟真实世界里的自然过程。

  真实世界的事物是瞬息万变的,而软件开发也是如此,唯一不变的,就是恒变的需求。因而,「抽象」则是描述「瞬息万变」的一个重要并且安全的方法。

  抽象的观念也是大部分的人在学习或运用对象导向观念时,比较容易遇到的瓶颈。所谓的抽象,简单来说,就是「萃取」出的概念,而且和实作无关,因为真实问题背后所隐含的意义,往往无法从直接的实作中得知。抽象的焦点是事物的本质特性,不同的观点可以对同一事物抽离出不同的元素来,若是将抽象结果对映到真实世界中,有可能是一个具体的东西,也可能是一个看不见的概念。

  抽象有助概念与实作的再利用

  想象一个简单的例子,在人声鼎沸的世贸计算机展里,你能够抽象出什么呢?是某计算机公司的摊位、辣妹跳舞、某个品牌的计算机,还是拆解成摊位、辣妹、表演、消费者、产品、销售、交易?若是后者,那么将这些元素套用到家具展上,其实也没问题。因此,抽象有助于「概念的再利用」,同样也有助于「实作的再利用」及稳定。

  如果我们要设计一个展览馆的软件平台,起码,当计算机展要改成家具展时,只要重新实作产品内容,不用重新设计整个平台,因为交易模式及展埸运作模式都是类似的。

  大家在此应先建立一个观念,对象导向的分析方法是由特殊到一般,由实体到抽象。抽象的观念还可以在经过一般化(generalization)或者特殊化specialization)的分析后,衍生出阶层的结构,这一层一层的抽象结构,可以像一层一层的防火墙一样,挡住一级一级需求变异的风浪。

  以黑客任务说明对象导向

  对对象导向技术有初步认识人都会读到不少技术名词,例如接口(Interface)、讯息(Message)、类别(Class)、抽象(Abstraction)、具象(Concrete)或者Pattern、IoC(Inversion of Control)、Dependency Injection、MVC(Model View Controller)等等,这些名词都和对象导向的设计思维习习相关。我很喜欢的一部电影──黑客任务(Matrix),可以套用来说明这些名词的观念及对象导向设计的思维。

  在黑客任务的电影情节里,人类被所谓的「母体」控制在一个虚拟的计算机世界里,在那个虚拟世界里面的所有事物,例如行道树、食物、味觉,甚至物理或化学反应,不管是看得到、感觉得到还是所谓的自然定律,都是计算机程序所创造出来的,而真实的人类却浑然不知地被「饲养」在一座座充满连接管线的生态槽里。

  看完电影后我不禁思考:如果我是那母体(Matrix)的架构师(architect),该怎么设计那套系统?

  我大概会利用复合技术(composition)的方法,再配合连结器(adapter)机制和真实世界生态槽里收集人体各项模拟讯号的生物接口连接,再转化成数字讯号,然后将人类的类别(class)具现(instantiate)到数字世界里时,利用dependency injection的方式,将经转化的数字讯号注入人类实例(instance),并和那里的所有事物建立对象关系,然后人类就可以在那个世界里生活着。

  这么酷的想象,透过对象导向的技术来形容似乎就不难理解,它可以容易地传递设计的思维。然而,光是了解对象导向的原理,还不足以让你变成一位好的设计师,好的设计作品应该是容易地再利用、扩充及维护的,因此除了抽象、封装、继承与多型的基础概念之外,有经验的老手可能还知道许多对象导向的设计原则,像是「封装变异」、使用复合技术代替继承、针对接口写而不是实作。

  设计思维的传达与再利用

  当你在利用上述这些设计思维来塑造软件时,出现的另一个问题是:大部分的软件开发不会是只由你一个人负责,而是团队作业,然而在一个团队中,要如何让伙伴了解你根据这些对象导向基础或原则所做的美妙设计呢?设计思维的传达,变成了下一个问题,而这也意味着一个很重要的概念,那就是设计思维应该是可以再利用的。

  对象导向的重要概念-接口

  在对象导向的设计里,表达抽象的一个重要设计概念就是「接口」,它也是对象导向的基石。这里所指的界面有2种意义:Java语言上的接口(interface),以及概念上的接口,此处我们所谈论的是后者──概念上的界面。

  对象的接口界定出「外界」能送给它的讯息信息,也可以说是「限制」了外界对该对象所能影响的范围,对每个对象来说,接口也是了解另一个对象的唯一方法。以汽车的例子来说,我们看得到汽车的外观,也看得到汽车移动的方式,因此汽车的外观及移动方式,都是属于汽车的接口。

  至于汽车是何以能如此移动,是利用什样的动力驱动-汽油引擎、柴油引擎或油电混合引擎,是采用什么样的传动机制-前轮驱动、后轮驱动或四轮驱动,以上这些则属于实作。

  有趣的是,一个对象可以有一个以上的接口,这就是多形(polymorphism)的应用。举个例子来说,台湾之光-王建民,他是洋基队的球员,他也是台湾人,更是他父母的儿子,因此,以球队的观点来看,他可以帮洋基队投球,以台湾的观点来看,他有国民的义务,以家庭的观点来看,他必须尽到做儿子的责任,但是他都是王建民。所以,接口有点像是对象所扮演的角色,而角色当然就伴随着「责任」,对象导向设计时的重点之一就是在做对象的「责任分配」。

  有许多的Pattern或者Framework都要靠稳定的接口为其发展的基础的,例如,DI(Dependency Injection)、MVC(Model View Controller)、Spring、Struts、JUnit等等,不胜枚举。

 

这篇关于软件设计美学之道第2回─软件的美丽元素─设计思维的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/681626

相关文章

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

Ubuntu 怎么启用 Universe 和 Multiverse 软件源?

《Ubuntu怎么启用Universe和Multiverse软件源?》在Ubuntu中,软件源是用于获取和安装软件的服务器,通过设置和管理软件源,您可以确保系统能够从可靠的来源获取最新的软件... Ubuntu 是一款广受认可且声誉良好的开源操作系统,允许用户通过其庞大的软件包来定制和增强计算体验。这些软件

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

软件设计师备考——计算机系统

学习内容源自「软件设计师」 上午题 #1 计算机系统_哔哩哔哩_bilibili 目录 1.1.1 计算机系统硬件基本组成 1.1.2 中央处理单元 1.CPU 的功能 1)运算器 2)控制器 RISC && CISC 流水线控制 存储器  Cache 中断 输入输出IO控制方式 程序查询方式 中断驱动方式 直接存储器方式(DMA)  ​编辑 总线 ​编辑

怎么让1台电脑共享给7人同时流畅设计

在当今的创意设计与数字内容生产领域,图形工作站以其强大的计算能力、专业的图形处理能力和稳定的系统性能,成为了众多设计师、动画师、视频编辑师等创意工作者的必备工具。 设计团队面临资源有限,比如只有一台高性能电脑时,如何高效地让七人同时流畅地进行设计工作,便成为了一个亟待解决的问题。 一、硬件升级与配置 1.高性能处理器(CPU):选择多核、高线程的处理器,例如Intel的至强系列或AMD的Ry

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机