首页 > 编程语言 >[Python学习日记-60] 什么是面向对象的程序设计

[Python学习日记-60] 什么是面向对象的程序设计

时间:2024-11-03 16:20:12浏览次数:3  
标签:info name Python 编程 60 面向对象 user check

[Python学习日记-60] 什么是面向对象的程序设计

简介

编程范式

面向过程编程

面向对象编程

简介

        前面我们学习了 Python 中的语法、数据类型、函数之类的一系列相关知识,我们对 Python 的编程也比较了解了,甚至可以写一些脚本出来进行一些文件的过滤或者日志的生成了,但是对比起别人做的项目来看感觉还是少了那么点东西,总感觉现在做出来的程序都是像流水线一样的程序,并无扩展性而言,如果要扩展跟重新做一次没什么两样。其实我们现在少了的东西就是面向对象,本篇文章我们就先来认识一下什么是面向对象吧。

编程范式

        编程即写程序或者写代码,具体是指程序员用特定的语法、数据结构和算法编写代码,目的是用来告诉计算机如何执行任务 。如果把编程的过程比喻为练习武功,那么编程范式指的就是武林中的各种流派,而在编程的世界里最常见的两大流派便是面向过程面向对象了。
        在武侠的世界里“功夫的流派没有高低之分,只有习武的人才有高低之分”,在编程世界里也是如此,面向过程与面向对象在不同的场景下都各有优劣,谁好谁坏不能一概而论,下面就让我们来详细了解它们吧。

面向过程编程

一、概念

        面向过程编程核心是“过程”二字,“过程”指的是解决问题的步骤,即先干什么再干什么后干什么...,基于面向过程设计程序就好比在设计一条流水线,是一种机械式的思维方式。若程序一开始是要着手解决一个大的问题,面向过程的基本设计思路就是把这个大的问题分解成很多个小问题或子过程,这些子过程在执行的过程中继续分解,直到小问题足够简单到可以在一个小步骤范围内解决。下面我们以用户注册为例写一段面向过程编程的代码:

import json
import re

def interactive():
    name=input('>>: ').strip()
    pwd=input('>>: ').strip()
    return {
        'name':name,
        'pwd':pwd
    }

def check(user_info):
    is_valid=True

    if len(user_info['name']) == 0:
        print('用户名不能为空')
        is_valid=False

    if len(user_info['pwd']) < 6:
        print('密码不能少于6位')
        is_valid=False

    return {
        'is_valid':is_valid,
        'user_info':user_info
    }

def register(check_info):
    if check_info['is_valid']:
        with open('db.json','w',encoding='utf-8') as f:
            json.dump(check_info['user_info'],f)



def main():
    user_info=interactive()

    check_info=check(user_info)

    register(check_info)


if __name__ == '__main__':
    main()

代码输出如下:

        当用户名不为空,密码等于大于6位时。

        当用户名不为空,密码小于6位时。

二、优点

        复杂的问题流程化,进而简单化(一个复杂的问题,分成一个个小的步骤去实现,实现小的步骤将会非常简单)。

        举一个典型的面向过程的例子,写一个数据远程备份程序,分三步:本地数据打包——上传至云服务器——测试备份文件的可用性,在这个过程当中是要一步步进行的,不能说我先测试备份文件的可用性再本地数据打包。

三、缺点

        可扩展性差(当需要为程序增加一项功能时,每一个参与该项功能的函数都需要进行修改,可以说是牵一发而动全身)。

        因为一套流水线或者流程就是用来解决一个问题,就好比生产汽水的流水线无法生产汽车一样,即使最后能了也要对流水线进行大改,而且改一个组件,与其相关的组件可能都需要修改,例如我们需要在用户注册时加入一个填写邮箱要求,我们需要修改 interactive() 的同时,也需要修改依赖其结果才能正常执行的 check(),这就造成了连锁反应,而且这一问题会随着程序规模的增大而变得越发的糟糕。

        面向过程编程的扩展演示代码如下:

import json
import re
def interactive():
    name=input('>>: ').strip()
    pwd=input('>>: ').strip()
    email=input('>> ').strip()
    return {
        'name':name,
        'pwd':pwd,
        'email':email    # 修改处
    }

def check(user_info):
    is_valid=True

    if len(user_info['name']) == 0:
        print('用户名不能为空')
        is_valid=False

    if len(user_info['pwd']) < 6:
        print('密码不能少于6位')
        is_valid=False

    # 修改处
    if not re.search(r'@.*?\.com$',user_info['email']):
        print('邮箱格式不合法')
        is_valid=False

    return {
        'is_valid':is_valid,
        'user_info':user_info
    }

def register(check_info):
    if check_info['is_valid']:
        with open('db.json','w',encoding='utf-8') as f:
            json.dump(check_info['user_info'],f)



def main():
    user_info=interactive()

    check_info=check(user_info)

    register(check_info)


if __name__ == '__main__':
    main()

代码输出如下:

        当邮箱不合法时。

        当邮箱合法时。

四、应用场景 

        面向过程的程序设计一般用于那些功能一旦实现之后就很少需要改变的场景, 如果你只是写一些简单的脚本,去做一些一次性任务,用面向过程去实现是极好的,但如果你要处理的任务是复杂的,且需要不断迭代和维护, 那还是用面向对象最为方便。

面向对象编程

一、概念

        “面向对象”的核心是“对象”二字,而对象的精髓在于“整合”。所有的程序都是由“数据”与“功能”组成,因而编写程序的本质就是定义出一系列的数据,然后定义出一系列的功能来对数据进行操作。

        在之前的学习当中数据与功能都是分离开的,就如下面的代码一样:

# 信息:名字、年龄、身高
name = "jove"
age = 27
height = 180


# 技能:say_hi
def say_hi(name,age,height):
    print("Hi,i'm %s.\nI'm %d years old.\nMy height is %dcm." % (name,age,height))

# 这个时候如果想要使用 say_hi 这个技能的时候需要执行 say_hi 和取出 name、age、height 这几项信息,才能共同完成这一个简单的动作
say_hi(name,age,height)

代码输出如下:

 

        上面代码中的变量和函数就是一个人的名字、年龄、身高、技能之类的一项项特性,而这些特性都是指向一个人的本身,而一个人就像一个容器一样,在编程当中也是一样的,我们所说的“对象”就是一个容器,该容器可以盛放数据与功能,所以我们可以说:对象是把数据与功能整合到一起的产物,或者说“对象”就是一个盛放数据与功能的容器/箱子/盒子。以颜料盒为例,把“信息”比作“红颜料”、“黄颜料”、“蓝颜料”等画画所需要的原材料;再把“技能”比作“尖头颜料笔”、“平头颜料笔”、“刷子”等画画所需要的工具;那么“对象”就是一个画画工具盒,把“原材料”和“工具”都装到了一起。

        如果我们把“画画”比喻为要执行的业务逻辑,此时只需要拿来一样东西即可,那就是画画工具盒,因为画画工具盒里整合了画画所需的所有原材料与工具,这比起你分别拿来原材料与工具才能执行,要方便得多。 

二、优点

        在了解了对象的基本概念之后,理解面向对象的编程方式就相对简单很多了,面向对象编程就是要造出一个个的对象,把原本分散开的相关信息与技能整合到一个个的对象里,这么做既方便使用,也可以提高程序的耦合程度,进而提升了程序的可扩展性,需要强调的是,对于一个软件质量来说,面向对象的程序设计并不代表全部,面向对象的程序设计只是用来解决扩展性问题。

三、缺点

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

四、应用场景

        面向对象的程序设计一般用于那些交互性高,程序参数、功能、模块需要经常维护扩展的程序,例如后面会学到的网络编程当中制作一个网站,网站就会经常需要进行维护功能、迭代升级和扩展新的功能,还有另一个就是游戏开发也是使用面向对象的程序设计,特别是网络游戏,因为这些游戏经常会进行参数的修改和新功能或者新角色对游戏进行扩展。

标签:info,name,Python,编程,60,面向对象,user,check
From: https://blog.csdn.net/zjw529507929/article/details/143451181

