面向对象编程基础

墨蓝 2023-06-16 04:52 85阅读 0赞

  对象构成了一组数据结构及其处理方法。具有相同行为的对象被分类为类。内部细节被类的封装所隐藏。类的专门化和泛化是通过继承实现的,基于对象类型的动态赋值是通过多态实现的。。。。
  程序是指令的集合:我们在程序中编写的语句在执行时变成一个或多个指令,然后由CPU执行。
  为了简化程序设计,我们引入了函数的概念,将相对独立且经常重复使用的代码放入函数中,当这些函数需要使用时,我们只需要调用函数;如果函数过于复杂和臃肿,进一步将函数分为子函数,降低了系统的复杂度。所谓程序设计,就是程序员根据计算机的工作方式控制计算机完成各种任务。然而,计算机的工作方式与正常人不同。如果编程抛弃了人类正常的思维方式去迎合计算机,编程的乐趣就会大大减少。”“每个人都应该学会编程”只是一句谚语。事实上,最重要的原因是,当我们需要开发一个复杂的系统时,代码的复杂性将使开发和维护工作变得困难,因此在20世纪60年代后期,一系列概念如“软件危机”、“软件工程”开始出现。
  当然,程序员圈子里的人都知道,现实中没有解决上述问题的“银弹”。软件开发人员真正想要的是20世纪70年代诞生的Smalltalk编程语言中引入的面向对象编程思想(面向对象编程的雏形可以追溯到早期的模拟语言)。根据这种编程思想,程序中数据和操作数据的功能是一个逻辑整体,我们称之为对象,解决问题的方法是创建所需的对象,并向对象发送各种消息。多个对象的协同工作最终可以使我们构建一个复杂的系统来解决实际问题。

说明: 当然面向对象也不是解决软件开发中所有问题的最后的“银

弹”,所以今天的高级程序设计语言几乎都提供了对多种编程范式的支持,Python也不例外。

类和对象

简单地说,类是对象的蓝图和模板,对象是类的实例。虽然这种解释有点像用概念来解释概念,但我们至少可以从这句话中看出,类是抽象概念,对象是具体事物。在面向对象编程的世界中,一切都是对象,对象具有属性和行为,每个对象都是唯一的,对象必须属于某个类(类型)。当我们提取大量具有共同特征的对象的静态特征(属性)和动态特征(行为)时,我们可以定义一些称为“类”的东西。

定义类

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNzAxOTU2_size_16_color_FFFFFF_t_70

说明: 写在类中的函数,我们通常称之为(对象的)方法,这些方法就是对象可以接收的消息。

创建和使用对象

当我们定义好一个类之后,可以通过下面的方式来创建对象并给对象发消息。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNzAxOTU2_size_16_color_FFFFFF_t_70 1

访问可见性

对于上述代码,具有C++、Java、Cා等编程经验的程序员可能会问,对于student对象绑定的名称和年龄属性,我们有什么访问权限(也称为可见性)。因为在许多面向对象的编程语言中,我们通常将对象的属性设置为私有或受保护。简而言之,我们不允许外部访问,对象的方法通常是公共的,因为公共方法是对象可以接受的消息。在Python中,属性和方法只有两种访问权限,即public和private。如果希望属性是私有的,可以在命名属性时以两个下划线开头下面的代码可以验证这一点。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNzAxOTU2_size_16_color_FFFFFF_t_70 2

  但是,Python并没有从语法上严格保证私有属性或方法的私密性,它只是给私有的属性和方法换了一个名字来“妨碍”对它们的访问,事实上如果你知道更换名字的规则仍然可以访问到它们,下面的代码就可以验证这一点。之所以这样设定,可以用这样一句名言加以解释,就是“We are all consenting adults here”。因为绝大多数程序员都认为开放比封闭要好,而且程序员要自己为自己的行为负责。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNzAxOTU2_size_16_color_FFFFFF_t_70 3

在实际开发中,我们并不建议将属性设置为私有的,因为这会导致子类无法访问(后面会讲到)。所以大多数Python程序员会遵循一种命名惯例就是让属性名以单下划线开头来表示属性是受保护的,本类之外的代码在访问这样的属性时应该要保持慎重。

面向对象的支柱

面向对象有三大支柱:封装、继承和多态。下一章将详细解释以下两个概念。我们先来谈谈封装。我对封装的理解是“隐藏所有可以隐藏的实现细节,只向外部世界公开(提供)简单的编程接口”。类中定义的方法封装数据和对数据的操作。创建对象后,只需向对象发送一条消息(调用方法)即可执行方法中的代码,即只需知道方法的名称和传入的参数(方法的外部视图),而不需要知道方法详细信息的内部实现(方法的内部视图)。

发表评论

表情:
评论列表 (有 0 条评论,85人围观)

还没有评论,来说两句吧...

相关阅读

    相关 面向对象编程基础

      对象构成了一组数据结构及其处理方法。具有相同行为的对象被分类为类。内部细节被类的封装所隐藏。类的专门化和泛化是通过继承实现的,基于对象类型的动态赋值是通过多态实现的。。。。