1. 程式人生 > 其它 >面向過程程式設計和麵向物件程式設計

面向過程程式設計和麵向物件程式設計

程式設計本質:
  • 定義出一系列資料,定義出一些列功能,用功能操作資料實現人們想要的要求
1面向過程程式設計 定義:
    針對問題/要實現的功能,先列出具體的解決步驟,再分佈寫具體內容
    類似工廠的流水線,每一工序完成一個功能,前後是有邏輯關係的.
 
優點:
    邏輯清晰,便於理解
缺陷:
    後期要更改某塊程式碼,那麼會牽一髮而動全身,很可能多個功能模組都做一定更改(擴充套件性較差)
例項
import json
"""
1 面向過程程式設計 擴張性差案例 <使用者註冊系統>
    以下都封裝成函式
    1 輸入使用者資訊
    2 校驗資訊(為示例方便:這裡僅校驗使用者輸入是否為空)
    3 註冊
    4 三個函式再封成一個函式,到時候呼叫此函式就是執行註冊
""" # 思考: 本例中函式返回值如何組織的及函式形參如惡化寫的,為什麼? # step1 def interinfo(): username = input('username>>>:').strip() password = input('password>>>:').strip() return {'username': username, 'password': password} # step2 def check_interfo(interinfo_return): is_register = True
# # 寫法1 # if len(interinfo_return.get('username')) == 0: # print('使用者名稱不能為空') # is_register = False # if len(interinfo_return.get('password')) == 0: # print('密碼不能為空') # is_register = False # 寫法2 if len(interinfo_return.get('username')) != 0 and len(interinfo_return.get('
password')) != 0: pass else: print('密碼或使用者名稱輸入為空') is_register = False return {'is_register': is_register, 'interinfo_return': interinfo_return} # step3 def register(check_info_return): if check_info_return.get('is_register'): import json with open(r'a.txt', 'w', encoding='utf-8') as f: # 注意:a.txt 是相對路徑 json.dump(check_info_return.get('interinfo_return'), f) # step4 def start(): interinfo_return = interinfo() check_info_return = check_interfo(interinfo_return) register(check_info_return) if __name__ == '__main__': start()
2面向物件程式設計   定義:基本思路    把程式用要用到的,相關聯的資料和功能整合到物件裡邊去,然後去使用 3 類與物件
  • 定義:
    • 物件: 存放資料與功能的容器
      • 將原本分散的相關資料和功能整合到物件裡
    • 類: 存放多個物件相同資料和功能的容器
      • 類的意義:節省空間,減少程式碼冗餘的機制,面向物件程式設計核心使用物件
  • 詳細理解
""" 1 定義一個類 2 產生物件/例項化 定義:呼叫類的過程就是例項化# 每例項化一次Student,就得到一個學生物件 格式: 要產生的物件名 = 類名(屬性名) 3 (增加/更改/刪除)物件屬性(增改刪類屬性,方法一樣) 格式 增: 簡寫: 物件名.新屬性名 = 屬性值# 等價於 >: 物件名句點符雙下dict = 屬性值 改: 簡寫: 物件名.屬性名 = 新屬性值# 等價於 >: 物件名句點符雙下dict = 新屬性值 刪除格式: del 物件名.屬性名 4 如何檢視物件屬性<物件內部資料是用字典組織的> 格式: 1: print(物件名.屬性名) 2: 用字典取值方法 >: print(物件名.__dict__.get('屬性名')) 5 物件,類 呼叫類中屬性 格式: 物件: 呼叫類中屬性值: 物件名/類名.屬性值 呼叫類中方法: 物件名/類名.方法 6屬性及查詢順序: 類屬性: 在類中定義的變數是類的資料屬性,共享給所有物件用,指向相同的記憶體地址; 定義的函式是類的函式屬性 物件屬性:物件名稱空間中獨有屬性,相似屬性在類中 查詢順序: 物件訪問屬性時,先從自己__dict__中找,未找到,則去類__dict__中查詢 """
# # 1 定義一個類
# class Student():  # 類名:駝峰體
#     school = 'sh'  #  'school': 'bj'
#
#     def __init__(self, name, age, course):
#         self.name = name
#         self.age = age
#         self.course = []
#         # return 在類中不能有函式返回值
#     def choose_course(self, course):
#         self.course.append(course)
#         print('%s選課%s' % (self.name, self.course))
 
 
 
 
"""
2 產生物件/例項化
    定義:呼叫類的過程就是例項化
    格式: 要產生的物件名 = 類名(屬性名)
"""
# stu1 = Student('jack', 23, 'art')  # 每例項化一次Student,就得到一個學生物件
# stu2 = Student()
 
 
"""
3 (增加/更改/刪除)物件屬性(增改刪類屬性方法一樣)
    格式
    增:
        簡寫: 物件名.新屬性名 = 屬性值  # 等價於 >: 物件名句點符雙下dict = 屬性值
    改:
        簡寫: 物件名.屬性名 = 新屬性值  # 等價於 >: 物件名句點符雙下dict = 新屬性值
    刪除格式:
        del 物件名.屬性名
"""
#
# stu1.name = 'tom'  # stu1.__dict__['name'] = 'tom'
#
# stu1.hobby = 'run'  # stu1.__dict__['name'] = 'tom'
# print(stu1.__dict__.get('hobby'))  # run
#
# del stu1.hobby
# print(stu1.__dict__.get('hobby'))
 
 
"""
 
 
4 如何檢視物件屬性<物件內部資料是用字典組織的>
    格式:
        1: print(物件名.屬性名)  
        2: 用字典取值方法
            >: print(物件名.__dict__.get('屬性名'))
"""
# print(stu1.name)
# print(stu1.__dict__)
# print(stu1.__dict__.get('name'))
 
 
"""
5 物件,類 呼叫類中資料和函式屬性
"""
# 1 呼叫資料屬性
# print(stu1.school)
# print(Student.school)
# 2 呼叫函式屬性
# stu1.choose_course('art')
# Student.choose_course(stu1, 'art')