当前位置:文档之家› 面向对象的嵌入式软件IDE的架构与设计

面向对象的嵌入式软件IDE的架构与设计

面向对象的嵌入式软件IDE的架构与设计
面向对象的嵌入式软件IDE的架构与设计

中国自动化学会第二十五届青年学术年会论文集

面向对象的嵌入式软件IDE的架构与设计1

张小琪 王培进

1

(烟台大学 计算机科学与技术学院,山东,烟台 264005)

(E-mail: wpj@https://www.doczj.com/doc/d517851289.html, , zxq@https://www.doczj.com/doc/d517851289.html, )

摘 要:嵌入式硬件发展日新月异,使得软件的比重逐渐加大,针对目前嵌入式软件开发工具的不足,本文提出利用面向对象的技术来设计一种嵌入式软件IDE,使设计人员利用可重用的组件模块,搭建符合硬件要求的软件系统,大大提高开发效率和软件质量。 关键词:面向对象,嵌入式软件IDE, 交叉编译, 内核移植

Object-Oriented Design and Implementation of

Embedded System IDE Software

ZHANG Xiao-Qi WANG Pei-Jin

(School of Computer Science and Technology,Yantai University, Yantai 264005, China)

(E-mail: wpj@https://www.doczj.com/doc/d517851289.html, , zxq@https://www.doczj.com/doc/d517851289.html, )

Abstract The rapid development of embedded hardware makes the proportion of software design increase gradually. This paper proposed one method of designing embedded software IDE based on object oriented technology because of the shortcomings of current IDE .Software designers can use these reusable components modules to infrastructure software system which meets the hardware system. This greatly improves the efficiency and quality of the development of software. Key words Object-Oriented ; Embedded software IDE; Cross Compile; Kernel Porting

1

烟台市科技攻关资助项目(2007148)

Supported by Yantai science and technology Department (2007148) 收稿日期 2010-05-12 收修改稿日期2010-07-01

Received Date 2010-05-12; in revised form Date 2010-07-01

1 引言

随着芯片、软件、网络等技术的发展,嵌入式已经被广泛应用于科学研究、工程设计、军事技术以及文艺商业等领域,人们已经进入了后PC 时代,嵌入式系统正在以各种不同的形式改变着人们的生产,生活方式。它是以应用为中心,以计算机技术为基础,软硬件可剪裁,符合应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统[ 1 ]。

微处理器的高度集成化,操作系统的引进以及人们对嵌入式系统应用要求的提高,导致嵌入式系统开发中软件设计的难度空前复杂,集成开发环境(IDE)也就随之出现。但目前,大多数嵌入式开发商仍然在沿用低效率的工具和方法。设备软件开发人员必须面对诸多方面的困难,来自软件架构、操作系统和中间件等多个层次的复杂性困扰着他们。同时,由于缺乏集成化的开发环境,开发人员常常必须混合使用来自不同提供

中国自动化学会第二十五届青年学术年会论文集

商的开发工具,由此带来的复杂性也不可忽视。可见,在设备软件开发领域,仅仅由于开发工具和开发方法的一致性和整合性的问题,就给整个产业的发展造成了非常大的障碍。理想的状态是,设备软件开发人员不应该再去担心操作系统、功能集成和软件平台问题,而是将主要精力放在产品的差别化和竞争优势方面。但实际情况是,设备软件开发人大部分精力花在了工具、方法和集成性方面。

嵌入式软件采用的各种开发工具很多都来自不同的提供商,也很少考虑相互之间的兼容性,效率自然不是很高。开发人员发现,他们的工作就像是每设计一部车的时候都要从重新设计轮胎开始,基本上没有办法从已有的设计方案中重复利用原有的设计成果和知识产权。嵌入式软件在概念上主要局限于操作系统和开发工具。而且,许多制造商都采用自己开发的专有操作系统和开发平台,通用性就更差。

面向对象技术是当前实现软件模块化,提高软件复用性最优的方法,现在成为计算机领域中的一种主流技术,本文提出利用面向对象的技术来设计一种嵌入式软件IDE,对嵌入式软件开发中的各个对象的类进行分析与设计,架构一个通用的开发模型,根据硬件配置自动产生基本的系统软件方案。只需要系统中的每个对象类的属性及其操作设置,自动搭建交叉编译环境,降低操作系统裁减和移植的难度,产生驱动程序的基本框架。开发人员只需要配置好各个模块的基本信息,将更多精力集中在系统的应用上。

2嵌入式软件的开发流程

与常见的PC和服务器软件不同,嵌入式软件主要是对设备内部各部分的运行进行协调,并不与设备使用者发生直接接触。PC和服务器软件的运行环境是标准化的,而嵌入式软件的运行环境随电子设备的不同而改变,必须针对不同的电子产品进行专门的设计、开发和优化。由于嵌入式Linux 操作系统在嵌入式开发中占据了主流,因此本文围绕针对移植有Linux操作系统的嵌入式开发流程进行讨论。

典型的基于嵌入式Linux操作系统的嵌入式软件开发流程如下[ 1 ]:

(1)获取硬件系统的信息:如选取的微处理器体系,Flash型号、网卡型号及其他外设的信息等;

(2)建立交叉编译工具:一般的GCC 工具都是针对X86体系的,为了能够生产目标板执行的代码必须建立交叉编译工具;

(3)开发Bootloader:建立启动系统的主引导程序;

(4)移植Linux内核:如基于Linux2.6内核移植;

(5)开发一个根文件系统:如rootfs的制作;

(6)开发特定硬件的驱动程序:如LCD,Keypad等;

(7)开发上层的应用程序:如QT GUI 开发。

对于开发过程的各个环节,有的提供了辅助的开发工具,有的需要完全依赖经验手工从底层开发,嵌入式软件开发依然停留在手工作坊式的方式,很难做到工程化管理。本文所设计的IDE将涵盖整个开发的各个重要环节,力求最大程度上降低开发难度,在集成化开发环境里完成主要工作。

3 IDE面向对象的分析与设计

对于运行嵌入式Linux操作系统的系统,根据其开发流程,利用面向对象技术分析设计出6个基本的大类,如图1、2、3所示,并给出对象之间的协作关系图。这几个大类贯穿了嵌入式软件开发的重要环节。

图1 嵌入式软件IDE基本类

Fig.1 Basic classes of embedded software IDE

中国自动化学会第二十五届青年学术年会论文集

硬件系统信息类,承载了硬件系统的描述信息,比如选取何种体系的微处理器,处理器的工作频率设置,采用何种启动方式,是NandFlash,还是NorFlash或者EPROM

图2 基本类详细信息Fig.2 Details of basic classes

中国自动化学会第二十五届青年学术年会论文集

图3 基本对象的协作图

Fig.3 Collaboration diagram of basic objects

等,用户通过设定这些参数,其他对象将获取其中的信息进行配置。

嵌入式开发需要交叉编译,Linux环境下一般就是采用开源Gcc系列进行配置,环境搭建类管理交叉编译链的源代码,根据体系架构的信息自动生成运行脚本,在制定目录下生成完整的交叉编译链,这是嵌入式开发的基础。

工程管理类,集成开发环境的主要目的就是同一组织文档,省却人工管理,自动编译运行源码,其中包含了文件操作,组织好源代码之间的关系,利用make技术进行编译,牵扯到大量全局环境参数的设定。

引入控制字库类是方便部分程序的编写,比如Bootloader类需要对处理器初始化,基本的驱动控制器进行操作,其中包含了汇编指令级别和c语言的操作,开发人员往往需要对参考手册熟练掌握,大大降低了开发效率。控制字库尽量包含了常见的处理器系列的寄存器控制字库,只需选择某个具体功能,便可产生需要的指令源码。同样驱动程序开发中,也是频繁利用了c语言对寄存器进行操作。

系统移植类涵盖了整个系统需要移植的模块,引导程序,操作系统内核和文件系统,各类封装了大量繁杂的细节内容,尽量以最简化形式帮助开发人员完成操作,重要的环节只需设定参数,其他交由对象自动执行。

面向对象最重要的特征就是“高内聚度和低耦合性”,各个对象封装了细节操作,只需要有限的外部接口交换信息,这种柔性思想最大程度上提高了软件的复用性,本文所设计的IDE,根据体系结构的不同,所需修改的只是个别对象的内部数据和操作,整体架构不受任何影响[ 2-3 ]。

4系统的具体实现

目前可视化的面向编程语言种类比较多,从对面向对象技术的支持程度上来说,

微软最新的VC#从封装性,类型安全性方面相当强大。重要的是,类层次清晰,编码容易,可以根据面向对象设计的框架轻松的进行转换,却和C++一样强大。所以本文利用VC#设计了嵌入式软件IDE,对各个类编写详细代码。整个系统基本架构图如图4所示:

图4 IDE的系统架构图

Fig.4 System architecture of IDE

集成开发环境运行于Windows平台下,但需要Linux的强大命令集,在此,本文提出了Cygwin技术来模拟Linux运行环境,从而使得IDE的底层得到强大的各种命令支持,可以运行各种脚本文件。此技术属于开源项目,安装后需个别地方的细节修改。 交叉编译工具链模块是IDE设计的核心,开发一个实用的编译器,需要花费大量的人力物力和财力,其可靠性也要到时间的考验。

中国自动化学会第二十五届青年学术年会论文集

幸运的是,GNU提供了免费的,功能强大的GCC工具链,它不仅可以编译Linux操作系统下的应用程序,以及Linux内核,而且还是一款交叉编译器,支持ARM,PowerPC,x86,Intel960,M68等几乎所有知名的CPU厂家,而且国外大多数集成开发工具都从GCC移植而来。

本文的交叉编译工具链模块并不是单独的针对某个体系结构,可以重定向,根据参数配置,生成某个系列的编译工具。如图 5所示。

图5 交叉工具链模块

Fig.5 Module of cross compile chains

软件设计的一个重要环节就是,要组织好源代码之间的关系,编译连接,这就要用到工程化的手段去管理源码。这是IDE设计中的桥梁。如图6所示,本文利用的Makefile技术对整个工程进行管理,主要就是针对驱动程序和应用程序的组织和编译。Makefile是Linux工程管理的一项成熟的技术,有一套完整的规则,只需要按照规则去编写Makefile文件,然后由make命令去解释执行。Cygwin中集成了Gnumake,因此只要编写好Makefile文件,只需一个make 命令,就可以完成所有的编译连接工作。

图6 工程管理模块

Fig.6 Module of Project Management

大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux 下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。一个关键技术就是显示信息重定向到IDE指定的输出窗口,各种脚本运行信息都是标准控制台输出,因此需要将编译中的标准信息和错误信息进行重定向。通常是靠管道技术来解决这个问题,但嵌入式开发中许多编译过程长达数小时,信息往往需要进程结束才能完全显示。本文IDE则采用了管道技术加异步式读取技术,使得重定向和信息显示同时进行,及时反馈编译过程中的各种信息。

图7 Bootloader是嵌入式系统的引导加载程序,它的作用是初始化必要的硬件设备,创建内核需要的一些信息并将信息通过相关机制传递给内核,从而将系统的软硬件环境带到一个合适的状态,最终调用操作系统内核,真正起到引导和加载内核的作用[ 5 ]。Bootloader依赖于硬件实现,除了体系结构,还依赖于具体的嵌入式板级设备的配置,因此Bootloader是嵌入式开发移植最困难的部分,一般来说都是将已有的代码进行大量的修改,本文采用的是U-Boot 1.2.0,目前来说是比较通用的Bootloader。

图7 Bootloaer移植模块

Fig.7 Module of bootloader porting

针对这部分移植,为了最大程度上帮助用户完成代码的修改,IDE提供不同类型的体系架构需要修改的源码的提示信息,以及某种配置下需要修改的提示信息,需要建立一个帮助文件数据库。通过控制字库模块添加需要的源码。其实一般来说,修改都是大同小

中国自动化学会第二十五届青年学术年会论文集

异,最主要的是修改两个方面,何种方式启动,是Nadflash还是Norflash,如果是Nandflash启动,需要定义芯片配置函数,增加Nandflash拷贝数据到内存的代码。还有就是为了利用tft协议烧录内核到flash,需要针对某种网卡芯片进行修改。

简单来说,内核配置无非就是生成一个配置文件,由Makefile来读取,不同的架构,就会选择不同架构目录下的源码。但是内核配置比较繁杂,一般人员很难理清源码之间的关系,配置不好,不仅无法编译,即使勉强编译成功,也未必能够正常运行。 而且,内核不单单是配置问题,还有部分源码根据需要必须修改,比如如果是Nandflash作为存储器,需要建立Nandflash 分区表。对于内核配置,本文IDE提供利用模板来进行二次配置,建立模板数据库,根据用户的参数设定,提供符合条件的模板,如果模板基本符合要求,就可以利用模板进行编译,如果需要细节的修改,则调用内核配置工具来进行配置,内核配置工具利用make xconfig形式,产生图形化界面,当然需要X系统的支持,需要在Cygwin中安装,修改。对于内核源码修改,则需要帮助文件数据库,根据用户参数设置,产生需要的源码,添加到内核中去,如图8所示。

图8 内核移植模块

Fig.8 Module of kernel proting

根文件系统是Linux/Unix系统启动的一个重要组成部分,也是操作系统正常工作时候的必要组成部分,在启动时候内核需要跟文件系统来挂载。在现代Linux操作系统中,内核代码影像文件保存在根文件中,系统引导启动程序会从这个根文件设备商把内核代码加载到内存中取运行。

嵌入式根文件系统有RomFS,JFFS2,NFS,EXT2,RAMDISK,Cramfs等,每个系统都有自己的特点,最常用的就是Cramfs文件系统,Cygwin工具集中提供了Cramfs工具,mkcramfs。嵌入式根文件的最底层目录中,都有其具体的用途和目的,因此必须建立最基本的根目录。而且一些根目录下必须有固定的文件,如/bin,/sbin,/usr/bin,/usr/sbin需要放置Linux命令工具,/etc 目录下需要系统配置文件,包括启动文件。因此,本模块要完成这么几个功能,提供必须的根目录,根目录下的文件,将根目录制作成某种跟文件系统,本文暂时提供Cramfs 文件系统。图9所示,嵌入式Linux命令工具集由BusyBox工具提供,它包含了很多标准Linux工具的单个可执行实现,本文的IDE提供了一个BusyBox的标准配置,只需要利用交叉工具链进行编译。

图9 根文件制作模块

Fig.9 Module of boot files making

驱动程序编写模块和应用程序编写模块只要提供一个文本编辑器,利用工程管理部分去组织源码进行编译。这里重点讲一下驱动程序的编写,Linux驱动程序都有一套固定的模式,比如字符型、块型、网络型数据结构都有区别,但每种类型的驱动程序架构都一样。另外驱动程序编写中最重要的就是对控制字的读取和编写,即使开发人员对某个体系下的控制字十分熟悉,也要经常参

中国自动化学会第二十五届青年学术年会论文集

考手册才能准确无误[ 4 ]。

因此本文提出了驱动程序编写得模式,一个是选择类型,自动生成某种类型的模板,在此模板上进行添加修改;第二就是利用控制字模块,在开发驱动程序过程中,开发人员可以选择某个体系结构下的针对某种具体寄存器的操作,然后会自动产生必要的代码,只需要将代码嵌入到驱动程序源码中。另外,如果驱动程序要添加到内核去,需要重新重新配置内核。如图10所示。

图10 驱动程序编写模块

Fig.10 Module of driver program edit

最后在嵌入式软件IDE环境中,针对ARM系列的2410平台进行了U-Boot、Linux2.6内核、根文件系统的配置和移植,编写出基本的网卡驱动程序,测试成功。

5 总结

本文针对嵌入式软件开发工具的匮乏和不足,利用面向对象技术设计了一种集成开发环境,开发人员利用各模块的组合,搭建自己的系统软件。面向对象技术的低耦合性提高了IDE的可复用性,而高内聚度,使得开发人员不必关心繁杂的内部细节,将更多精力专注于应用逻辑上。统一的开发环境,也消除了过去工具间的兼容性问题。目前本IDE架构还略显粗糙,技术不够完善,有待于进一步解决。

参考文献

1.李亚峰,欧文胜. ARM嵌入式Linux系统开发.

北京:清华大学出版社,2007:1-4,34-35 2.朱成果. 面向对象的嵌入式系统开.北京:北京航天航空大学出版社, 2007:25-30

3.]Lan Grahem. 面向对象的方法原理与实践(第3版).袁兆山,等译.北京:机械工业出版社, 2003. 4.孙则天. 嵌入式设计及Linux驱动开发指南.

北京:电子工业出版社, 2005

5.(美)David E.Simon著陈向群等译.嵌入式系统软件教程. 北京:机械工业出版社, 2005

张小琪 (1982-),男,硕士研究生,研究方向:面向对象的嵌入集成开发平台。

(ZHANG Xiao-Qi (1982-), Master student, mainly interested in embedded system.)

王培进(1964-),男,博士,硕士生导师,主要研究智能控制,计算机控制等。

(WANG Pei-Jin (1964-), PhD, mainly interested in intelligent control, computer control system.)

面向对象的嵌入式软件IDE的架构与设计

作者:张小琪, 王培进

作者单位:烟台大学计算机科学与技术学院,山东,烟台 264005本文链接:https://www.doczj.com/doc/d517851289.html,/Conference_7316860.aspx

嵌入式系统软硬件架构和开发流程

嵌入式系统软硬件架构和开发流程 摘要:嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。本文嵌入式 系统软硬件架构和开发流程进行探讨。 关键词:嵌入式;软硬件架构;开发 1.嵌入式系统定义 嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌 入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有 带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统, 有些嵌入式系统还包含操作系统,有些嵌入式系统是由单个程序实现整个控制逻 辑(裸跑)。嵌入式系统是软件和硬件的综合体,软硬件可裁剪,适应应用系统 对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。 2.嵌入式系统的构成 2.1 硬件层 硬件层中包含嵌入式微处理器、存储器(SDRAM、ROM、Flash等)、通用设 备接口和I/O接口(A/D、D/A、I/O等)。在一片嵌入式处理器基础上添加电源 电路、时钟电路和存储器电路,就构成了一个嵌入式核心控制模块。其中操作系 统和应用程序都可以固化在ROM中。 微处理器的体系结构可以采用冯·诺依曼体系或哈佛体系结构;指令系统可以 选用精简指令系统和复杂指令系统。RISC计算机在通道中只包含最有用的指令, 确保数据通道快速执行每一条指令,从而提高了执行效率并使CPU硬件结构设计 变得更为简单。全世界嵌入式微处理器已经超过1000多种,体系结构有30多个 系列,其中主流的体系有ARM、MIPS、PowerPC、X86等。 嵌入式系统需要存储器来存放和执行代码。嵌入式系统的存储器包含Cache、主存和辅助存储器等。Cache是一种容量小、速度快的存储器阵列它位于主存和 嵌入式微处理器内核之间,存放的是一段时间微处理器使用最多的程序代码和数据。在需要进行数据读取操作时,微处理器尽可能的从Cache中读取数据,而不 是从主存中读取,这样就大大改善了系统的性能,提高了微处理器和主存之间的 数据传输速率。Cache的主要目标就是:减小存储器(如主存和辅助存储器)给 微处理器内核造成的存储器访问瓶颈,使处理速度更快,实时性更强。 在嵌入式系统中Cache全部集成在嵌入式微处理器内,可分为数据Cache、 指令Cache或混合Cache,Cache的大小依不同处理器而定。一般中高档的嵌入式微处理器才会把Cache集成进去。 主存是嵌入式微处理器能直接访问的寄存器,用来存放系统和用户的程序及 数据。它可以位于微处理器的内部或外部,其容量为256KB~1GB,根据具体的应 用而定,一般片内存储器容量小,速度快,片外存储器容量大。 辅助存储器用来存放大数据量的程序代码或信息,它的容量大、但读取速度 与主存相比就慢的很多,用来长期保存用户的信息。 嵌入式系统中常用的通用设备接口有A/D、D/A,I/O接口,RS-232接口、Ethernet、USB、音频接口、VGA视频输出接口、现场总线、串行外围设备接口和 红外线接等。 2.2中间层 硬件层与软件层之间为中间层,也称为硬件抽象层或板级支持包,它将系统

软件工程报告面向对象设计

软件工程报告面向对象设计 在分析阶段之后,使用面向对象设计(OOD)将概念模型进一步发展为面向对象模型。在OOD中,将分析模型中与技术无关的概念映射到实现类上,确定约束并设计接口,从而形成解决方案领域的模型。简而言之,构建了详细的说明,指定如何在具体技术上构建系统 面向对象设计的阶段可以标识为- ●系统上下文的定义 ●设计系统架构 ●识别系统中的对象 ●设计模型的构建 ●对象接口规范 系统设计 面向对象的系统设计涉及定义系统的上下文,然后设计系统的体系结构。 ●上下文-系统的上下文具有静态和动态部分。使用整个系统的简单框图设计 系统的静态上下文,该框图被扩展为子系统的层次结构。子系统模型由UML 包表示。动态上下文描述了系统如何与其环境交互。它使用用例图建模 ●系统架构-系统架构是根据系统上下文根据架构设计和领域知识设计的。通 常,系统分为几层,每层分解以形成子系统。 面向对象的分解 分解意味着按照分而治之的原则,将一个大型的复杂系统划分为具有较小复杂性的较小组件的层次结构。系统的每个主要组成部分都称为子系统。面向对象的分解可识别系统中的各个自治对象以及这些对象之间的通信。 分解的优点是- ●各个组件的复杂度较低,因此更易于理解和管理。 ●它可以使具有专业技能的劳动力分工。 ●它允许替换或修改子系统,而不会影响其他子系统。 识别并发 并发允许多个对象同时接收事件,并允许同时执行多个活动。并发在动态模型中标识并表示。

为了启用并发,每个并发元素都分配有单独的控制线程。如果并发处于对象级别,则为两个并发对象分配两个不同的控制线程。如果单个对象的两个操作本质上是并发的,则该对象将在不同的线程之间拆分。 并发与数据完整性,死锁和饥饿问题相关。因此,无论何时需要并发,都需要制定明确的策略。此外,并发需要在设计阶段本身进行识别,并且不能留给实施阶段。 识别模式 在设计应用程序时,针对某些类别的问题采用了一些公认的解决方案。这些是设计模式。模式可以定义为可以在某些类型的应用程序开发问题中使用的一组文档化的构建基块。 一些常用的设计模式是- ?外墙图案 ?模型视图分离模式 ?观察者模式 ?模型视图控制器模式 ?发布订阅模式 ?代理模式 控制事件 在系统设计期间,需要识别并适当处理可能发生在系统对象中的事件。 事件是具有时间和空间位置的重大事件的说明。 可以建模的事件有四种类型,即- 信号事件-被一个对象抛出并被另一个对象捕获的命名对象。 呼叫事件-表示操作调度的同步事件。 时间事件-代表时间流逝的事件。 更改事件-表示状态更改的事件。 处理边界条件 系统设计阶段需要解决整个系统以及每个子系统的初始化和终止问题。记录的不同方面如下- ●系统的启动,即系统从非初始化状态到稳态的过渡。 ●系统终止,即关闭所有正在运行的线程,清理资源以及要发送的消息。

什么是面向对象程序设计

1 什么是面向对象程序设计,它与传统的结构式程序有什么不同。 面向对象程序设计是一种适用于设计、开发各类软件的范型。它是将软件看成是一个由对象组成的社会:这些对象具有足够的智能,能理解从其他对象接受的信息,并以适当的行为作出响应;允许低层对象从高层对象继承属性和行为。通过这样的设计思想和方法,将所模拟的现实世界中的事物直接映射到软件系统的解空间。 与传统的结构式程序设计相比,面向对象程序设计吸取了结构式程序设计的一切优点(自顶向下、逐步求精的设计原则)。而二者之间的最大差别表现在: ·面向对象程序采用数据抽象和信息隐藏技术使组成类的数据和操作是不可分割的,避免了结构式程序由于数据和过程分离引起的弊病。 · 面向对象程序是由类定义、对象(类实例)和对象之间的动态联系组成的。而结构式程序是由结构化的数据、过程的定义以及调用过程处理相应的数据组成的 2 用面向对象方法建立模型的思维过程是怎样的。 用面向对象方法建立拟建系统的模型的过程就是从被模拟现实世界的感性具体中抽象要解决的问题概念的过程。这种抽象过程分为知性思维和具体思维两个阶段,其中:·知性思维是从感性材料中分解对象,抽象出一般规定,形成了对对象的普遍认识。·具体思维是从知性思维得到出的一般规定中揭示的事物的深刻本质和规律,其目的是把握具体对象的多样性的统一和不同规定的综合。 3 解释以下概念: ①对象:在现实世界中,对象就是可以感觉到的实体。每个对象具有一个特定的名字以 区别于其他对象;具有一组状态用来描述它的某些特性;具有一组操作,每一个操作决定对象的一种功能或行为(为自身服务的操作和为其他对象提供服务的操作)。而在面向对象系统中,对象是可以标识的存储区域。每个对象的状态被保存在此区域中,而实现一类对象行为的操作(代码)被保存在另外相关的存储器区域中。 ②消息:消息是要求某个对象执行其某种功能操作(方法)的规格说明。因此,消息是 由消息的接收者、消息要求提供的操作(消息名)和必要的参数组成的。 ③类:在现实世界中,类是对一组具有共同特性(属性和行为)的客观对象的抽象。而 在面向对象系统中,类是由程序员自定义的具有特定结构和功能的类型,是一种代码共享的手段。 ④实例:任何一个对象都是该对象所属类的一个具体实例。 ⑤公有消息:是由对象外向对象发送的消息,用于激活该对象的某种方法。 ⑥私有消息:是由对象向自身发送的消息,用于内部操作;该类消息不能从对象外向该 对象发送。 ⑦消息序列:在面向对象系统中一个事件的发生总会有多个对象的多次相互作用才能完 成,使得这些对象能够相互作用的消息组成的序列被称为消息序列。 4 类与实例的关系如何? 类是创建对象的模板,而对象是实现类的实例。属于同一类的不同实例必须具有: ·相同的操作集合; ·相同的静态属性集合; ·不同的对象名和属性动态值。

浅析C语言嵌入式系统编程软件设计架构

浅析C语言嵌入式系统编程软件设计架构 发表时间:2018-09-04T11:58:13.513Z 来源:《建筑学研究前沿》2018年第10期作者:田壮[导读] 一个方向是自顶向下,从抽象到具体,从最顶层的程序或者逻辑整体描述规范出发向下到具体的操作模块。 美的洗涤电器制造有限公司 528311 摘要:C语言是嵌入式软件开发使用最多的语言,主要是由于C语言兼具高低级语言的特性,简洁高效、灵活方便,支持对硬件的直接操作,但其灵活性也往往会带来复杂的代码管理和维护问题。基于此,本文就从C语言嵌入式系统编程软件设计展开分析。 关键词:C语言;嵌入式系统;编程软件设计 1、系统设计思路 1.1自顶向下与自底向上 一个方向是自顶向下,从抽象到具体,从最顶层的程序或者逻辑整体描述规范出发向下到具体的操作模块,这是目前嵌入式系统应用层开发常用的方法。在嵌入式系统设计过程中,可以将两种方法结合使用,针对硬件的操作采用自底向上,尽可能抽象出所有的元操作,应对不同上层应用的重用要求;在逻辑应用上,则采用自顶向下,对应用逻辑表达进行抽象规范,尽量使得模块划分便于开发实现、重用和维护。 1.2最优模块化 ①紧凑性,封装良好的模块决不互相暴露内部信息,也不去调用其他模块的操作实现,而是通过函数接口来相互通信; ②正交性,任何模块的功能点应当是唯一的、无歧义的,在系统中以确定无疑的方式存在。在纯正交的模块设计中,每一个操作行动只限于该项功能,系统的每一属性只有一条途径改变,不影响其他功能,这有助于将复杂的设计紧凑化。 2、嵌入式系统开发的分层架构 2.1分层原则 ①层次划分兼顾功能颗粒度和重用可能性,每层解决不同的问题,下层要能够为上层应用提供支撑,比如环境温度监测功能,可以从概念上划分为数据采集层、处理层、显示层等,层层递进实现; ②层与层之间的相关性尽量小,确保某一层的软件设计出现问题,只会影响到该层次的上下结构,不会影响到软件系统的整体; ③每层内部按照任务分解、功能优化、重用程度进行模块划分,尽量实现软件功能的高内聚、低耦合。理论上,功能分解得越简单,实现起来越容易,重复使用频次就会越高,但目标过度细化会使设计管理、功能调度的复杂度迅速上升,所以一般划分到概念上能够独立完成一项功能、与其他功能相关性合适的程度。 2.2分层设计方法 首先,采取自顶向下的方法对嵌入式系统应用需求进行梳理,抽象出不同的逻辑功能要求,明确概念层次,再转化成软件层次。 其次,采取自底向上的方法对涉及到的硬件功能进行抽象,应尽可能细化出应用开发需要的硬件操作原语。对于嵌入式系统而言,大量的开发工作是通过软件驱动底层硬件实现相应的专用功能,对硬件功能的封装既有利于降低当前系统开发的复杂度,又便于实现硬件的无关性,提高程序代码的复用性。 再次,采用自顶向下和自底向上相结合的方法,逐层检验相邻层次间的信息交互和调用关系,确保每一个上层的调用都能得到满足。 最后,对每一层的功能进行合并整合,优化功能模块设计,努力实现最优模块化。在实际系统开发中,最优模块化的过程也是对现有程序代码重用的优化选择过程。 2.3分层技术的应用 常见的功能模块划分是围绕中心处理器/控制器来设计系统逻辑架构,采用面向过程的设计思路,区分为输入/输出、应用调度、设备驱动、网络通信等功能模块。这样的划分方式能够充分利用系统的处理能力,进行精细化的存储空间管理,但也带来应用逻辑交叉重复、与硬件依赖关系强等缺点,很难进行功能拓展,代码重用性也较差。 ①应用管理层。主要实现界面交互、业务逻辑调度等功能。 ②算法协议层。主要实现模型算法、协议解析、文件管理、数据库管理等功能,如位置转换计算、罗盘指针方位计算等。 ③功能拓展层。主要实现器件的无关性,提供各种器件的通用性处理、接口访问等功能,如LCD的线、圆、矩形处理,传感器数据转换等功能。 ④硬件驱动层。主要实现硬件的无关性,提供硬件的操作原语功能,如LCD的定位、写点、写字节、传感器数据采集等功能。上述分层设计方案,将同类或相似技术实现的功能进行聚合,减少业务应用、模型算法和硬件操作之间的耦合性,避免功能在分析设计中的交叉混淆,整个应用程序的结构变得更加清晰和灵活,使得一个成熟的模型算法能够支持多个应用逻辑,一个成熟的软件功能模块能够适应不同的硬件环境,提高了软件功能模块的开发效率和可重用性。 3、基于C语言的系统软件设计 3.1代码管理 ①文件目录管理。按照分层原则组织文件目录,主程序文件、全局变量头文件放在根目录,其他文件按照应用管理层、算法协议层、功能拓展层、硬件驱动层分别存放在AppFunc、ModelFunc、HardExt、HardOpt文件夹,所有文件命名遵循统一的规范。如果有第三方的通用函数库,可以建立ComFunc文件夹来存放。这样在开发过程中,可以充分利用分层模型的优势,各层功能的开发人员可以在不同的文件夹内进行并行工作,实现工程化管理。 ②功能模块管理。为了实现模块化设计的高内聚性,应少用或不用全局变量,尽量通过函数参数来传递数据。同一类的业务应用功能、同一硬件的操作功能尽量放在同一文件内实现。上层功能模块的开发可以调用下层功能模块,下层功能模块尽量避免交叉调用或越级调用。

面向对象系统的分析与设计

面向对象系统的分析与设计》学习报告 面向对象系统的分析与设计课程是本专业的一门重要的专业课。通过本课程的学习,使我在已有的计算机软硬件基础知识、程序设计知识、数据库和网络通信知识的基础上系统掌握了面向对象系统的分析与设计方法和技术,并初步具备了针对特定环境下的应用问题进行信息系统开发(包括系统分析、设计与实现)的能力。现将学习情况作以下汇报。 一、面向对象概述 在 20 世纪 60 年代以前,软件开发者构造的软件系统大多都是较小的,且相对简单。编程语言及编程环境也相对简单,随着软件复杂性的增长,为了更好地维护代码,软件开发也需要方法来进行约束。传统的方法中,结构化方法和基于建模方法是典型的软件开发方法。结构化方法是结构化分析、结构化设计和结构化编程的总称。结构化方法的思想萌发于20世纪60年代,是在70年代由TomDe Macro和 Ed Yourdon 等人被系统地进出来。其目的在于,提供一个有序的机制,通过抽象来理解待开发的系统,试图产生结构良好的软件系统。但对于较复杂的系统而言,容易导致模块的低内聚和模块间的高耦合,从面使得系统缺乏灵活性和可维护性。基于建模方法在 20 世纪 70年代末提出,即Peter Chen的实体一一关系法与Ed Codd的关系数据库理论相结合提出的一种新的软件开发方法。其强调对信息实体建模,而不是对象建模。结构化方法和基于建模方法都没有较强地描述系统的动态行为的能力。随着计算机技术的飞速发展,计算

机管理系统应用的普及,企业信息化势在必行。传统开发方法结构化开发的软件存在很多问题,其有稳定性、可修改性和可重用性都比较差,生产效率低等缺陷,这是因为传统的软件开发是面向过程的。然而,用户需求的变化大部分是针对功能的,采用面向对象方法开发可以满足用户的需求,因为面向对象有以下优点:能够比较自然地反映现实事物,可重用性、可维护性和可扩展性比较强。 什么是面向对象呢?“面向对象”本身没有任何意义。“对象” 大概是英语中最普通的一个单词。它在字典中的定义是这样的。对象:能感觉到或能够被感觉到的东西。换句话说,对象可以是任何东西! “面向”也没有任何特别的含义,它的定义是“指向” 。在这种定义下,“面向对象”被理解为形容词。因此,面向对象可以定义成这样,面向对象:指向你可以想到的任何东西。 毫无疑问,软件工业无法为“面向对象”下一个统一的定义。这种模糊性使得任何一个软件零售商都声称他们的商品是“面向对象” 的。 1 面向对象的基本概念 尽管权威人士对面向对象的概念没有达成一致的意见,但从程序设计方法的角度来看,面向对象是一种新的程序设计范型。其基本思想是使用对象、类、封装、继承、关联、聚合、消息、多态性等基本 概念来进行程序设计。 1.1 对象 (Object)

软件与软件工程-面向对象设计

第9章面向对象设计

9.1 面向对象设计与结构化设计 与结构化的设计相比,面向对象的设计更符合复杂的、随机性较强和考虑并发性的系统软件设计,而不适合逻辑性很强的系统软件设计。结构化软件设计一般从系统功能入手,按照需求将系统功能分为若干个子功能模块。但是,用户的需求是在不断变化的。需求的改变往往会对功能模块产生影响,从而对整个系统产生影响,而面向对象的设计基于类、对象、封装、继承等概念,相比之下,需求的变化对系统的局部影响并不容易扩展到全局。因此,面向对象设计方法比结构化设计方法更具有优势,使用范围更广。 由于在类中封装了属性和方法,因此在面向对象的类设计中已经包含了面向过程中的过程设计。此外,与面向过程中的数据设计所不同的是,面向对象设计中的数据设计并不是独立进行的,面向对象设计中的

9.2 面向对象设计与面向对象分析的关系 设计阶段的任务是及时把分析阶段得到的需求转变成符合各项要求的系统实现方案。与传统的软件工程方法不同的是,面向对象的方法不强调需求分析和软件设计的严格区分。实际上,面向对象的需求分析和面向对象的设计活动是一个反复迭代的过程,从分析到设计的过渡,是一个逐渐扩充、细化和完善分析阶段所得到的各种模型的过程。严格的意义上来讲,从面向对象分析到面向对象设计不存在转换问题,而是同一种表示方法在不同范围的运用。面向对象设计也不仅仅是对面向对象分析模型进行细化。 面向对象分析到面向对象设计是一个平滑的过渡,即没有间断没有明确的分界线。面向对象分析建立系统的问题域对象模型,而面向对象设计是建立求解域的对象模型。

?9.3.1 面向对象设计的过程 面向对象的设计过程一般进行以下几个步骤。 (1)建立软件体系结构环境图 在软件体系结构设计开始的时候,设计应该定义与软件进行交互的外部实体(其他系统、设备和人员等)以及交互的特性。一般在分析建模阶段可以获得这些信息,并使用软件体系结构环境图对环境进行建模,描述系统的出人信息流、用户界面和相关的支持处理。一旦建立了软件体系结构的环境图,描述出所有的外部软件接口,软件架构师就可以通过定义和求精实现软件体系结构的构件来描述系统的结构。这个过程可一直迭代,直到获得一个完善的软件体系结构。在设计的初始阶段,软件架构师用软件体系结构环境图对软件与外部实体交互的方式进行建模。

从结构化到面向对象程序设计的模型转换

从结构化到面向对象程序设计的模型转换? 袁胜忠 山东大学威海分校现代教育技术部 威海264209 摘 要:随着软件系统内在复杂性的不断提高,面向对象技术已经取代结构化设计技术成为产业化软件开发的主流技术。本文剖析对象模型与结构化设计瀑布模型队程序设计风格的影响,探讨导致面向对象软件工程失败的主要原因,论证了成功实施面向对象软件工程的关键技术,帮助软件工程师完成从结构化设计实践向面向对象分析和设计实践的进化。关键词:对象模型 瀑布模型 迭代和增量式开发 面向对象软件工程 Model Changing From Structured Design Style to Object-Oriented Programming YUAN Shengzhong Department of Modern Education Technology of Shandong University at Weihai, Weihai, 264209 Abstract: In the past several years, with enhance of inherent complex of various systems, the object-oriented technology have actually become the main stream of industrial software development. Compared with traditional structured design style and the waterfall model, in this paper, we strength the correct understand to object model and discuss the main reasons for the failure of object-oriented development in order to promote the software engineers evolution from structured design to object-oriented analysis and design. Keywords: object model; waterfall model; iterative and incremental development; object-oriented software engineering 1 引 言 面向对象的技术可以分为:面向对象的程序设计语言,面向对象的数据库技术,面向对象的分析和设计方法。 对应用软件开发组而言,面向对象的分析和设计方法是一种新的方法,它比面向对象的程序设计语言和面向对象的数据库技术更加难以掌握。因为它与开发组熟悉的结构化设计方法是两种完全不同的设计风格,在建立系统时,结构化设计方法利用算法作为基本构件,而面向对象方法利用类和对象作为基本构件。二者要求开发组用不同的思考方法对待问题的分解,而且面向对象设计方法创造出来的软件体系结构大大超出了 ?作者简介:袁胜忠:男,1965年出生,软件工程师,主要研究方向为应用软件开发,网络管理与优化。

armcotex-a8嵌入式原理与系统设计习题答案

第1章 什么是嵌入式系统 嵌入式系统是以应用为中心、以计算机技术为基础、软/硬件可剪裁、适用于对系统功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。 嵌入式系统的应用领域有哪些列举一些生活中的嵌入式系统实例。 嵌入式系统的应用领域有交通管理、工控设备、智能仪器、汽车电子、环境监测、电子商务、医疗仪器、移动计算、网络设备、通信设备、军事电子、机器人、智能玩具、信息家电等; ①网络设备: 交换机、路由器、Modem 等。 ②消费电子: 手机、MP3、PDA、可视电话、电视机顶盒、数字电视、数码照相机、数码摄像机、信息家电等。 ③办公设备: 打印机、传真机、扫描仪等。 ④汽车电子: ABS (防死锁制动系统)、供油喷射控制系统、车载 GPS 等。 ⑤工业控制: 各种自动控制设备 嵌入式系统的组成有哪些 嵌入式系统一般由硬件层,中间层,软件层三层组成。 嵌入式系统的特点有哪些 嵌入式系统有以下4个特点:系统内核小、专用性强、系统精简、实时性高。 简述嵌入式系统的发展。 嵌入式系统具有以下6个发展趋势:系统工程化、开源化、功能多样化、节能化、人性化、网络化。 常用的嵌入式处理器分为哪几类

常见的嵌入式处理器有一下四类:嵌入式微处理器、嵌入式微控制器、嵌入式 DSP 处理器、嵌入式片上系统。 嵌入式操作系统的特点有哪些 嵌入式操作系统有以下6个特点:系统内核小、专用性强、系统精简、高实时性、多任务的操作系统、需要专用开发工具和环境。 什么是实时操作系统 IEEE 实时 UNIX 分委会认为实时操作系统应具备哪些特点实时操作系统是指在限定的时间内能对过程调用产生正确的响应的操作系统。IEEE 的实时UNIX分委会认为实时操作系统应具备以下特点:异步的事件响应、切换时间和中断延迟时间确定、优先级中断和调度、抢占式调度、内存锁定、连续文件、同步。 常用的嵌入式操作系统有哪些它们各有什么特点

面向对象设计与分析 图书管理系统

华北电力大学科技学院 实验报告 实验名称图书馆管理系统的分析与设计课程名称面向对象技术 专业班级:学生姓名: 学号:成绩: 指导教师:实验日期:

一、图书管理系统需求描述 图书馆里有多种书目,每种书有多个副本,每个副本有唯一的编号。每本图书借阅期限为60天,超期罚款,按天计算,每天0.1元。 每个借阅者在系统中建立一个账户,并发放借阅证,账户中有用户名、证号、单位、存的现金数额,用于超期罚款,用户可以续费。 持借阅证的用户可以借书、还书,但这些操作要通过图书馆馆员来实现,每个借阅者可借10本书。每次借阅会将特定的借阅者和书籍副本联系起来。 图书管理员还负责图书的书目管理,书籍副本管理,借阅者管理。如果借阅证丢失,借阅证持有者应到图书馆前台挂失。 借阅证持有者可以预约图书,最多可预约3本(可以设定预约有效的期限),并在图书到达后得到电话通知,图书馆为其保留图书,3日内有效。还可以取消预约。 二、需求分析 系统的功能需求主要包括以下几个方面: 1.这是一个图书馆管理系统。 2.借阅者需预先建立一个账户(账户中有用户名、证号、单位、存的现金数额),并 领取借阅证,借阅者可以续费。 3.各种书目需预先注册。每种书目有多个副本且每个副本有唯一的编号。 3.借阅者能够通过图书馆馆员借书、还书(每个借阅者可借10本书),每次借阅或 归还都更新数据库信息。 4.借阅者可以通过网络查询书籍信息。 5.借阅者可以预约图书。当他所预约的图书归还或购进时,就通知预定人。图书馆为 其保留3日预约书籍。当预定某书的借书者借阅该书后,系统取消预约。 6.如果借阅者还书超过期限(60天),需扣款,按天计算,每天0.1元。 7.图书馆馆员在软件系统的支持下处理借阅者的借书和还书请求。 8.系统管理员可以对系统的数据进行维护,如增加、删除和更新书目,增加和删除书 籍,增加、删除和更新借阅者帐户,挂失借阅证等。 7.系统能够运行在流行的技术环境中,并应有一个良好的人机交互图形用户界面。 8.系统容易扩展新功能。 系统将通过计算机来处理图书、副本、借阅者和借书。借阅者要求借书,出示借阅证,查询该借阅者提供的借阅证是否满足借书要求。如果满足,给出要借图书的名称,系统查找所借的图书是否存在副本,如果有,则办理借书手续(登记借阅信息)。 图书是存放在图书馆中的书的名称,副本是一个图书的具体实例。一个图书可能有多个副本,一个副本一定会对应一个图书。一次借阅必须记录一个图书的副本和一个借阅证信息。一个副本可以被借阅,也可以不被借阅。一个借阅证可以借多本书,也可以

3面向对象软件工程笔试

面向对象软件工程笔试题 姓名班级学号 一、单项选择题(每题1.5分,计30分) 1. 在面向对象的系统中,系统责任的良好分配原则是()。 A. 在类之间均匀分配 B. 集中分配在少数控制类中 C. 根据时序图的消息进行分配 D. 根据个人喜好进行分配 2. 能够保证某些类在系统中只存在一个实例的模式是:() A.抽象工厂(Abstract Factory)模式B.单态(Singleton)模式 C.建筑者(Builder)模式D.工厂方法(Factory Method)模式 3. 在UML中,用于描述对象和对象之间的交互,并且将重点放在消息的顺序上,强调时间,描述消息是如何在对象间发送和接收的模型是:() A.类图B.用例图C.状态图D.时序图 4.()意味着一个操作在不同的类中可以有不同的实现方式。 A.多态性B.多继承C.类的复用D.封装 5.在UML中,类A的一个操作以类B作为参数,调用类B的一个操作,且这两个类之间不存在其他关系,那么类A和类B之间是()关系。 A.聚合B.泛化C.实现D.依赖 6. 在UML中,类A中持有着类B作为属性,那么类A和类B之间是()关系。 A.普通关联B.泛化C.实现D.依赖 7. 在下面的描述中,不属于用例模型所能回答的问题是() A.参与者执行的主要任务或功能是什么? B.参与者希望从系统中获取什么样的信息? C.用例所描述的功能是怎样实现的? D.参与者之间的泛化关系是什么样的? 8. 在面向对象设计中,下列那个设计处于最基础的地位:() A.责任设计B.消息设计C.类及对象设计D.子系统设计 9.能够“将抽象部分与实现部分分离,使它们都可以独立变化”的设计模式是:() A.组合(Composite)模式B.命令(Command)模式C.桥(Bridge) 10.在面向对象软件开发方法中,类与类之间的结构关系主要有:() A.继承和聚合B.继承和一般C.聚集和消息传递D.继承和方法调用 11.能够在不改变类层次结构的前提下,在运行时根据需要透明地为类层次结构上的各个类 动态添加新功能的模式是:() A.访问者(Visitor)模式B.职责链(Chain of Responsibility)模式 C.观察者(Observer)模式D.策略(Strategy)模式 12.将对象组合成树型结构以表示“整体-部分”的层次结构,使得用户对单个对象和组合对象 的使用具有一致性的模式是:() A.组合(Composite)模式B.桥(Bridge)模式 C.命令(Command)模式D.适配器(Adapter)模式 13. 能够在运行时动态地为对象扩展功能的设计模式是:() A.代理(Proxy)模式B.装饰(Decorator)模式C.组合(Composite)模式D.桥(Bridge)模式

面向对象程序设计

面向对象程序设计 ?结构化程序设计的基本内容: 1.结构的类型:顺序、分支、循环 2.结构化程序设计思想:利用过程或函数来抽象和模拟客观现实。 3.结构化程序设计方法: 1)重点放在如何实现细节过程方面,将数据与函数分开。 2)形式:主模块+若干个子模块(如C:main()+子函数)。 4.特点:自顶向下,逐步求精——功能分解。 5.缺点:效率低,是手工作坊式的编程。 6.结构化程序的问题——数据与算法分离,程序数据和操作数据的函数 是分离的。 ?面向对象程序设计观点: 1.自然界是由各种各样的实体(对象)所组成,每种对象都有自己的内 部状态和运动规律,不同对象之间的相互联系和相互作用就构成了各种 不同的系统,进而构成整个客观世界。 2.程序设计方法:使用面向对象的观点来描述模仿并处理现实问题。 3.要求:高度概括、分类和抽象。 4.目的:实现软件设计的产业化。 5.基本概念: 1)对象:用来描述客观事物的一个实体,它是构成系统的一个基本单 元。一个对象具有一组属性和行为。 实体对象*一台计算机 抽象对象*一项计划 2)对象构成要素: 对象标识符:是对象的名称,用来区别于其他对象。 属性:是用来描述对象静态特征的一个数据项。 行为:是用来描述对象动态特征和行为的操作。 3)消息(Message)用于描述事件发生的信息。消息是对象之间发出 的行为请求。多个消息构成一个事件(Event)。对象之间通过传递消 息相互影响。 对象示例:一个“学生”对象的例子 对象名: 学生 属性: 学号:123456 :令狐冲 年龄:18 专业:信管 行为: 修改学号、、专业、年龄等等 对象示例:一个“课程”对象的例子: 对象名: 课程 属性:

