C++面向对象编程介绍

1.结构化方法

(1)结构化方法是指把程序看作是处理数据的一系列过程。过程或函数定义为一个个顺序执行的一组指令。主要思想是功能分解并逐步求精。

(2)程序=算法+数据结构——算法(函数与过程)是一个独立的整体,数据结构(数据类型与数据)也是一个独立的整体。两者分开设计,以算法为主。

(3)结构化程序设计的问题:

模块间的高度耦合使得解决一部分问题时,引起另一部分的崩溃。(耦合是指一部分代码对另一部分代码或某个数据存储区的依赖程度)

模块内部的低内聚使得数据无法管理,程序的理解变得困难。(内聚指的是一组代码和与此相关的数据的结合程度)

2.面向对象编程

(1)具有抽象性,封装性可重用性等优点。

(2)对象=算法+数据结构   程序=对象+对象+对象......

3.面向对象的概念

3.1什么是面向对象

(1)面向对象=对象+类+继承+消息  如果一个软件系统是使用这样四个概念设计和实现的,则认为这个软件系统是面向对象的。一个面向对象的程序的每一成分应该是对象计算是通过新的对象的建立对象之间的消息的传送来实行的。

3.2对象和类

(1)对象:

—对象是面向对象开发模式的基本成分。

—每个对象可用它本身的一组属性和它可以执行的一组操作来定义。

—属性:一般只能通过执行对象的操作来改变,

—操作:又称为方法或服务,它描述了对象执行的功能,通过消息传递还可以被其他对象使用。

—对象具有唯一标识的功能,在对象建立时,系统授予新对象以唯一的对象标识OID。

对象必须参与一个或一个以上的类。

(2)类:

类是一组具有相同数据结构和相同操作的对象的集合。

—类的定义包括一组数据属性和在数据上的一组合法操作。

—类定义可以视为一个具有类似特性与共同行为的对象的模板,可用来产生对象。

—具体对类进行定义时,最低限度应包括如下内容:类名,外部接口,内部实现

   外部接口:让用户了解对象是什么和能做什么。通常包括公共成员函数和公共成员变量。

   内部实现:是私有的。对应于每一个操作符,都应在内部实现中找出具体的实现这一操作的程序模块。

   ps:C++使用Public和Private关键字来对类的属性和操作进行存取访问控制。

3.2抽象和封装

(1)封装:

—面向对象编程中模块的基本单元是类,类将数据和处理数据的过程封装成一个有机整体。

概念封装和信息屏蔽使得类具有更大的独立性。在任意时刻都可以在类的界面上增加新操作。为了便于类的调整,应该尽量做到定义与实现分离。

(2)抽象:

—当一个数据类型仅暴露其公共接口,而将其实现细节隐藏起来,则称该数据类型是抽象的。

使用抽象数据类型可以提高程序的可靠性和健壮性。如:为避免频繁地对整数溢出进行处理,可以设计一个Integer类,它对int型数据类型进行扩展,进行数值范围处理等。 Integer类的使用者则可以将主要精力放在程序所需的计算上。

3.3继承和多态

(1)继承

继承通过创建子类,对父类进行特化或扩展,是一种非常方便高效的机制 。例如,给定Window类,可以通过继承创建其子类MenuWindow 通过继承,还可以对多个类进行共性处理而得到它们的公共父类。例如,给定类Car、Motorcycle、Truck,我们提取它们的共性,就可以得到一个Vehicle类。

—继承性的含义:

对象共享它所有类的结构、操作与约束等语义特性。(自动继承机制)

类层次的继承性及多层类层次的继承传递性。(垂直的多层共享机制)

类格的继承性。(横向共享,多重继承机制)

—继承举例:

Window类

数据成员:窗口的宽度和高度、窗口相对于屏幕的x和y坐标、窗口的背景和前景颜色、窗口的边框宽度及样式(如框架)等。

成员函数:创建和销毁窗口、移动窗口、改变窗口的大小、改变窗口的属性(如背景颜色)等。

MenuWindow类:该类除了继承Window 类所有的数据成员和成员函数之外,还拥有属于其自身的数据成员和成员函数。比如,用来支持菜单项列表、用户对菜单项的选取等等。 除了MenuWindow类外,还可能有其他一些子类。

—继承的语法:   

 Class Sportscar: public Car

{   //sports members     };

表明,Sportscar 类从Car类继承。 冒号:代表继承,表示从某类继承或是某类的子类。 关键字public 表示C++的一种继承方式

(2)多态

—多态意为拥有多种形态。

—在面向对象语言中,多个不同函数可以具有相同的函数签名函数签名由函数名与其参数数目和类型组成。例如,如果基类和派生类都拥有一个名为m且唯一参数类型为int的成员函数,则这两个函数的函数签名相同。函数的返回值类型不是函数签名的一部分。

—多态性举例:

Window 类有一个成员函数display,用来在屏幕上显示窗口。

若不同类型的窗口有着不同显示方式,如 MenuWindow显示一个选择列表 MessageWindow仅显示一个字符串。

假设Window层次中的每个类都有一个display方法,就有了不同形式或版本的display方法。

但对于客户(即Window层次的使用者)来说,只需向某个窗口对象发送一个display消息即可。例如,无论w是指向MenuWindow还是MessageWindow ,以下代码都可以正确执行,      

   W->display();

如果w实际指向MenuWindow对象,那么调用的是MenuWindow的display 函数;如果w实际指向MessageWindow对象,那么调用的是MessageWindow的display函数。判断w实际指向什么类型的对象,并据此调用正确版本的函数,是系统而非客户的义务。对于上述的display函数,我们就称其为多态方法。

—多态性允许每个对象以适合自身的方式去响应共同的消息。多态性增强了软件的灵活性和重用性。

—动态联编实现多态性:

动态联编是指在程序运行时根据对象的实际类型来确定调用哪个函数。

它与静态联编(或称为早期绑定)相对,静态联编是在编译时根据变量声明的类型确定调用哪个函数。

动态联编通过虚函数和多态性实现。当一个类定义了虚函数,并且派生类重写了该虚函数时,通过基类指针或引用调用该虚函数时会根据对象的实际类型来决定调用哪个版本的函数。

4.面向对象设计

面向对象设计继续做面向对象分析阶段的工作,建立软件的结构。

(1)高层设计:高层设计阶段开发系统的结构,即构造应用软件的总体模型。 高层设计阶段标识在计算机环境中进行问题解决工作所需要的概念,并增加了一批需要的类。 这些类包括那些可使应用软件与系统的外部世界交互的类。 此阶段的输出是适合应用要求的类、类间的关系、应用的子系统视图规格说明。

(2)类设计:类与具有概念封装的子系统十分类似。 每个子系统都可以被当做一个类来实现,这个类聚集它的部件,提供了一组操作。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值