Una clase elemental de introducción a la programación orientada a objetos en la que se aclaran conceptos como objeto, clase, método, propiedad, estado o mensaje, conociendo la sintaxis de OOP en Javascript.
En esta clase se ofreció una introducción los objetos en el contexto de la programación y la Programación Orientada a Objetos (siglas POO o en inglés OOP) en general. La impartió Miguel Angel Alvarez, fundador de DesarrolloWeb.com y EscuelaIT.
La programación orientada a objetos es un tema ya algo avanzado y quizás en el Curso de Programación básico que estamos dando es un poco ambicioso querer tratarla con detalle. Sin embargo, hoy la mayoría de los lenguajes son orientados a objetos y en casi todos tenemos que trabajar con objetos para realizar nuestros objetivos. Ese es el motivo por el que hemos incorporado esta clase.
El objetivo, por tanto, es explicar los conceptos fundamentales relacionados con los objetos, de modo que nos suenen y podamos entender las bases de este modelo de programación, presente en Javascript, pero también en muchos otros lenguajes populares.
Esta es una clase que requiere un esfuerzo especial, para abrir la mente y asimilar conceptos un poco más abstractos. Por eso os pido un poco de paciencia y aunque al principio puedan parecer conceptos complicados observareis que poco a poco se va entendiendo mejor de qué se trata esto de los objetos.
A continuación tienes un resumen en texto del contenido de esta clase y al final encontrarás embebido el vídeo completo de esta clase, donde se amplia esta información, junto con las diapositivas.
¿Qué es un objeto?
Luis Fernández lo definió al hablarnos sobre tipos de datos : Agrupaciones heterogéneas de datos simples, con sus operaciones.
Quizás de momento es un poco difícil de asimilar el mundo de los objetos por medio de esa definición, pero a lo largo de la clase se explicará más detalladamente y podrás entender la frase.
¿Qué es la Programación Orientada a Objetos?
En esta clase comenzamos aclarando lo que es la Programación Orientada a Objetos. El objetivo es más ver lo que son los objetos en si, pero es interesante saber de dónde salen.
La Programación orientada a objetos es un paradigma de la programación en el que, como en la vida real, un universo de objetos colaboran para llevar a cabo las acciones.
Ej: ser humano. Cualquiera de nosotros podría ser descompuesto en una serie de objetos, que forman sistemas y que colaboran entre si para llevar a cabo una vida humana. En la OOP se intenta llevar este mismo esquema al desarrollo de software, que se repite tanto en la naturaleza como en las estructuras o sistemas creados por nosotros.
De manera formal, un Objeto en el marco de la POO / OOP es un ejemplar concreto, una unidad de algo cuyas características han sido definidas en una clase.
Como veis, ninguna de estas definiciones somos capaces de asimilarlas todavía al 100% y, ni mucho menos nos hacen entender qué son esto de los objetos. Así que tendremos que remontarnos un poco más atrás para poder dar una definición que seamos capaces de entender.
Al principio de los ordenadores, todo eran ceros y unos
Hoy también, pero hemos pasado de largo esa etapa y para ti como programador saber que dentro son todo ceros y unos no debe pasar de ser una mera curiosidad. Pero imagina en una época en la que los programadores tuvieran que expresar los algoritmos en ceros y unos...
Rápidamente llegó el lenguaje Ensamblador:
Afortunadamente para los programadores de esa época pasó rápido y la mayoría nunca tuvo que enfrentarse a la construcción de un programa solamente con ceros y unos. En vez de eso se utilizan lenguajes como el ensamblador. Ese lenguaje nos provee unas instrucciones de muy bajo nivel con las que realizar operaciones muy muy básicas a nivel de hardware.
Lenguajes de alto nivel y Javascript:
Antes de la llegada de Javascript hay varios pasos intermedios, pero observáis que con Javascript es más sencillo de programar que con ceros y unos o con el lenguaje ensamblador. Esto es porque los lenguajes cada día se parecen más a la forma de expresarnos de las personas. Este tipo de lenguajes menos cercanos a la máquina y más a la expresión de los humanos se les llama lenguajes de alto nivel.
¿Por qué creéis que los lenguajes evolucionan?
Para hacerle más sencillo al programador resolver las necesidades, expresando algoritmos en un idioma más próximo al lenguaje hablado o escrito, que ya conocemos perfectamente.
Lenguajes Orientados a Objetos
En la evolución de los lenguajes de programación, por diversos motivos que se tardaría demasiado en explicar, los lenguajes orientados a objetos mejoran la manera de expresar los algoritmos. Estos lenguajes son capaces de mayores cotas de abstracción, modularidad, jerarquización, que son características deseables de cualquier programa. En resumen, con lo que te tienes que quedar ahora, es que por medio de POO los programadores pueden hacer programas más complejos de una manera más fácil. Y no solo eso, también nos permite un mantenimiento más sencillo, lo que redunda siempre en costes menores en el desarrollo de software, programas mejor hechos y capaces de realizar cosas más complejas.
Una de las muchas cosas que evolucionaron en los lenguajes tiene que ver con los tipos de datos.
Tipos de datos en la evolución de los lenguajes
Como recordarás, los tipos de datos en Javascript son:
- Numérico
- Cadena
- Lógico (boleano)
Con estos tipos de datos, que son los principales en la mayoría de lenguajes, se llaman primitivos. Sobre ellos se construye cualquier cosa, se hace un excitante juego de carreras de coches, "se lleva un cohete a la luna"...
Pero qué pasa con los tipos de datos más complejos? Por ejemplo, piensa en una coordenada en el eje 2D. La coordenada se define por dos valores (x,y).
Si quieres que vayan juntas puedes usar una estructura de un array, una variable con múltiples compartimentos para guardar cosas. Como las carpetas con compartimentos donde guardas por separado los apuntes de cada asignatura. Veremos soluciones como éstas de los arrays en la clase dedicada a las estructuras de datos.
Una coordenada está compuesta por dos números (elementos de tipo de datos numérico), pero en la práctica, en muchas ocasiones queremos juntar cosas diferentes.
Agrupaciones heterogéneas
Piensa en elementos como estos, que tienen que ser manejados en multitud de programas:
-
Factura:
- numérico para el número de la factura.
- cadena para el nombre del cliente
- boleano para decir si está pagada o no…
-
Usuario:
- numérico para el id_usuario
- cadena para su nombre
- boleano para decir si tiene su email verificado
Observarás que en estos, y muchos otros, elementos de los programas necesitas mezclar cosas distintas. Podríamos usar un array, pero enseguida veréis que se nos queda corto y lo que es peor, en muchos lenguajes no se pueden meter cosas de tipos distintos en un mismo array. Osea, si haces un array en C, todos los elementos de ese array deben tener el mismo tipo.
No solo hay datos, también hay operaciones
Ahora, los lenguajes no solo permiten trabajar con datos. Es más, los programas toman sentido cuando permiten realizar operaciones con esos datos. Así pues, observarás que por otro lado tenemos las funciones.
Volvemos a la coordenada. Dentro de un programa puedes querer hacer cosas con la coordenada:
- Restarle o sumarle otra coordenada
- Trasladarla en el eje x o en el eje y
- Con dos coordenadas podrás querer saber la distancia que las separan
Todas esas funciones, con lo que sabéis ahora, se tienen que definir por separado. Es decir, en los lenguajes tenemos por una parte los datos, en variables o estructuras, y por otra tenemos las funciones. Quizás hoy todavía no sois capaces de ver la problemática de ello o la manera de mejorar esa situación, pero muchas personas pensantes han llegado a soluciones. Para que lo puedas ver, quizás sea bueno realizar un análisis.
Plantéate que quieres saber la distancia de dos puntos (este algoritmo se explicó en la clase de primeros algoritmos en Javascript).
function distancia_dos_puntos(ax, ay, bx, by){
//Calculo componente horizontal
//Calculo componente vertical
//Hago el cuadrado de las componentes
//Las sumo
//Aplico la raíz cuadrada
//Devuelvo el resultado
}
¿Qué te parecería si a una coordenada (que en principio dijimos que eran dos datos con dos puntos, en el eje de las x y de las y) además pudieras pedirle que realizara operaciones. En ese caso podrías resolver esa operación de solicitar la distancia simplemente pidiéndole a la coordenada que te la indique.
"Cooordenada, por favor, dame la distancia con otra_coordenada"
Cuando tenemos estructuras de datos heterogéneas como una factura, o un usuario nos resulta extremadamente útil que dentro de ellas también se incluyan una serie de funcionalidades asociadas, porque simplifica mucho el trabajo con ellas.
factura aparte de guardarme simplemente esos datos, también me resulta cómodo que responda a las cosas que yo necesito hacer sobre una factura:
- registrar pago
- calcular precio sin iva
- calcular precio con iva
- Agregar un nuevo producto a la factura
- imprimir
- Abonar factura en caso de devolución
A un usuario me resultaría muy útil que pudiera realizarme operaciones como:
- Verificar si es válido
- abrir o cerrar sesión
- dar de baja
Todo ello nos facilita la programación, simplifica el código y permite una mayor reutilización y modularidad. Resumo algunos detalles.
Defino las facturas una vez y luego puedo crear tantas como desee, todas tendrán los datos de cada factura de mi programa y responderán a operaciones habituales que yo necesite.
En mi programa de gestión, que trabaja con facturas, simplemente les pido a las facturas que hagan cosas, por favor factura, imprímete, abónate, dime tu precio sin iva...
Soy capaz de reutilizar el código de mis facturas para cualquier programa de gestión que deba trabajar con facturas.
Volvamos a las definiciones de objetos
Con lo que sabéis ya, ahora somos capaces de tomar de nuevo esas frases que nos servían para definir un objeto:
Agrupaciones heterogéneas de datos simples, con sus operaciones.
Es un ejemplar de un tipo de elemento, constituido por una serie de datos que lo definen, junto con una serie de operaciones que podrías hacer con este tipo de elemento.
Terminología cuando trabajamos con objetos
Hasta lo que hemos visto en este punto del resumen de la clase hemos cubierto más o menos los primeros 15 minutos de clase. En realidad hay mucha más información, ya que hasta ahora solo se han explicado un poco los motivos por los que existe la programación orientada a objetos.
En la presentación se abordó la programación orientada a objetos desde un punto de vista más académico, definiendo cada uno de los integrantes en este paradigma.
- Clase
- Objeto
- Propiedad
- Método
En el siguiente vídeo veremos cómo aplicar este conocimiento ya en el lenguaje Javascript, viendo la sintaxis y algunos ejemplos interesantes que nos ilustren mejor todos estos mecanismos.
A continuación tienes el vídeo de esta parte de la clase de objetos.
Miguel Angel Alvarez
Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...