软件设计概念

  • 软件设计概念

    • 设计过程的任务集
    • 软件设计的指导原则
      • 设计基本理念
      • 模块化设计原则
      • 信息隐藏原则
      • 步进式的细化原则
      • 功能独立原则
      • 重构原则
    • Aspects
    • 设计元素
      • 数据元素
      • 架构元素
      • 接口元素
      • 构件元素
      • 部署元素

思考

为什么需要进行软件设计?
在进行软件设计之前,我们应该确定哪些信息?

数据、界面、算法、加工逻辑 ……

在解决问题的时候,确定哪些关键元素需要通过设计来解决,如何制定软件设计的蓝图。

设计的两个层次

  • 高层次抽象

类似于概要设计。
类似于建筑设计的框架设计。

  • 对框架进行细化

对具体的门、框的设计


设计以需求为先导
设计类以分析类为基础,数据设计与分析设计紧密相关。

软件设计的目标

  • 实现所有的显式的需求,为后面的软件实现打下基础。
  • 提高可读可理解的指南,提供给后续的工作人员。
  • 提供完整的系统蓝图 解决一系列实现过程中需要面对的问题。

排课系统为例
设计解决数据存储的问题(排课信息保存)、界面显示问题(排课及结果显示)、算法逻辑问题(排课算法)等。这三个问题对应着数据设计、接口设计、算法设计三个问题。

设计过程的任务集

分析过程中涉及了7个任务
设计过程中涉及了以下6个任务

  • 数据设计
  • 软件的体系结构设计 (定义框架,缺乏对构件的定义和描述)
  • 类设计(针对面向对象应用系统)

分析类和设计类的区别
设计类比分析类更接近于实现。设计类的定义更加具体。

  • 接口设计(外部接口&人机交互)
  • 组件设计(构件的定义和描述)
  • 部署设计(软件元素分布到物理元素上)

软件设计的指导原则

  • 设计原则
  • 设计优化原则

设计基本理念

设计基本理念——抽象

概要设计的核心:确定应用系统的结构

架构的关键内容:

  • 模块、组件

面向对象基本的组件——类

  • 联系

模块和模块的调用,类和类的协作

  • 数据

软件架构即是便是构件并确定构件的通信和联系

模块化设计原则

通过模块化把庞大的应用系统进行功能的划分,降低开发实现的难度,控制成本。
简单说就是:降低复杂度
模块化是实现软件体系结构的一张方法

信息隐藏原则

每个模块对其他模块隐藏自己的设计决策,已到达内容细节发生变化的时候,外部受到的影响最小。

有助于提供系统内部的独立性。

全局变量共用,导致错误的扩展。

步进式的细化原则

每一步都是对前一步的逐渐细化。

功能独立原则

应对特征:

  • 功能独立
  • 避免和其他模块的过量的交互

具体的衡量指标:

  • 内聚性

模块、组件内部的联系紧密度
只完成一件事儿的时候,内聚性最高。

  • 耦合性

模块和模块之前联系的紧密程度。
耦合性越低越好。

重构原则

不改变外部结构的情况下 对内部进行优化,成为重构。
从使用者的角度看,前后没有变化。

Aspects

面向方面的编程AOP

关键:找到横切关注点

横切关注点:业务处理的主要流程是核心关注点,而将封装的类剖开,找出类中公共的行为,并抽取出来进行封装。封装的这部分就称为横切关注点。

AOP的核心思想

将应用程序中的商业逻辑同对其提供支持的通用服务进行分离。

设计元素

  • 数据元素
  • 架构元素
  • 接口元素
  • 构件元素
  • 部署元素

元素由设计任务产生,可以明显的看出其对应关系。

数据元素

  • 数据结构
  • 数据库架构

设计一种数据结构,便于根据用户提供的搜索词快速检索出含有该词的文档。

倒排索引

将每个单词关联到包含该单词的所有文档列表。

架构元素

面向对象确定的架构VS 结构化方法确定的架构

  • 面向对象: 架构基础为 类 (协作关系)
  • 结构化: 架构基础为 模块 (调用关系)

接口元素

接口存在于构件、模块、子系统等元素外部可见的操作说明

分类:

  • 人机接口 (界面)
  • 外部接口 (与外部应用系统的交互)

    作用
    连接两个系统,对传递的数据进行安全控制、信息转换、检查。
    接口像缓冲器,使得两个系统足够兼容

  • 内部接口 (协作和调用)

构件元素

什么是构件?

构件是具备特定功能,可配置、可替换的程序部件,该部件封装了实现并暴露一系统接口。

构件VS架构元素 :构件和架构元素的关系?

多个架构元素可能组成一个构件。构件的力度可大可小。

构件级设计

破开构件,看构件里面的 数据结构、算法等内容。

程序流程图 (构件级设计中会涉及到)

描述构件内容的算法逻辑,表达程序“怎么做”的问题。

算法的本质: 解决问题的一种方法。

部署元素

