程序設計的三種基本結構: 面向對象,面向過程,函數式編程
1,什么是面向對象編程?
面向對象編程是一種編程方式,此編程方式的落地需要使用 “類” 和 “對象” 來實現,所以,面向對象編程其實就是對 “類” 和 “對象” 的使用。
2,什么是類什么是對象,又有什么關系可以說類是一個函數的集合,看看下面的代碼
class 類:#類名稱def 函數1()passdef 函數2()pass
obj=類() #創建一個對象,實例化的過程
obj.函數1()#方法
3,什么時候適用面向對象呢?
當我們想寫一個機器上傳文件并執行命令的腳本,我們可以用面向過程的方法,利用函數寫成這個樣子:
def upload():#連接服務器#上傳文件#關閉連接pass def cmd():#連接服務器#執行命令#關閉連接pass def upload_cmd():#連接服務器#上傳文件#執行命令#關閉連接pass
也可以這樣
def connect():#連接服務器pass def close():#斷開連接pass def upload():connect()#上傳文件 close()pass def cmd():connect()#執行命令 close()pass def upload_cmd():connect()upload()cmd()close()pass
感覺好像有點繁瑣,總歸是處理了,那么,如果用面向對象會如何呢?
class SSH(object):def __init__(self,host,port,pwd,username):self.host = host...def connection(self):self.connection = 和服務器創建對象() def close(self):#關閉 self.connection.關閉def upload(self):self.connection() #使用連接上傳文件def cmd(self):self.connection()#使用執行命令 obj = SSH('',host,port....) obj.connection() obj.upload() obj.close()
我們把公共的功能,提取出來,還可以創建屬于對象的屬性,其他方法可以使用,這樣不是更好么?
還有一種使用場景,就是類似于模板化,實例代碼如下:
class Role(object):def __init__(self, name, role, weapon, life_value=100, money=15000):self.name = nameself.role = roleself.weapon = weaponself.life_value = life_valueself.money = moneydef shot(self):print("%s shooting..." %self.name)self.__heart = "Die"print(self.__heart)def got_shot(self,):print("%s say : ah...,I got shot..." %self.name)def buy_gun(self, gun_name):print("%s just bought %s" %(self.name,gun_name))self.weapon = gun_name #通過類可以改對象的屬性 r1 = Role('Alex', 'police', 'AK47') #生成一個角色 r2 = Role('Jack', 'terrorist', 'B22') #生成一個角色
結論:
?面向對象不會寫,也能實現和滿足功能,就是比較麻煩,而面向對象簡單的就能實現,但是無論我們用什么形式編程,我們都要明確記住一下原則:
?
1.寫重復代碼是非常不好的低級行為
2.你寫的代碼需要經常變更所以需要他可讀性好,易擴展
3. 面向過程編程與OOP的主要區別就是 OOP 使程序更加容易擴展和易更改
下一篇文章會將面向對象的語法和特性總結:
Python面向對象學習2(面向對象的語法和特性)