Título curso Aprende a programar (con Javascript)

Objetos: propiedades y métodos

Objetos

Hemos hablado antes brevemente del concepto de objeto, al ver los distintos tipos de variables y datos. Lo definíamos como una especie de modelo con el que representamos una cosa o un concepto de la vida real.

Propiedades de los objetos

Vimos que podíamos definir variables y asociarlas a ese objeto. A esas variables las denominamos propiedades (también se les suele llamar atributos) y son características propias de ese objeto.

Por ejemplo, en un coche, podían ser la marca, el modelo, potencia del motor, capacidad del maletero, etc. Si lo piensas, seguro que te ocurrirán muchas.

Cuando definimos un objeto en programación, solo elegimos las propiedades que nos interesan para el tipo de proceso o tarea que estamos intentando gestionar o resolver. Por ejemplo, en el contexto de un Taller, puede interesar saber el número de kilómetros que tiene el coche o cuándo ha sido su última reparación o mantenimiento, y por tanto tener definidas propiedades/variables para almacenar esos datos, mientras que esa información no es necesaria o útil si el contexto es otro, como por ejemplo si gestionamos um concesionario de venta de vehículos nuevos o un Rally de coches deportivos.

Métodos de los objetos

Ademas de propiedades, a los objetos podemos definirle una serie de métodos, que son instrucciones que pueden cambiar los valores que hemos asignado a esas propiedades. En el caso del Taller podrían ser métodos como ‘realizar revisión periódica’ o ‘arreglar avería’, que podrían cambiar las fechas de la última revisión y de la última reparación respectivamente.

Javascript es un lenguaje basado en objetos. De hecho la mayoría de elementos son objetos, o pueden ser tratados como tales. Esto incluye a los tipos de datos ‘string’ o ‘number’ o a los ‘arrays’, a los que podemos aplicar métodos o acciones como explicaremos en los siguientes apartados.

Además, Javascript incluye otra serie de ‘objetos built-in(*) como por ejemplo los objetos Date, Math o Regex (veremos en detalle los dos primeros), o aquellos que tienen que ver con el documento HTML, y el navegador donde éste se visualiza (Window, Document, History,…), que no abordaremos en este curso al ser una cuestión específica de la programación web (puedes estudiarlos en nuestro curso de Javascript).

Nota (*): los objetos que no definimos nosotros sino que ya vienen incorporados en Javascript se le denominan ‘objetos built-in

Pues bien, como quizás hayas pensado ya, los métodos no son más que funciones, como las que hemos visto en el apartado anterior. En ellos encapsulamos una serie de instrucciones que podemos luego llamar y aplicar sobre el objeto en el cuál se han definido, de forma parecida a cómo lo hemos hecho con las funciones, eso sí, especificando dicho objeto con la notación: objeto.metodo()

Vemos unos ejemplos de esa notación, y cuya funcionalidad explicaremos en los apartados siguientes:

(1) Math.sin(45);

(2) numero1.toFixed(2);

(3) texto1.search("Digital Learning");

en estas instrucciones, identificamos los siguientes elementos:

  • los objetos: (1) Math, (2) numero1 y (3) texto1
  • los métodos: (1) sin(), (2) toFixed(), (3) search()
  • los argumentos que le pasamos al método: (1) 45, (2) 2, (3) «Digital Learning»

y realizan respectivamente:

  • (1) calcula el seno de 45º
  • (2) limita a dos decimales el valor de un número, haciendo el correspondiente redondeo
  • (3) busca la cadena «Digital Learning» en un texto

Nota: no te preocupes si no entiendes del todo este subapartado, no te es necesario para seguir avanzando. Como decíamos, solo queremos darte una primera referencia, sin entrar a detallar las explicaciones, porque si no, nos extenderíamos mucho e iríamos más allá de nuestros objetivos de este curso.

Aunque el enfoque a objetos es muy útil, en JavaScript (basado en objetos) el tratamiento es un tanto particular respecto a otros lenguajes orientados a objetos como Java, C# o Python. Hay muchos conceptos comunes, pero también hay diferencias importantes, como las ‘clases’ que no existen como tal en JavaScript.

En resumen, si no solo estás interesado en aprender JavaScript sino también los fundamentos de la Programación Orientada a Objetos (POO), vemos más recomendable hacerlo con un lenguaje basado en objetos, como por ejemplo nuestro curso Java para Android y POO.

Creación de objetos

Aunque en este curso no vamos a trabajar con objetos creados por nosotros, creemos que es oportuno que conozcas las formas de crearlos y la interacción básica con ellos, para al menos distinguir esa notación si la ves en un script, por ejemplo al declarar el objeto Date que veremos más adelante.

Hay dos notaciones para crear objetos en Javascript:

Notación literal: vimos esta notación al hablar de los tipos de datos. Utilizaba llaves ({}) para encerrar la declaración de propiedades y métodos del objeto. Vemos un ejemplo:

Comentamos algunos características de esta notación:

  • Vemos que los valores a las propiedades se asignan con ‘ : ‘ (dos puntos), y no ‘ = ‘.
  • Vemos que las propiedades se separan por comas (como en los valores de los arrays) y no con punto y coma.
  • El método que hemos definido en el objeto, lo hemos llamado ‘horasRestantes’, y como ves es básicamente una función, pero asociado a dicho objeto.
  • La palabra clave ‘this‘ reemplaza el nombre del objeto, y se utiliza por razones prácticas en las que no vamos a extendernos aquí. Es decir, podríamos haber escrito ‘asignatura.horasAnuales’.

Notación constructor:  empleamos la expresión new Objeto() . En este caso creamos un objeto vacío al que luego podemos asociar propiedades con sus valores correspondientes, y métodos, a través de las notaciones:   objeto.propiedad =  y   objeto.metodo = .

En el caso de los métodos empleamos lo que se denominan ‘funciones anónimas’, es decir, que no tienen nombre y no se les puede llamar como a las funciones ‘normales’, sino que simplemente se ejecutan cuando el intérprete llega a ese punto del programa, como si fueran una expresión.  

Vemos un ejemplo:

Para manipular el objeto que hemos definido (cambiar el valor de una propiedad y utilizar su método), puedes probar con este ejemplo. Empleamos la notación literal para definirlo, pero es exactamente igual si hubiéramos empleado la notación constructor:

Saber más: este es un ejemplo muy simple, solo para hacernos una idea de la notación. En este caso podríamos también haber creado un template  ‘Asignatura’, es decir una plantilla a partir del cual crearíamos objetos asignatura específicos: ‘asignaturaHistoria’, ‘asignaturaGeografia’, etc… Como hemos dicho, no vamos a desarrollar este tema al exceder el objetivo de estos contenidos.