如何正确的设计嵌入式软件架构应该这么做

如何正确的设计嵌入式软件架构应该这么做 一 错误的示范 近公司新招了一个做嵌入式软件开发的同事,该同事是从上海的某一个上市公司出来的,因为我们这边人手不够,因此把他安排了去负责一个新产品的研发,前期让他负责加速度计、NB-IOT、舵机、外置Flash的功能测试,测试完成之后,准备让他做一个该产品的概要设计。然后他花了2个星期的时间,给我们写出来一个概要设计,说实话,我看到这个概要设计,我就觉得是刚毕业的大学生写的。版本一的架构设计 2.1系统体系结构系统分为两层:硬件驱动层、应用层。2.1.1硬件驱动层硬件驱动层包含板载硬件资源正常运行所需的所有驱动程序。1)MCU初始化2)I2C数据存取3)SPI数据读取4)加速度计初始化5)蓝牙模块启动6)BC95模块启动7)485通讯模块启动2.2.2应用层1)Mcu运行模式切换2)震动及倾斜3)数据解析4)开/关锁5)数据发送6)历史数据保存 看到版本一的架构设计之后,说实话,我还是第一次见到这样来写架构设计的,居然是以序号来写的,这个让别人读起来,特别的别扭。版本二的架构设计 看到版本二的架构设计之后,虽然颇感欣慰,但是想到达到我们所要求的,还要很大的一段距离,该架构设计,主要有以下几点问题:1.对架构的理解还不是很清晰,既然是做架构设计,那就应该从整体来看,而不是仅仅只是局限于一个模块,或者功能里面。2.还是每个层次的理解也还不是很清晰,比如讲MCU的初始化,归于硬件驱动层里面。MCU 的初始化,严格意义上来说,是属于流程的一部分了,而不是驱动。比如电脑的开启启动,把这个归于硬件的驱动里面,肯定是属于牛头不对马嘴的。3.还有就是各个模块的启动,也是不能属于硬件驱动层的,也都是业务流程的一部分了,都不应该属于驱动层的一部分。 4.还有就是总线数据的读写,虽然驱动的作用也就是读写,但是数据总线的读写不能写成硬件驱动。 5.应用层的系统参数初始化,也还是属于流程。 6.数据的解析和数据的发生,都是属于通信功能里面的,不应该单独独立出来,属于单个的应用。

