面向对象概念总结(一)

  1. 面向对象技术产生的意图和动机
    面向对象技术是在第二次软件危机的背景下产生的,主要解决软件的可维护性和可扩展性问题。面向对象技术所有的概念、机制、原理、原则均服务这个目标
  2. 面向过程编程和面向对象编程思想有什么不同?
    面向过程的编程是对任务的过程分解,解决问题的思路是“走一步,看一步,遇到问题,解决问题”,遇佛灭佛,遇神杀神。面向对象解决问题并不关心问题处理过程,而是关注解决问题过程中都有哪些对象参与,给参与的对象分配相应的职责即可。面向过程解决问题简单粗暴、思路清晰、运行效率高,但不宜维护;面向对象解决问题抽象复杂,运行效率不高,但易扩展、易维护。
  3. 面向对象程序运行机制?
    面向对象程序的机制是通过对象之间通过互发消息和方法调用完成,如:建筑工地中工人甲完成瓦工的工作,工人乙完成钢筋加工工作;工人甲给工人乙发送消息需要某型号的钢筋,工人乙就开始进行钢筋的加工,将加工好的钢筋发送给工人甲。在面向对象程序中工人甲、工人乙就是完成建筑工程中的对象,工人乙具备加工钢筋手艺的一个方法,工人甲给工人乙发送加工钢筋的消息,就是调用工人乙加工的方法,消息中钢筋的型号就是加工钢筋方法中的参数
  4. 什么是对象?什么是类?
    第二示例中工人甲、乙就是对象。对象就像现实生活中的一个个人,是鲜活的,有生命周期的,每个对象都具有创建、运行和销毁的过程;对象是动态的,对象的属性值反映了对象在某一个时刻的状态;对象是具体的,对象创建成功后,其包含的方法一定已经是明确,如:工地中我使用钢筋工人乙,那么加工钢筋的工艺就明确的就是乙的加工工艺。对象是由程序运行的角度分析问题,而类是由程序开发者的角度分析问题的,类是由对现实世界抽象形成解决问题的信息模型,如:通过对工人甲所做的工作总结归纳,我们可以定义一个瓦工类;通过对工人乙所做的工作总结归纳,我们可以定义一个钢筋工类,程序员的工作就是围绕者类展开的,类是我们编写的代码载体,类是对象的模板,对象通过具体的类创建的。
  5. 什么是抽象?什么是具体?
    在面向对象中抽象包含两个层次的含义,第一个层次是指面向对象技术的开发过程本身需要将现实世界经过抽象转换为信息模型(如:由热火朝天的工地抽象出工人甲、工人乙的过程抽象出瓦工和钢筋工两个类);第二层次的抽象指的抽象方法、接口、抽象类等,在面向对象的设计中默认的抽象就是接口。所谓抽象方法就是定义了方法名,但尚未具体实现的方法,如:我们定义了一个伐树的方法,但没有实现,至于伐树是用斧子砍、还是锯子锯还不确定,伐树就是抽象方法;如果定义的方法不仅包含方法名,而且有实现,我们称为具体方法,如定义了一个伐树的方法,具体实现的方式就是用斧头砍,这个伐树的方法就是具体方法。接口是一种规范是一种标准,接口中方法是抽象方法,接口中的属性都是常量,如:日常生活中的螺口灯头和灯泡,国家给出的标准尺寸及质量检验标准,无论宝光的、还是飞利浦的都遵循这个标准(接口),这样我们替换成为可能,今天用用宝光的灯泡、下次再用用飞利浦的灯泡,而我们的灯头不变。抽象类是包含了抽象方法的类,抽象类的产生是服务于复用的,如炸油条和炸油糕,相同的都是用油炸,把油烧开的方法都是一样,不同的是和面的方式不同,这样油烧开(相同的方法或特征)的方法我们放在抽象类,把和面(不同的方法或特征)放在子类中进行,这样炸油条和炸油糕两个子类共同复用了油烧开的方法。炸油条和炸油糕这个两个子类不包含抽象的方法,都是具体的方法,我们成为具体类
  6. 因抽象而稳定,因具体而生动多变
    举个例子,我再做一个房子的装修方案,需要瓦工铺地砖、需要电工走线管,这个时候我们并不需要考虑瓦工铺地砖的采用什么样的工艺,电工走线管时刻槽子是用电钻打、还是用凿子凿我们并不关心,业主想用电钻打就用电钻、想用凿子凿就用凿子,这样我们所做的方案是稳定的不变的。同一个装修方案,具体的施工有用用电钻、有用凿子,呈现出多种状态。反映的代码上就是通过面向接口的编程,系统的框架是稳定,而实现这些接口具体的类是根据需求的变化而变化的,实现同一接口的类具有可替代性,使得程序丰富多彩。这就要求我们开发时依赖于抽象,而不依赖于具体。依赖于具体代码属于硬编码,强耦合,依赖于抽象将耦合转化为松耦合(参照:https://blog.csdn.net/guoyp2126/article/details/111648697)
  7. 什么是消息?
    教练给运动员说“跑步走”,运动员就开始跑步,“跑步”就是教练给运动员发送了一个消息,运动员开始跑步就是对消息的响应。软件开发中A发消息给B就是A调用B的方法。消息包括消息名和消息参数,消息名就是B的方法名,消息参数就是调用消息的参数,如:教练发送消息,“跑”+自行车,就是让运动员骑着自行车跑,而不是跑步,消息转换为:跑(自行车)
  8. 什么是高层模块?
    假如class A中调用了class B的方法,则class A称为高层模块。高层模块依赖于抽象,而不依赖具体的意思就是调用模块仅需知道被调用模块能干什么,具体怎么干那是被调用用模块自己的事,无需了解。也就是高层模块了解被调用模块的接口即可。
  9. 什么是封装?
    所谓的封装就是其他类或对象,仅需知道我能干啥,至于我是如何干的你就没有必要知道, 这样我改进我的施工方法,不会影响到全局,如:程序中class B改自己内部的代码什么的,不会影响到class A。通过封装提高了程序的可维护性,封装的实现参考:https://blog.csdn.net/guoyp2126/article/details/111825203
  10. 什么是多态?
    所谓的多态就是同一消息发送给不同对象,可以得到不同的响应即为多态,或者同一消息带的参数不同,得到不同的响应也为多态。如:教练发送个消息“跑”,兔子是四条腿跑,而鸭子是迈着者八字步跑;或者教练送个消息“跑”,如果不带参数就是让运动跑步,带个汽车参数,就是让运动开着汽车跑。前者多态可以使用接口、或者子类对父类方法的覆盖(override)实现,后者则使用过载多态(overload)实现。通过多态技术可以实现程序可扩展性和可替换性,多态的实现参考:https://blog.csdn.net/guoyp2126/article/details/111825203
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值