面向过程编程和面向对象编程

编程本质: 
  • 定义出一系列数据,定义出一些列功能,用功能操作数据实现人们想要的要求
  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')
 

 

上一篇:call


下一篇:C语言中结构体类型知识点