3.1 软件的定义
用户与硬件之间的接口,用户主要是通过软件与计算机进行交流的。
软件是计算机系统中的非硬件成分,它是包括程序、数据及其相关文档的集合。
软件是计算机系统设计的重要依据。
3.2 软件的分类
3.2.1 按软件的功能分类
1.系统软件
(1)操作系统:管理计算机硬件与软件资源的程序,同时也是计算机系统的内核与基石,提供了用户与系统交互的操作接口
(2)支撑系统:包括一系列基本工具,以及数据库管理、外部存储器格式化、文件系统管理、用户身份验证、设备驱动程序管理、网络连接等方面的工具和程序设计的集成开发环境,它主要包括环境数据库、各种接口软件和工具组。
2.应用软件
是为了满足某一领域、某些问题的应用需求而提供的软件。
3.3.2 把软件的规模分类
微型、小型、中型、大型、甚大型、极大型
3.3.3 按软件的工作方式分类
1.实时处理软件:在事件或数据产生时立即对它们进行处理,并及时反馈信号,以监测和控制软件的执行
2.分时软件:允许多个用户同时使用同一台计算机,允许多个程序分时共享硬件和软件资源,或者允许多个联机用户同时使用计算机的软件
3.交互式软件:能实现人—机通信的软件
4.批处理软件:是吧一组输入作业或一批数据以成批处理的方式一次运行,并按照顺序逐个处理的软件
3.3 软件架构
3.3.1 软件架构的定义
是有关软件整体结构与组件的抽象模式,用于指导大型软件系统各个方面的设计。软件架构设计师软件开发中至关重要的一环,良好的软件架构是一个软件开发项目成功的保证。
3.3.2 软件架构的分层
分层表示将功能进行了有序地分组:应用程序专用功能位于高层,跨越应用程序领域的功能位于中层,而配置环境专用功能则位于低层。
分层标准的规则
可见度、易变性、通用性、层数
3.4 操作系统
3.4.1 什么是操作系统
用以控制和管理计算机系统资源的软件
1.系统观点——计算机资源管理
在计算机系统中,CPU是计算机硬件的核心,是计算机系统的心脏;操作系统则是计算机软件的核心,是计算机系统的大脑,是整个系统的控制中心。操作系统组织和管理整个计算机系统的硬件和软件资源,在用户和程序之间分配系统资源,使之协调一致地、高效地完成各种复杂的任务。
2.用户观点——用户使用计算机的界面
通过操作系统,计算机能提供种类更多、质量更高的服务。用户可以通过命令方式、系统调用、图形界面三种方式获得计算机系统提供的服务。
3.软件观点——程序、数据和文档的集合
操作系统是直接与硬件相邻的第一层软件,用以实现对整个计算机系统资源的管理与控制,为其他软件或程序提供开发、运行和应用的环境。
3.4.2 DOS
磁盘操作系统是个人计算机上使用的一种操作系统,通过在命令行方式下输入命令对计算机资源进行管理。DOS由核心程序和命令程序组成,核心程序包括系统引导程序、MSDOS、SYS、IO.SYS和COMMAND.COM
3.4.3 Windows操作系统
1.Windows之美
(1)直观、高效的面向对象的图形用户界面,易学易用
(2)用户界面统一、友好、漂亮
(3)丰富的设备无关的图形操作
(4)多任务
2.Windows的体系结构
双模式结构开保护操作系统本身,以避免被应用程序的错误波及。操作系统核心运行在内核模式下,应用程序的代码运行在用户模式下。
3.4.4 UNLX 操作系统
1.UNLX之美
(1)提供可编程的命令语言
(2)提供了许多程序包
(3)文件系统简明
(4)可移植性强
(5)网络通信功能强
2.UNLX组成
UNLX系统采取了层级结构,外层是用户层,内层是内核层。UNLX操作系统包含四个基本成分:内核、Shell、文件系统和公用程序。内核调度和管理计算机系统的各种资源,Shell提供用户与内核进行交互操作的接口,文件系统是文件存放在磁盘等存储设备上的组织方法,公用程序是啊UNLX系统提供给用户的常用标准软件。
3.4.5 Linux操作系统
1.Linux之美
(1)模块化程度高
(2)源代码公开
(3)广泛的硬件支持
(4)安全性及可靠性好
(5)完整的网络集成
3.4.6 Mac OS
3.4.7 智能手机操作系统简介
通常使用的操作系统有Symbian、Windows Phone、iOS、Android和Blackberry OS
3.5 软件的开发
3.5.1 软件工程
是研究如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而被证明是正确的管理技术和当前能够得到的最好的软件开发和维护方法结合起来的学科。
3.5.2 软件开发过程
1.问题定义——要解决的问题是什么
2.可行性研究——对上一个阶段所确定的问题是否有行得通的解决方法
3.需求分析——为了解决这个问题,目标系统需要做什么
4.总体设计——概括地说,应该如何实现目标系统
5.详细设计——如何具体地实现这个系统
6.程序开发
7.软件测试
3.5.3 用户界面与用户体验
1.用户界面
是指在用户和软件之间传递、交换信息的媒介,是用户使用软件的综合操作环境,具体是指对软件的人机交互、操作逻辑、操作界面的整体设计。
用户界面的设计流程:确认目标用户、采集目标用户的习惯交互方式、提示和引导用户。
一致性原则:设计目标的一致性、元素外观的一致性、人机交互行为的一致性。
可用性原则:可理解、可达到、可控制。
2.用户体验
从软件整体上去衡量用户在内容、用户界面、操作流程、功能设计等方面的使用感觉,设计目标是有用、易用和友好。
3.经典用户界面设计欣赏——iPhone
(1)只留一个home键
(2)使用隐喻
(3)使用动画
(4)一目了然,即看即点
(5)灵活运用手势支持
3.6 软件行业职业简介
3.6.1 项目管理类
1.项目经理
2.QA工程师
2.6.2 开发类
1.软件需求分析师
2.软件开发工程师
3.系统分析师
4.系统架构师
3.6.3 测试类
1.软件测试工程师
2.软件产品测试经理
3.6.4 系统、安全及维护类
1.网络工程师
2.IT基础设施工程师
3.网络安全管理员
4.安全开发工程师
5.数据库管理员
6.系统管理员
4.1 程序设计语言简介
程序设计语言是一组用来定义计算机程序的语法规则,它是一组被标准化的交流技巧,用来向计算机发出指令。程序设计语言也拥有语言的三种元素:语法、语义和语用。
语法:指用字符组合成合法语句的规则集合,用于定义语言各种要素之间的形式关系,确定合法语句的结构描述,形成和产生一个合适的程序
词法规则:单词符号的形成规则
语法规则:规定了如何由单词符号形成更大的结构
语义:一条合法语句的含义
语用:涉及语言使用者各方面的内容,语义问题指实现的简易性、应用的效率和编程的方法论,可以把语用看做是程序与使用者的关系
4.2 程序设计语言的分类及编程模式
程序设计语言可以分为机器语言、汇编语言、高级语言三大类
4.2.1 机器语言
是用二进制代码表示的计算机能直接识别和执行的机器指令的集合。机器指令是指计算机可以执行的命令。
4.2.2 汇编语言
采用助记符来编写程序,是机器语言的符号化。符号化具体体现在用指令助记符代替指令的二进制操作码,用符号代替二进制地址码。汇编语言像机器语言一样,是面向硬件的语言,使用起来比较烦琐,通用性也较差。
4.2.3 高级语言
面向用户的语言,是一种与自然语言相近并为计算机所接受和执行的计算机语言。高级语言与自然语言更贴近,而与硬件功能相分离,便于掌握和使用。高级语言的通用性强,兼容性好,便于移植。
1.编译程序:把整个源程序翻译成目标程序,过程为源程序—词法分析—语法分析—语义分析—中间代码生成—代码优化—目标代码生成—目标程序
2.汇编程序:将编译程序得到的目标程序翻译为二进制的机器代码
4.2.4 编程模式
过程式编程模式、面向对象编程模式、函数式编程模式和说明式编程模式
1.过程式编程模式:与人们实际思考问题的方式接近,一般是从上向下,步步求精,最重要的思想是模块化、结构化
2.面向对象编程模式:是软件系统设计与实现的新方法,采用基于问题对象的自底向上方法设计程序结构,在内部结构上模拟客观世界,其设计过程是“用什么做”到“要做什么”,面向对象编程模式尽力描述问题的结构,而不是尽力直接寻找问题的解,从而较好地解决了客观世界描述的复杂性问题
3.函数式编程模式:程序被看成一个函数,与过程式函数相比具有两方面优势,支持模块化编程并且允许程序员使用已经存在的函数来开发新的函数。
4.说明式编程模式:依据逻辑推理的原则响应查询,它是在逻辑推理的基础上发展而来的。逻辑推理以推导为基础,可以根据一些已知的正确论断,运用逻辑推理的规则推导出新的论断。
4.3 高级编程语言介绍
4.3.1 BASIC语言
易学、易懂、易记、易用,可作为初学者的入门,也可作为学习其他高级语言的基础
4.3.2 PASCAL语言
一种结构化程序设计语言,具有大量的控制结构,充分反映了结构化程序设计的思想和要求,直观易懂,使用灵活,既可用于科学计算,又能用来编写系统软件
4.3.3 C语言
程序设计找那个广泛使用的计算机高级语言,适合于作为系统描述语言,也是通用的程序设计语言,可以用来编写系统软件和应用软件
4.3.4 C++语言
应用较广的面向对象的程序设计语言,可以实现面向对象的程序设计,是在C语言的基础上发展起来的,既支持传统的过程式程序设计,又支持面向对象的程序设计
4.3.5 Java语言
作为一种程序设计语言,简单,与机器硬件无关,具有较强的可移植性、安全性和鲁棒性。提供了并发机制,可以最大限度地利用网络。
4.3.6 Ada语言
一种表现能力很强的通用程序设计语言
4.3.7 Logo语言
绘图是Logo语言中最主要的功能,绘图使得用户可以通过简单的编程创作出丰富多彩的视觉效果或图案
4.3.8 脚本语言
扩建的语言或动态语言,是为了缩短传统的编写—编译—链接—运行过程而创建的计算机程序设计语言。脚本语言通常都有简单、易学、易用的特点,目的就是希望程序员能快速完成程序的编写工作