1.1 面向过程的编程风格与面向对象的编程风格

C语言是面向过程语言,也称为命令型语言,面向过程通常采用自顶向下设计,问题复杂时不断运用自顶向下设计(即函数分解法)直到容易处理。自顶向下设计优点是直观有条理,缺点是难于进行软件维护,包括软件系统的测试、调试和升级等,牵一发而动全身。

模块化的组织方式:将整个系统分解为若干模块,模块之间通过接口传递信息,模块划分应尽可能高内聚,低耦合。

内聚:模块内各元素彼此结合的紧密程度;耦合:不同模块间的依赖紧密程度。

问题:高耦合引起程序崩溃;低内聚使数据无法管理,程序难以理解;数据安全性问题;可维护性及可重用性差;图形界面难以实现和维护;串联改变。

程序设计=数据结构+算法

程序内容=过程+过程调用

面向对象=对象+类+继承+消息

面向对象程序设计是面向过程编程的一种替代技术,其中构成模块的基本单元是而不是过程。面向对象设计中的类是对象(object)的集合体,对象是数据结构和算法的封装体,属于类的任何对象共享该类的所有属性

程序=对象+消息

面向对象程序设计的优点:实现对现实世界客体的自然描述;可控制复杂性;可增强模块性;可提高重用性;可改善可维护性。

面向对象与面向过程的差异:采用对象为中心的解题方法更自然、更直接地反映真实世界的问题空间;以对象为中心的方法具有继承性;以对象为中心的解题方法采用消息传递机制作为对象之间相互通信的唯一方式,而机构化方法采用显式调用方法进行通信。

一个类(如Human类)就是一个数据类型,可以定义变量(如Mary),表示Mary属于Human。Human类型的变量可以拥有成员变量(member variable)或(field)。这些成员变量称为数据成员(如feetCount)。属于类的函数称为函数成员,这种函数在面向对象语言中叫做方法。作为数据类型,类必须将变量(C++的数据成员)和过程(C++的函数成员)结合起来,这样才可以使用这些数据类型对各种实体建模。(即:类是成员变量和过程的聚合体,通过该聚合体,类得以完成将对象进行建模的任务)。

关系是指在类与类之间、对象及其所属类之间存在的各种关系。关系有多种类型,如类与类之间的拥有has a、继承is a、实例化 belongs to数据关系;对象和类之间也存在着实例化或隶属于的关系。

1.2 类与抽象数据类型

对象是面向对象开发模式的基本成分,可用一组属性和可执行的一组操作来定义,属性一般只能通过执行对象的操作来改变,操作又称为方法、行为或服务,它描述了对象执行的功能,若通过消息传递,还可以为其他对象使用。

类是一组具有相同数据结构和操作的对象的集合,定义包括一组数据属性和在数据上的一组合法操作,可以产生对象,对象是类的实例,可使用类中的函数。

定义类时最少包含:类名;外部接口;内部实现。

面向对象语言中的类是支持信息隐藏的模块,C++使用关键字public和private来对类的属性和操作进行存取访问控制。

面向过程编程过程作为模块的基本单元,并且数据处理在过程中进行。面向对象编程的基本单元是类,通过类这种机制可以将数据和处理这些数据的过程封装为一个有机的整体——类。

当一个数据类型仅暴露其公有接口,而将其私有实现隐藏起来,我们称这个数据类型是抽象的。C++通过对类的支持提供了信息隐藏,而信息隐藏特别是对低层实现细节的隐藏,是构造抽象数据类型的关键,而且在抽象数据类型中提供某个功能的办法就是将该功能以类的成员函数的形式封装起来。使用抽象数据类型将提高程序的可靠性和健壮性。

1.3 客户/服务器模式与消息传递

面向对象编程以客户/服务器模式为计算基础,该模式诠释了面向对象编程中的重点:信息隐藏。信息隐藏也可以提高服务器的健壮性。

消息由三部分组成:接收消息的对象;消息标识符(即消息名,实质上是方法名);零个或多个变元。如MyCircle.Show(Green),MyCircle是接收消息的对象的名字,Show是消息名,Green是消息的变元。

