读软件设计的要素05概念的特性

news2024/11/16 1:22:27

1. 概念的特性

1.1. 专一性原则(specificity principle)认为概念与目的应该一一对应

  • 1.1.1. 专一性原则已被证明是概念设计中最有用的原则之一

  • 1.1.2. 一个概念最多只能满足一个目的

1.2. 很少有没有目的的概念

  • 1.2.1. 如果本应隐藏的用户机制被暴露,可能会产生没有目的的概念

  • 1.2.2. 无目的的概念会扰乱界面并迷惑用户

  • 1.2.3. 无目的的概念是奇怪的

1.3. 没有概念来实现目的可能是因为设计者领域之外的限制,有时或许只是因为严重的疏漏

  • 1.3.1. 概念缺失则会导致更为复杂的交互

1.4. 概念冗余,即多个概念服务于同一目的,会导致用户困惑与资源浪费

  • 1.4.1. 概念冗余在两个本应相同的概念之间引入了令人困惑的区别,并迫使用户用不同的方法来做相同的事情

  • 1.4.2. 概念冗余通常是由于在概念设计时只考虑了某些特定情况(可能是由子团队负责开发)​,而没有对软件的核心概念给予足够关注

  • 1.4.3. 每个目的都应该通过最多一个概念来实现并避免概念冗余

  • 1.4.4. 避免概念冗余当然也是合理的,因为可以节省精力

1.5. 概念过载,即一个概念具有多个目的

  • 1.5.1. 错误聚合,设计者错误地将多个目的当成一个目的

  • 1.5.2. 目的被拒,即设计者有意忽略用户目的

  • 1.5.3. 突发目的,概念随着时间的推移演变出新的(通常是不兼容的)目的

  • 1.5.4. 搭载现象,即设计者试图将新目的挂靠在旧概念上,以便减少设计和实现工作

  • 1.5.5. 概念过载会由于不相关目的的耦合而引入额外的复杂性

  • 1.5.6. 概念过载会导致功能受限,因为第二个目的被强加到原有概念之上

1.6. 导致软件复杂性的增加和清晰度的降低

1.7. 一致性原则有助于确认有多个组成部分的目的究竟算一个目的还是多个目的、是否可能整合为一个单一目的,各部分是否有共同的利益相关者、它们是否为一个共同的使命服务,以及它们之间是否有冲突

1.8. 在软件设计中,概念和目的应该一一对应

  • 1.8.1. 每个概念都应该有一个激发它的目的

  • 1.8.2. 软件的每一个目的也都应该有一个完整的概念

2. 无概念的目的

2.1. 如果对设计进行审视,你可能会发现有些基本目的并没有与之对应的概念来实现

2.2. 所有软件都会随着时间的推移而发展,新的需求总会出现

2.3. 设计之初就明显缺少概念的目的

2.4. 通信人概念

  • 2.4.1. 大多数电子邮件客户端都缺少通信人概念,该概念用于识别邮件的发件人和收件人

  • 2.4.2. Gmail这样的封闭电子邮件系统很容易实现通信人概念,但要想在更广泛的范围内实现这个概念,则需要通用的身份验证作为基础

  • 2.4.3. 有了通信人概念,电子邮件的发件人字段就无法被伪造,垃圾邮件也将更容易受到控制

2.5. 备份中的删除警告

  • 2.5.1. 从计算机中删除的文件会在一段时间(比如30天)之后从备份中被删除

  • 2.5.2. 意图很明确:阻止客户将备份服务当作无限期的云存储

  • 2.5.3. 备份软件可以提供一个概念来跟踪删除操作,并在删除操作发生时给出警告,这样就可以确定用户是否有意删除,以免在他们还没注意到之前就从备份中删除了文件

2.6. 缺少样式概念

  • 2.6.1. 一个概念在某一类软件中经常使用,但在另一类软件中却常常不可用,即使这个概念对于后者而言也非常有用

2.7. 不完整的模板概念

  • 2.7.1. 由于软件的形式有限,导致这个概念的常规目的无法实现

  • 2.7.2. 解耦设计的关键是网站制作者不需要一开始就确定模板,而是可以先试着加入一些内容,然后看看内容在模板里看起来如何

2.8. 随着技术的普及,人们很容易认为软件设计中所有的核心问题都已经解决了

  • 2.8.1. 这些没有概念的目的表明,即使在人们最熟悉的软件中,还有一些最基本的需求没有得到满足,软件设计师仍然有重要的工作要做

3. 概念冗余

