面向对象编程 – 现实的抽象

面向对象编程 - 现实的抽象

您好,在这篇看似教程的文章中,我们将讨论一个特别让我头疼的话题。然而,这种困难促使我不断学习、研究、研究,将日常生活的抽象化为自己的抽象,从而将代码变成有形事物的表示(相信我,这有时可能是一项艰巨的任务)。我对这个主题非常热情,现在我在这篇文章中分享了理解它的重要数据,所以让我们进入问题的核心。

我将使用 javascript 作为我选择的语言,以尽可能最好的方式解释或尝试做到这一点,即面向对象编程或其缩写(oop)。要理解如何将 oop 应用于现实世界,您必须认识到面向对象编程不仅仅是一种技术,更是一种生活方式!在本文中,我们将探索基本的 oop 概念并将其应用到日常生活中的具体示例中。

什么是面向对象编程?

面向对象编程是一种基于“对象”概念的编程范式,此时此刻你可以想象字面上生命中的一个对象:一个苹果,一只狗,一栋房子,一辆车,一个橡皮爸爸现在,想象一下这些对象可以包含属性或特征和功能形式的数据,也就是说,它们可以做一些事情。想象一下,您正在建模一个虚拟世界,其中每个实体都可以表示为具有独特特征的独立对象。

现实生活中和 oop 中的对象

为了更好地理解 oop,让我们看一个现实生活中的例子:一辆汽车。汽车可以具有模型、颜色和速度等属性,以及启动和停止等方法。将其移植到 oop 的世界将非常简单:

class auto {  constructor(modelo, color) {    this.modelo = modelo;    this.color = color;    this.velocidad = 0;  }  arrancar() {    console.log(`el auto ${this.modelo} ha arrancado.`);  }  detener() {    console.log(`el auto ${this.modelo} se ha detenido.`);    this.velocidad = 0;  }  acelerar(kmh) {    this.velocidad += kmh;    console.log(`el auto ${this.modelo} acelera a ${this.velocidad} km/h.`);  }}// crear un objeto autoconst miauto = new auto('sedán', 'rojo');// utilizar métodos del objeto automiauto.arrancar();miauto.acelerar(50);miauto.detener();

在这个例子中,我们创建了一个 auto 类,它具有模型、颜色和速度等属性,以及方法,即它可以做的事情:如启动、停止和加速。然后,我们基于该类创建一个 myauto 对象,并用它来模拟现实生活中的动作。

继承:层次结构的关键

现在想象一下,我们不仅要建模汽车,还要建模摩托车。它们都有一些相似之处,但也有独特的特点。这就是 oop 中的继承概念发挥作用的地方。

class camioneta extends auto {  constructor(modelo, color, tipo) {    super(modelo, color);    this.tipo = tipo;  }  realizartruco() {    console.log(`la camioneta ${this.modelo} ${this.tipo} realiza un asombroso truco.`);  }}// crear un objeto camionetaconst micamioneta = new camioneta('explorer', 'negra', '4x4');// utilizar métodos del objeto camionetamicamioneta.arrancar();micamioneta.acelerar(80);micamioneta.realizartruco();micamioneta.detener();

在这里,我们创建了一个新的 truck 类来扩展 car 类。 extends关键字允许我们继承父类(auto)的所有属性和方法。此外,子类(pickup)可以有额外的属性和方法。

封装:保护您的秘密

封装是 oop 的另一个支柱,它允许我们保护对象的内部细节并仅公开必要的内容。让我们看一个使用“银行账户”的简单示例:

class cuentabancaria {  constructor(titular, saldoinicial) {    this.titular = titular;    this._saldo = saldoinicial; // el saldo se designa con el prefijo _ para indicar que es privado  }  get saldo() {    return this._saldo;  }  depositar(cantidad) {    if (cantidad > 0) {      this._saldo += cantidad;      console.log(`${cantidad} depositados. nuevo saldo: ${this._saldo}`);    } else {      console.log("error: la cantidad debe ser mayor que cero.");    }  }  retirar(cantidad) {    if (cantidad > 0 && cantidad <= this._saldo) {      this._saldo -= cantidad;      console.log(`${cantidad} retirados. nuevo saldo: ${this._saldo}`);    } else {      console.log("error: cantidad inválida o saldo insuficiente.");    }  }}// crear una cuenta bancariaconst micuenta = new cuentabancaria('juan pérez', 1000);// utilizar métodos del objeto cuenta bancariaconsole.log(`saldo inicial: ${micuenta.saldo}`);micuenta.depositar(500);micuenta.retirar(200);

在这个例子中,我们封装了账户余额,使用 get 方法来访问它。这可以保护余额不被班级外部直接修改,从而维护我们银行账户的完整性。

多态性:多功能性的魔力

多态性允许不同的类共享相同的方法名称,但每个类都有特定的行为。为了说明这一点,让我们想象一个动物园,里面有会发出声音的动物。

class Animal {  hacerSonido() {    console.log('Algunos sonidos genéricos de animal.');  }}class Perro extends Animal {  hacerSonido() {    console.log('¡Guau! ¡Guau!');  }}class Gato extends Animal {  hacerSonido() {    console.log('¡Miau! ¡Miau!');  }}// Crear objetos animalesconst miAnimal = new Animal();const miPerro = new Perro();const miGato = new Gato();// Utilizar el método hacerSonido de cada objetomiAnimal.hacerSonido();miPerro.hacerSonido();miGato.hacerSonido();

在此示例中,dog 和 cat 类继承自 animal 类,但每个类都用自己独特的实现重写了 makesound 方法。这使得不同类型的动物可以不同地使用相同的方法。

结论:oop…付诸行动

我真的很感谢你能走到这一步!我们探索对象、继承、封装和多态性等关键概念,并将它们应用到现实生活中。请记住,oop 是一种思维方式,可以让您更有效地建模和理解世界……并将其放入代码中。

因此,下次当您看到汽车、银行帐户甚至您的宠物时,请考虑如何在代码中将它们表示为对象。面向对象编程不仅是一个强大的工具,而且还是一种让程序变得栩栩如生的方法!

我希望您喜欢这篇文章,并且可以在您的项目中利用它。请留下您的评论,让我知道您的想法以及您是否有任何其他现实生活中的抽象概念。 ;)

以上就是面向对象编程 – 现实的抽象的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1490129.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 12:57:53
下一篇 2025年12月19日 12:58:04

相关推荐

