封装的意义和拓展性

封装不是单纯意义的隐藏

1封装数据属性:明确的区分内外,控制外部对隐藏属性的操作行为

将数据隐藏起来这不是目的。隐藏起来然后对外提供操作该数据的接口,然后我们可以在接口附加上对该数据操作的限制,以此完成对数据属性操作的严格控制。

‘‘‘class People:    def __init__(self,name,age):        self.__name=name        self.__age=age

def tell_info(self):        print(‘Name:<%s> Age:<%s>‘ %(self.__name,self.__age))

def set_info(self,name,age):        if not isinstance(name,str):            print(‘名字必须是字符串类型‘)            return

self.__name=name        self.__age=age

p=People(‘egon‘,18)p.tell_info()

#print(p._People__name)‘‘‘

2封装方法:隔离复杂度
#取款是功能,而这个功能有很多功能组成:插卡、密码认证、输入金额、打印账单、取钱
#对使用者来说,只需要知道取款这个功能即可,其余功能我们都可以隐藏起来,很明显这么做
#隔离了复杂度,同时也提升了安全性
class ATM:    def __card(self):        print(‘插卡‘)    def __auth(self):        print(‘用户认证‘)    def __input(self):        print(‘输入取款金额‘)    def __print_bill(self):        print(‘打印账单‘)    def withdraw(self):        self.__card()        self.__auth()        self.__input()        self.__print_bill()

a=ATM()a.withdraw()

封装的拓展性
class Room:    def __init__(self,name,owner,weight,length,height):        self.name=name        self.owner=owner        self.__weight=weight        self.__length=length

self.height=height             #这里添加一个属性‘‘‘

def tell_area(self):        return self.__weight * self.__length*self.height

r=Room(‘卫生间‘,‘alex‘,10,10,10)

print(r.tell_area())

添加一个属性,对于使用者来说,不需要改动自己的调用接口和计算逻辑直接调用,体现出封装的拓展性

封装方法的其他举例:

  1. 你的身体没有一处不体现着封装的概念:你的身体把膀胱尿道等等这些尿的功能隐藏了起来,然后为你提供一个尿的接口就可以了(接口就是你的。。。,),你总不能把膀胱挂在身体外面,上厕所的时候就跟别人炫耀:hi,man,你瞅我的膀胱,看看我是怎么尿的。
  2. 电视机本身是一个黑盒子,隐藏了所有细节,但是一定会对外提供了一堆按钮,这些按钮也正是接口的概念,所以说,封装并不是单纯意义的隐藏!!!
  3. 快门就是傻瓜相机为傻瓜们提供的方法,该方法将内部复杂的照相功能都隐藏起来了

提示:在编程语言里,对外提供的接口(接口可理解为了一个入口),可以是函数,称为接口函数,这与接口的概念还不一样,接口代表一组接口函数的集合体。



原文地址:https://www.cnblogs.com/sunny666/p/9650883.html

时间: 2024-10-30 11:18:25

封装的意义和拓展性的相关文章

java.两个例子充分阐述多态的可拓展性

下面我将以两个例子来充分阐述java中多态的可拓展性,作为一名优秀的程序员,就必须了解程序的可拓展性,非常利于程序后续的开发. 第一个例子:利用电脑的主板来作为例子,就我们所熟悉的电脑的主板,里面是不是有很多模块,网卡,声卡,想要用到这些功能,只能当主板运行起来,再给网卡和声卡供电就可以,但这用软件语言怎么来实现呢?是不是先要主板跑起来,主板再让声卡或者网卡跑起来,但这样做,拓展性不高让声卡和网卡跑起来的操作是重复的,而且有很多模块也具备这样的功能,就单纯让主板上的模块跑起来,这是其一,万一,那

我用过的易用性拓展性强的政府网站群系统