3.1. 如果存在另一个用于相同目的的概念,那么当前的概念就是冗余的

  • 3.1.1. 设计师最初看到了两个截然不同的目的,但最终却发现它们只是同一个更通用目的的变体

3.2. Gmail的分类概念

  • 3.2.1. 分类概念遭到否定的根本原因在于它是冗余的

3.3. Zoom广播

  • 3.3.1. 广播概念是一个冗余概念

  • 3.3.2. 聊天概念和广播概念似乎具有相同的目的,但又不尽相同

    • 3.3.2.1. 广播消息在屏幕上闪过,而聊天消息则出现在滚动的消息记录中

    • 3.3.2.2. 广播消息可以跨越会议室,聊天消息则不能

    • 3.3.2.3. 广播消息会很快消失,聊天消息则会保留在消息记录中

    • 3.3.2.4. 在理想情况下,聊天概念应该包含这两个概念的特性

3.4. 消除概念冗余将减少开发人员的工作,并为用户提供更简单、更强大的工具

4. 概念过载

4.1. 最有趣的软件设计原则是一个概念最多只能有一个目的

4.2. 一个概念不能很好地满足两个目的

  • 4.2.1. 目的指导着概念设计的各个方面

  • 4.2.2. 如果软件有两个不同的目的,它们必然会向不同的方向发展,而概念设计也必须在它们之间做出妥协

  • 4.2.3. 更有可能的是,这种设计最终连一个目的也无法完全满足,因为这个目的本来朝着一个方向发展,却被拉向另一个方向

4.3. 错误聚合(False convergence)

  • 4.3.1. 错误聚合是指一个概念针对两个不同的功能,而这两个功能被错误地假设为具有相同的目的

  • 4.3.2. Facebook的好友概念

    • 4.3.2.1. 允许两个用户建立一种关系,在这种关系中他们可以看到彼此的帖子

    • 4.3.2.2. 隐藏了两个截然不同的目的

      4.3.2.2.1. 过滤:通过展示好友的帖子,Facebook为用户省去了亲自筛选帖子的麻烦

      4.3.2.2.2. 访问控制:通过选择好友,用户可以选择谁可以看到自己的帖子

    • 4.3.2.3. 2011年增加了关注概念,只用于过滤帖子,而非访问控制

4.4. 被拒目的(Denied purposes)

  • 4.4.1. 被拒目的是指被设计者忽略的目的,尽管用户有相应的需求

  • 4.4.2. 列出候选目的然后将之否定通常是令人钦佩的,这是防止软件设计膨胀的关键策略

  • 4.4.3. 最有效的箴言是“设计最简单的东西”​,这既适用于选择要达到的目的,也适用于设计实现这些目的的概念

  • 4.4.4. 以保持用户界面的简单性为名忽视用户需求,进而否定一个目的,这也可能是一种武断的行为

  • 4.4.5. Twitter中的收藏概念

4.5. 突发目的(Emergent purposes)

  • 4.5.1. 突发目的是原有旧概念新产生的目的,通常由用户自己创造

  • 4.5.2. 一个概念在设计时可能只有一个单一的、引人注意的目的,但随着用户发现该概念的新用途,其他目的可能会出现

  • 4.5.3. 电子邮件的主题行概念

4.6. 搭载(Piggybacking)

  • 4.6.1. 搭载现象指现有概念被调整或扩展以适应新目的

  • 4.6.2. 导致概念过载最常见的原因是,设计师看到了使用现有概念来支持新目的的可能,因此没有设计新概念,省去了设计和实现新概念的麻烦

    • 4.6.2.1. 设计师也可能认为用户会欣赏概念更少、内涵却更丰富带来的经济性,但这通常是错误的

    • 4.6.2.2. 相比于数量较少但是复杂和令人困惑的概念,较多但统一、有说服力的概念更好

  • 4.6.3. 富士相机的长宽比

    • 4.6.3.1. 长宽比概念在RAW格式的文件上非常有效

    • 4.6.3.2. 由于长宽比概念通过重载与JPEG格式相关联导致过载,因此不能单独将之用于JPEG格式

    • 4.6.3.3. 即使你只想以RAW格式保存图像,并且自定义长宽比,在设置图像质量时也必须选择同时包含RAW和JPEG格式的文件,然后再删除JPEG文件

    • 4.6.3.4. 补救方法是提供一个与图像大小概念不同的长宽比概念,使自定义长宽比的操作与选择文件类型的操作相互独立

