您好,在这篇看似教程的文章中,我们将讨论一个特别让我头疼的话题。然而,这种困难促使我不断学习、研究、研究,将日常生活的抽象化为自己的抽象,从而将代码变成有形事物的表示(相信我,这有时可能是一项艰巨的任务)。我对这个主题非常热情,现在我在这篇文章中分享了理解它的重要数据,所以让我们进入问题的核心。
我将使用 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 auto
const miauto = new auto('sedán', 'rojo');
// utilizar métodos del objeto auto
miauto.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 camioneta
const micamioneta = new camioneta('explorer', 'negra', '4x4');
// utilizar métodos del objeto camioneta
micamioneta.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 animales
const miAnimal = new Animal();
const miPerro = new Perro();
const miGato = new Gato();
// Utilizar el método hacerSonido de cada objeto
miAnimal.hacerSonido();
miPerro.hacerSonido();
miGato.hacerSonido();
在此示例中,dog 和 cat 类继承自 animal 类,但每个类都用自己独特的实现重写了 makesound 方法。这使得不同类型的动物可以不同地使用相同的方法。
结论:oop...付诸行动
我真的很感谢你能走到这一步!我们探索对象、继承、封装和多态性等关键概念,并将它们应用到现实生活中。请记住,oop 是一种思维方式,可以让您更有效地建模和理解世界......并将其放入代码中。
因此,下次当您看到汽车、银行帐户甚至您的宠物时,请考虑如何在代码中将它们表示为对象。面向对象编程不仅是一个强大的工具,而且还是一种让程序变得栩栩如生的方法!
我希望您喜欢这篇文章,并且可以在您的项目中利用它。请留下您的评论,让我知道您的想法以及您是否有任何其他现实生活中的抽象概念。 ;)