面向对象分析与及设计习题及答案

面向对象分析与及设计习题及答案 一、单项选择题 1.到20世纪末,面向对象软件工程已经逐渐发展成熟,特别是(D)的 形成和广泛使用,采用面向对象分析与编程的软件开发方法已成为软件开发的主流方法。 A. Simula67语言 B. Smalltalk语言 C. Java语言 D. 统一建模语言(UML)的标准 2. 面向对象的运动产生了多种面向对象的语言, 其中(C)是一种混合性面向对象语言, 既支持面向过程的程序设计方法,又支持面向对象的程序设计方法,有广泛应用的基础和丰富开发环境的支持,因而使面向对象的程序设计能得到很快普及。 A. Smalltalk B. Eiffel C. C++ D. Java 3.下列不属于面向对象技术的基本特征的是(B)。 A. 封装性 B. 模块性 C. 多态性 D. 继承性 4. 面向对象程序设计将描述事物的数据与(C) 封装在一起,作为一个相互依存、不可分割的整体来处理。 A. 信息 B. 数据隐藏 C. 对数据的操作 D. 数据抽象 5. 关于面向对象方法的优点,下列不正确的叙述是(C)。 A. 与人类习惯的思维方法比较一致 B. 可重用性好 C. 以数据操作为中心 D.可维护性好 6. (D)是从用户使用系统的角度描述系统功能的图形表达方法。 A. 类图 B. 对象图 C. 序列图 D. 用例图 7. (C) 是表达系统类及其相互联系的图示,它是面向对象设计的核心,建立状态图、协作图 和其他图的基础。 A.对象图 B. 组件图 C. 类图 D. 配置图 8.(D)描述了一组交互对象间的动态协作关系,它表示完成某项行为的对象和这些对象之 间传递消息的时间顺序。 A.对象图 B. 协作图 C. 状态图 D. 序列图 9.(D)就是用于表示构成分布式系统的节点集和节点之间的联系的图示,它可以表示系统 中软件和硬件的物理架构。 A. 组件图 B. 协作图 C. 状态图 D. 配置图 10. 使用UML进行关系数据库的(B)时,需要设计出表达持久数据的实体类及其联系,并把它们映射成为关系数据库表(Table)、视图(View)等。 A. 业务Use Case模型设计 B. 逻辑数据模型设计 C. 物理数据模型设计 C. 物理实现设计 11.一个设计得好的OO系统具有(B) A. 低内聚、低耦合的特征 B. 高内聚、低耦合的特征 C. 高内聚、高耦合的特征 D. 低内聚、高耦合的特征 12.下面()不是UML的基本构成元素。(A) A. 控制语言 B. 基本构造块 C. 规则 D. 公共机制