4.7. 补救方法

  • 4.7.1. 尽可能准确地阐明单一目的,并检查概念的不同动机是否真正反映了同一目的,这样可以避免错误聚合

  • 4.7.2. 认真对待用户的意见和经验,特别是那些技术水平较低和较不愿意采用新技术的用户,这样可以避免出现被拒目的

  • 4.7.3. 突发目的是最难避免的,因为没有人能够预测设计将以何种方式影响其使用场景并创造新的用途

    • 4.7.3.1. 只要意识到突发目的的出现,就可以添加新概念来解决这种概念过载
  • 4.7.4. 应该避免将概念用于相互矛盾的目的来优化设计的冲动,应认识到这样节省下来的努力会导致情况更加复杂,最终付出高昂的代价

    • 4.7.4.1. 避免出现搭载现象

5. 目的的颗粒度和一致性原则

5.1. 设计是否冗余或过载取决于目的

5.2. 需要通过一致性测试,揭示多重目的伪装成一个目的的情况

5.3. 在理想情况下,目的的设定不应该随案例不同而变化,也就是说,目的需要保持一致

5.4. 重新设定目的

5.5. 共同的利益相关者

5.6. 共同使命

5.7. 无冲突

6. 分解概念

6.1. 解决概念过载的方法是分解概念,然后为每个目的建立一个新的概念

6.2. 回应概念,其目的是传递对帖子的情绪反应

6.3. 推荐概念,其目的是管理推送内容

6.4. 特征分析(profiling),其目的是定向投放广告

6.5. 极端情况是,这三个概念可能构成一个几乎完全不同步的自由组合

6.6. 另一个极端情况是,三个概念完全同步,回应按键也作用于推荐和特征分析

  • 6.6.1. 过载问题已经转化为过度同步问题

  • 6.6.2. 至少在概念分离的情况下,设计中有更清楚的迹象表明这些概念已经耦合在一起,并且即使试图在相互冲突的不同目的之间寻求平衡,概念本身被破坏的风险也比较小

6.7. 概念分解之所以很有价值,在很大程度上是因为它允许将一个特殊的概念(比如Facebook的点赞概念)分解成更一致、更通用的概念,从而为用户提供更简明的体验,并为记录和保存设计知识提供更好的结构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2117194.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通信工程学习:什么是2ASK/BASK二进制振幅键控

2ASK/BASK:二进制振幅键控 2ASK/BASK二进制振幅键控是一种数字调制技术,其全称是二进制振幅键控(Binary Amplitude Shift Keying)。该技术通过改变载波的振幅来传递二进制数字信息,而载波的频率和相位则保持不变。以下…

RISC-V (九)抢占式多任务

主要的思想:借用定时器中断实现。设置定时器寄存器,系统自动触发定时器中断时会跳到trap handler这个函数里。借用这个函数做上下文的切换,从而实现了抢占式多任务。 定时器中断:跳到trap handler函数,同时系统自动将…

清华计算几何--凸Polygon的相交问题

凸Polygon和相交定义 本节只讨论凸Polygon的问题,不涉及凹Polygon. 相交包含了边相交和完全包含。 凸Polygon相交的两个问题 Detection(检测) 判断两个凸Polygon是否相交,至于相交部分是什么不关心. Construction(构造) 求出两个凸Polygon具体相交…

Linux_kernel移植rootfs10

一、动态更改内核 1、low level(静态修改) 【1】将led_drv.c拷贝到kernel/drivers/char/目录中 【2】修改当前目录下的Makefile文件 obj-y led_drv.o #将新添加的驱动文件加入到Makefile文件中 【3】退回kernel目录,执行make uImage …

熬夜后补救措施

人体的肝功能问题 直接体现在体态和容颜上 伤肝 三大坏行为 熬夜后补救 *补充养b族、口、、锌、硒 加强代谢 能力 (1)另外熬夜后一定要多喝水 提升身体代谢能力 (2)谷肤甘肽清肝 肝脏排毒,减轻负拒 (3)水飞前含量高点 (4)熬夜出更多油 容易长痘 需要清…

标准库标头 <filesystem> (C++17)学习之文件类型

本篇介绍filesystem文件库的文件类型API。 文件类型 is_block_file (C17) 检查给定的路径是否表示块设备 (函数) is_character_file (C17) 检查给定的路径是否表示字符设备 (函数) is_directory (C17) 检查给定的路径是否表示一个目录 (函数) is_empty (C17) 检查给定的路径是…

STM32G474之使用DAC1和DAC2测试模拟比较器

STM32G474使用DAC1和DAC2的输出作为比较器输入,测试模拟比较器,方法如下: PA1的附加功能为COMP1_INP,无需映射,直接将它配置为模拟功能,就可以使用了。 将COMP1_OUT引脚映射到PA0; 采用DAC2_OUT1输出电压给…

