(一)C++的发展
C++是由AT&T Bell(贝尔)实验室的Bjarne Strou-strup博士及其同事于20世纪80年代初在C语言的基础上开发成功的。C++进一步扩充和完善了C语言,成为一种面向对象的程序设计语言。C++目前流行的编译器最新版本是Borland C++4.5,Symantec C++6.1,和Microsoft VisualC++ 2012。C++是C语言的扩展,C++的许多特性是从c语言中派生的,保留了C语言原有的所有优点,更重要的是,它提供了面向对象编程(object-oriented programming)的功能。它是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。C++程序设计语言以其语法灵活,语言表达力强,代码易维护、可移植性强、执行效率高,支持数据抽象、面向对象程序设计和泛型程序设计等优点而被广泛应用,成为当今软件开发的主流语言,也逐步成为高校程序设计课程的首选。学好C++,不仅有助于学生理解面向对象编程技术的精髓,而且会使他们再学习诸如Java、C#之类的主流面向对象程序设计语言变得相对简单。
(二)UML介绍
Unified Modeling Language (UML)又称统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。面向对象的分析与设计(OOA&D,OOAD)方法的发展在80年代末至90年代中出现了一个高潮,UML是这个高潮的产物。它不仅统一了Booch、Rumbaugh和Jacobson的表示方法,而且对其作了进一步的发展,并最终统一为大众所接受的标准建模语言。标准建模语言UML的主要特点可以归结为三点:1.UML是Booch、OMT和OOSE等方法基本概念的拓展与延伸。2.UML还吸取了
.
面向对象技术领域中其他流派的长处,其中也包括非OO方法的影响。UML符号表示考虑了各种方法的图形表示,删掉了大量易引起混乱的、多余的和极少使用的符号,也添加了一些新符号。3.UML在演变过程中还提出了一些新的概念。在UML标准中新加了模板(Stereotypes)、职责(Responsibilities)、扩展机制(Extensibility mechanisms)、线程(Threads)、过程(Processes)、分布式(Distribution)、并发(Concurrency)、模式(Patterns)、合作(Collaborations)、活动图(Activity diagram)等新概念,并清晰地区分类型(Type)、类(Class)和实例(Instance)、细化(Refinement)、接口(Interfaces)和组件(Components)等概念。 因此可以认为,UML是一种先进实用的标准建模语言,但其中某些概念尚待实践来验证,UML也必然存在一个进化过程。
(三)模板的介绍
模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而实现了真正的代码可重用性。模板的精神其实很简单:参数化类型。模版可以分为两类,一个是函数模版,另外一个是类模版。
1.函数模板的一般形式如下: Template 说明: template是一个声明模板的关键字,表示声明一个模板关键字class不能省略,如果类型形参多余一个,每个形参前都要加class <类型 形参表>可以包含基本数据类型可以包含类类型。 2.类模板的一般形式如下: Template < class或者也可以用typename T > class类名 {//类定义} 说明:其中,template是声明各模板的关键字,表示声明一个模板,模板参数可以是一个,也可以是多个。 . . (四)泛型编程的介绍 所谓泛型(Genericity),是指具有在多种数据类型上皆可操作的含意,与模板有些相似。泛型编程最初诞生于C++中,由Alexander Stepanov和David Musser创立,目的是为了实现C++的STL(标准模板库)。其语言支持机制就是模板。泛型编程的核心活动是抽象的:将一个特定于某些类型的算法中那些类型无关的共性抽象出来,比如,在STL的概念体系里面,不管你是一个数组还是一个链表,反正都是一个区间,这就是一层抽象。不管你是一个内建函数还是一个自定义类,反正都是一个Callable(可调用)的对象(在C++里面通过仿函数来表示),这就是一层抽象。泛型编程的过程就是一个不断将这些抽象提升出来的过程,最终的目的是形成一个最大程度上通用的算法或类。 二、Object C++的相关资料 (一)目前流行的C++开发工具的介绍 目前比较流行的开发工具主要有Microsoft Visual C++6.0、Microsoft Visual studio 2005、Microsoft Visual studio 2010等。 1.Microsoft Visual C++6.0的介绍。Visual C++6.0由Microsoft开发, 它不仅是一个C++ 编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment,IDE)。Visual C++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。这些组件通过一个名为Developer Studio的组件集成为和谐的开发环境。Microsoft的主力软件产品Visual C++是一个功能强大的可视化软件开发工具。Visual C++6.0以拥有“语法高亮”,自动编译功能以及高级除错功能而著称。还允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。以其编译及创建预编译头文件(stdafx.h)、最小重建功能及累加连结(link)著称。这些特 . . 征明显缩短程序编辑、编译及连结的时间花费,在大型软件计划上尤其显著。目前微软公司已经停止对VC++6.0系列产品的维护,继而转向.NET平台环境,新的MS2008、MS2010等将更符合新世纪通用开发需求。 2.Microsoft Visual studio 的介绍。Visual Studio 是微软公司推出的开发环境,Visual Studio可以用来创建Windows平台下的 Windows 应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和 Office 插件。Visual Studio 支持用户透过多种不同的程序语言进行开发,但历代版本所支持的语言并不完全相同。目前 Visual Studio 2010 原生支持:Visual Basic、Visual C#、Visual C++、Visual F#四种程序语言。 (二) Objective-C 的介绍 Objective-C一直被用于编写iphone应用程序中。Objective-C,通常写作ObjC和较少用的Objective C或Obj-C,是扩充C的面向对象编程语言。它主要使用于Mac OS X和GNUstep这两个使用OpenStep标准的系统,而在NeXTSTEP和OpenStep中它更是基本语言。Objective-C可以在gcc运作的系统写和编译,因为gcc含Objective-C的编译器。1980年代初布莱德•确斯(Brad Cox)在其公司Stepstone发明Objective-C。Objective-C是非常实际的语言,它使用一个用C写成很小的运行库,只会令应用程序的大小增加很小,和大部分OO系统使用极大的VM执行时间会取代了整个系统的运作相反。ObjC写成的程序通常不会比其原始码大很多。而其函式库(通常没附在软件发行本)亦和Smalltalk系统要使用极大的内存来开启一个窗口的情况相反。Objective-C的最初版本并不支持垃圾回收。在当时这是争论的焦点之一,很多人考虑到Smalltalk回收时有漫长的死亡时间,令整个系统失去功用。Objective-C为避免此问题才不拥有这个功能。虽然某些第三方版本已加入这个功能(尤是GNUstep), Apple在其Mac OS X 10.3中仍未引入这个功能。另一个问题是ObjC不包括命名空间机制(namespace mechanism)。取而代之的是程序设计师必须在其类别名称加上前缀,时常引致冲突。在2004年,在Cocoa编程环境中,所有Mac OS X类别和函式均有“NS”作为前缀,例如NSObject或NSButton来清楚分别它们属于Mac OS X核心;使用“NS”是由于这些类别的名称在NeXTSTEP开发时定下。 . . (三)Objective-C同C++的异同 1.单一继承。Objective-C不支持多重继承,(同Java和Smalltalk),而C++语言支持多重继承。 2.动态。Objective-C是动态定型(dynamicaly typed)所以它的类库比C++要容易操作。Objective-C在运行时可以允许根据字符串名字来访问方法和类,还可以动态连接和添加类。 3.学派区别。C++跟从面向对象编程里的Simula 67(一种早期OO语言)学派,而Objecive-C属于Smalltalk学派。在C++里,对象的静态类型决定你是否可以发送消息给它;而对Objective-C来说,由动态类型来决定。Simula 67学派更安全,因为大部分错误可以在编译时查出。而Smalltalk学派更灵活,比如一些Smalltalk看来无误的程序拿到Simualr 67那里就无法通过。 三、敏捷开发的相关内容 简单的说,敏捷开发是指一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。敏捷方法处理需求和技术变化主要通过迭代过程来管理。在每一次迭代周期结束时,都应交付用户一个可用的,可部署的系统。使用并体验该系统所获得的有价值的反馈意见将按顺序,在随后的迭代周期中和其它需求变化一起在产品中实现和集成。每次迭代周期应尽可能短,以便能及时频繁地处理需求变化和用户反馈。 (一)敏捷开发的方法和原则 1.迭代式开发。即整个开发过程被分为几个迭代周期,每个迭代周期是一个定长或不定长的时间块每个迭代周期持续的时间一般较短,通常为一到六周。 . . 2.增量交付。产品是在每个迭代周期结束时被逐步交付使用,而不是在整个开发过程结束的时候一次性交付使用。每次交付的都是可以被部署到用户应用环境中被用户使用的、能给用户带来即时效益和价值的产品。 3.开发团队和用户反馈推动产品开发。敏捷开发方法主张用户能够全程参与到整个开发过程中。这使需求变化和用户反馈能被动态管理并及时集成到产品中。同时,团队对于用户的需求也能及时提供反馈意见。 4.持续集成。新的功能或需求变化总是尽可能频繁地被整合到产品中。一些项目是在每个迭代周期结束的时候集成,有些项目则每天都在这么做。 5.开发团队自我管理。拥有一个积极的、自我管理的、具备自由交流风格的开发团队,是每个敏捷项目必不可少的条件。人是敏捷开发的核心。敏捷开发总是以人为中心建立开发的过程和机制,而非把过程和机制强加给人。 (二)敏捷开发的特点和优势 1.精确。它将带给用户真正需要的软件系统。瀑布模式通常会在产品起点与最终结果之间计划出一条直线,然后沿着直线不断往前走。然而当项目到达终点时,用户通常会发现那已经不是他们想去的地方。而敏捷方法则采用小步的方式向前走,每走完一步,都需要及时调整并为下一步确定当前的方向,直到真正的终点。 2.质量。敏捷方法对每一次迭代周期的质量都有严格要求。一些敏捷方法如XP等,甚至使用测试驱动开发(test-driven development),即在正式开发功能代码之前,先开发该功能的测试代码。这些都对敏捷项目的整个开发周期提供了可靠的质量保证。 3.速度。敏捷开发提倡避免较大的前期规划,认为那是一种很大的浪费。因为很多预先计划的东西都会发生改变,大规模的前期规划通常是徒劳的。敏捷团队只专注于开发项目中当前最需要的,最具价值的部分。这样能很快地投入开发。另外,较短的迭代周期使团队成员能迅速进入开发状态。 4.丰厚的投资回报率(ROI)。在敏捷开发过程中,最具价值的功能总是被优先开发,这样能给客户带来最大的投资回报率。 5.高效的自我管理团队。这既是采用敏捷开发的必然结果,也是推动敏捷开 . . 发不断前进的动力。敏捷开发要求团队成员必须积极主动,自我管理。在这样的团队中工作,每个团队成员的技术能力,交流,社交,表达和领导能力也都能得以提高。 (三)主要的敏捷方法 1.XP(Extreme Programming——极端编程)。极限编程(XP)的主要目的是降低需求变化的成本。它引入一系列优秀的软件开发方法,并将它们发挥到极致。比如,为了能及时得到用户的反馈,XP要求客户代表每天都必须与开发团队在一起。同时,XP要求所有的编程都采用结对编程(pair-programming)的方式。这种方式是传统的同行审查(peer review)的一种极端表现,或者可以说是它的替代方式。 XP定义了一套简单的开发流程,包括:编写用户案例,架构规范,实施规划,迭代计划,代码开发,单元测试,验收测试等等。 2. Scrum。Scrum是一个敏捷开发框架,它由一个开发过程,几种角色以及一套规范的实施方法组成。它可以被运用于软件开发,项目维护,也可以被用来作为一种管理敏捷项目的框架。在Scrum中,产品需求被定义为产品需求积压(product backlogs)。产品需求积压可以是用户案例,独立的功能描述,技术要求等。所有的产品需求积压都是从一个简单的想法开始,并逐步被细化,直到可以被开发的程度。 3. 精益开发(LEAN DEVELOPMENT)。精益软件开发模式是从丰田公司的产品开发方法中演化而来。它主要包括两个部分:一部分是核心思想及原则,另外一部分由一些在相应的工具构成。精益开发的核心思想是查明和消除浪费。在软件开发过程中,错误(bugs),没用的功能,等待以及其他任何对实现结果没有益处的东西都是浪费。浪费及其源头必须被分析查明,然后设法消除。和其它敏捷方法相比,精益软件更重要的是不断完善开发过程的一种思维方式。因此,将精益模式与其他敏捷开发模式一起使用将会取得很好的效果。 4. 其它敏捷方法。(1)动态系统开发方法(DSDM)是由快速应用程序开发(RAD)方法演变而来的敏捷开发模式。DSDM在普遍的敏捷价值和原则的基础上,定义了更加详细的流程,以涵盖更完整的项目生命周期。(2)特征驱动开发(FDD)是另一种敏捷开发方式,它将用户的功能需求划分成更小的功能特征, . . 然后逐步地在每个迭代周期中开发实现这些产品特征。与DSDM方式一样,FDD仍然会在项目初期对整个项目做较大的规划和建模,以获得对该系统的全面了解。但是相比DSDM来说,FDD在这些方面简捷了一些。(3)Crystal Clear是另一种敏捷方法。Crystal Clear更专注于人。相比于其他的敏捷方法,它可使人获得更大的解放。据称这种方法更适合于较小规模的开发小组(由2-8个人组成)和非关键项目。 . 因篇幅问题不能全部显示,请点此查看更多更全内容