zoukankan      html  css  js  c++  java
  • Python面向对象1.引入面向对象

    一、引入

    本节将通过一个案例,先用之前我们编写的代码方式(面向过程)进行实现,然后分析利弊,从而引出面向对象,以达到对面向对象的理解

    1. 需求

    编写一个程序,完成1个学生的基本操作

    • 学生有姓名、年龄
    • 可以输出学习信息( 姓名、年龄)

    2. "面向过程"方式实现

    # 遍历打印所有姓名-年龄
    def print_info(names_temp, ages_temp):
        print("姓名:", names_temp, " 年龄:", ages_temp)
    
    
    # 定义一个变量存储姓名
    name = "王老师"
    # 定义一个变量存储年龄
    age = 20
    
    # 遍历姓名-年龄
    print_info(name, age)
    

      

     

    3. 分析

    从上述通过“面向过程”方式实现的代码中,我们可以发现代码行数不是很多,整个程序比较简单

    但是上面的代码虽然看上去简单,实际上如果我们想要进行升级功能则不见得容易,例如:我们需要在上述的代码基础上进行修改实现3名同学的信息存储,那么应该怎么办呢?看看下面的方式是否可行?有什么不好的地方?

    # 遍历打印所有姓名-年龄
    def print_info(names_temp, ages_temp):
        print("姓名:", names_temp, " 年龄:", ages_temp)
    
    
    # 定义第1个人的信息,然后输出
    name = "王老师"
    age = 20
    print_info(name, age)
    
    # 定义第2个人的信息,然后输出
    name = "王老师2"
    age = 22
    print_info(name, age)
    
    # 定义第3个人的信息,然后输出
    name = "王老师3"
    age = 23
    print_info(name, age)
    

      

     

    发现:为了实现存储3个学生信息,就用了3组变量 每组存储姓名、年龄,代码已经产生了较大冗余,如果要是存储30个学生信息想必这种方式肯定不好,代码太太太冗余

    怎样再次升级呢?

    # 遍历打印所有姓名-年龄
    def print_info(names_temp, ages_temp):
        print("姓名:", names_temp, " 年龄:", ages_temp)
    
    
    # 定义第1个人的信息,然后输出
    names = ["王老师", "王老师2", "王老师3"]
    ages = [20, 22, 23]
    print_info(names[0], ages[0])
    print_info(names[1], ages[1])
    print_info(names[2], ages[2])
    

      

     

    上面我们使用了列表进行了升级,避免了定义定义多个变量的问题

    你是否有这样的感觉,即便是升级了总感觉还是不够好

    如果有这种感觉就对了,因为上面的这种方式就是“面向过程”开发,这种开发模式就是一步步的对需要的数据以及方法进行操作

    因此出现代码“乱”的情况,在所难免

    4. "面向对象"方式实现

    下面代码是使用面向对象开发模式,实现的1名同学信息的代码

    class Person:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        # 遍历打印所有姓名-年龄
        def print_info(self):
            print("姓名:", self.name, " 年龄:", self.age)
    
    
    # 创建一个对象
    p = Person("王老师", 20)
    p.print_info()
    

      

     

    上述代码,第12行定义了一个Person类的变量p让这它指向一个对象,在这个对象中有nameage以及打印信息的功能代码(本节仅仅是引出面向对象的好处,详细的对象等知识接下来详细讲解),这样一来想要表示一个人就创建一个Person类的对象即可,如果不看第1~10行,只看第12~13行的话,就会有一种感觉“原来模拟创建一个人只需要这么简单的代码”

    按照这个思路,如果想要创建3个人呢?见如下代码:

    class Person:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        # 遍历打印所有姓名-年龄
        def print_info(self):
            print("姓名:", self.name, " 年龄:", self.age)
    
    
    # 创建一个对象
    p = Person("王老师", 20)
    p.print_info()
    
    # 创建另外2个对象
    p2 = Person("王老师2", 22)
    p2.print_info()
    p3 = Person("王老师3", 23)
    p3.print_info()
    

      

     

    二、对比分析

    通过上述2种代码的实现方式(面向过程、面向对象)我们能够的粗以下几个结论:

    • 面向过程:根据业务逻辑从上到下写代码

    • 面向对象:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程

    • 面向过程编程最易被初学者接受,其往往用一长段代码来实现指定功能,开发过程的思路是将数据与函数按照执行的逻辑顺序组织在一起,数据与函数分开考虑。

    三、总结

    面向对象编程(Object Oriented Programming-OOP) 是一种解决软件复用的设计和编程方法。

    这种方法把软件系统中相近相似的操作逻辑和操作 应用数据、状态,以类的型式描述出来,以对象实例的形式在软件系统中复用,以达到提高软件开发效率的作用。

    大白话来一句:面向对象能实现的功能,面向过程也能实现,往往程序的代码量都比较大,如果用面向过程的方式实现则代码冗余且不已升级,使用面向对象将数据与功能进行封装在中大程序开发中首先考虑使用

  • 相关阅读:
    JS代码判断IE不同版本
    极简技术类录--正则表达式
    Java读取系统Properties
    极简技术类录--maven
    极简技术类录--git
    JVM字节码增强
    如何避免死锁?
    有三个线程T1,T2,T3,怎么确保它们按顺序执行?
    编写两个线程,顺序输出自然顺序:1,2,3,4,...,99,100
    对文本单词进行技数,并倒序列出计数统计
  • 原文地址:https://www.cnblogs.com/dong4716138/p/15707307.html
Copyright © 2011-2022 走看看