zoukankan      html  css  js  c++  java
  • 面向对象编程的概念

    一:面向对象编程的由来

    面向对象编程是一种编程思想

    面向过程编程的思想,面向过程的核心是过程二字,过程即解决问题的步骤,先干什么,再干什么,,是一种机械式的思维方式。

    从面向过程编程思想上可以发现,一旦项目要求快速迭代,随时扩展,那么面向过程编程就会非常吃力,所以在面对有扩展需求的项目时,就需要面向对象的程序设计思想了。

    面向对象,核心是对象二字,那么对象是什么呢?

      对象:技能和特征的结合体

      面向对象更注重于对现实世界的模拟,是一种上帝式的思维方式。

    面向对象程序设计

      优点:把复杂问题流程化,继而简单化;解决的程序的扩展性问题,对某一个参数修改,会很快的反应到程序中去。

      缺点:编程复杂度高,很难预测问题的精准处理结果;扩展性极差,牵一发而动全身,更改一个组件,这个流水线都要更改。

    面向对象程序设计应用场景:需求经常变化的软件,互联网应用,游戏等。

    二:类与对象

    类即类别、种类,是面向对象设计最重要的概念,对象是特征与技能的结合体,而类则是一系列对象相似的特征与技能的结合体,那么问题来了,先有的一个个具体存在的对象(比如一个具体存在的人),还是先有的人类这个概念,这个问题需要分两种情况去看。

      在现实世界中:先有对象,再有类

      在程序中:务必保证先定义类,后产生对象

    在程序中特征用变量标识,技能用函数标识;因而类中最常见的无非是:变量和函数的定义。

    程序中的类

    class Student:
        school = 'xxx'
        def learn(self):
            print('is talking')
    
        def eat(self):
            print('is eating')
    
        def sleep(self):
            print('is sleeping')

    注意:

    1:类中可以有任意python代码,这些代码在类定义阶段便会执行,因而会产生新的名称空间,用来存放类的变量名与函数名,可以通过OldboyTecher.__dict__查看。

    2:对于经典类来说我们可以通过该字典操作类名称空间的名字(新式类有限制),但python为我们提供专门的.语法;点是访问属性的语法,类中定义的名字,都是类的属性

    程序中类的用法

    .:专门用来访问属性,本质操作的就是__dict__
    Student.school  # 等于经典类的操作Student.__dict__['school']
    Student.school = 'xxx'  # 等于经典类的操作Student.__dict__['school']='xxx'
    Student.x = 1  # 等于经典类的操作Student.__dict__['x']=1
    del Student.x  # 等于经典类的操作Student.__dict__.pop('x')

    程序中的对象

    #调用类,或称为实例化,得到对象
    s1 = Student()
    s2 = Student()
    s3 = Student()

    如此,s1、s2、s3都一样了,而这三者除了相似的属性之外还各种不同的属性,这就用到了__init__。
    注意:__init__方法是在对象产生之后才会执行,只用来为对象进行初始化操作,可以有任意代码,但一定不能有返回值

    class Student:
        ......
        def __init__(self, name, age, sex):
            self.name = name
            self.age = age
            self.sex = sex
          ......
    s1 = Student('小刘', '', 18) 
    # 先调用类产生空对象s1,然后调用Student.__init__(s1,'lxx','男',18) 
    s2 = Student('小明', '', 30)
    s3 = Student('小李', '', 18)

    程序中对象的用法

    # 执行__init__,s1.name='lxx',很明显也会产生对象的名称空间
    s2.__dict__
    {'name': '小明', 'age': '', 'sex': 30}
    
    s2.name  # s2.__dict__['name']
    s2.name = '小明'  # s2.__dict__['name']='小明'
    s2.course = 'python'  # s2.__dict__['course']='python'
    del s2.course  # s2.__dict__.pop('course')
  • 相关阅读:
    关联原理说明
    一个软件测试工程师的学习体验
    缺陷漏测分析:测试过程改进
    自动化测试的7个步骤
    ACM题目————Subsequence
    ACM题目————Aggressive cows
    ACM题目————列变位法解密
    C++TSL之map容器(悲伤的故事)
    ACM题目————二叉树最大宽度和高度
    ACM题目————装箱问题
  • 原文地址:https://www.cnblogs.com/li1992/p/8779761.html
Copyright © 2011-2022 走看看