对象交互的两种形式:直接交互,直接调用另一对象的公共操作,在没有消息管理机制的单人舞操作系统环境下用的最多;间接交互,一对象发送消息到消息队列中,由操作系统识别消息有那个对象接受,然后调用相应对象的相关操作。

在面向对象程序中,类和对象表现为服务器,使用类和对象的模块(如函数)表现为客户,客户通过特殊的方式请求服务。由于设计良好的类仅输出客户所需的服务,因而类接口通常只包含高层的方法,类的数据成员通常为类的高层接口提供服务,客户端代码工作高于高层,消息传递机制也强调了类和对象作为一种服务器其接口实际上就是他所称的服务集。

1.4 继承与多态

继承支持代码重用,从而提高软件的可靠性。所有面向对象语言至少支持单重继承:任何一个子类都只有一个父类。有些语言如C++还支持多重继承,一个子类可以有多个父类。无论是单重继承还是多重继承,子类都从其所有的父类继承所有的数据成员和成员函数。

使用多重继承会增加命名冲突的可能性:派生类和基类发生命名冲突或者基类和基类发生命名冲突。解决命名冲突问题的方法是使用域解析符。

在面向对象语言中,多个不同函数可以具有相同的函数签名,即多态方法

多态方法在继承层次结构中属于类。在多态上下文中,如果子类提供了自己的多态方法定义,称为子类覆盖(override)父类具有相同签名档的方法。

多态机制可以消除显式的递归调用从而避免了面向过程方法表现出来的复杂逻辑。

1.5 接口与组件

在某些面向对象语言(如Java)中接口为关键字。而C++支持抽象基类,通过公有的、高层的方法来指定类的接口。在类之间共享接口带来极大便利,接口共享这种多态机制极其适用于组件技术。

软件组件是预先创建好的程序模块,可与其他模块一起构成一个程序。组件栖身于容器中。容器是一种软件机制,用来对组件进行整合,并为组件间通信提供服务,容器和组件的有机结合体构成程序。从使用者角度来看,一个组件是一些前端接口的后盾服务者,程序员通过组件接口所暴露的函数来操作该组件。

组件对象模型COM

COM是一种不依赖于任何语言的组件对象模型,是关于如何建立可动态互访组件以及如何通过组件建立应用程序的一个规范,通过这种标准将可以在任意两个组件之间进行通信而不用考虑其所处的操作系统是否相同、使用的开发语言是否一致等。总之,是一种跨应用和语言共享二进制代码的方法。

COM的优点:应用程序可定制;提高软件的可重用性;分布式、远程调用等应用程序开发得以简化。

分布式组件对象模型DCOM是COM组建的扩展,在COM的应用程序、组件、工具等基础上处理网络协议的低层次的细节问题,使用户不必关心网络协议细节。

1.6 面向对象开发

开发指的是软件的生命周期,系统开发主要是建模。

三种模型:

类模型:描述系统内部对象及其关系的静态结构。

状态模型:描述了对象随时间而变化的部分。

交互模型:描述系统中的对象如何协作以完成更为宽泛的任务。

