面向对象基础概念总结

一、背景

个人在工作一直是使用C语言从事驱动设计开发,有几年的经验,但设计上一直没有套路,希望在架构设计上更进一步。个人对面向对象的理解 目前只存在基础概念阶段,java c++也只熟悉一些最基本的语法,没有面向对象语言项目开发经验。
学习目标:总结一些基础的面向对象概念,帮助设计模式理解 、UML学习 以及 后续 面向对象语言 系统学习。

二、概念

1.面向对象Object Oriented

一种软件开发方法,一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。相对于面向过程Procedure Oriented 来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。
面向对象的思想已经涉及到软件开发的各个方面。如,面向对象的分析(OOA,Object Oriented Analysis),面向对象的设计(OOD,Object Oriented Design)、以及我们经常说的面向对象的编程实现(OOP,Object Oriented Programming)。

2.面向对象编程Object Oriented Programming

面向对象编程OOP的主要思想是把构成问题的各个事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙一个事物在整个解决问题的步骤中的行为。
面向对象程序设计中的概念主要包括:对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递。通过这些概念面向对象的思想得到了具体的体现。

3.OOP三大基本特性:封装,继承,多态

封装:就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。一个类就是一个封装了属性数据以及操作这些数据的方法。
继承:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。子类拥有父类非private的属性和方法(通过base关键字调用),也可以扩展自己的属性和方法,同时还可以以自己的方式实现父类的功能(方法重写);
注意继承要慎重,继承使子类和父类产生强耦合关系,父类的实现细节暴露给子类,父类变化子类不得不变,子类可以扩展父类的行为但是不能修改破坏原有行为(换句话说,我们把任何一个父类对象使用的地方,替换成子类 不应该影响原本的业务,就像:女人是人的子类,“人 ”能做的事情,我们替换为 其子类 “女人”一样可以做,而不能 应为好像行为接近,把狗定义为猫的子类(通过重写猫的部分方法实现狗))
多态:是指一个类实例的相同方法在不同情形有不同表现形式,多态机制使具有不同内部结构的对象可以共享相同的外部接口,不同的对象可以执行相同的动作,通过自己的实现代码执行。
父类可以在方法通过 修饰符virtual将其定义为虚方法,子类可以针对父类虚方法通过override重写。使用父类指针 但是实例化过程 使用new子类的方式,(相当于用子类去替代父类实现),此事使用父类指针操作结果实际是执行的子类的代码,子类特有的属性和方法不可用,设计模式常常使用此类方法 通过创建不同子类 实现多态操作

4.对象Object/类 Class/实例化

对象Object :一个自包含的实体,用一组可识别的特性和行为来表示。
类 Class:具有相同属性和功能对象的抽象的集合。
实例:一个真实的对象,实例化就是创建对象的过程,使用new关键字对某个类创建一个对象实例。
举个例子, 我们在描述 狗这种动物的时候,狗就是一个类 含我们对狗这个概念的抽象 他包一些行为(如 叫,跑,咬,睡觉。。) 和 一些 属性(颜色、种类。。。)。然后当我们在讨论具体某一只狗的时候,比如我家的狗,他就是一个对象,是一个实例,可以被人访问操作

5.抽象类/抽象方法/虚函数/纯虚函数/接口

虚函数/纯虚函数/抽象方法:修饰符virtual将其定义为虚方法也叫虚函数,子类可以针对父类虚方法通过override重写。纯虚函数是一个在基类中没有任何实现的的虚函数,定义方式 virtual 函数返回值类型 函数名(形参列表)=0,需要子类必须进行重写实现。在java中 abstract修饰的方法为抽象方法,此方法不能有方法体,抽象方法必须在子类中被重写,和c++纯虚函数用法类似。
抽象类:abstract修饰的类叫做抽象类,是一种特殊的类(具有一个或者多个纯虚函数),此类不能进行实例化创建对象,也就是不能new;
接口:接口是对动作的抽象,不能有私有的方法或变量,接口中的所有方法都没有方法体。它在C++中用抽象类来实现,在C#和Java中用interface来实现。
接口和抽象类 都不能被实例化,只有通过子类实现了接口或抽象类中的方法后才能实例化。接口强调特定功能的实现,而抽象类强调所属关系。实现接口的关键字为implements,继承抽象类的关键字为extends。一个类可以实现多个接口,但一个类只能继承一个抽象类。所以,使用接口可以间接地实现多重继承。
抽象类是自底向上抽象出来的(抽象出来实现公共部分,子类继承实现私有部分),接口是自顶向下设计出来的(约定好行为接口,需要参与某个场景使 按要求实现)。

5.属性/方法/修饰符

属性:类的描述性字段,也就是类的数据。方法:类的成员函数,也就是类的行为。
修饰符:属性和方法都可以通过修饰符描述其访问权限:public表示允许任何其他类进行方法,就是公有;private允许同一个类中的成员访问,其他类包括其子类无法访问,表示私有。

6.构造方法/方法重载

构造方法:又叫构造函数,其实就是类进行初始化的函数,方法与类同名,无返回值(不需要void),在new时候调用。所有类都有构造函数,如果定义类的时候不定义构造方法,系统会默认生成空构造方法。
方法重载:方法重载提供了类中定义同名(但参数个数或者类型必须有所不同)的多个方法能力,根据用户参数使用自动选择对应执行方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值