面向对象下

面向对象下

一.面向对象的三大特征
面向对象程序设计实际上就是对现实世界的对象进行建模操作。面向对象程序设计的特征主要可以概括为封装、继承和多态,接下来针对这3种特性进行简单介绍。

  1. 封装封装是面向对象程序设计的核心思想。它是指将对象的属性和行为封装起来,其载体就是类,类通常对客户隐藏其实现细节,这就是封装的思想。例如,计算机的主机是由内存条、硬盘、风扇等部件组成,生产厂家把这些部件用一个外壳封装起来组成主机,用户在使用该主机时,无须关心其内部的组成及工作原理
  2. 继承
    继承是面向对象程序设计提高重用性的重要措施。它体现了特殊类与一般类之间的关系,当特殊类包含了一般类的所有属性和行为,并且特殊类还可以有自己的属性和行为时,称作特殊类继承了一般类。一般类又称为父类或基类,特殊类又称为子类或派生类。例如,已经描述了汽车模型这个类的属性和行为,如果需要描述一个小轿车类,只需让小轿车类继承汽车模型类,然后再描述小轿车类特有的属性和行为,而不必再重复描述一些在汽车模型类中已有的属性和行为
    3.多态
    多态是面向对象程序设计的重要特征。生活中也常存在多态,例如,学校的下课铃声响了,这时有学生去买零食、有学生去打球、有学生在聊天。不同的人对同一事件产生了不同的行为,这就是多态在日常生活中的表现。程序中的多态是指一种行为对应着多种不同的实现。例如,在一般类中说明了一种求几何图形面积的行为,这种行为不具有具体含义,因为它并没有确定具体几何图形,又定义一些特殊类,如三角形、正方形、梯形等,它们都继承自一般类。在不同的特殊类中都继承了一般类的求面积的行为,可以根据具体的不同几何图形使用求面积公式,重新定义求面积行为的不同实现,使之分别实现求三角形、正方形、梯形等面积的功能
    在实际编写应用程序时,开发者需要根据具体应用设计对应的类与对象,然后在此基础上综合考虑封装、继承与多态,这样编写出的程序更健壮、更易扩展。
    二. 封装
    类的封装可以隐藏类的实现细节,迫使用户只能通过方法去访问数据,这样就可以增强程序的安全性。接下来演示未使用封装可能出现的问题,如例所示。
    在这里插入图片描述
    在例中,运行结果输出的成绩为-68,在程序中不会有任何问题,但在现实生活中明显是不合理的。为了避免这种不合理的情况,就需要用到封装,即不让使用者随意修改类的内部属性。
    在定义类时,可以将属性定义为私有属性,这样外界就不能随意修改。Python中通过在属性名前加两个下画线来表明私有属性,如例所示。
    在这里插入图片描述
    在例中,self.name为公有属性,self.__score为私有属性。第8行试图修改私有属性的值。从程序运行结果可看出,私有属性的值并没有发生变化。
    当属性设置为私有属性后,经常需要提供设置或获取属性值的两个方法供外界使用,如例所示。
    在这里插入图片描述
    此外,私有属性在类外不能直接访问,但程序在测试或调试环境中,可以通过“对象名._类名”的方式在类外访问,如例所示。
    在这里插入图片描述
    三. 继承
    在自然界中,继承这个概念非常普遍,例如:熊猫宝宝继承了熊猫爸爸和熊猫妈妈的特性,它有着圆圆的脸颊、大大的黑眼圈、胖嘟嘟的身体,人们不会把它错认为是狒狒。在程序设计中,继承是面向对象的另一大特征,它用于描述类的所属关系,多个类通过继承形成一个关系体系。
    1.单一继承
    单一继承是指生成的派生类只有一个基类,如学生与教师都继承自人
    单一继承由于只有一个基类,继承关系比较简单,操作比较容易,因此使用相对较多,其语法格式如下:
    在这里插入图片描述
    上述代码表示派生类继承自基类,派生类可以使用基类的所有公有成员,也可以定义新的属性和方法,从而完成对基类的扩展。注意Python中所有的类都继承自object类,第10章中出现的类省略了object。
    接下来演示如何定义单一继承,如例所示。
    在这里插入图片描述
    大家可能会有疑问,派生类的构造方法名与基类的构造方法名相同,创建派生类实例对象如何调用构造方法,接下来演示这种情形,如例所示。
    在这里插入图片描述
    2.多重继承
    在现实生活中,在职研究生既是一名学生,又是一名职员。在职研究生同时具有学生和职员的特征,这种关系应用在面向对象程序设计上就是用多重继承来实现的
    多重继承指派生类可以同时继承多个基类,其语法格式如下:
    在这里插入图片描述
    上述代码表示派生类继承自基类1与基类2。
    接下来演示如何定义多重继承,如例所示。
    在这里插入图片描述
    在多重继承中,如果基类存在同名的方法,Python按照继承顺序从左到右在基类中搜索方法,如例所示。
    在这里插入图片描述
    四. 多态
    加法运算符对于不同类型对象执行不同的操作,这就是多态。在程序中,多态是指基类的同一个方法在不同派生类对象中具有不同的表现和行为,当调用该方法时,程序会根据对象选择合适的方法
    五. 设计模式
    设计模式描述了软件设计过程中经常碰到的问题及解决方案,它是面向对象设计经验的总结和理论化抽象。通过设计模式,开发者就可以无数次地重用已有的解决方案,无须再重复相同的工作。本节将简单介绍工厂模式与适配器模式。
    1.工厂模式
    工厂模式主要用来实例化有共同方法的类,它可以动态决定应该实例化哪一个类,不必事先知道每次要实例化哪一个类。例如在编写一个应用程序时,用户可能会连接各种各样的数据库,但开发者不能预知用户会使用哪个数据库,于是提供一个通用方法,里面包含了各个数据库的连接方案,用户在使用过程中,只需要传入数据库的名字并给出连接所需要的信息即可,如例所示。
    在这里插入图片描述
    2.适配器模式
    适配器模式是指一种接口适配技术,实现两个不兼容接口之间的兼容,例如原程序中存在类Instrument与Person,其中Instrument实例对象可以调用play()方法,Person实例对象可以调用act()方法,新程序中增加类Computer,其实例对象可以调用execute()方法。现要求类Instrument与Person的实例对象通过execute()调用各自的方法,具体如例所示。
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值