面向对象程序设计(答案)

学号:姓名: 第三章面向对象程序设计作业 一、判断题 1、一个Java源程序可有多个类,但只仅有一个public类,而且程序名与public类名相同。对 2、如果类A和类B在同一个包中,则除了私有成员外,类A可以访问类B中所有的成员。对 3、接口中的成员变量全部为常量,方法为抽象方法。对 4、抽象类可以有构造方法,可以直接实例化。错 5、对static方法的调用可以不需要类实例。对 6、包含抽象方法的类一定是抽象类。对 7、方法中的形参可以和方法所属类的属性同名。对 8、接口无构造器,不能有实例,也不能定义常量。错 9、类的实例对象的生命周括实例对象的创建、使用、废弃、垃圾的回收。对 10、Java应用程序的入口main方法只有一种定义法。对 二、选择题 1、下列答案正确的是(A ) A) 在同一个Java源文件中可以包含多个类,只能有一个被声明为public B) 在同一个Java源文件中只能包含一个类,并被声明为public C) 在同一个Java源文件中可以包含多个类,都可以被声明为public D) 在同一个Java源文件中可以包含多个类,只能有一个被声明为default 2、Java实现动态多态性是通过( B )实现的。 A) 重载B) 覆盖 C) 接口D) 抽象类 3、下列哪一个是正确的方法重载描述( A ) A) 重载方法的参数类型必须不同 B) 重载方法的参数名称必须不同 C) 返回值类型必须不同 D) 修饰词必须不同 4、final关键字不可以用来修饰( D ) A) 类B) 成员方法 C) 域D) 接口 5、接口的所有成员方法都具有( B )属性 A) private, final B) public, abstract C) static, protected D) static 6、Java的封装性是通过(A )实现的 A) 访问控制B) 设计内部类 C) 静态域和静态方法D) 包 7、下列接口或类不属于.*包的是( D ) A) Collection B)Vector C) Map D) Integer 8、下述哪一组方法,是一个类中方法重载的正确写法( A ) A) int addValue( int a, int b ){return a+b;}

