面向对象

什么是面向过程编程?
面向过程:
    是一种编程思想,就是前辈程序员发现的一种比较好的编程方法
过程指的是: 先干什么 再干什么,完成一个事情所有的具体步骤;
优点:把复杂的问题流程化,简单化,降低开发难度
缺点:扩展差, 再当前这种情况下 用户需求千变万化 对扩展性要求非常高
使用场景:不需要扩展,或是对扩展性要求不高,例如linux内核,shell 脚本 案例: 把大象装进冰箱 需要几步
1.打开冰箱 2.装进大象 3.关闭冰箱

面向过程中我们关注的点是,完成这个任务,具体的步骤 一步一步去完成

 

 
什么是面向对象编程?
面向对象:
    也是一种编程思想
核心是对象,什么是对象?
·····对象:再现实生活中实实在在存在的,具备自己的特征和行为的事物 反过来说 对象就是 特征和行为(技能)的结合体
如何来区分:如果能够准确的找到一个事物,它就是一个对象 例如:龚程的女朋友 面向对象编程:我们关注的点是.使用什么样的对象可以完成我的任务 例如:把大象装进冰箱,什么样的对象可以帮我完成这个任务,只要找到这个对象,命令它来做事情即可 你从一个操作者 变成了指挥者, 例如:西游记中的如来,他要完成一个传经,要把经书传到东土大唐取, 本来要自己去,但是太麻烦,所以找了唐僧师徒五个对象,来帮他完成这个任务 优势:
1.对于指挥者(程序员)来说,不需要再关心具体步骤 2.扩展性,一个单独的个体的特征或行为发生变化时 不会影响到别人 缺点: 1.程序的复杂度变高,你得需要设计这个些对象,注意要避免过度设计得问题 2.程序得执行结果可控性低

 

类与对象:

类与对象
    类就是分类 类型的意思
    定义:一堆具备相同特征和行为的事物的抽象概念,不实际存在
    先有类还是先有对象:
        生活中:
        生活中类怎么来的,是通过对象的特征和行为抽取而来,
        所以是先有对象才有了类

        编程中:
        必须是先有类 才能有对象,因为你必须先告诉程序,你这个对象有什么样的特征和行为

    类的作用:用于描述该类的对象具备什么样的特征和行为

 

实例:

'''实现下面输出
小明 ,10, 男 , 上山砍柴
小明 ,10, 男 , 开车去东北
小明 ,10, 男 , 最爱大保健
老李 ,90, 男 , 上山砍柴
老李 ,90, 男 , 开车去东北
老李 ,90, 男 , 最爱大保健
'''

 

#函数式 表达
def kuancai(x):
    print('%s ,%s, %s , 上山砍柴'%(x['name'],x['age'],x['mondx']))

def kaiche(x):
    print('%s ,%s, %s , 开车去东北'%(x['name'],x['age'],x['mondx']))

def dabaojian(x):
    print('%s ,%s, %s , 最爱大保健'%(x['name'],x['age'],x['mondx']))
name1 = ['小明','10','']
name2 = ['老李','90','']
kuancai(name1)
kaiche(name1)
dabaojian(name1)
kuancai(name2)
kaiche(name2)
dabaojian(name2)
# 面向对象 表示:
class ZhuangBi:
    def __init__(self,name,age,gender):
        self.name = name
        self.age = age
        self.gender = gender
    def kanchai(self):
        print('%s ,%s, %s , 上山砍柴' % (self.name, self.age, self.gender))
    def kaiche(self):
        print('%s ,%s, %s , 开车去东北' % (self.name,self.age,self.gender))
    def dabaojian(self):
        print('%s ,%s, %s , 最爱大保健' % (self.name, self.age, self.gender))

name1 = ZhuangBi('小明',10,'')
name2 = ZhuangBi('老李',90,'')
name1.kanchai()
name1.kaiche()
name1.dabaojian()
name2.kanchai()
name2.kaiche()
name2.dabaojian()
# 上述对比可以看出,如果使用函数式编程,需要在每次执行函数时传入相同的参数,如果参数多的话,
  又需要粘贴复制了... ;
# 而对于面向对象只需要在创建对象时,将所有需要的参数封装到当前对象中,之后再次使用时,
通过self间接去当前对象中取值即可。

 

类与对象的简介:

类与对象:
    类就是分类 类型的意思

定义:一堆具备相同特征和行为的事物的抽象概念,不实际存在
先有类还是先有对象? 例(生活中): 生活中类怎么来的,是通过对象的特征和行为抽取而来,所以是先有对象才有了类 编程中: 必须是先有类 才能有对象,因为你必须先告诉程序,你这个对象有什么样的特征和行为
类的作用:用于描述该类的对象具备什么样的特征和行

 

简单的使用:

class beidaStudent:
    # 如果每个对象的这个属性都相同 才应该定义到类中 比如所有人的学校都是 北大

school = "北大xxx" # 创建对象 # 语法: 在类名后加括号 与调用函数写法相同 stu = beidaStudent() # 访问对象的属性 print(stu.school) print(beidaStudent.school) # 修改属性的值 stu.school = "清华xxx" print(stu.school) # 增加属性 stu.room_num = "A4B4" print(stu.room_num) # 删除属性 del stu.room_num print(stu.room_num)
ps:# 对象的属性查找顺序
    # 对象自己的名称空间 -> 类的名称空间

 

绑定方法:*****

class Person:
    country = "China"

    def __init__(self,name,age,gender):
        self.name = name
        self.age = age
        self.gender = gender

    def sleep(self):
        print("sleeping")
        print(self)

    def eat(self):
        print("eating")
"""
# 类调用与对象调用的区别
# 对于类而言 sleep就是一个普通函数
# 对对象而言 sleep是一个绑定方法

# 绑定方法是什么?
# 是对象与类中的某个函数的绑定关系 
例如:就像生活中 我们都会吃饭 我吃饭你不会饱,那么吃饭就是我自己的绑定方法

# 为什么要把函数进行绑定? 
#  因为对象的行为 通常都需要访问这个对象的数据 或是修改这个对象的数据 
#  如果没有对象 直接调用函数是没有意义的 在函数中访问不到对象的数据 
#  所以将对象和函数进行绑定

# 特殊之处
#  在使用绑定方法时  不需要关心self参数 会自动将这个对象本身传进来 
# 对象调用绑定方法时 最后执行的还是类中的那个函数
"""

 

__init__函数:*******

    # __init__称之为初始化函数  它会在创建对象的时候自动执行
    # 创建对象时
    # 1.创建一个空对象
    # 2.执行__init__函数 并且自动传入了这个对象
# 该函数的作用,就是为对象的属性赋初始值
#1. 使用场景 需要为每个对象定制不同的属性值
#2.__init__在创建对象后自动执行
#3.第一个self参数 指的是这个对象本身 不需要手动传值

 eg: a = A('小明',18)

这是的a 是 A的实例对象,同时A中__init__会执行,

假如 

class A:
    def __init__(self,name,ageg):
        self.name = name
        self.age = age

需要注意的是: 上面的self 指的是 a,此时的 a 只是一个没有任何东西的 变量,当执行__init__方法的时候 把 变量 a 传入 self (可以理解为self = a) ,那么self.name ==  a.name,self.age ==  a.age

把A()参数传入 __init__,就有了   a.name = '小明' , a.age = 18.

 

 

 

 

 

 
posted @ 2018-10-22 18:41  萤huo虫  阅读(122)  评论(0编辑  收藏  举报