zoukankan      html  css  js  c++  java
  • 面向对象详解以及封装案例解答

    1、面向对象和面向过程
        面向过程:核心过程二字,过程即解决问题的步骤,就是先干什么后干什么
        基于该思想写程序就好比在这是一条流水线,是一种机械式的思维方式
        优点:复杂的过程流程化
        缺点:扩展性差
    
        面向对象:核心是对象二字,对象指特征与技能的结合体
        基于该思想编写程序就好比在创造一个世界,世界是由一个个对象组成,是一种‘上帝式’的思维方式
        优点:可扩展性强
        缺点:变成复杂度高,极容易出现过度设计的问题
    
    
    2、类
        对象是特征与技能的结合体,类就是一系列对象相似的特征与技能的结合体
        在现实生活中:一定是先有一个个具体的对象,后总结出类
        在程序中:一定是先定义类,后产生对象

     封装介绍:

    1.封装是面相对性一大特点
    2.面向对象编程的第一步--将属性和方法封装到一个抽象的类当中
    3.外界使用类创建对象,然后让对象调用方法
    4.对象方法的细节都被封装在类的内部

    封装案例一:小明

    需求
    #     1.小明体重75公斤
    #     2.小明每次跑步都会减肥0.5公斤
    #     3.小明每次吃东西体重会增加1公斤
    
    # class Human:           
    #     def __init__(self,name,weight):
    #         self.name = name         #属性:名字和体重
    #         self.weight = weight
    #
    #     def run(self):
    #         self.weight -= 0.5       #每跑一次步就瘦0.5
    #     def eat(self):
    #         self.weight +=  1         #吃一次胖1
    #     def __str__(self):
    #         return '%s的体重为%s' %(self.name,self.weight)
    # xm = Human('小明',75)   
    # xm.eat()
    # xm.run()
    # print(Human)           ——》实例化什么就打印什么
    #当使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印从在这个方法中return的数据

    案列二:房子添加家具

    #     1、房子有户型、总面积、家具名称列表
    #       房子没有任何家具
    #     2、家具有名字和占地面积,其中
    #       席梦思(bed):4平米
    #       衣柜(chest): 2平米
    #       餐桌(table): 1.5平米
    #     3、将以上3个家具添加到房子中
    #     4、打印房子中,要求输出:户型、总面积、剩余面积、家具名称列表
    
    class Items:
        def __init__(self,name,area):       
            self.name = name
            self.area = area
    
    class House:
        def __init__(self,type,z):    #剩余面积self.f可以根据总面积-家具面积得到,所以不需要设置变量
            self.type = type
            self.z = z
            self.f  = z
            self.list = []           #家具列表为空
        def add(self,jj):
            self.list.append(jj.name)      #已经定义过家具的属性,可以直接用
            self.f -= jj.area
        def __str__(self):                 
            return '户型为%s,总面积为%s,剩余面积为%s,家具列表名称为%s' %(self.type,self.z,self.f,self.list)    #使用return
    bed = Items('木板床',4)
    chest = Items('衣柜',2)
    table = Items('桌子',1.5)
    h = House('地下室',20)            #以上四步都是实例化
    h.add(bed)
    h.add(chest)
    print(h)                  #直接打印实例化目标

    案例三:士兵突击

    class Gun:                --->先定义枪类型
        def __init__(self,mode,count):    ---》属性为类型和子弹数量
            self.mode = mode
            self.count = 0              ---》初始子弹数量为0
        def shoot(self,number):         ----》枪的技能1发射,子弹剩余量=总弹数-发射的数量(不定)
            self.count -= number
        def add_count(self,number):     ----》枪的技能2装子弹,子弹剩余量= 装入与发射的差
            self.count += number
    class Soldier:             ----》定义士兵类型
        def __init__(self,name):
            self.name = name         ---》属性1姓名
            gun = None               ----》属性2 枪
        def fire(self,count):
            count = n.count          ---》定义士兵的枪的子弹数量为上面枪剩余子弹数
            if count > 0:               ----》大于0允许开炮,否则不允许
                print('你持有ak47,子弹数量是%s,可以开炮' %count)
            else:
                print ('没有子弹了,不可以开炮')
    
    n = Gun('ak47',0)            ----》定义枪类型的对象为n,n的名字是ak47
    n.add_count(int(input('装入子弹数:')))       ----》自定义装入子弹数
    n.shoot(int(input('射出子弹数:')))            ----》自定义射出子弹数
    s = Soldier('许三多')                        ---》定义士兵类型为许三多
    print(s.fire(n.count))          ----》根据士兵手里的ak是否有子弹来输出是否可以开炮
  • 相关阅读:
    [转]项目需求范围管理
    JavaScript 王者归来
    [转]大文件上传组件
    [转]使用vs2005自带的sql2005 express
    JS判断Caps Lock
    [转]Web项目管理思考
    [转]JS严格验证身份证
    两分钟用C#搭建IE BHO勾子, 窃取密码
    asp.net性能提升十个方法(Microsoft)
    [转]Asp.net 将js文件打包进dll 方法
  • 原文地址:https://www.cnblogs.com/zzzynx/p/10779036.html
Copyright © 2011-2022 走看看