软件设计

浅谈嵌入式软件设计

岁酱吖の 提交于 2019-12-05 05:28:54
[TOC] 浅谈嵌入式软件设计 本文在21IC的公众号文章《多年嵌入式编程工程师经验分享:换个角度来编程》基础上结合自己理解而写,部分图片以及文字说明均来自互联网。 前后台模型 模型介绍 当开发过程中不使用OS时,几乎所有的嵌入式程序归根结底都是一个由无法停止的循环为结构构成的,即常见的 while(1) 或 for(;;) ,用流程图表示就是这样: graph TD stop[结束] start[查询IO或外设状态] --> section1[执行相关业务逻辑] section1 --> conditionA{退出无限循环?} conditionA -- YES --> stop conditionA -- NO --> section1 start_sub[业务逻辑]-->subconditonA{执行业务逻辑A?} subconditonA{执行业务逻辑A?}--YES-->subsection1[子功能A] subconditonA{执行业务逻辑A?}--NO-->subconditonB{执行业务逻辑B?} subconditonB--YES-->subsection2[子功能B] subconditonB--NO-->stop_b[结束] interp[触发中断]-->baoliu[保护现场] baoliu-->interp2[执行中断服务函数] interp2--

详细介绍软件架构设计的三个维度

感情迁移 提交于 2019-12-05 04:36:47
架构设计 是一个非常大的话题,不管写几篇文章,接触到的始终只是冰山一角,更多的是实践中去体会。这篇文章主要介绍面向对象OO、面向方面AOP和面向服务SOA这三个要素在架构设计中的位置与作用。 架构设计有三个维度,或者说是我们在考虑架构时需要思考三个方向。 这三个维度分别为面向对象、面向方面、面向服务。 这三个维度可以看作是正交的,但不同维度会互相印证,互相支撑,整个架构的示意图如图所示。 面向对象 面向对象技术最初是从面向对象的程序设计开始的,它的出现以上世纪60年代Simula语言为标志,并在Smalltalk语言的完善和标准化过程中得到更多的扩展和对以前思想的重新注解。 上世纪80年代中后期,面向对象程序设计逐渐成熟,被计算机界理解和接受,人们又开始进一步考虑面向对象的开发问题。直到现在,面向对象已经成为一种非常流行的编程方式,以及软件设计的架构。 面向对象提出有三个主要目标:重用性、灵活性和扩展性,强调对象的“抽象”、“封装”、“继承”和“多态”。它能让人们以更加接近于现实世界的方式来思考程序,这点可以说是面向对象最大的进步。 在OO思想的运用上,业界出现了很多好的经验与技巧,从而涌现出大量的设计模式,可以说面向对象是系统分析与设计时的一个很重要的方面。 面向方面 面向方面最初来源于hook技术,本质上就是满足扩展的需求,可以在程序中自由扩展功能。

UML类图和用例图

感情迁移 提交于 2019-12-05 02:51:07
软件体系结构的多视图   kruchten提出了软件体系结构的4+1视图模型,其中用例图位于中心位置(4+1视图中的1)。 逻辑视图   一种静态建模视图 进程视图   一种并发进程或任务视图 开发视图   一种子系统和构件设计视图 物理视图   一种反应物理拓扑结构及连接关系的视图、 UML图   应用开发中,uml表示法支持以下图: 用例图 类图 对象图 通信图 顺序图 状态机图 活动图 组合结构图 部署图 用例图   一个 参与者 (actor)发起一个用例(use case)。用例之间的关系分为如下: 关联(communication association) 包含(include) 扩展(extend) 类和对象   表示类的方框总是包含类名,并且可选择性的列出类的属性和操作.   对象关名称需要带有下划线,为了区分类和对象。 1. class 2. 类和属性 3. 类和属性和操作 类图   类图中,类之间的永久关系被描述成连接方框之间的连线。UML表示法支持以下三种类之间的主要关系类型: 关联关系 整体/部分关系 泛化关系 依赖关系 1. 关联关系   关联是两个或多个类之间的结构化关系。每个连接类的关联线的末端表明关联的多重性。   多重性的是的一个类的多少个实例可能和另一个类的单个实例有关。 类的多重性可以是(1),可选(0..1),零或多个() 单向关联

面向对象分析和设计简介(《UML和模式应用》读书笔记)