  • 通天“^”,却被加载了“”

    节点 – v14错误:[BABEL] /codebuild/output/src3999571347/src/client/src/index.js:需要 Babel“^7.16.0”,但加载了“7.12.3”。如果您确定您有 @babel/core 的兼容版本,则构建过程中的某些内容可…

    好文分享 2025年12月19日
    000
  • 如何使用 HMPL 减少客户端上的 javascript 文件大小?

    大家好!在这篇文章中,我想告诉你如何通过 hmpl 这样的模板语言来多次减小 javascript 文件的大小。 文章中出现的技术方法并不新鲜,但今天仍然足够流行,值得讨论。 减小 javascript 文件的大小将使页面在客户端上加载得更快。如果我们采用现代 spa,即使考虑到所有的缩小,文件大小…

    2025年12月19日
    000
  • 自动化云恢复挑战:使用 GitHub Actions 实施 CI/CD

    云简历挑战 – 第 2 部分 介绍 在本系列的第一部分中,我们逐步介绍了如何使用各种 aws 服务构建云原生简历网站。现在,我们将通过使用 github actions 实施持续集成和持续部署 (ci/cd),将我们的项目提升到一个新的水平。这种自动化对于有效维护和更新我们的云简历至关重…

    2025年12月19日
    000
  • 4 年内掌握 Tailwind CSS 与流行 JavaScript 框架的集成

    您准备好增强您的 web 开发工作流程了吗?别再犹豫了!在这份综合指南中,我们将引导您完成将 tailwind css 与四个最热门的 javascript 框架无缝集成的过程:react、angular、next.js 和 nuxt.js。无论您是经验丰富的专业人士还是刚刚起步,本教程都将帮助您立…

    2025年12月19日 好文分享
    000
  • JavaScript 中的二叉搜索树

