程序设计方法学基本概念汇总

来源:互联网 发布:c语言转换汇编语言 编辑:程序博客网 时间:2024/06/18 04:27

      程序设计方法学是软件工程专业必修课之一。在这门课程中会学到很多程序设计方法,以及一些优化代码的思想。是站在一个较高的层次上进行程序的架构与设计。以下的基本概念是我在大学阶段整理的资料,希望能对大家有用。

嵌入式程序设计方法
嵌入式系统的数量远远大于通用计算机系统的数量。
DSP  digital signal processor  数字信号处理器
广义而言,嵌入式处理器就是以应用为中心,以计算机技术为基础,软硬件可裁剪的专用计算机系统。
嵌入式系统通常有硬件和软件组成。简单的嵌入式系统由微控制器或单片机及嵌入式软件组成。
与通用计算机系统相比的5个特征:专用性、可封装性、外来性、实时性、可靠性。
专用性指嵌入式系统用于特定设备完成特定任务。
可封装性是指嵌入式系统隐藏于目标系统内部,而不被操作者察觉,实质上是面向对象封装以实现信息隐蔽思想的体现。
外来性体现在嵌入的计算机一般自成一个子系统,与目标系统的其他子系统保持一定的独立性。
实时性是指嵌入式系统能在可预知的极短时间内对事件或用户的干预作出响应。
可靠性指嵌入式计算机隐藏在系统或设备中,用户很难直接接触控制。
嵌入式系统中的软件,一般固化在只读存储器(ROM)中,而不是以磁盘为载体,不能随意更换,所以嵌入式系统的应用软件的生命周期和嵌入式产品一样长。
嵌入式计算机在应用数量上远远超过各种通用计算机,一台通用计算机的外部设备就包含了很多嵌入式微处理器:键盘、鼠标、软驱、硬盘、显示卡、显示器、猫、网卡、声卡、打印机、扫描仪、USB集成器都是由嵌入式处理器控制的。
对嵌入式处理器系统软件和应用软件的要求:
软件要求固化存储:为了提高执行速度和系统可靠性,嵌入式系统中的软件一般固化在存储器芯片上或嵌入在微控制器中,而不是存储在磁盘等载体中。
软件代码要求高质量,高可靠性。
系统软件的高实时性是基本要求
嵌入式系统的开发需要开发工具和环境
嵌入式系统软件需要实施多任务操作系统(RTOS)开发平台

嵌入式应用程序可以没有操作系统直接在芯片上运行。
嵌入式处理器可以分为三类:嵌入式微处理器、嵌入式微控制器、嵌入式数字信号处理器(DSP)
嵌入式微控制器就是单片机。
大多数操作系统至少被划分为内核层和应用层。
在嵌入式系统中,任务即线程。大多数嵌入式操作系统都支持多任务。
三种任务调度方式:可抢占式调度、不可抢占式调度、时间片轮转调度。
目前一般对不同优先级的任务采用抢占式调度,对相同的任务采用时间片轮转调度。
两种实时系统:硬实时系统和软实时系统。
软实时系统并不要求限定某一任务必须在一定时间内完成,只要求运行的越快越好。
硬实时系统对响应时间有严格要求,一旦系统响应时间不能满足,就会引起致命的错误。
MMU       memory management unit   内存管理单元
嵌入式系统的开发人员不得不参与系统的内存管理。
嵌入式系统的设计模式:基于芯片的设计、基于模板的设计、模块化设计、软硬件协同设计。
基于芯片的设计是指设计全部从芯片开始做起。
嵌入式系统开发:宿主机、目标机
宿主机是执行编译、链接、定址过程的计算机。
目标机是运行嵌入式软件的硬件平台。
编译——链接——定址
编译过程是由交叉编译器实现。交叉编译器是运行在一个计算机平台上并为另一个平台产生代码的编译器。
编译过程产生的所有目标文件被连接成一个目标文件,这是链接过程。
定址过程会把物理存储器指定给目标文件的每个相对偏移处。该过程生成的文件就是可以在嵌入式平台上执行的二进制文件。
嵌入式调试采用交叉调试器,一般采用宿主机—目标机的调试方式。交叉调试有任务级、源码级、汇编级的调试。
嵌入式实时操作系统(real time embedded operating system)是一种实时的、支持嵌入式系统应用的操作系统软件。
嵌入式操作系统发展阶段:

无操作系统的嵌入算法阶段
简单监控式的实时操作系统阶段
通用的嵌入式实时操作系统阶段

对系统软件的要求:

实时性:对外部事件作出反应的时间必须要短,在某些情况下需要确定的、可重复出现的运行结果。
有处理异步并发事件的能力。
快速启动,并有出错处理和自动复位功能。

实时操作系统是事件驱动的。
MCU    micro control unit       微控制单元
汇编语言是非结构化的语言。
汇编语言只在代码长度和执行效率上比C有优势。
C++并不是专门针对嵌入式应用而开发的语言。
嵌入式设备的硬件配置多样性和软件环境的复杂性远远大于桌面和企业系统。
Java ME:Java Micro Edition
Java SE:Java Standard Edition
Java EE:Java Enterprise Edition
OLE:Object Linking and Embedding    对象链接和嵌入
cache用SRAM做的。SRAM比DRAM昂贵并快速。
内存用DRAM做的。
寄存器是在CPU中,速度最快。
内存分暂时性存储和永久性存储。暂时性的就是RAM,永久性的就是ROM.
速度比较:寄存器>cache>内存>硬盘>光盘
WAP:wireless application protocol