互联网发展已经快20年了,可以说是飞速的发展,很多的时候我们都应接不暇,发展的速度远远大于我们接受的速度,我身为政府的信息管理人员在政府方面的发展更是有所感触,10多年前政府是没有网站的,包括现在由于种种原因吧有很多地方都还没有网站,我自认为我所管辖的地区信息化发展还算可以的了(我是河北地区的,多的不透露哦,主要是分享经验),但是还算跟不上领导的需求变化,因为政府网站是严肃的不是随便就能改的,每一次的改动就需要层层的审批,我相信同是这个部门的同胞们深有体会,那叫个困难啊,最关键的是经费不好申请啊

面向对象三大特性之一-------封装的意义

思考 封装的意义: 封装从形式上来说,它将数据和操作界定在了某个圈子内,如果外界想要访问数据,或者使用某个操作,必须通过特殊的手段向这个圈子申请. 这个圈子便是类,特殊的手段就是接口. 即假如外界想要访问类中的数据或者使用类中某个方法的具体操作,必须通过这个类事先提供的接口来访问,这个接口一般就是方法名. 一开始学封装时产生的疑惑是 为什么要将数据和操作封装起来,然后想要使用的时候再通过接口访问,这不是很麻烦吗? 是的,确实很麻烦.但麻烦归麻烦,它带来的好处是这小小的麻烦无法所抵抗的. 首先把封

Python----面向对象---封装的意义

一.封装数据属性.明确区分内外:示例代码如下: 1 class People: 2 def __init__(self, name, age): 3 self.__name = name 4 self.__age = age 5 6 def tell_info(self): 7 print('Name:<%s> Age<%s>' % (self.__name, self.__age)) 8 9 p = People('egon', 18) 10 p.tell_info() 11 1

封装之如何隐藏对象及封装的意义

python中通常在属性和方法前加__(两条下划线)来进行属性和方法的隐藏. 特点: 1.在类外无法直接obj.__AttrName 2.在类内部可以直接使用obj.__AttrName 3.子类无法覆盖父类__开头的属性 1.在类外无法直接obj.__AttrName class A: def __init__(self, name, life): self.__name = name self.__life = life def __run(self): print('run') def s

div模拟select/option解决兼容性问题及增加可拓展性

想到做这个模拟的原因是之前使用select>option标签的时候发现没有办法操控option的很多样式,比如line-height等,还会由此导致在IE8及以下版本浏览器中的各种问题. 这个模拟思路很简单,也很清晰,我就直接上代码了 html: 第一层div是模拟select标签,第二层div是模拟option下拉列表 1 <div> 2 <div class="sim-select"></div> 3 </div> 4 <

封装的意义.

1.对数据属性操作严格控制.  (对属性的操作 selfe.__property)  属性需要打印出来. 2.隔离复杂度.(对方法的操作 self.__method) 1. 案例一.控制属性 . class Teacher(): def __init__(self,name,age): self.name =name self.__age =age print(self.name) print(self.__age) def tell_info(self): # print("姓名:%s,年龄:

Android网络请求心路历程

HTTP请求&响应 既然说从入门级开始就说说Http请求包的结构.一次请求就是向目标服务器发送一串文本.什么样的文本?有下面结构的文本.HTTP请求包结构 例子: 1 2 3 4 5 6 7     POST /meme.php/home/user/login HTTP/1.1     Host: 114.215.86.90     Cache-Control: no-cache     Postman-Token: bd243d6b-da03-902f-0a2c-8e9377f6f6ed   

Android4种网络连接方式HttpClient、HttpURLConnection、OKHttp和Volley优缺点和性能对比

比较的指标: 1.cpu 2.流量 3.电量 4.内存占用 5.联网时间 功能点: 1.重试机制 2.提供的扩展功能 3.易用性 4.是否https 5.是否支持reflect api,OkHttp有配套方法 6.缓存.重试 7.cookie支持session  id会话支持 8.弱网性能和稳定性 9.超时时间,几种超时时间   连接超时,响应超时 10.适配各种机型.4.4和之前版本  2.3  4.1 5.0 4种网络连接方式提供的功能对比表格: 缓存 重试 Https/Http 稳定性 C