230 likes | 426 Views
面向对象程序设计. 课程简介. 本课程作为计算机专业的基础必修课程。主要介绍面向对象程序设计的基本概念、设计方法;详尽地讲述 C++ 语言面向对象的基本特性:其内容包括类、对象、派生类、继承、多态性、虚函数、模板、流类库、异常处理等;通过本课程的教学,使学生掌握面向对象程序设计的基本思想与方法,使学生熟悉 C++ 语言的主要特点和机制,进而学会利用 C++ 语言解决一般应用问题。使学生在程序设计方法,程序设计语言与程序设计工具三方面受到训练,从而能熟练地利用计算机解决实际问题,为后续专业课程打下扎实的基础。. 参考资料.
E N D
课程简介 • 本课程作为计算机专业的基础必修课程。主要介绍面向对象程序设计的基本概念、设计方法;详尽地讲述C++语言面向对象的基本特性:其内容包括类、对象、派生类、继承、多态性、虚函数、模板、流类库、异常处理等;通过本课程的教学,使学生掌握面向对象程序设计的基本思想与方法,使学生熟悉C++语言的主要特点和机制,进而学会利用C++语言解决一般应用问题。使学生在程序设计方法,程序设计语言与程序设计工具三方面受到训练,从而能熟练地利用计算机解决实际问题,为后续专业课程打下扎实的基础。
参考资料 • 【内容提要】本书是依据ANSI C++标准进行介绍的,引导读者从一开始就按标准C++的规定编程。本书是大学各专业学生学习C++的基础教材,也是适于初学者学习的教材。即使没有教师讲授,读者也能看懂本书的大部分内容。
【内容提要】书中也用了大量的篇幅,在标准库以及一般软件开发的环境下,讨论了使用C++语言编程和组织程序的许多高级技术。本书内容覆盖了C++语言及其程序设计的各个方面,其技术深度与广度是举世公认的。【作者简介】 Bjarne Stroustrup博士是C++语言的设计者和最初实现者,AT&T实验室的大型程序设计研究部的首脑。他曾经获得《财富》杂志评选的“美国12位最年轻的科学家”称号,同时还是《BYTE》杂志评选出的“近20年来计算机工业最具影响力的20人”,并且是历史最悠久、目前世界上最大的教育和科学计算协会ACM(美国计算机协会)的院士。
内容提要】本书是C++领域一本权威的著作,书中的内容、讲授方法、选用例子和跟随练习既适合课堂教学,又适合读者自学。无论是高等院校计算机及相关专业的学生,还是业界的专业人员,以及广大的计算机爱好者,都可从阅读本书中获得宝贵的收益.内容提要】本书是C++领域一本权威的著作,书中的内容、讲授方法、选用例子和跟随练习既适合课堂教学,又适合读者自学。无论是高等院校计算机及相关专业的学生,还是业界的专业人员,以及广大的计算机爱好者,都可从阅读本书中获得宝贵的收益.
第1章 概述(Introduction) 教学内容: §程序设计方法的概述 §面向对象程序设计语言的概述 §面向对象程序设计的主要特性 §面向对象的软件开发
§ 程序设计方法的概述——面向过程的结构化程序设计方法 • 在二十世纪五六十年代,一个软件项目往往是由单个人独立完成,当时人们认为写出的程序只要能在计算机上得出正确的结果,程序的写法可以不受任何约束。然而对于大型的、需要多人完成的项目,这种作坊式的开发方法显然行不通。于是人们开始尝试把其它工程领域中行之有效的方法应用到软件开发中来
在二十世纪六七十年代,Yourdon E. 和 Constantine L. 等人借鉴工厂利用流水线组织生成的方法,提出了结构化程序开发技术,利用抽象模型的概念,按照数据传递、变换的关系,自顶向下、逐层细化地将系统分解成层级结构的模块,每个模块实现为一个函数或过程。 • 这种方法最大的特点是数据和过程的分离,整个系统由一组被动的数据和一组能动的过程组成,其中数据表示某种信息,而过程完成对数据一定的处理。 • 系统运行时,输入的数据从一个过程流向下一个过程,这好比流水线上的生产资料和半成品从一个工段到下一个工段。
优点: • 能有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。 • 缺点: • 可重用性差、难以开发大型软件 • 把数据和处理数据的过程分离为相互独立的实体,当数据结构改变时,所有相关的处理过程都要进行相应的修改。程序=(算法)+(数据结构)
例如:考虑一个银行系统,该系统允许顾客开设不同类型的银行账户,包括储蓄账户、结算账户(允许转帐)等,同时允许顾客存款、取款和查询等操作。例如:考虑一个银行系统,该系统允许顾客开设不同类型的银行账户,包括储蓄账户、结算账户(允许转帐)等,同时允许顾客存款、取款和查询等操作。 首先考虑数据结构: struct account { char *name; // 账户 unsigned long accountId; // 账号 float balance; //余额 float interestYTD; // 年利息 char accountType; // 账户类型(储蓄账户、结算账户) };
再考虑用三个过程分别实现存款、取款和转帐等功能。我们可以设计三个函数:再考虑用三个过程分别实现存款、取款和转帐等功能。我们可以设计三个函数: MakeDeposit ( ) WithDraw ( ) Transfer ( ) 这种数据结构与过程分离有很多问题,例如增加一种账户类型——信用卡账户,则三个函数都必须重新编写。
—面向对象程序设计方法 • 对象是OOP方法中最基本和最核心的概念。 • 从程序设计的本质上看:对象是把数据和处理数据的过程当成一个整体。 (在C++中,对象=数据+函数) • 类是OOP方法中程序设计的主体。 • 对同一类型对象抽象出其共性,形成类。 • 类是对象的抽象,而对象是类的实例
一般帐户类 取账号 账号 余额 存款 取款 显示信息 储蓄账户类 结算账户类 取款 取款
一般帐户类 取账号 账号 余额 存款 取款 取款 显示信息 储蓄账户类 结算账户类 信用卡账户类 取款 取款
Simula • 最早的具有面向对象思想的程序设计语言可追溯到20世纪60年代的Simula语言。Simula语言中引入了一些面向对象的重要概念,如数据抽象、类机制、继承机制等。 • Smalltalk • Smalltalk语言是第一个真正面向对象的程序设计语言。Smalltalk语言引入和完善了类,应用了继承机制和动态连接。Smalltalk语言被看作是一种最纯粹的面向对象程序设计语言。但Smalltalk语言提出时,主流的程序设计方法是面向过程程序设计方法和结构化程序设计方法,Smalltalk语言仅在一些对面向对象程序设计方法感兴趣的研究人员中流行,并未获得商业上的成功。
C++ • C++是在C程序设计语言的基础上进行扩充,增加了相应的面向对象机制的强类型、混合型面向对象程序设计语言。由于C++既具有完备的面向对象机制,又保持了C的灵活高效和对C程序的兼容性,所以是目前使用最广泛的面向对象程序设计语言之一。 • Java • Java是由Sun Microsystems公司开发的一种弱类型的面向对象程序设计语言。Java编译器生成的是一种称为“字节码”的中间码文件,该文件的执行是由Java解释器和抽象机模型组成JVM(Java Virtual Machine)完成的,所以Java语言非常适合网络编程,实现程序的跨平台、跨介质运行的需要,但效率较低。
C# • C#是由Microsoft公司近年来开发一种直接用于在Microsoft .Net平台上更易于编译产生网络程序(字节码程序)的面向对象程序设计语言。该语言具有Java程序的跨介质运行机制,在一定程度上保持了C的风格和高效率,并融入了VB语言开发程序的友好性和方便性,但目前还不能实现跨平台运行。
在Windows 环境下支持C++的集成开发环境有: • Microsoft Visual C++ 6.0 (VC6) • Borland C++ Builder 6.0 (BCB6) • Microsoft Visual C++. NET
§面向对象程序设计的主要特性 • 1. 封装性 • 完好定义的类一旦建立,就可看成是完全封装的实体,可以作为一个整体单元使用。类的实际内部工作应当隐藏起来,使用完好定义的类之用户不需要知道类是如何工作的,只要知道如何使用它就行。 • 指两个方面的含义: • 将有关的数据和操作代码封装在一个对象中,形成一个基本的单位,各个对象之间相对独立,互不干扰。 • 对象中某些部分对外是隐蔽,这样有利于数据安全。
2、继承性 • 继承对于软件重用有着重要意义,是面向对象技术能够提高软件开发效率的重要原因之一。程序可以在扩展现有类(基类)的基础上声明新子类(派生类)。继承机制允许派生类使用基类的数据和操作。同时派生类还可以增加新的操作和数据。 • 继承性的优点 • 减少源代码,即代码可重用。 • 易于维护。 • 体现自然界之间的关系。
多态性 • 多态性是指同一个消息被不同类的对象或相似而不完全相同的对象接收时产生不同的行为。 • 由于继承面产生了相关的不同的类,其对象对同一消息会做出不同的响应。 • 多态性是面向对象程序设计的一个重要特性,能增加程序的灵活性。
§面向对象的软件开发 • 面向对象分析(OOA) • 面向对象设计(OOD) • 面向对象编程(OOP) • 面向对象测试(OOT) • 面向对象维护(OOSM)