    在 javascript 中实现二叉搜索树 在这篇文章中,我们将探索如何在 javascript 中实现基本的二叉搜索树 (bst)。我们将介绍插入节点和执行不同的树遍历方法 – 中序、前序和后序。 节点类首先,我们定义一个 node 类来表示树中的每个节点: class node { …

    2025年12月19日
    000
  • 如何在 React 中创建可访问的图表:包容性数据可视化指南

    什么是数据可视化中的可访问性 数据可视化是沟通的关键,但残疾人可能无法使用。数据可视化的可访问性对于确保所有用户(无论能力如何)都能理解图表并与图表交互至关重要。 highcharts 拥有创建可访问图表的工具和功能,依赖屏幕阅读器的用户将受益于正确的标签和注释。 选择正确的图表类型 不同的图表类型…

    2025年12月19日
    000
  • Arrayslice 与 Arraysplice:消除混淆

    介绍 作为一名 javascript 开发人员,我经常发现两个数组方法有点难以掌握/完全掌握 数组.切片 数组.splice。 因此,我决定深入研究并用清晰的示例来分解这些方法。 如果我重写语法 数组.切片 returns the deleted elements in a form of arra…

    2025年12月19日
    000
  • 使用 InversifyJS 在 Nodejs 中实现依赖注入

    嘿,开发者社区! 我刚刚在我的博客上发表了一篇关于如何使用 inversifyjs 在 node.js 中实现依赖注入的详细文章。如果您希望使 node.js 应用程序更加模块化、可维护和可测试,那么本指南适合您! 在本文中,我介绍: 什么是依赖注入以及为什么它很重要。如何在 node.js 项目中…

    2025年12月19日
    000
  • 使用 AWS Bedrock 将 GenAI 添加到 Angular 应用程序

    将人工智能集成到 web 应用程序中已经变得越来越普遍。 aws bedrock 提供了一个强大的平台来访问和利用基础模型 (fm) 来构建生成式 ai 应用程序。本文将指导您使用 aws bedrock 将 ai 功能集成到 angular 应用程序中。 先决条件 对 angular 和 type…

    2025年12月19日
    000
  • Vue 和 Tailwind 管理框架

    github |网站 添加了一些“必须”的功能,并将在此分享。 我们将非常感谢您在评论中提出的建议! 预制登录: 立即学习“前端免费学习笔记(深入)”; 用户管理: Chat-GPT 文本补全插件: 每个操作的审核日志(不包括密码哈希等敏感字段): TOTP 2FA 插件: S3上传插件: 开箱即用…

    2025年12月19日 好文分享
    000
  • 代码之旅:使用 Nextjs、Tailwind CSS 和 Framer Motion 打造我的开发者组合

    一个想法的起源在一个以快速技术发展为主导的世界中,作为一名 Web 开发人员要想脱颖而出,往往取决于一个关键的工件:产品组合。正是在这个数字复兴时期,我决定打造我的项目——不仅仅是作为项目的展示,也是我在现代网络技术方面的旅程和专业知识的证明。 第 1 章:选择我的同伴 — Next.js我的旅程始…

    2025年12月19日
    000
  • React 综合指南

    react 19 来了! ? 在本文中,我们将探索 react 19 中的新功能和改进。让我们开始吧! react 19 的新增功能 react 19 是 react 团队的最新主要版本,具有多项突破性功能和增强功能,旨在使开发过程更加高效,并使生成的应用程序更快、更强大。该版本继续建立在其前身奠定…

    2025年12月19日
    000
  • JavaScript 与 TypeScript 你应该选择哪一个?

    您是否在下一个 web 开发项目中在 javascript 和 typescript 之间左右为难?你不是一个人!当我们进入 2024 年时,这两种强大语言之间的争论比以往任何时候都更加激烈。无论您是经验丰富的开发人员还是刚刚开始编码之旅,这份综合指南都将帮助您做出明智的决定。让我们探讨一下 jav…

    2025年12月19日
    000
  • 如何使用 NCE 考试模拟测试来加强您的准备

    • 社会和文化多样性:了解不同文化背景及其对咨询的影响。• 咨询和帮助关系:咨询过程中使用的技巧和技巧。• 小组工作:小组咨询和治疗的动态。• 职业发展:职业咨询相关理论与方法。• 评估:用于评估客户需求和进度的 NCE 考试练习测试技巧。• 研究和项目评估:了解研究方法以及如何评估咨询项目。该考试…

    2025年12月19日
    000
  • React 备忘单:功能组件版

    反应备忘单 react 自诞生以来已经发生了显着的发展,随着 hooks 的兴起,函数式组件已成为构建 react 应用程序的首选方法。本备忘单概述了在 react 中使用函数式组件的关键概念、功能和最佳实践。 1. 功能组件基础知识 功能组件是一个返回 react 元素的纯 javascript …

    2025年12月19日
    000
  • 我的第一个拉取请求刚刚被接受!

    我的第一个拉取请求刚刚被接受! ? 今天,我正在庆祝我对 GitHub 社区的第一个开源贡献。 这对我来说是一件大事。我正在从事开源项目,这意味着我无法通过构建 Easy UI 获得报酬 – [ https://www.easyui.pro/ ] 构建 50 多个 Next.js 模板集…

    2025年12月19日
    000
  • JSON 在线比较:简化数据验证和调试

    简介JSON(JavaScript 对象表示法)由于其简单性和可读性已成为网络上数据交换的事实上的标准。作为开发人员,确保 JSON 数据的准确性和一致性至关重要。这方面的一项常见任务是 JSON 在线比较文件,以识别差异并确保数据完整性。在这篇博文中,我们探讨了比较 JSON 文件的重要性、完成此…

    2025年12月19日
    000
  • 如何测试网站:使用 SIRV 和 Playwright 进行测试驱动开发 (TDD)

    我一直在为我们的婚礼和一个用于在旅行时翻译食物的食物翻译网站工作一些网站。我发现的有趣的事情之一是如何测试这些网站,并确保一切正常。 什么是测试驱动开发(tdd)? 我发现(或者更确切地说,被告知)的两个工具称为 sirv 和 playwright,可以帮助您运行网站并测试网站的某些部分。一旦完成一…

    2025年12月19日 好文分享
    000
  • 循环:For 循环、While 循环、ForOf 循环、ForIn 循环

    循环的目的是重复一些功能。 一些类型的循环包括: for 循环while 循环for…of 循环for…循环 for循环 to 可以写一个简单的 for 循环如下: for (let i = 1; i <= 10; i++) { console.log(i); // p…

    2025年12月19日
    000
  • React 中最难的主题:状态管理、Hooks 和性能优化

    React 是一个令人难以置信的库,可以帮助我们构建动态且强大的 Web 应用程序。但说实话,其中的某些部分即使是经验最丰富的专业人士也可能会出汗。今天,我们将深入研究 React 中最具挑战性的三个方面:状态管理、Hook 和性能优化。准备好?让我们一起攻克这些话题吧! ? 1. 状态管理:Red…

    2025年12月19日
    000

发表回复

登录后才能评论
关注微信