【知识摘要】C++面向对象理解

面向对象:

     个人认为是一种描述和构建系统的方法论。一个系统由互相作用的对象组成,对象状态决定系统的状态,对象的行为决定系统的行为。对象是通过抽象得到的,一个对象是对相关状态和行为的封装,继承是对象之间一种重要的关系,而对象的行为往往是多态的。

抽象与对象:

    抽象是面向对象的基础。对象自身的状态与行为,对象之间的关系都是抽象的结果,没有抽象就没有对象。

    现实世界的对象通过抽象转换为系统中的对象。

    抽象包括: 对象属性抽象、对象行为封装抽象,对象公共行为的提炼,非显示对象的抽象(策略 状态),类与类的结构、关系、行为抽象提炼。

面向过程、基于对象、面向对象区别:

    面向过程:程序由模块构成,对模块进行设计、编码、测试最后将模块有机的组合在一起形成完整的程序。

                     面向过程通常采用自顶向下设计方法进行设计。

                     自顶向下设计优点是既直观又有条理,但面对软件可维护性差

   面向对象:以面向对象设计方法设计,着重于类的设计,抽象各个对象,封装对象的属性及行为,组织对象的关联关系。

   基于对象:实现类的封装,即使具备继承的类层次,但没有多态依旧属于基于对象编程。而面向对象封装、继承、多态缺一不可。

   为什么多态是区分的唯一标识呢? 个人理解 继承、封装你操作的仅仅是单个对象,基于单个对象使用。而多态会触发多个对象的调用,而不基于单个对象,而是面向对象,面向关系所关联的各个对象。

面向对象作用:

    复杂性系统为诞生面向对象设计方法提供了场景,复杂性是面向对象要主要解决的问题

    复杂性包括软件固有的复杂性和复杂系统的复杂性

         软件固有的复杂性: 

                1)问题域的复杂性(现实的大量需求及变化)

                2)管理开发过程的复杂性(团队协作沟通)

                3)软件中随处可见的灵活性

                4)描述离散系统的复杂性

          复杂系统的五个属性

                1)层次结构

                 2)相对本原

                3)分离关注

                4)共同模式

                5)稳定的中间形式

            层次结构的形式 : part of ,   is a 

             分解:算法分解 对象分解

如何进行对象的抽取设计:

         1)从不同层次对现实世界进行抽象,提取出他们的核心属性及核心行为

         2) 确定对象之间的功能边界及依赖关系

         3)定义对象的核心属性和方法

          4)定义对象的公有和私有部分

          5)定义接口及其需要的参数并抽取成上下文

          6)定义主要子程序及其实现细节

面向对象原则:

         1)单一职责原则

         2)开闭原则

         3)里氏代换原则

          4)依赖倒转原则

          5) 接口隔离原则

          6)合成复用原则

          7) 迪米特原则

面向对象的弊端:

       OOP影响性能:内存墙问题,内存成为现在计算器性能的重要瓶颈。OOP编程对缓存不优好导致有时候并不能发挥硬件最佳性能。

       1)过度包装

           使用OOP时,会把一些复杂的问题分拆抽象成较简单的对立对象,通过对象的调用实现方案。由于对象包含自己分装的数据,一个问题的数据集会被分散在不同的内存区域,互相调用很可能出现数据的cache miss的情况

        2)多态

           C++多台实现会使用到虚函数表,在调用的时候需要读取虚函数表增加cache miss的可能性。

         3)数据布局

               虽然OOP并无限制数据的布局方式,但基本大部分OPP会把成员变量连续包裹在一段内存中。在OOP中通过封装一个类的各个功能会被实现为多个成员函数,而每个成员函数实际上可能只会存取少量的成员变量,造成其他成员变量的载入浪费。

面向对象的弊端:


    

猜你喜欢

转载自blog.csdn.net/gougoubailove/article/details/80628142