组件化程序设计方法

所谓组件就是可以自行进行内部管理的一个或多个类所组成的全体。
IDL:接口定义语言,与平台无关的语言。
一个组件可以被多个应用系统使用。
组件技术的特点:

真正的软件重用和高度的互操作性。
接口的可靠性:组件接口是不变的,一旦被发表,就不能被修改。
可扩充服务:只能通过接口与外界通信。

对象管理组织(OMG):Object Management Group提出的公共对象请求代理机制CORBA(Common Object Request Broker Architecture)
微软的组件对象模型COM(Component Object Model)和分布式组件对象模型DCOM。
C/S模式:QQ.反应速度快,升级不方便
B/S模式:选课订票系统,维护升级方便

组件化程序设计模拟了硬件设计的思想。
每个组件提供一个或多个接口,接口是组件和外界通信的唯一途径。
一个组件同一个微型应用程序类似,都是编译、链接好的二进制代码。
组件在应用程序中是完全动态的。
组件的内部实现细节是隐藏的。组件客户通过接口使用组件所提供,而无需知道这些服务是如何实现的。
组件的物理位置是透明的,一个组件可以分布在网络上,同时为多个应用提供服务。
CORBA是为了分布式计算而引入的,是真正跨平台的。能做到与语言无关,任何语言都能做CORBA组件,组件也能在任何组件下使用。
CORBA上的服务用IDL描述,IDL将被映射为某种程序设计语言,如C++,在客户端叫stub(桩),在服务器端叫skeleton(骨架)。
中间件  middleware
传统的客户服务器模式是双重客户服务器模式。CORBA是三重客户服务器模式。
多重客户服务器两者之间不能直接通信,而需要通过中间的一种叫做代理的方式。在CORBA中这种代理就是ORB。CORBA是中间件技术。
CORBA体系结构的核心就是ORB.当客户程序要调用远程对象上的方法时,首先要得到这个对象的引用,之后就可以像调用本地方法一样调用远程对象。
ORB使CORBA做到与平台无关,IDL使CORBA做到与语言无关。
IDL仅仅定义接口,而不定义实现。IDL的好处是使高层设计人员不必考虑实现细节,而只需关心功能描述。
COM组件是遵循COM规范编写,以Win32 动态链接库或可执行文件的形式发布的可执行二进制代码。
注意:组件是二进制代码。
COM对象是COM类的实例。每个COM对象包含一个或多个接口。
C++对象是源代码级上的封装,只是语义上的封装。COM对象是二进制代码级上的封装。
COM接口必须使用一种与实现无关的语言定义——IDL.
按照组件相对于客户位置的不同,分为进程内组件(DLL)、进程外组件(EXE)和远程组件(EXE或DLL).
进程内组件与客户在同一个进程内运行。进程外组件与客户在同一台机器上运行,但在不同的进程内。远程组件与客户在不同的机器上。
组件的一个重要特性就是位置透明性,即在客户看来,进程内、进程外、远程组件都是一样的调用。
在COM规范中,对象和接口是最核心的部分。
COM的核心接口是IUnknown接口,每个COM组件都必须实现这个接口,其他所有接口都必须从IUnknown接口派生。
客户程序通过一个全局标识符进行对象的创建和初始化工作。是一个128位全局唯一标识符GUID,基本可以保证对象的唯一性。
一个对象可能既是服务方又是客户方。



绪论
程序设计的发展阶段

面向计算机的程序设计:基本思想是注重机器、逐一执行。
面向过程的程序设计:思想是自顶向下、逐步求精。
面向对象的程序设计:思想是注重对象、抽象成类。
面向组件的程序设计
其他程序设计方法:如递归程序设计、嵌入式程序设计

C/C++都是贝尔实验室发明的。
一个可以用顺序、选择、循环和跳转四种结构解决的问题,也一定能用顺序、选择、循环三种结构解决。这三种是基本程序结构。
算法5种基本特征:

有穷性
确定性
数据输入
信息输出
可执行性

只有源代码本身才是日后维护的主要对象。
程序设计的表示方法可以分为图形(程序流程图)、表格(判定表)、语言(程序设计语言)。
判定表能够清晰表示复杂的条件组合与应做的动作之间的对应关系。



程序算法与图灵机模型
图灵机是一种抽象的计算模型,用来精确定义可计算函数。图灵机由一个控制器和一根假设无限长的工作带组成。工作带起着存储器的作用,它被划分为大小相同的方格,每一格上可以书写一个给定字母表上的符号。控制器可以在带上左右移动,控制器有一个读写头,读写头可以读出控制器访问格子上的符号,也可以改写和抹去符号。
图灵在设计了图灵机模型后提出,凡可计算的函数都可用图灵机来实现。这就是著名的图灵论题。
数学家提出的各种计算模型被证明是和图灵机等价的。
图灵是通过证明不存在决定图灵机停机问题的算法来证明不存在判定所有数学问题是否可解的问题。
一台特定的图灵机是否停止是一个良定义的数学问题。在证明了不存在决定图灵机停机问题的算法的基础上,图灵指出,不存在决定数学问题的一般解法。希尔伯特的判决问题没有解决。
用一进位系统表示大数时,图灵机会极端无效率。
希尔伯特问题不可解,不存在决定图灵停机问题。


github主页:https://github.com/chenyufeng1991  。欢迎大家访问!

1 0
原创粉丝点击