【大疆 SDR 图传 P1 】 功能拆解,通信功能剖析

大疆 SDR 图传 P1 拆解视频P1 SoC1、哲酷2、小米3、大疆(文章主角) 一、为什么说SDR技术1、sdr 软件无线电2、影视博主的测评方法3、第一个说自己SDR的还是这个老登 二、大疆的图传发展历程1、FPGA AD93632、 P1 自研1、2个DSP和一个CPU A72、音频子系统…

SpringMVC;MVC模式;Spring环境搭建;

一,介绍MVC模式: MVC模式: 1.M:model 模型,业务模型和数据模型. 2.C:controller 控制器 3.V:view 视图 优点: 使用控制器C把视图V和业务模型M分离,从而使同一个程序可以使用不同的表现形式 使用场景: 中大型项目 核心: 控制器 二…

828华为云征文 | 基于Docker与Jenkins实现自动化部署

需要了解 本文章主要讲述在 华为云Flexus X 实例上使用docker快速部署持续集成工具 Jenkins,通过插件来自动化CI/CD过程中的各种琐碎功能。选择合适的云服务器: 本文采用的是 华为云服务器 Flexus X 实例(推荐使用)连接方式&#…

【自动驾驶】决策规划算法 | 数学基础(三)直角坐标与自然坐标转换Ⅰ

写在前面: 🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝 个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。 🔍 本文系 清流君 原创之作&…

【有啥问啥】数字孪生(Digital Twin)技术在人工智能中的应用

数字孪生技术在人工智能中的应用 在当今的数字化转型过程中,“数字孪生”技术逐渐成为热门话题,并且在各个行业中展现出巨大的潜力。作为一种新兴技术,数字孪生(Digital Twin)不仅仅是物理对象的虚拟复制品&#xff0…

MATLAB算法实战应用案例精讲-【人工智能】大数据审计(概念篇)

目录 前言 大数据审计发展历程 1.初级阶段:验证型逻辑占据主导地位 2.发展阶段:挖掘型逻辑突出重围 3.成熟阶段:基于验证和挖掘的预测型逻辑发展 算法原理 什么是大数据审计 特征 事项审计 大数据审计的方法 (一)大数据审计的一般思路 (二)大数据审计的关键技术…

【开发工具】探索IntelliJ IDEA插件——JSON Parser,让JSON处理变得轻松高效

开发过程中,遇到一个字符串,需要判断是否是JSON格式,或者是需要将Json字符串美化展示,是否还在打开百度搜JSON在线格式化(https://www.bejson.com/),是否还在写个main方法将字符串转成JSON格式并输出。这篇文章&#x…

【Linux】全面讲解 Shell 变量的那些事

本文内容均来自个人笔记并重新梳理,如有错误欢迎指正! 如果对您有帮助,烦请点赞、关注、转发、订阅专栏! 专栏订阅入口 Linux 专栏 | Docker 专栏 | Kubernetes 专栏 往期精彩文章 【Docker】(全网首发)Kyl…

python中的循环结构

注意:range()函数 累加和: 注意:if 下面如果有好几行,只执行一行 print必须和 for 开头相同格数 例题:水仙花数 注意在print语句中,一句好“ 。。。。。 ”后面必须有逗号然后再写变…

(八) 初入MySQL 【主从复制】

案例概况 在企业应用中,成熟的业务通常数据量都比较大 单台MySQL在安全性、 高可用性和高并发方面都无法满足实际的需求 ,所以需要配置多台主从数据库服务器以实现读写分离来满足需求 一、主从复制原理 1.1、 MySQL的复制类型 基于语句的复制(STATEME…

C++11 的继续学习

1.lambda 我们如果想要给一个自定义的元素排序,那么应该怎么排呢 先举个例子: struct Goods {string _name; // 名字double _price; // 价格int _evaluate; // 评价Goods(const char* str, double price, int evaluate):_name(str), _price(price),…

等额本息等额本金

1、贷款计算器 2024年最新版房贷利率计算器_LPR利率计算器 (K JSON) 贷款计算器 2、等额本息 接下来,我们可以用Python编写一个函数来计算每月还款额: import pandas as pddef amortization_schedule(principal, annual_interest_rate, years):"…

MySQL事务执行过程

一、MySQL一个查询语句执行过程如下图🔽 MySQL客户端查询,经过查询缓存、解析器、查询优化器、查询执行引擎,通过API接口查询,经过存储引擎,获取数据返回给客户端。 二、事务执行过程如下图🔽 1、MySQL客户…