PHP前端开发

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

百变鹏仔 3天前 #JavaScript
文章标签 抽象

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

我将使用 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 &gt; 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 &gt; 0 &amp;&amp; cantidad <p>在这个例子中,我们封装了账户余额,使用 get 方法来访问它。这可以保护余额不被班级外部直接修改,从而维护我们银行账户的完整性。</p><h3>      多态性:多功能性的魔力</h3><p>多态性允许不同的类共享相同的方法名称,但每个类都有特定的行为。为了说明这一点,让我们想象一个动物园,里面有会发出声音的动物。<br></p><pre class="brush:php;toolbar:false">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 是一种思维方式,可以让您更有效地建模和理解世界......并将其放入代码中。

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

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