C++面向对象程序设计 面向对象编程相关推荐

  1. JAVA面向对象程序设计——面向对象

    类与对象 概念:程序是为了模拟现实生活,解决现实中生活中的各种问题,现实中的每种实物都是独立的,每种独立的事物都可以用一种"类型"表示,这就是类. 类是一个概念,也可以说是模板,对 ...

  2. python面向对象程序设计董付国ppt_(董付国)Python 学习笔记---Python面向对象程序设计(1)...

    面向对象程序设计 面向对象程序设计(Object Oriented Programming,OOP)主要针对大型软件设计而提出,使得软件设计更加灵活,能够很好地支持代码复用和设计复用,并且使得代码具有 ...

  3. 面向对象程序设计C++学习之路2

    面向对象程序设计--C++ 编程专栏 C++风格简单题 百钱问题(1元兑换成1,2,5,分的种类) 引用的例子--排序(从小到大) 类和对象题 简单的成员函数题 对象数组题 继承与派生类题 面积题 学 ...

  4. C++面向对象(一):面向对象程序设计概述

    C++面向对象:面向对象程序设计概述 会有点长,不过读过就全学会喽!!!!!! 会有点长,不过读过就全学会喽!!!!!! 会有点长,不过读过就全学会喽!!!!!! 1.什么是面向对象程序设计 面向对象 ...

  5. Python 面向对象程序设计(一)

    面向对象程序设计 # 面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是一种程序设计范型,同时也是一种程序开发的方法. #对象指的是类的实例.它将对象作为 ...

  6. python类与对象作业_荐富贵和你一起复习Python(第10篇)— 面向对象程序设计

    继续复习Python,今日复习 -- 面向对象程序设计,中间会有自己的心得体会,要是有什么错误或者补充可直接评论或者私信哟. 面向对象程序设计 面向对象程序设计的思想主要针对大型软件设计提出,能够很好 ...

  7. c++陈维兴第三版3.35_C++面向对象程序设计教程第3版—陈维兴,林小茶课后习题答案...

    C++ 面向对象程序设计教程课后题答案 1 . 1 什么就是面向对象程序设计 ? 面向对象程序设计就是一种新的程序设计范型.这种范型的主要特征就是 : 程序 = 对象 + 消息 面向对象程序的基本元素 ...

  8. 用面向对象程序设计制作花语(flowerlanguage)

    目录 一.什么是面向对象程序设计 二.什么是类 1.什么是类的成员 (1)什么是属性 (2)什么是方法 三.什么是对象 四.讲解代码 1.定义类 2.调整对象的属性 3.定义函数 4.将self.wi ...

  9. Java面向对象设计(面向对象)

    Java面向对象程序设计 面向对象 学习JAVA必须掌握类和对象,这样可以深层次理解Java这种面向对象的程序开发理念,从而更好更快地掌握Java这门语言的编程思想和方法 类 类保存着方法和属性,那么 ...

最新文章

  1. div高度、宽度100% div width、height 100%
  2. boost::mp11::mp_set_difference相关用法的测试程序
  3. C++-Loki Allocator
  4. IOS控件的应用UIPageController与UIScrollView
  5. 中关村win11 32位官方原版iso文件v2021.08
  6. 阿里云安装git_Jenkins准备篇04阿里云Centos7服务器安装git
  7. java statement 动态参数_java_web学习(九) PreparedStatement动态参数的引入
  8. Python实现最简单的神经网络(数字识别)
  9. java azure blobs sas_仅使用SAS令牌连接到Azure存储帐户?
  10. 线性代数学习笔记——矩阵主要公式
  11. 如何成为一名Go开发人员:总共分六步
  12. 刚体运动学公式_1.力的观点 ⑴.匀变速直线运动中常见的公式: 牛顿第二定律: 运动学公式:.... ⑵.圆周运动的主要公式:...
  13. 一招解决 Mac JD-JUI 打不开问题
  14. 超全面UI基础设计规范
  15. python爬duitang的摄影类图片
  16. 2022好用的便签记事日程提醒软件有哪些
  17. 金融大数据分析平台Palantir Metropolis介绍
  18. tftpd32服务器软件在Windows与linux 下的文件传输
  19. VC 获取任务栏窗口的句柄
  20. 【Spring boot 常见问题】

热门文章

  1. 苹果 AirPods 耳机总是连到别人的iPhone,如何解决?
  2. 0到1,Celery从入门到出家
  3. 把网站生成快捷方式到桌面
  4. Photoshop使用滤镜给城市建筑添加水中倒影
  5. 团队知识管理实践 -- 以产品帮助文档为例
  6. redis 缓存失效原理
  7. 关于计算机的英语手抄报简单,英语交通工具手抄报,十分简单的英语手抄报?...
  8. 视频教程-桫哥-GOlang基础-Go语言实战:并发爬虫-Go语言
  9. FreeSwtich的监听功能
  10. mysql 主从同步恢复_MySQL主从同步错误恢复