Si aún no tienes conocimientos de POO (Programación Orientada a Objetos), es probable que el concepto de clase pueda resultar extraño. Sin embargo, es un elemento de la programación sencillo de entender.
Quiero que te quedes con este simple concepto:
Una clase es un tipo de dato que puedes usar como una plantilla, el cual puede poseer atributos y métodos propios.
Para entender mejor el concepto de clase, vamos a crear una clase llamada ‘persona’, la cual tendrá un nombre, un apellido y edad.
classPersona{
constructor(nombre, edad, ciudad) {
this.nombre = nombre;
this.edad = edad;
this.ciudad = ciudad;
}
}
No te asustes, más adelante te explico lo que hace el temido constructor.
Ahora bien, para crear un nuevo objeto a partir de la clase que acabamos de crear debemos usar un elemento de la POO que se llama ‘constructor’.
El constructor simplemente lo que hace es crear una nueva instancia de una clase. Mira como lo hacemos:
let primeraPersona = new Persona("Cris",20,"Latacunga");
Ahora, tenemos la capacidad de acceder a los datos de primeraPersona de la siguiente manera:
primeraPersona.nombre; //"Cris"
primeraPersona.edad; //20
primeraPersona.ciudad; //"Latacunga"
La ventaja de las clases es que nos permiten establecer funciones o métodos exclusivamente para dicha clase. Ejemplo:
A la clase Persona, a parte de su respectivo controlador, le vamos a agregar una función para impresión:
classPersona{
constructor(nombre, edad, ciudad) {
this.nombre = nombre;
this.edad = edad;
this.ciudad = ciudad;
}
//Nuevo método para impresión
imprimirPersona(){
console.log(`Mi nombre es ${this.nombre}, tengo ${this.edad} y vivo en la ciudad de ${this.ciudad}`);
}
}
Acceder a dicha función es muy sencillo, simplemente tenemos que mencionar a nuestro objeto y mandar a llamar a la función, mira:
primeraPersona.imprimirPersona();
//Output: Mi nombre es Cris, tengo 20y vivo enla ciudad de Latacunga
Ahora teniendo claro lo que es una clase y como podemos hacer uso de la misma, vamos a ver lo que es un objeto literal 😃
Javascript por defecto, nos permite crear objetos aunque no tengamos una clase de la cual partir. Esto se hace de la siguiente manera:
let personaLiteral = {
nombre: "Juan",
edad: 20,
ciudad: "Ambato"
};
Acabamos de hacer algo muy similar a lo que realizamos con una clase ‘Persona’ hace un momento. Incluso pareciera ser más sencillo y simple de entender.
La manera de acceder a sus datos es la misma incluso, simplemente ubicar un punto luego del objeto con el nombre de la propiedad que deseamos. (Ej: personaLiteral.nombre).
De igual manera, podemos definir funciones dentro de un objeto literal de la siguiente manera:
let personaLiteral = {
nombre: "Juan",
edad: 30,
ciudad: "Ambato",
imprimirPersona: function() {
console.log(`Mi nombre es ${this.nombre}, tengo ${this.edad} y vivo en la ciudad de ${this.ciudad}`);
}
};
Y para acceder a la función, solo basta con llamar al nombre de su propiedad:
persona.imprimirPersona();
//Output: Mi nombre es Juan, tengo 30y vivo enla ciudad de Ambato
Espero que estés entendiendo todo hasta ahora n.n. Porque ahora es momento de entender cuando conviene usar uno u otro tipo de objeto.
Quizá en este momento te encuentres un poco confundido respecto al uso de objetos. Pero mira, para ponerlo simple, debes usar una Clase definida cuando requieras realizar más de un objeto con la misma o similar forma. Ejemplo:
let personaLiteral1 = {
nombre: "Juan",
edad: 10,
ciudad: "Ambato",
imprimirPersona: function() {
...
}
let personaLiteral2 = {
nombre: "Juana",
edad: 28,
ciudad: "Quito",
...
}
let personaLiteral3 = {
nombre: "Nombre shido",
edad: 27,
ciudad: "Loja",
...
}
... Y un laaaargo etcétera.
};
Pero si en primera lugar realizas una clase con atributos y métodos que puedes reutilizar, simplemente tendrÃas que hacer algo como lo siguiente:
let personaDeClase1 = new Persona("Juan",10,"Ambato");
let personaDeClase2 = new Persona("Juana",28,"Quito");
let personaDeClase3 = new Persona("Nombre shido",27,"Loja");
...
¿Lo notas? Es mucho más eficiente y fácil de leer usando una Clase.
Además ¿Qué pasarÃa si tuvieras que establecer atributos privados u ocultos? ¿O si la cantidad de métodos es muy numerosa?
En este caso, donde se requieren ‘multiples instancias’ de un tipo de dato con estructura ‘similar’, se recomienda usar una Clase, de la cual puedas partir.
~
Pero evidentemente, no en todos los casos es eficiente usar una clase independiente y exclusiva para crear un objeto.
En las ocasiones donde tengas un número muy limitado de instancias para un objeto y que además no se tenga una estructura necesariamente similar, puedes realizar el uso de un Objeto Literal. Ejemplo:
let pato= {
nombre: "Duck",
accion: "Cuack",
estadoCivil: "Soltero",
...
}
Aclaración: esto es solo un ejemplo, evidentemente podrÃas crear una clase exclusiva si asà lo deseas.
MÃralo, es tan tierno 🦆.
.
En resumen:
Ahora bien ¿Qué pasarÃa si tengo objetos que tienen ciertas caracterÃsticas en común, pero no son similares en su totalidad? 👀
La respuesta a esta pregunta la encontrarás cuando veas más conceptos relacionados con la Programación Orientada a Objetos en tu futuro camino como programador, cosas como la encapsulación, herencia, polimorfismo, etc.
.
Gracias por leer, espero que te haya gustado n.n 💚
Me encantó, muchs gracias por compartir.