面向对象系统设计(超经典的指导手册)

面向对象系统设计 当你阅读到这里时,我假设你已经理解了面向对象的基本概念,初步掌握了的UML语言。 第三章、架构设计 3.1 架构设计原则 系统设计的第一步就是确定软件的架构,它决定了各子系统如何组织以及 如何协调工作。架构设计的好坏影响到软件的好坏,系统越大越是这样。进行架构设计时,有两个重要的原则可以遵循: 一、分层。 将系统分层是简化系统的好方法,而且已经得到了很好的证实,如OSI 七 层模型网络协议,数据库管理系统的外模式、模式、内模式等。分层的思路是将系统按功能职责进行划分,将同一类职责的功能抽象为一层。在信息系统中软件架构通常采用典型的三层结构: 1、表示层――用户界面。 2、业务层――业务处理流程。 3、数据层――持久化存储。 与传统的两层结构相比,它最大的特征是将业务层独立了出来,从而提高 了业务层的可复用性。在两层结构中,用户界面和业务处理流程放在一起,因此无法直接复用业务处理的相关功能,也无法将业务处理功能进行灵活的部署。在三层结构中,表示层只处理用户界面相关的功能,业务层专心处理业务流程,可以对业务层进行灵活的部署,开发时也便于业务处理的开发和用户界面的开发同时进行。 当然也可以分为更多的层,关键是尽量提高层内各功能的内聚,降低各层 之间的耦合。 二、各层之间通讯。 OSI 中要求高层只能调用它的下一层提供的接口,我们设计接口时也尽量 遵守这样的约束,例如典型的三层结构的访问关系为: 数据层在业务层中是可见的,业务层在表示层中是可见的,反之则不可见。为什么在业务层中不能直接访问表示层呢?因为业务层要相对独立,它不能依赖于任何表示层,以至于一个业务层可以对应多个表示层。业务层可以间接与表示层通讯,这种通讯方式根据实际需要来确定。 3.2 信息系统的架构设计 下面我们将根据架构设计原则和信息系统原理来建立一个信息系统的架构设计模型。将信息系统中比较关心的对象分层,可分为三层:用户界面层、业务层、数据访问层,再把各层中的一些公共部分提出来:权限管理、异常处理,这样得到包图如下:

