面向对象编程 - 现实的抽象
您好,在这篇看似教程的文章中,我们将讨论一个特别让我头疼的话题。然而,这种困难促使我不断学习、研究、研究,将日常生活的抽象化为自己的抽象,从而将代码变成有形事物的表示(相信我,这有时可能是一项艰巨的任务)。我对这个主题非常热情,现在我在这篇文章中分享了理解它的重要数据,所以让我们进入问题的核心。
我将使用 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 <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 是一种思维方式,可以让您更有效地建模和理解世界......并将其放入代码中。
因此,下次当您看到汽车、银行帐户甚至您的宠物时,请考虑如何在代码中将它们表示为对象。面向对象编程不仅是一个强大的工具,而且还是一种让程序变得栩栩如生的方法!
我希望您喜欢这篇文章,并且可以在您的项目中利用它。请留下您的评论,让我知道您的想法以及您是否有任何其他现实生活中的抽象概念。 ;)