相关文章

  • 工程师和科学家的高等数学及python实例:2三角函数 II
    2三角函数II学完本章内容后,你应该能够●讨论反三角函数的图形●讨论倒数函数的图形●评估正弦、余弦和正切函数的变换2.1引言本章将继续讨论三角函数,研究上一章中涉及的三个三角函数的倒数和反三角函数。本章还将讨论这些函数的变换。2.2三角函数的倒数正弦、余弦......
  • Python自动化操作Word文档详解
        在日常办公和数据处理中,我们经常需要处理Word文档。手动操作Word文档可能会非常繁琐和耗时,而使用Python可以实现自动化操作,提高工作效率。本文将详细介绍如何使用Python自动化操作Word文档,包括读取、写入、修改和格式化等操作。一、安装所需的库    要使用......
  • 面向对象三大特征之一:封 装
    1、特点封装是面向对象的核心思想,两层含义:一是一个整体(把对象的属性和行为看成一个整体,即封装在一个对象种),二是信息隐藏,对外隐藏,但可以通过某种方式进行调用。2、访问权限(1)private:当前类访问级别,属于私有访问权限。(2)default:本包访问权限,一个类中的属性或方法没有任何访问权......
  • python小白入手之——字符串、集合
    数据容器的视角学习字符串:字符串是字符的容器字符串支持正向下标索引和反向下标索引同元组一样,字符串也是一个无法修改的数据容器1.index()2.字符串的替换:语法:字符串.replace(字符串1,字符串2),功能:将字符串1中的全部内容更换成字符串2,但要注意,并不是修改字符串本身,而是得到了......
  • 【Python】深入解析Python中的多重继承与MRO:原理、C3线性化算法与super()用法
    解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界Python的多重继承机制允许一个类从多个父类中继承属性和方法,这带来了极大的灵活性和复用性,但也引发了“菱形继承”问题,即多条继承路径导致同一属性或方法重复调用。为了解决此问题,Python引入了MRO(方法解析顺序)规......
  • 【Python】全面解析Python中的GIL(全局解释器锁):多线程与多进程的实战与抉择
    解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界Python中的GIL(全局解释器锁)对多线程并发执行的限制性影响是开发者在性能优化时需要特别关注的内容。本文将详细讨论GIL的工作机制及其对多线程性能的影响,深入分析Python多线程在CPU密集型和I/O密集型任......
  • Python网站源码下载器
    声明:本程序基于Python3.11解释器制作会有闪退的现象出现不清楚是为什么,有能力请自行修改(不一定100%会有,但是有概率出现)importos,re,requests,subprocess,sys,threading,webbrowser,time,randomfromurllib.parseimporturljoin,urlparsefromPyQt5importQ......
  • python-有关循环语句的基础知识
    Python是一种高级编程语言,具有简洁、灵活的特点。在Python中,循环语句是非常重要的语法之一。下面将介绍Python中常用的循环语句,包括forin循环、while循环以及与循环相关的else语句、continue语句、break语句、if-elif-else、forin语句的嵌套、while循环中的if-elif-else语句......
  • 华为OD机试-E卷,100分 - 最小的调整次数特异性双端队列Java & Python& JS & C++ & C
    最新华为OD机试题目描述有一个特异性的双端队列,该队列可以从头部或尾部添加数据,但是只能从头部移出数据。小A依次执行2n个指令往队列中添加数据和移出数据。其中n个指令是添加数据(可能从头部添加、也可能从尾部添加),依次添加1到n;n个指令是移出数据。现在要求移除数据的顺......
  • 华为OD机试-E卷100分 -货币单位换算Java & Python& JS & C++ & C
    最新华为OD机试题目描述记账本上记录了若干条多国货币金额,需要转换成人民币分(fen),汇总后输出。每行记录一条金额,金额带有货币单位,格式为数字+单位,可能是单独元,或者单独分,或者元与分的组合。要求将这些货币全部换算成人民币分(fen)后进行汇总,汇总结果仅保留整数,小数部分舍弃......