血红的双手。 提交于 2019-12-05 00:16:16
分析和设计这两个术语经常出现在一起,人们也很常常混淆二者的含义,其他它们是完全不同的概念。分析是对需求(或问题)的调查研究。设计是已经定义的问题,构造一个逻辑上的解决方案。分析让我们知道面临着什么问题,设计告诉我们要如何去解决。这样看来,分析在设计之前,设计在分析之后。实际上人们对问题和解的认识是不断细化和深入的,因此在工作中往往是分析、设计、分析、设计不断循环,直到问题和解足够的“好”。什么是“好”呢?就是得到涉众的一致认可。面向对象分析和设计就是使用面向对象这个工具进行分析和设计。对象这个词在分析和设计阶段具有不同的含义。在分析阶段,对象是业务领域内的概念。在设计阶段,对象指软件对象,如模块、组件、类等。面向对象分析就是从使用者的视角出发,发现和描述业务领域内的概念,建立一个业务模型。面向对象分析的的主要工作内容是编写用例,并通过用例发现和建立领域模型。面向对象设计将业务领域概念映射为可以编码实现的软件对象。主要的工作包括分配软件对象职责、确定软件对象协作方式和详细设计软件类。在使用面向对象这个工具时,熟练地为对象分配职责是一项非常重要的能力。 为了展示面向对象分析和设计的工具和方法,我们来看一个简单的例子。 示例:骰子游戏。 玩家掷2个骰子,如果总点数为7则玩家获得胜利,否则输掉游戏。我们先从定义用例开始。用例(use case)是用户使用系统(或解决方案)的场景和情节。

Java Part 001( 02_01_理解面向对象 )

时光怂恿深爱的人放手 提交于 2019-12-04 07:53:17
Java完全支持面向对象的三个基本特征: 继承、封装、多态 面向对象的方式实际上由OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程)三个部分有机组成 目前业界统一采用UML(统一建模语言)来描述并记录OOA和OOD的结果 2.1 面向对象 在目前软件开发领域的两种主流的开发方法: 结构化开发方法、面向对象开发方法 结构化程序设计方法 结构化开发方法: 主张按功能来分析系统需求, 其主要原则可概括为自顶向下, 逐步求精, 模块化等 结构化程序设计的局限性: 1. 设计不够直观, 与人类的思维不一致 2. 适应性差, 可扩展性不强 面向对象程序设计方法 面向对象开发方法: 基本思想是使用类、对象、继承、封装、消息等基本概念来进行程序设计 强调以现实世界中的事物(即对象)来构造软件系统, 根据这些事物的本质特点抽象为系统中的类, 作为系统的基本构成单元 面向对象的基本特征 封装: 将对象的实现细节隐藏起来, 然后通过一些公用的方法来暴露该对象的功能 继承: 实现软件复用的重要手段 多态: 将子类对象赋值给父类变量, 运行时依然可以表现出子类的行为特征( 同一个类型的对象在运行时可能表现出不同的行为特征 ) 除此之外, 抽象也是面向对象的的重要部分, 抽象就是忽略与当前目标无关的方面, 只关注与当前目标有关的方面. 抽象不打算了解全部问题, 而只是考虑部分问题.

区分OOA/OOD/OOP!!!!!

不打扰是莪最后的温柔 提交于 2019-12-03 15:56:19
OOA   Object-Oriented Analysis: 面向对象 分析方法   是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题。OOA与结构化分析有较大的区别。OOA所强调的是在系统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是对管理业务现状和方法的分析。   OOA(面向对象的分析)模型由5个层次(主题层、对象类层、结构层、属性层和服务层)和5个活动(标识对象类、标识结构、定义主题、定义属性和定义服务)组成。在这种方法中定义了两种对象类之间的结构,一种称为分类结构,一种称为组装结构。分类结构就是所谓的一般与特殊的关系。组装结构则反映了对象之间的整体与部分的关系。   OOA在定义属性的同时,要识别实例连接。实例连接是一个实例与另一个实例的映射关系。   OOA在定义服务的同时要识别消息连接。当一个对象需要向另一对象发送消息时,它们之间就存在消息连接。   OOA 中的5个层次和5个活动继续贯穿在OOD(画向对象的设计)过程中。OOD模型由4个部分组成。它们分别是设计问题域部分、设计人机交互部分、设计任务管理部分和设计数据管理部分。   一、OOA的主要原则。   (1)抽象:从许多事物中舍弃个别的、非本质的特征,抽取共同的、本质性的特征,就叫作抽象。抽象是形成概念的必须手段。   抽象原则有两方面的意义:第一

面向对象分析与设计—基本概念部分

强颜欢笑 提交于 2019-12-03 05:22:04
此次总结,我将面向对象分析与设计技术总结概括为三部分 第一部分: 面向对象基本概念 第二部分: 面向对象分析部分 第三部分: 面向对象设计部分 第一部分 面向对象基本部分 1.1 软件开发过程概述 1.2 面向对象技术   面向对象(Object-oriented)技术是一种新型程序设计方法,或者说它是一种新的程序设计范型,其基本思想是使用对象、类、封装、继承、聚合、关联、消息、多态等基本概念来构造系统的软件开发方法。它充分体现了分解、抽象、模块化、信息隐蔽等思想,可以有效地提高软件生产率、缩短软件开发时间、提高软件质量,是控制软件复杂性的有效途径。 (1)传统结构化方法与面向对象方法比较?   传统的结构化方法着眼于一个信息系统需要什么样的方法和处理过程。以过程抽象来对待系统的需求,其主要思想就是对问题进行功能分解,如果分解后得到的功能过大,那么再对这些功能进行分解,直到最后分解得到的功能能比较方便地处理和理解为止。它从算法的角度进行建模,所有的软件都用过程或者函数作为其主要构造块,所以,具有模型脆弱、难以适应需求的变动、维护较困难等特点。   与传统的结构化方法相比,面向对象方法在描述和理解问题域时采用截然不同的方法。其基本思想是,对问题域进行自然分割,以更接近人类思维方式建立问题域模型,从而使设计出的软件尽可能直观地描述现实世界,具有更好的可维护性,能适应用户需求的变化。

