zoukankan      html  css  js  c++  java
  • 面向过程编程

    面向过程编程

    面向过程编程是解决问题的一种思想,相当于武林门派,武林门派之间没有好坏之分,因此它与我们之后学习的面向对象编程其实没有好坏之分。

    面向过程编程,核心是编程二字,过程指的是解决问题的步骤,即先干什么、后干什么、再干什么、然后干什么……

    基于该思想编写程序就好比在设计一条流水线,面向对称编程其实是一种机械式的思维方式。

    当我们写登录功能,我们首先需要输入账号、密码,然后认证两次密码是否相同,然后从数据库中读取密码验证用户密码输入是否正确,然后输入验证码……之后,我们就能够实现登录功能。这样把登录功能问题流程化,进而是解决问题的思路非常清晰。

    优点:复杂的问题流程化,进而简单化。

    生产汽水瓶的流水线,没办法生产特斯拉。流水线下一个阶段的输入与上一个阶段的输出是有关联的。因此他的扩展性极差。

    缺点:扩展性差

    1.1接受用户输入用户名,进行合法性检验,拿到和的用户名

    def check_username():
        username = input('username>>>').strip()
        if username.isalpha():
            return username
        else:
            print('用户名必须为字母,傻叉')
    

    1.2 接受用户输入密码,进行合法性校验,拿到合法的密码

    def check_pwd():
        while True:
            pwd = input('password>>>').strip()
            if len(pwd) < 5:
                print('密码长度至少五位')
                continue
            re_pwd = input('re_password>>>').strip()
            if pwd == re_pwd:
                return pwd
            else:
                print('两次输入密码不一致')
    

    1.3 将合法的用户名和密码写入文件

    def insert(username, pwd, path='57.txt'):
        with open(path, 'a', encoding='utf8') as fa:
            fa.write(f'{username}:{pwd}
    ')
    

    1.4 注册

    def register():
        username = check_username()
        pwd = check_pwd()
        insert(username, pwd)
        print(f'{username}注册成功')
    
    
    register()
    

    username>>>nick
    password>>>12345
    re_password>>>12345
    nick注册成功

    如果现在我们需要校验用户的年龄,因此我们需要增加一个check_age()方法,并且其他有牵连的地方都需要修改,因此它的扩展性极差。

    1.5 封装文件读写功能

    # def register():
    #     while True:
    #         username = input('username>>>').strip()
    #         # 检测用户是否重复,如果重复则重新输入
    #         with open('db.txt', 'r', encoding='utf8') as fr:
    #             for line in fr:
    #                 info = line.strip('
    ').split(':')
    #                 if username == info[0]:
    #                     print('用户名已经存在')
    #                     break
    #             else:
    #                 # 用户名不存在
    #                 # 跳出循环,不用重复输入用户名字
    #         res =
    
    # def tell_info():
    #     username = input('username>>>').strip()
    #     with open('db.txt', 'r', encoding='utf8') as fr:
    #         for line in fr:
    #             info = line.strip('
    ').split(':')
    #             if username == info[0]:
    #                 return info
    

    数据处理层

    def select(username):
        with open('db.txt', 'r', encoding='utf8') as fr:
            for line in fr:
                info = line.strip('
    ').split(':')
                if username == info[0]:
                    return info
    
    
    def tell_info():
        username = input('username>>>').strip()
        info = select(username)
        print(info)
    

    用户功能层

    def register():
        while True:
            username = input('username>>>').strip()
            # 检测用户是否重复,如果重复则重新输入
            res = select(username)
            if res:
                print('用户名已经存在')
            else:
                break
    
        while True:
            pwd = input('password>>>').strip()
            re_pwd = input('re_password>>>').strip()
            if pwd != re_pwd:
                print('两次输入密码不一致,请重新输入')
            else:
                break
    

    把注册功能分开之后,功能与功能直接解耦合,复杂的问题流程化,更加清晰。

    二、分层实现功能

    • 用户功能层:实现用户具体的功能。
    • 接口层:连接数据处理层和用户功能层。
    • 数据处理层:处理数据后把结果交给接口层。

    分层实现功能的好处:当我们需要实现web端和app端的软件,我们只要把数据处理层和接口层写好,然后实现不同的用户功能层即可,web端使用web端的用户功能层,app端使用app端的用户功能层,但是接口层和数据处理层是通用的

  • 相关阅读:
    HDU4529 郑厂长系列故事——N骑士问题 —— 状压DP
    POJ1185 炮兵阵地 —— 状压DP
    BZOJ1415 聪聪和可可 —— 期望 记忆化搜索
    TopCoder SRM420 Div1 RedIsGood —— 期望
    LightOJ
    LightOJ
    后缀数组小结
    URAL
    POJ3581 Sequence —— 后缀数组
    hdu 5269 ZYB loves Xor I
  • 原文地址:https://www.cnblogs.com/Lin2396/p/11596375.html
Copyright © 2011-2022 走看看