当前位置 博文首页 > FMC_WBL的博客:Java核心技术之面向对象

    FMC_WBL的博客:Java核心技术之面向对象

    作者:[db:作者] 时间:2021-08-28 18:49

    第一节:什么是面向对象?

    面向对象八股文:面向对象是一种程序设计范型,其基本思想是使用对象、类、继承、封装、聚合、关联、多态性等概念进行程序设计;面向对象是一种软件开发中的策略,是一套关于如何看待软件系统和现实生活的关系,研究问题并进行问题求解,以及如何系统构建软件方法。

    通过计算机的工作模型(冯诺依曼体系结构)找面向对象编程的启发
    中央处理器cpu:用于执行计算机指令以及完成计算任务,包括控制器、运算器、以及寄存器等
    内部存储器和主存储器:内存,用于存储计算机指令和数据,由许存储单元组成,每个存储单元都有一个地址(储存器)
    外围设备:外设,提供了计算机与外界的接口(输入输出设备、外部存储)

    我们看到冯·诺依曼体系结构中,程序从外存装入内存,cpu从内存逐条解析指令,程序所需要的数据从内存或外存获取,程序执行中间结果保存在内存中,最终结果通过外设输出结果。
    可以总结为,计算机由 CPU - 内存 - 外设 组成,同时数据通过 外存 -> 内存?-> 运算? (产生结果) -> 储存?-> 显示,程序的流转 大致为:存储 和 执行
    那么,将存储理解为数据结构,执行理解为算法,就是我们常说的面向过程设计。
    面向过程是以功能为中心,基于功能分解的程序设计模型,一个过程是程序是由一些子程序构成,子程序描述的一系列操作,每个子程序对应一个子功能,实现了功能抽象。

    当我们之关心数据(对象)的流转,比如数据:“我要处理然后显示,别的我不管”,程序:“emmm,好吧” 于是面向对象诞生了,可以看出,面向对象不关心过程是如何的

    两者做个对比
    面向过程处理数据:运算 -> 储存?-> 显示(关注数据和过程)
    面向对象处理数据:存储类(里面可以存储,存储之前可以运算)、显示类、运算类、主流程(分离关注点)

    面向对象的程序,通过由单个能够起到子程序作用的单元或对象组合而成,使主流程的责任分散

    第二节:为什么要面向对象?

    面向对象可以降低复杂度,把一个个流程,抽象成系统中的对象,作为系统中的基本构成单位,充分利用现实思维解决问题,运用抽象、分配、继承、聚合、封装、关联等原则,使开发者有效思考问题,并建立对象关系和交流。

    封装(encapsulation):把对象的属性和操作结合成?个独立的系统单位,并尽可能隐蔽对象的内部细节,使对象能够集中?完整地描述并对应?个具体的事物,体现了事物的相对独立性,使对象外部不能随意存取对象的内部数据,避免了外部错误对它的“交叉感染”,对象的内部的修改对外部的影响很小,减少了修改引起的“波动效应”
    封装的缺陷:编程繁琐,执行效率降低

    抽象(abstract):只关注与当前目标有关的本质特征,从而找出事物的共性,叫做抽象,并且抽象是形成概念的基本手段(忽略事物之间的差别)

    分类(classification):把具有共性的事物划分为一类叫做分类(注意事物之间的差别)

    继承(inheritance):子类可以拥有其父类的全部属性与操作,称作特殊类对父类的继承,具有自动的拥有、高复用的特点

    聚合(aggregation):聚合刻画了现实事物之间的构成关系或拥有关系(通俗来说就是当前类具有其他类的对象)

    多态(polymorphism):
    重写(override):在子类中对继承来的属性或操作重新定义其实现
    重载(Overload):方法重载是让类以统一的方式处理不同类型数据的一种手段。(重载(Overload)的方法是用静态绑定完成,而重写(Override)的方法则使用动态绑定完成。)
    泛型(generic):操作参量的类型可以是参数化的
    两种绑定方式:静态绑定和动态绑定,重载(Overload)的方法是用静态绑定完成,重写(Override)的方法则使用动态绑定完成。

    cs