面向对象方法与UML的历史与发展

冷暖自知 提交于 2019-12-02 17:21:01
一、 不同的分析与设计方法 1.功能分解法( function decomposition ) 以系统需要提供的功能为中心来组织系统。 首先定义各种功能,然后把功能分解为子功能,对较大的子功能进一步分解,直到可给出明确的定义 设计功能 / 子功能所需要的数据结构 定义功能 / 子功能之间的接口。 (作为一种早期的建模方法,没有明确地区分分析与设计) 建模过程:层层进行功能分解 功能分解法得到的系统模型(由模块及其接口构成) 优点与缺点: 直接地反映用户的需求,所以工作很容易开始; 不能直接地映射问题域,很难检验结果的正确性; 对需求变化的适应能力很差; 局部的错误和修改很容易产生全局性的影响。 2.结构化方法: 结构化分析( structured analysis , SA ) 结构化设计( structured design 。 SD ) 结构化分析又称数据流法,其基本策略是跟踪数据流,即研究问题域中数据如何流动,以及在各个环节上进行何种处理,从而发现数据流和加工。得到的分析模型是数据流图( DFD ),主要模型元素是数据流、加工、文件及端点,外加处理说明和数据字典。 数据流图 结构化设计与功能分解法基本相同,基于模块的概念建立设计模型,分为概要设计和详细设计。 概要设计:确定系统中包含哪些模块以及模块之间的调用关系,得到模块结构图( MSD )。 详细设计

关于面向对象的伦理知识

纵饮孤独 提交于 2019-12-02 12:51:34
**```java /*面向对象的三大特征 *封装 *多态 *续承 所有面向对象的编程语言都有这三大特征。 采用面向对象的方式开发一个软件,生命周期当中:【整个生命周期中贯穿使用oo面向对象方式】 *面向对象的分析 ooa *面向对象的设计 ood *面向对象的编程 oop *类和对象的概念 *什么是类? -类在现实生活中是不存在的,是一个模板,是一个概念,是人类大脑是是思考抽象的结果。 -类代表了一类事物。 -在现实生活中,对象A与对象B之间具有共同特征,进行抽象总结出来一个模板,这个模板 被称之为类。 *什么是对象? -对象是实际存在的个体。现实生活世界当中实际存在的。 * 例如:描述一下整个软件开发过程: *程序员先观察现实世界,从现实世界当中寻找对象 *寻找了N多个对象之后,发现所有的对象都有共同特征 *程序员在大脑中形成一个模板(类) *java程序员可以通过java代码来表述一个类 *java程序员中有了类的定义 *然后通过类就可以创建对象 *有对象之后,可以让对象直接协作起来形成一个系统。 * 类----》【实例化】----》类 *对象又被称为实例化 / instance *对象---【抽象】-----》类 *重点: 类描述的是对象的共同特征 共同特征列如:身高特征 这个身高特征在访问的时候,必须先创建对象,通过对象去访问这个特征。 因为这个特征具体的某个对象上之后

js面向对象

廉价感情. 提交于 2019-12-01 18:28:58
一. JavaScript面向对象前言 1.1 什么是对象? Everything is object (万物皆对象)。 对象到底是什么,我们可以从两个层次来理解。 对象的组成 方法(有归属)----函数(自由的) 属性(有归属)----变量(自由的) 1.对象是单个事物的抽象 一本书、一辆汽车、一个人都可以是对象,一个数据库、一张网页、一个与远程服务器的连接也可以是对象。当实物被抽象成对象,实物之间的关系就变成了对象之间的关系,从而就可以模拟现实情况,针对对象进行编程。 2.对象是一个容器,封装了属性(property)和方法(method) 属性是对象的状态,方法是对象的行为(完成某种任务)。比如,我们可以把动物抽象为animal对象,使用“属性”记录具体是那一种动物,使用“方法”表示动物的某种行为(奔跑、捕猎、休息等等) 在实际开发中,对象是一个抽象的概念,可以将其简单理解为 : 数据集或功能集。 1.2 什么是面向对象? 面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式。它使用先前建立的范例,包括模块化,多态和封装几种技术。今天,许多流行的编程语言(如Java,JavaScript,C#,C+ +,Python,PHP,Ruby和Objective-C)都支持面向对象编程(OOP)。 相对于「一个程序只是一些函数的集合,或简单的计算机指令列表。