开始C++的学习(第一章)~美少女战士,加油!

来源:互联网 发布:沁人缘淘宝网 编辑:程序博客网 时间:2024/03/29 17:32

第一阶段所用书籍:《C++轻松入门》 王浩著 人民邮电出版社

                                      参考书籍:《Absolute C++》中英文版 (亦为第二阶段主打书籍)

接下来的blog,更倾向于学习笔记,好了,C++旅途开始啦~。。。。欢呼。。不着急到达目的地,沿途的风景更美丽!

===========================================================================================

第一章:面向对象设计

1.1 接近自然的思维方式---面向对象思想

对象 和 类

对象:所研究的任何事物

类:具有相同属性和行为的一组对象的集合

类与对象的关系:

  对象的抽象是类 类的实例化结果是对象           

蔬菜是一个类,是对白菜,青菜,花菜等对象的一种分类,是把其主要特征进行抽象后得到的。  如车是一类,卡车,跑车,面包车是对象;

面向对象的三大特征:继承,多态,封闭;

基于对象和面向对象的差别:

基于对象:是对数据的封装以及提供一组方法对封装过的数据进行操作,如C的IO库中的FILE*就可以看成是基于对象的;

面向对象:是在基于对象的基础上增加了继承多态

1.2 传统设计和面向对象设计的比较

“北京烤鸭”:

传统的制作方法,一步一步来,先怎样后怎样。。。杀鸭--拔毛--清洗--填料--浇烫--浇淋--风干--烘烤--取出--上油。

面向对象的制作方法:制造一台新型的全自动化“北京烤鸭”机器,输入是:烤鸭(一个对象),机器运作后,输出:熟了的烤鸭。。。不必知道机器内部是如何运作(封装)的,如何杀,如何清洗,只要知道这台机子的用途是制作“北京烤鸭”,操作方法是往入口放鸭子,再从出口拿出就行。如果用户想吃烤鸡了,传统方法需重新设计,面向对象的方法只要给原来的机器上增加新功能(面向对象优势之一:易于维护和改进)

传统方法的缺点:

(1)可修改性差,维护困难,导致可维护性差;

(2)重用性差(指同一事物不经修改或稍加修改就可多次重复使用的性质);

(3)在开发需求模糊或需求动态变化的系统时,所开发出的软件系统往往不能真正满足用户需求;

(4)开发出的软件稳定性,可修改性,可重用性都比较差,这是因为传统设计方法的本质是功能分解;

传统方法重过程,用户需求变化针对功能,如此变化对于基于过程的设计时灾难性的。

面向对象的优点:

(1)可读性高,维护方便且成本低(继承的存在,是得改变需求的维护在局部模块);

(2)质量高(可重用现有的,以前被测试过多次的类);

(3)开发效率高(接近自然的思维方式);

(4)灵活性好,易扩展,成本低(因继承,多态,封装的特性,自然设计出高内聚,低耦合的系统结构);

1.3 面向对象的核心思想---抽象

抽象:从众多事物中抽取共同的、本质性的特征和操作,抓住对象最核心的东西,过滤掉一部分对象自有的特性和操作,直到只剩下最基本的属性和操作。

使用抽象 可以使 复杂度 降低

将对象 抽象 成 类 :确定对象自己的特征,进行比较,找到共同的部分。

1.4 面向对象的分析与设计

面向对象的分析方法

围绕虚拟现实世界中的对象来构造系统,而不是围绕功能来构造系统

面向对象的设计

面向对象的设计是把分析阶段得道的需求转变成符合要求的、抽象的系统实现方案的过程。从面向对象分析道面向对象设计,是一个逐渐扩充的过程。

一家公司要设计一个人事管理系统,对不同类型的员工计算其当月工资

分析方法:   从各中员工类中抽象出员工类

设计:根据员工类型不同,设计出其他类,这些类继承在员工类下,各个类中,重写计算工资的方法

若新增一个(清洁工)类,设计这个新类,同样把其继承于这个员工的抽象类,并重写其中的工资计算方法,便可以支持新增加类型员工的工资计算了。

 

补充知识:

高内聚 内聚就是一个模块内各个元素彼此结合的紧密程度,高内聚就是一个模块内各个元素彼此结合的紧密程度高。 所谓高内聚是指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。

低耦合 耦合:一个软件结构内不同模块之间互连程度的度量(耦合性也叫块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差,模块间耦合的高低取决于模块间接口的复杂性,调用的方式以及传递的信息。) 对于低耦合,粗浅的理解是:

  一个完整的系统,模块与模块之间,尽可能的使其独立存在。

  也就是说,让每个模块,尽可能的独立完成某个特定的子功能。

  模块与模块之间的接口,尽量的少而简单。

  如果某两个模块间的关系比较复杂的话,最好首先考虑进一步的模块划分。

  这样有利于修改和组合】

 

 

原创粉丝点击