我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何理解“面向对象”编程思想

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何理解“面向对象”编程思想

理解面向对象,首先理解要它的基础概念:

面向对象是将现实问题构建关系,然后抽象成 类 ( class ) ,给类定义属性和方法后,再将类实例化成 实例 ( instance ) ,通过访问实例的属性和调用方法来进行使用。

在不同的语言中,对象的定义范围不同。在 Python 中 类 和 类的实例 都称为 对象 ( Object ),因为 Python 的类是更顶级的 type 实例化后的对象;而在 Java 等静态语言中,一般把类的实例称为对象。

 

理解了理论知识后,接着通过例子,再理解面向对象的三大特征:封装、继承、多态。

下边我们把女娲造人的神话故事用面向对象来叙述一遍:

假设我们是女娲(程序设计者),我们突然有个想法,想造一群和自己差不多的小人,小人需要有男女两种性别,外观和行为也有一些差异。那首先我们分析出,不管什么性别,都应该有四肢,所以我们先仿照自己的构造,在脑海中构思泥人的样子(抽象成基类),然后先赋予泥人一些共有的行为(定义类的实例方法):

class Human(object):

    def __init__(self, name='泥人'):
        // 有个名字,有两只手,两条腿
        self.name = name
        self.hands = 2
        self.legs = 2

    def introduce_self(self):
        // 介绍自己
        print('我是%s' % self.name)

然后我们先捏3个泥人,并给他们取了不同的名字:

>>> a = Human('大强子')
>>> b = Human('二狗子')
>>> c = Human('三愣子')

我们让其中一个人介绍自己:

>>> a.introduce_self()
我是大强子

然后我们继续完成想法,需要给泥人增加两种性别,并且异性之间能结婚,我们开始在刚才泥人模型的基础上(继承于基类),构思出两种性别的泥人的区别(设置不同的属性),然后让他们都可以工作,但工作的内容不一样(调用相同的方法出现不同结果,是多态性),并决定让男人可以娶女人(将这个行为定义为男人的方法)。

import random

class Female(Human):

    def __init__(self, name):
        // 调用父类的初始化方法,依然有名字、两只手、两条腿
        super().__init__(name)
        // 头发和力量进行随机取值
        self.hair = random.randint(3, 5)
        self.power = random.randint(1, 3)
        // 是否已婚
        self.married = False

    def work():
        print('%s采摘了一些果子' % self.name)

class Male(Human):

    def __init__(self, name):
        super().__init__(name)
        self.hair = random.randint(0, 2)
        self.power = random.randint(2, 5)
        self.married = False

    def work():
        print('%s出去打猎了一天' % self.name)

    def marry(self, other):
        // 判断自己或对方是否已结婚,否则抛出异常
        if self.married is True or other.married is True:
            raise ValueError('法律不支持多次结婚')
        // 判断对方是否是女性,否则抛出异常
        if instance(other, Female):
            self.married = True
            other.married = True
        else:
            raise TypeError('法律不支持同性结婚')

然后我们就可以让小人活动起来:

>>> a = Male('大强子')
>>> b = Male('二狗子')
>>> c = Female('翠花')
>>> for h in [a, b, c]:
...     // 调用父类的方法
...     h.introduce_self()
我是大强子
我是二狗子
我是翠花
>>> for h in [a, b, c]:
...     // 多态性使相同的方法产生不同的结果
...     h.work()
大强子出去打猎了一天
二狗子出去打猎了一天
翠花采摘了一些果子
>>> a.marry(c)
>>> a.married
True
>>> c.married
True
>>> b.marry(c)
ValueError: 法律不支持多次结婚
>>> b.marry(a)
TypeError: 法律不支持同性结婚

 

看到这里你应该会发现,面向对象是更接近人类思维模式的编程思想,在这种可以具象化的需求中,可以极大简化其中的逻辑,让我们关注于设计对象的属性和方法。

虽然你确实可以通过写一长串函数来达到同样的效果,那实际是另一种编程思想:面向过程,通过函数实现过程中一系列的功能,最后按顺序组合后达成需求。

这并不是面向过程弱于面向对象,而是在不同的需求中要选择最合适的设计思路,比如在设计顺序执行的脚本中,明显面向过程的设计思路是更加适合,如果我们还去定义类就有些累赘了。

这也是题主提出的疑问,正是因为没有遇到适合面向对象的需求。