嵌入式微处理器结构与应用课程设计报告

《嵌入式微处理器结构与应用》 课程设计报告 题目:电子菜单 一、课程设计的目的和主要内容: 目的:《嵌入式微处理器结构与应用》课程设计是软件工程本科专业的专业实践课程,结合在课程中学到的嵌入式系统的开发和调试方法,对学生在嵌入式系统设计和应用开发的基本技能方面进行综合的检验和实践。是学生在学习完《嵌入式微处理器结构与应用》课程之后的一个重要的实践环节。要求学生在教师的指导下,综合运用已学过的嵌入式微处理器相关的各种知识和技能,以小组协作的方式完成一项较为完整、并具有一定难度的课程设计任务。使学生总结本课程的主要知识点,提高学生的实际动手能力,为学生今后进一步学习和从事嵌入式系统相关的研究与开发打下坚实的基础。 内容:基于实时操作系统,学会复杂应用程序的基本开发方法,结合课程实验学到的知识,编写一个能综合应用液晶屏、触摸屏、键盘并结合简单文件系统API函数的界面应用。要求具备基本的三个界面:初始界面、点菜界面、结束界面,基本实现点菜的全过程。 二、基本的设计思路或程序流程图描述: 基于MVC勺设计模式,将程序分成三大独立的部分:模型(逻辑)部分、视图部分、控制部分。这三大部分的关系如下:

