码迷,mamicode.com
首页 > 其他好文 > 详细

第九篇:面向对象##(一)

时间:2018-06-23 00:05:52      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:实例   场景   break   wan   lex   要求   com   ble   无法   

 

一、什么是面向对象?

  在了解面向对象编程之前,我们需要了解三大编程范式以及其之间的区别和利弊即:面向过程编程、函数式编程、面向对象编程

一、面向过程编程:

  其核心在过程,过程便是解决问题的步骤,即为了解决问题先干嘛后干嘛,面向过程的设计就像一条固定的设计好的流水线,让问题根据这些步骤流程一步步来得到解决。例如:

#假设我们让用户登入微信:
username="little-five"
password="12345"
count=0
while count<3:
    user = input("please enter your username:")
    passwd = input("please enter your password:")
    if username==user and password==passwd:
        print("welcome to wechat...")
        break
    else:
        print("sorry,incorrent username or password..")
        count+=1
        if count==3:
            print("sorry,you have tried too many times..")

#在这个例子里:我们让用户登入微信,然而在整个过程中,我们设计让用户输入用户名和密码,如果用户名和密码正常,就登入成功;而密码错误,则显示用户名或者密码错误;当然我们也不可能让用户一直试下去,只有三次机会,如没成功则显示登入次数太多。
#这便是典型的面向过程设计,根据问题一步步的设计解决步骤。

  其优缺点也很明显:

    一、优:复杂的问题流程化,进而简单化。即:将一个大的复杂的问题,分成一个个小的步骤去实现,毕竟实现小的问题要简单许多。

     二、劣:一条流水线或流程就是用来解决一个问题,但是很难去解决一个相当大的问题,这样会显得十分繁琐。即生产一个复杂的机器很难用一条流水线去解决,即便是能,也得是大改,改一个组件,牵一发而动全身

 

二、函数式编程:

  其核心在函数,将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念。

  函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。

#最纯粹的函数式编程
def cal(x,y):
    return x+y

#而在python下的函数,通常是为了实现某些特定功能而组织到一起的代码块。

 

三、面向对象编程:

  其核心在对象:即万物皆对象,而每个对象均有特征和功能,通过设计将把这些整合在一块便是面向对象设计,面向对象更加注重对现实世界的模拟,存在的为对象,不存在的可以创造出来作为对象。

#创建类,该类的特征和功能是相似的
class teacher(object):
    def __init__(self,name,age,course):
        self.name=name
        self.age=age
        self.course=course

    def intro(self):
        print("%s is %s years old." % (self.name, self.age))
    def attend_class(self):
        print("%s teach %s"%(self.name,self.course))
#创建具体的对象,该对象的具体特征和功能。 t1=teacher("alex",22,"python") t1.attend_class() #这就是Python中面向对象编程,通过定义类对一类事物的特征和功能进行整合,然后在通过对象具体到某一个事物的具体特征和功能。 #即类就相当于 印钞机 ,而对象就相当于人民币

  其优缺点:   

  1. 编程的复杂度远高于面向过程,不了解面向对象而立即上手基于它设计程序,极容易出现过度设计的问题。一些扩展性要求低的场景使用面向对象会徒增编程难度,比如管理linux系统的shell脚本就不适合用面向对象去设计,面向过程反而更加适合。

  2. 无法向面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题,即便是上帝也无法准确地预测最终结果。于是我们经常看到对战类游戏,新增一个游戏人物,在对战的过程中极容易出现阴霸的技能,一刀砍死3个人,这种情况是无法准确预知的,只有对象之间交互才能准确地知道最终的结果。

 

 

 二、面向对象设计和面向对象编程

  ①、面向对象设计其思想为“一切皆对象”,而每个对象均有其特征和功能,将这些特征和功能整合到一块就是面向对象设计,而面向对象编程是通过定义类来整合一类事物的共同属性和函数,并可以通过实例化来创建函数。

  ②、面向对象编程只是实现面向对象设计的一种方式,而面向对象设计也可通过其他方式进行实现。例如:

 1 #-*-coding:utf-8 -*-
 2 def dogs(name,age,kind):
 3     def init(name,age,kind):
 4         dog={
 5         "name":name,
 6         "age":age,
 7         "kind":kind,
 8         "intro":intro,
 9         "yell":yell
10     }
11         return dog
12 
13     def intro(dog):
14         print("This %s‘s name is %s,it‘s %s years old."%(dog["kind"],dog["name"],dog["age"]))
15     def yell(dog):
16         print("The %s is wangwangwang"%(dog["kind"]))
17 
18     return init(name,age,kind)
19 
20 d1=dogs("amanda",23,"Taddy")
21 print(d1["name"])
22 d1["intro"](d1)

 

 

  

   

 

第九篇:面向对象##(一)

标签:实例   场景   break   wan   lex   要求   com   ble   无法   

原文地址:https://www.cnblogs.com/littlefivebolg/p/9201725.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!