第六课 面向对象的设计 类与对象

第六课 面向对象的设计 类与对象


Python 是完全支持面向对象的设计方法,但是它的实现很有特点,例如没有真正意义上的“私有:private”这种概念,想想也自然,因为Python本身是解释型的语言,能看见所有源代码,所以密封的那么严也没什么用。Python在快速开发方面确实便捷(不一定好),主要原因是太有特点了。Python的含义不是“蟒蛇”,而是英国一个6人马戏团的名字,据此可见发明者太诙谐了,估计也没想到这个语言会流行,所以虽然面向对象,但思路有点过于幽默,大型关键应用确实应该考虑别的语言。

 

面向对象应该被理解为一种软件设计方式,与传统的“面向流程或结构”的设计方式相比,它提高了开发效率,降低了开发成本,使团队开发变得更为有序可管理,提供了在更高层次构造软件产品的方法,总之很好。

 

它的特点在于引入了类这个可利用成员函数维护自我数据并向外提供操作界面的新数据类型。简单的说,一种新的数据,它不但有数值(被称为属性),还有动作(被称为成员函数)。既然它能有动作,那么我们希望他能自我维护,这样就可以在设计时只关注其对设计本身有用的部分而不需要关注其内部实现或维持的细节了。

 

以设计一个磨豆浆的装置举例,以往的设计方法要关注各个方面,磨盘,电子元件,元件中的连接,机械传动,等等等等,太繁琐了。面向对象的设计方法是这样考虑的,整个设计分为两部分,研磨部分和电机部分,研磨和电机的接口要求是双方的轴的直径一样即可,电机呢,他应该能自己维护内部事务(比如电呀磁呀线圈呀这些烦人的事),对外它只提供一根轴,一对电源线,使用者只要将电源线和轴连接正确,那么整个机构就可以按要求磨豆浆。开发团队如何组成呢?设计者只管将系统定义为两部分,研磨机构和电动机,并规定轴要能对接统一,那两部分可以有两个团队分别开发,甚至可以找一个以前留下来的合适的电动机直接装上去用也可以,这样效率就高了。

 

本案例用一个求多个不同N边形面积之和的案例说明类与对象的使用以及其优势。涉及面向对象的概念有:

1:类,对象,访问限定

2:继承,多态

 

案例6-1 构造三角形并计算,输出其三角形面积




 

第2行用class命令声明一个“类”,名字是Triangle,Python的书写习惯类的第一个字母大写。

在Python中,每个类都可以有一些属性(数据域),若定义矩形类则长、宽就可以作为属性,若定义学生类则姓名年龄等等也可以作为属性。类象一个“模子”,一般不会直接使用”模子”做具体工作,而是利用模子做出一个实物,再用实物做具体工作,Python中的__init__方法就是构造对象“实例”所用,类的实例被称作对象,如第3-第8行所示,数据属性可以在__init__中确定,当如29行所示在程序中声明生成对象时,可以利用参数为属性赋值。Python中分类的属性和对象的属性,我们先使用对象的属性,对象的特点是每个属性前都有一个self(这个是Python的特点),一般面向对象的设计中属性还可以分为类外部可见的属性(public)和类外部不可见的属性(private),在Python中所有属性本质上都是public的,但是若想模仿其他语言的private的性质,那就在名称前加两个下划线。

接下来11到25行定义了3个成员函数,get_edg用来取edg_a,edg_b,edg_c三个属性的值。get_area用来取得面积属性,它调用了accumulate_area函数计算面积,请注意accumulate_area名字前的两条下划线,它的目的是把accumulate_area也变成不可见的。

 

想一想如何计算梯形,矩形等其他图形的面积并且求面积之和和?方法是否可以是init一个图形对象(当然应该有不同的数据属性),然后都使用get_area方法返回面积。再展望一下,若都是“图形对象”,每个对象都有get_area方法,那么把所有“图形对象”放在一个list中,循环调用get_area方法就可以计算所有图形的面积了,这里就会利用到继承和多态

案例6-2 计算多种图形的面积








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值