程序总流程图:

百度文库-让每个人平等地提升自我 初始化程序, 打开启动画面线程 关闭线程 点菜结束按钮 判断消息 类型 判断操 作类型 判断单 击内容 判断控 件类型 判断该菜单条目 的 状态,进行相应的逻 辑和视图更新 本人负责: 打开线程 界面控件 翻页按钮 加载菜单数据 显示启动动 画 键盘消息 显示点菜结束 画面和总价 程序 菜单条目 进行菜单的上下 滚动 关闭按钮 单击 拉动 重置逻辑数 据,显示最初 的点菜界面 关闭启动画面线程, 显示点菜画面 显示程序结束画 面 进行菜单的翻页 等待系统消息 触摸屏消息 、视图部分:

面向对象分析与设计简答题

1、什么面向对象? 面向对象不仅是以些具体的软件开发技术与策略,而且以一套关于如何看待软件系统与现实世界的关系,以什么观点来研究问题并进行求解,以及如何进行系统构造的软件方法学。 2、软件开发方法学的基本方法有哪些? 1)软件工程和瀑布方法学2)新方法学:螺旋式、迭代式、递增式、合并式3)面向对象方法学:UML、RUP、XP 3、为什么需要OOA、OOD。 OOA就是运用面向对象的方法进行需求分析,OOA加强了对问题域和系统责任的理解,有利于人员之间的交流,对需求变化的适应性较强,很好的支持软件复用。 OOD就是运用面向对象的方法进行系统设计,OOD.符合人们习惯的思维方法,便于分解大型的复杂多变的问题;易于软件的维护和功能的增减;可重用性好;与可视化技术相结合,改善了工作界面。 4、从概念层次、规格层次、实现层次三个角度如何理解对象的概念? 从概念层次来看,一个对象就是一系列的责任; 从规格层次来看,一个对象是一系列可以被其他对象或该对象自己调用的方法;从实现层次来看,一个对象是一些代码和数据。 5、如何绘制类图和对象图?简述其步骤。 类图绘制:1发现类,找到备选类,确定候选类2关联分析,确定关联关系,多重性分析3职责分析4限定与修改,导航性分析,约束,限定符; 对象图绘制:1发现类和对象2对其细化,分析,确定关系。 6、简述重定义方法与重载的区别。 重定义:1参数列表必须完全与被重写的方法相同2返回类型必须一直域被重写的方法的类型相同3访问修饰符的限制一定要大于被重写方法的访问修饰符4重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查性异常:重载:1必须有不同参数列表2可以有不同的返回类型,只要参数列表不同即可3可有不同访问修饰符4可抛出不同的异常。 7.简述抽象方法与虚方法的联系与区别 虚方法有一个实现部分可以为子类实现有共同的方法,并为派生提供了覆盖该方法的选,抽象方法只是强制派生覆盖方法;抽象方法只能在抽象类中声明,而虚方法不是;抽象方法不能声明方法实体,虚方法可以;包含抽象方法的类不能实例化,但虚方法可以。 8、简述使用继承的规则。 1)、不要过度使用;2)、子类应是超类的一个类型;3)、子类应是超类的扩展; 4)、尽量少从具体类继承,最好继承接或抽象类。

相关主题
文本预览
相关文档 最新文档