目的:表示软件的功能和系统是如何分布到物理环境中的。



本博客内容到此结束,欢迎指正!

软件设计概念-指导原则|Aspects|设计元素相关推荐

  1. FPGA的调试-调试设计的指导原则

    对于FPGA调试,主要以Intel FPGA为例,在win10 Quartus ii 17.0环境下进行仿真和调试,开发板类型EP4CE15F17.主要包括一下几个部分: - FPGA的调试-虚拟JT ...

  2. 芯片设计|FPGA 设计的指导原则(二)

    我们接上一期的[FPGA 设计的指导原则(一)给大家讲解FPGA 设计的指导原则. 当评估完系统的流水线时间余量后,发现整个流水线有 16 个时钟周期,而 FHT 模块的频率很高,加法本身仅仅消耗 1 ...

  3. 医用计算机软件属于,分类界定 I 征求《医用辅助决策软件分类界定指导原则》(征求意见稿)...

    原标题:分类界定 I 征求<医用辅助决策软件分类界定指导原则>(征求意见稿) ▲关于征求<医用辅助决策软件分类界定指导原则>(征求意见稿)意见的通知(图源:标管中心) 按照国家 ...

  4. 代码设计的基础原则_设计原则:良好设计的基础

    代码设计的基础原则 As designers, it's our goal to pass information in the most pleasing way possible. Startin ...

  5. 设计的萌芽阶段_第一章 设计的萌芽阶段 第一节 设计概念的产生

    第一节 设计概念的产生 在设计概念的产生过程中,劳动起着决定性的作用.劳动创造了人,而人类为了自身的生存就必须与自然界做斗争.人类最初只会用天然的石块或棍棒作为工具,以后渐渐学会了拣选石块.打制石器, ...

  6. ui设计入门书籍_书籍封面设计入门指南

    坦白说,我们大多数时候都根据本书的封面来判断一本书(并且有许多博客专门讨论消遣). 具有良好图形 ,醒目的字体和高质量封面的 书籍 比没有 书籍的书籍 出售更多的副本 –这是事实. 尽管有人说,书的封 ...

  7. 【干货】原型设计的八大指导原则

    产品原型设计没有你想象的那么难.实际上,相当容易.任何人都可以做原型.而且就像其他事情一样,熟能生巧.但这其中也有陷阱--搞砸原型设计也很容易. 我自己碰到.看到或者听到的大部分错误并不是因为选择了错 ...

  8. 【软件架构】软件架构设计常用概念、原则与思想

    导读 本文一文总结软件架构设计常用概念.原则与思想,包括面向对象六大原则,DID原则,ACID.CAP.BASE理论,中间层思想,缓存思想等. 软件架构设计常用概念.原则与思想 面向对象设计六大原则 ...

  9. 持久层是什么意思_软件项目实训及课程设计指导—如何在数据持久层中应用DAO模式...

    软件项目实训及课程设计指导--如何在J2EE应用系统数据持久层中应用DAO模式 1.为什么要在软件应用系统中提供数据持久层 软件应用系统中的数据持久层主要为整个软件应用系统提供数据访问功能服务,从而可 ...

最新文章

  1. ubuntu clion 创建桌面快捷方式
  2. opencv for arm
  3. JAVA中的通配符的符号_Linux下的通配符和特殊符号用法详解
  4. mybatis之一对多
  5. fcn网络结构代码_FCN实现2-模型结构及实现
  6. python 小说爬虫_从零开始写Python爬虫 --- 1.7 爬虫实践: 排行榜小说批量下载
  7. 实现弹出窗口并转到另一个页面
  8. 推荐几个清华和交大学霸公众号,值得学习
  9. 初始化和清理(垃圾回收器)
  10. excel文件撤销工作表保护
  11. App中自动生成二维码
  12. 程序设计基础知识点整理,超全!!!
  13. 这群人,用8年讲述体育能有多迷人
  14. 网易2018校园招聘:重排数列 [python]
  15. 淘宝/天猫获取淘宝直播分类id接口 API 返回值说明
  16. 20.JVM监控以及诊断工具-GUI篇
  17. html 好看的数据表格,CSS制作好看的网页表格
  18. Cannot autogenerate id of type java.lang.Integer for entity
  19. RaSa2.5.x利用Fallback处理超出范围的消息
  20. Python 编写 excel 点名软件

热门文章

  1. javascript简介,什么是 JavaScript?,JS的特征,开发环境
  2. 同学,同事,KTV聚会的小游戏
  3. 91uu浮云【简介】
  4. 编译原理 理论知识点
  5. 蓄水池采样算法(Reservoir Sampling)原理,证明和代码
  6. 【c++百日刷题计划】 ———— DAY6,带你轻松学习算法
  7. 一个聪明男人的娶人经验,很实在很有道理
  8. 炒外汇的你是否曾经遇到过以下的误区
  9. 计算机能否代替老师英语作文,雅思大作文范文关于电脑替代老师
  10. 【学术小白如何写好论文】文献综述