Mostrando entradas con la etiqueta orientada. Mostrar todas las entradas
Mostrando entradas con la etiqueta orientada. Mostrar todas las entradas

martes, 23 de julio de 2013

Entendiendo Javascript (III)


Objetos por aquí, objetos por allá, muy bonito, muy bonito, pero de que sirve esto sin la Herencia?

Herencia
Retomando, JavaScript nos provee ciertas herramientas para poder usar programación orientada a objetos, entre estas los prototipos, de esta manera podemos hacer gala de nuestras habilidades con este paradigma, pero aún hace falta una de las mas importantes herramientas, la herencia.
La herencia en JavaScript se hace al igual que las clases mediante el prototipo, pero hay dos maneras de implementarla:

Herencia Mediante Cadena de Prototipos:
Este tipo de herencia se hace mediante el uso del prototipo de los objetos, de esta manera:

// Ejemplo de Herencia por prototipos

// clase padre
function Mamifero(medio, num_extremidades, sonido){
    this.medio = medio; 
    this.extremidades = num_extremidades;
    this.saludo = function(){console.log(sonido)};
}

// clase hija
function Perro(raza){
    this.raza = raza;
}
// especificamos cual es la clase padre
Perro.prototype = new Mamifero("terrestre", 4, "Guauu, Guauu...");
fluffy = new Perro("Doberman");
fluffy.saludo()
// Fin del ejemplo

Lo que acabamos de ver se llama cadena de prototipos, y esta se basa en que una clase hija lo que hace es reemplazar su prototipo por una instancia de la clase padre, por esto se hace la asignación de una instancia de la clase padre al prototipo como vemos en la linea 15.

Herencia mediante llamado al Constructor del Padre:
Este tipo de herencia hace uso del constructor de la clase padre de manera directa, se hace así:
// Ejemplo de Herencia por prototipos

// clase padre
function Mamifero(medio, num_extremidades, sonido){
    this.medio = medio; 
    this.extremidades = num_extremidades;
    this.saludo = function(){console.log(sonido)};
}

// clase hija
function Gato(raza){
    Mamifero.call(this,"terrestre", 4, "Miauu, Miauu...");
    this.raza = raza;
}
// insatancia de la clase
jack = new Gato("Angora")
jack.saludo()
// Fin del ejemplo

Lo que acabamos de ver fue otra manera de usar herencia en JavaScript, esta es más interesante por que encapsula todo dentro del mismo bloque de código. Lo que se está haciendo es que se llama el constructor de la clase padre pero se especifica que los atributos y métodos de la clase padre deben ser establecidos en la clase actual, lo anterior se lleva a cabo mediante el método call, usado en la linea 12, el cual recibe como primer parámetro la referencia al objeto en construcción.

lunes, 15 de julio de 2013

Entendiendo Javascript (II)


Ya en el articulo anterior entendimos un poco mejor que es JavaScript, ahora ya es necesario aclarar muchas de las cosas maravillosas que podemos hacer con este lenguaje.

Prototipos
Debemos recordar que en JavaScript es un lenguaje basado en prototipos, es decir, el no crea instancias de objetos, en vez de esto clona un objeto que usamos como nos sea conveniente, pero ¿Como como crear una clase con JavaScript?. Para esto podríamos tener en cuenta la siguiente tabla:

Programación Orientada a Objetos Programación mediante Prototipos
Objeto Prototipo
Atributo Variable
Metodo Función

Aun así no queda muy claro donde y como hacer un prototipo, para esto debemos tener en cuenta que todo objeto creado en JavaScript por defecto tiene un atributo llamado prototype, para poder entender como se usa veamos el siguiente ejemplo:

/* Ejemplo de prototipo */
function Automovil(nombre, modelo){
    this.nombre = nombre;   // este es un atributo
    this.modelo = modelo;   // este es otro atributo
    // la palabra reservada this hace que la variable
    // pertenezca al contexto de la función que
    // representa la clase, si no se usa la variable es local
    // y desaparece al terminar la ejecución de la función.
}
Automovil.prototype.encender = function(){ // uso de prototype
    console.log("run, run..."); // escribimos un mensaje en consola
}

// ejemplo de creacion de un objeto
auto = new Automovil("BMW","X6"); // la palabra new clona el objeto
auto.encender(); // llamado del metodo encender
/* Fin del Ejemplo */

domingo, 14 de julio de 2013

Entendiendo Javascript (I)




En este momento uno de los más importantes lenguajes de programación del mundo es JavaScript, no porque sea el más sencillo, más fácil de entender o de usar, por el contrario, es un tanto complejo y poco legible, en este artículo vamos a tratar de entender un poco mejor este lenguaje.


¿Que es JavaScript?

JavaScript es un lenguaje interpretado, que se define como orientado a objetos, basado en prototipos, imperativo, débilmente tipado y tipado dinámico, y ¿a que se refiere todo eso?.
  • Interpretado: NO es necesario compilar el código para poder ejecutarlo.
  • Orientado a Objetos: Un lenguaje orientado a objetos permite diseñar un sistema partiendo de los objetos que están inmersos en este y su forma de interactuar. En teoría deberían declararse clases con métodos y atributos pero en JavaScript a diferencia de otros lenguajes no se usan palabras clave como class, de ahí su siguiente característica.
  • Basado en Prototipos: Esta es una característica de algunos lenguajes orientados a objetos, los cuales en vez de crear objetos mediante la instanciación de una clase los crean mediante la clonación de objetos de los mismos y posterior extensión mediante cosas que agrega el programador.
  • Imperativo: Un lenguaje imperativo es aquel en que el programador le indica de manera explícita a la máquina como debe hacer una tarea.
  • Débilmente Tipado: cuando el intérprete empieza a ejecutar las órdenes de nuestro programa este no es "consciente" por así decirlo en todo momento de cual es el tipo del dato que está contenido en una variable, en los lenguajes fuertemente tipados si.
  • Tipado Dinámico: Esto hace referencia a que cuando el intérprete empieza a ejecutar el programa este va alterando según las necesidades del programa el tipo de dato de una variable, es decir, cambia la cantidad de memoria que necesita la variable.