如果是拥有复杂关系的需求,我们就应该尽可能将互相有关联的行为抽象成类,比如每一个网页,网页中每一个组件 等等。实际上面向对象帮助我们在十万行代码的大型项目中,仍然可以游刃有余,正因为如此,才能发展为目前应用最为广泛的编程思想。

 


 

最后,不管是面向什么编程,终究还是要面向人生

欢迎关注我的微信公众号:面向人生编程

无论什么样的编程思想,都不该只存留在代码之中,更应伴随于整个人生旅途,这个公众号不只聊技术,还会聊产品/互联网/经济学等广泛话题,所以也欢迎非程序员关注。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何理解“面向对象”编程思想

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何理解“面向对象”编程思想

理解面向对象,首先理解要它的基础概念:面向对象是将现实问题构建关系,然后抽象成 类 ( class ) ,给类定义属性和方法后,再将类实例化成 实例 ( instance ) ,通过访问实例的属性和调用方法来进行使用。在不同的语言中,对象的
2023-01-30

“PHP面向对象编程进阶指南:掌握面向对象编程思想”

面向对象编程是一种强大的编程范式,它可以帮助您创建更灵活、更可维护的代码。本文将介绍 PHP 面向对象编程的基础知识,并指导您如何将这些知识应用到您的项目中。
“PHP面向对象编程进阶指南:掌握面向对象编程思想”
2024-02-25

Java语言面向对象编程思想之类与对象实例详解

在初学者学Java的时候,面向对象很难让人搞懂,那么今天小编就来为大家把这个思想来为大家用极为简单的方法理解吧。首先我们来简单的阐述面向对象的思想。面向对象:官方的语言很抽象,我们把官方的解释和定义抛开。想想,自己有什么,对!!我们自己有手
2023-05-31

面向对象编程是什么意思

面向对象编程是一种编码设计,它使用数据来表示一组指令。它是一种具有对象概念的程序编程典范,同时也是一种程序开发的抽象方针。它由描述状态的属性和用来实现对象行为的方法组成,完成了从数据模型到处理模型的结合与统一。什么是面向对象编程?面向对象编
2023-07-17

Python 面向对象编程详解

这篇文章主要介绍了Python 面向对象编程详解的相关资料,需要的朋友可以参考下
2022-12-30

请描述PHP中的面向对象编程(OOP)概念。(在PHP中,面向对象编程的基本思想和要素有哪些?)

面向对象编程(OOP)在PHP中的基本概念和要素包括:对象和类:对象代表现实世界的实体,由数据(属性)和行为(方法)组成。类定义了对象的蓝图。封装:保护数据完整性,通过方法访问数据。继承:子类继承父类属性和方法,实现代码重用和扩展。多态性:不同类型对象对相同消息做出不同响应。接口:定义对象必须实现的方法,保证一致性。
请描述PHP中的面向对象编程(OOP)概念。(在PHP中,面向对象编程的基本思想和要素有哪些?)
2024-04-02

Java编程中的面向对象怎么理解

本篇内容主要讲解“Java编程中的面向对象怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java编程中的面向对象怎么理解”吧!许多人刚刚学完现在看来是快要淘汰的只是面向过程的语言。他们的
2023-06-17

怎么理解Python中的面向对象编程

本篇内容主要讲解“怎么理解Python中的面向对象编程”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解Python中的面向对象编程”吧!Python支持多种类型的编程范式,例如过程式编程、
2023-06-02

如何学会面向对象编程语言

这期内容当中小编将会给大家带来有关如何学会面向对象编程语言,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。面向对象编程语言的基础理论要点:学习基础理论要点,例如设计模式/范式,这样你就知道了在所有面向对象的
2023-06-17

Java编程思想对象的容纳实例详解

Java提供了容纳对象(或者对象的句柄)的多种方式,接下来我们具体看看都有哪些方式。有两方面的问题将数组与其他集合类型区分开来:效率和类型。对于Java来说,为保存和访问一系列对象(实际是对象的句柄)数组,最有效的方法莫过于数组。数组实际代
2023-05-31

PHP面向对象编程:答疑解惑

类是创建对象的模板,对象是类的实例。继承是通过 extends 关键字从基类创建派生类实现的。PHP 面向对象编程:答疑解惑问题:类和对象的区别?解答:类是用于创建对象的数据模板,定义了对象的属性和方法。对象是类的实例化,拥有自己的属
PHP面向对象编程:答疑解惑
2024-05-10

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录