SlideShare una empresa de Scribd logo
1 de 36
Descargar para leer sin conexión
Creando e implementando Objetos y
métodos
Danae Aguilar Guzmán
MCT, MS, MCTS, MCP
danaeaguilar@gmail.com
Contenido del Módulo
 Objetos nativos
 Objetos personalizados
 Herencia de un objeto
 Manteniendo objetos fuera del espacio de
nombres global
Objetos en JavaScript
 JavaScript es un lenguaje de programación
orientado a objetos basado en prototipos
 En JavaScript todo es un objeto.
 Puedes crear un nuevo objeto de la nada, o
crear un objeto a partir de un clon de un
objeto existente, conocido como un
prototipo.
 Puedes simular la creación de un objeto
usando una función.
Objetos nativos
Objetos String
length
var string1 = new String("Hola");
var string2 = "Como estas?";
var nombre = new String("Pepito");
document.write(nombre.length); //6
Objetos nativos
charAt()
charCodeAt()
var cadena = prompt("Ingrese algun texto", "Hola!");
var ultimoCaracter = cadena.charAt(cadena.length - 1);
document.write("EL ultimo caracter es " + ultimoCaracter);
var cadena = prompt("Ingrese algun texto", "Hola!");
var primerCharCode = cadena.charCodeAt(0);
document.write("El primer char code es: " +
primerCharCode);
Objetos nativos
fromCharCode()
indexOf() y lastIndexOf()
var cadena;
cadena = String.fromCharCode(65, 66, 67);
document.write(cadena); //ABC
var cadena = "Hola pepito, como estas Pepito?";
var posicion = cadena.indexOf("Pepito");
alert(posicion);
Objetos nativos
substr() y substring()
toLowerCase() y toUpperCase()
var cadena = "JavaScript";
var subCadena = cadena.substring(0, 4);
alert(subCadena);
var cadena = "Una Cadena Con MINUSCULAS";
alert(cadena.toLowerCase());
Objetos nativos
substr() y substring()
toLowerCase() y toUpperCase()
var cadena = "JavaScript";
var subCadena = cadena.substring(0, 4);
alert(subCadena);
var cadena = "Una Cadena Con MINUSCULAS";
alert(cadena.toLowerCase());
Objetos nativos
Objetos Math
abs()
var radio = prompt("Ingrese el radio del círculo", "");
var area = (Math.PI) * radio * radio;
document.write("El area es " + area);
var numero = -101;
document.write(Math.abs(numero)); // 101
Objetos nativos
ceil() y floor()
round()
var numero = 101.01;
document.write(Math.ceil(numero) + "<br>"); //102
document.write(parseInt(numero)); //101
var numero = 44.5;
document.write(Math.round(numero) + "<br>"); //45
numero = 44.49;
document.write(Math.round(numero)); //44
Objetos nativos
random()
pow()
var cantidadLanzamientos;
var valorDado;
for (cantidadLanzamientos = 0;
cantidadLanzamientos < 10;
cantidadLanzamientos++) {
valorDado = (Math.floor(Math.random() * 6) + 1);
document.write(valorDado + "<br>");
}
var resultado = Math.pow(5, 3);
document.write(resultado); //125
Objetos nativos
Objeto Number
toFixed()
var numero1 = new Number(123);
var numero2 = new Number('123');
var costo = 9.99;
var masImpuestos = 9.99 * 1.075;
document.write("El total es $" +
masImpuestos + "<br>"); //10.73925
masImpuestos = masImpuestos.toFixed(2);
document.write("Total con 2 decimales "
+ masImpuestos); //10.74
Objetos nativos
Objetos Array
concat()
var nombres = new Array();
nombres[0] = "Pepito";
nombres[1] = "Anita";
nombres[11] = "Luchito";
document.write("El ultimo nombre es " +
nombres[nombres.length - 1]);
var nombres = new Array("Pepito", "Anita", "Luchito");
var edades = new Array(21, 31, 19);
var arreglo = names.concat(ages);
Objetos nativos
slice()
join()
var nombres = new Array("Pepito", "Sara", "Anita",
"Luchito", "Boby");
var arreglo = nombres.slice(1, 3);
var compras = new Array("Crereal","Platano","Leche","Pan");
var listaCompras = compras.join("<br>");
Objetos nativos
sort()
reverse()
var nombres = new Array("Pepito", "Sara", "Anita",
"Luchito", "Boby");
nombres.sort();
document.write("Los nombres en orden" + "<br>");
var indice;
for (indice = 0; indice < nombres.length; indice++) {
document.write(nombres[indice] + "<br>");
}
var compras = new Array("Crereal", "Platano", "Papas",
"Leche", "Pan");
compras.reverse();
Objetos personalizados
El Patrón Object Literal
var automovil = {
anio: 2010,
marca: 'Nissan',
modelo: 'XTerra',
obtenerDatos: function () {
return 'Vehiculo: ' +
this.anio + ' ' +
this.marca + ' ' +
this.modelo;
}
};
Objetos personalizados
El Patrón Object Literal
 La manera mas fácil de crear objetos en
JavaScript
 Las llaves indican el objeto y contienen
propiedades y métodos
 No tienen un prototipo asociado al objeto
 Usado para representar datos, ej: para
enviarlos a otro código.
 No se crea un tipo, solo instancias.
Objetos personalizados
El Patrón Factory
 JavaScript tiene un tipo Object, podemos
usarlo para crear objetos programáticamente.
 Object tiene un prototipo que es clonado
cuando usamos la palabra clave new
Objetos personalizados
El Patrón Factory
El objeto prototipo hereda los métodos:
 constructor
 hasOwnProperty
 isPrototypeOf
 propertyIsEnumerable
 toLocalString
 toString
 valueOf
Objetos personalizados
El Patrón Factory
1. Declarando el factory:
function getVehiculo(anio, marca, modelo) {
var vehiculo = new Object();
vehiculo.anio = anio;
vehiculo.marca = marca;
vehiculo.modelo = modelo;
vehiculo.obtenerDatos = function () {
return 'Vehiculo: ' + this.anio +
' ' + this.marca +
' ' + this.modelo;
};
return vehiculo;
}
Objetos personalizados
El Patrón Factory
2. Invocando el factory:
var automovil1 = getVehiculo(2011,
'Suzuki',
'Vitara');
var automovil2 = getVehiculo(2010,
'Nissan',
'XTerra');
Objetos personalizados
El Patrón Factory
 Aprovecha la naturaleza dinámica de
JavaScript para agregar propiedades y
métodos.
 Podemos crear varias instancias
 Las instancias son de tipo Object
 Las propiedades son públicas
Objetos personalizados
Creando una clase
 En JavaScript no existe la palabra reservada
class
 Se puede simular una clase con una función
que será la función constructor.
 Usamos var para definir las propiedades
privadas
 Usamos new para crear una instancia.
 Cada instancia tiene su propia copia de los
datos y métodos
Objetos personalizados
Creando una clase
1. Definiendo la clase:
function Vehiculo(elAnio, laMarca, elModelo) {
var anio = elAnio;
var marca = laMarca;
var modelo = elModelo;
this.obtenerDatos = function () {
return 'Vehículo: ' + anio + ' ' +
marca + ' ' + modelo;
};
}
Privados
Objetos personalizados
Creando una clase
1. Definiendo la clase:
function Vehiculo(elAnio, laMarca, elModelo) {
var anio = elAnio;
var marca = laMarca;
var modelo = elModelo;
this.obtenerDatos = function () {
return 'Vehiculo: ' + anio + ' ' +
marca + ' ' + modelo;
};
}
Privados
Objetos personalizados
La propiedad prototype
 En JavaScript todo es de tipo Object.
 Object tiene una propiedad prototype.
 El prototype contiene propiedades y métodos
disponibles para todas las instancias del tipo.
 El prototype no tiene acceso a propiedades
privadas.
 Debemos exponer las propiedades para
accederlas desde el prototype
Objetos personalizados
La propiedad prototype
Definimos el método para compartir con todas
las instancias:
function Vehiculo(elAnio, laMarca, elModelo) {
this.anio = elAnio;
this.marca = laMarca;
this.modelo = elModelo;
}
Vehiculo.prototype.obtenerDatos = function() {
return 'Vehículo: ' + this.year + ' ' +
this.make + ' ' + this.model;
};
Públicos
Objetos personalizados
prototype/private compromise
Exponer los datos en solo lectura (Los getters):
function Vehiculo(elAnio, laMarca, elModelo) {
var anio = elAnio;
var marca = laMarca;
var modelo = elModelo;
this.getAnio = function () { return anio; };
this.getMarca = function () { return marca; };
this.getModelo = function () { return modelo; };
}
Objetos personalizados
prototype/private compromise
Invocando a los getters:
Vehiculo.prototype.obtenerDatos = function () {
return 'Vehículo: ' + this.getAnio() +
' ' + this.getMarca() +
' ' + this.getModelo();
}
Herencia de un objeto
Tenemos la clase base:
var Vehiculo = (function () {
function Vehiculo(anio, marca, modelo) {
this.anio = anio;
this.marca = marca;
this.modelo = modelo;
}
Vehiculo.prototype.obtenerDatos = function () {
return this.anio + ' ' + this.marca +
' ' + this.modelo;
};
Vehiculo.prototype.iniciarMotor = function () {
return 'Broom';
};
return Vehiculo;
})();
Herencia de un objeto
Definiendo la clase hija:
var Auto = (function (padre) {
Auto.prototype = new Vehiculo();
Auto.prototype.constructor = Auto;
function Auto(anio, marca, modelo) {
padre.call(this, anio, marca, modelo);
this.CantidadRuedas = 4;
}
Auto.prototype.obtenerDatos = function () {
return 'Tipo de vehiculo: Auto ' +
parent.prototype.getInfo.call(this);
};
return Auto;
})(Vehiculo);
Manteniendo objetos fuera del espacio
de nombres global
 Un problema común es la polución del
espacio de nombres global.
 En JavaScript no tenemos la palabra
reservada namespace.
 Se puede implementar un equivalente a un
namespace.
Manteniendo objetos fuera del espacio
de nombres global
 Ejemplo. Si tenemos:
 Tenemos 5 entradas en el espacio de
nombres global
var cantidadVehiculos = 3;
var vehiculos = new Array();
function Carro() { }
function Camion() { }
var reparacion = {
descripcion: 'cambiado de bujias',
costo: 100
};
Manteniendo objetos fuera del espacio
de nombres global
 El patrón namespace:
 Tenemos solo 1 entrada en el espacio de
nombres global, la propiedad miApp
var miApp = {};
miApp.cantidadVehiculos = 5;
miApp.vehiculos = new Array();
miApp.Carro = function () { }
miApp.Camion = function () { }
miApp.reparacion = {
descripcion: 'cambiado de bujias',
costo: 100
};
Manteniendo objetos fuera del espacio
de nombres global
El patrón namespace:
 Podemos tener varios archivos JavaScript en
la aplicación.
 Para crear el namespace solo una vez
(Singleton):
var miApp = miApp || {};
Manteniendo objetos fuera del espacio
de nombres global
(IIFE) immediately invoked function, al
crear un namespace:
(function () {
this.miApp = this.miApp || {};
var ns = this.miApp;
var cantidadVehiculos = 5;
var vehicles = new Array();
ns.Carro = function () { }
ns.Camion = function () { }
var repair = {
description: 'cambiado de bujias',
cost: 100
};
}());

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Introducción a Swift
Introducción a SwiftIntroducción a Swift
Introducción a Swift
 
Ruby para Java Developers
Ruby para Java DevelopersRuby para Java Developers
Ruby para Java Developers
 
Curso Javascript profesionales
Curso Javascript profesionalesCurso Javascript profesionales
Curso Javascript profesionales
 
ORM Doctrine
ORM DoctrineORM Doctrine
ORM Doctrine
 
Programar java
Programar javaProgramar java
Programar java
 
Programar java
Programar javaProgramar java
Programar java
 
jQuery 1.3 Eghost Julio2009
jQuery 1.3 Eghost Julio2009jQuery 1.3 Eghost Julio2009
jQuery 1.3 Eghost Julio2009
 
Javascript - 2014
Javascript - 2014Javascript - 2014
Javascript - 2014
 
Curso Drupal. Creacion de modulos en Drupal
Curso Drupal. Creacion de modulos en DrupalCurso Drupal. Creacion de modulos en Drupal
Curso Drupal. Creacion de modulos en Drupal
 
U0108985
U0108985U0108985
U0108985
 
Ajax
AjaxAjax
Ajax
 
3 Introducción al lenguaje PHP
3 Introducción al lenguaje PHP3 Introducción al lenguaje PHP
3 Introducción al lenguaje PHP
 
Introducción a la programación y la informática. Tema 4
Introducción a la programación y la informática. Tema 4Introducción a la programación y la informática. Tema 4
Introducción a la programación y la informática. Tema 4
 
Ruby intro
Ruby introRuby intro
Ruby intro
 
Por pagar
Por pagarPor pagar
Por pagar
 
Mule Librerias en Java
Mule Librerias en JavaMule Librerias en Java
Mule Librerias en Java
 
Tema3 p2%20
Tema3 p2%20Tema3 p2%20
Tema3 p2%20
 
Ejercicios en Netbeans
Ejercicios en NetbeansEjercicios en Netbeans
Ejercicios en Netbeans
 
P R A C T I C A2
P R A C T I C A2P R A C T I C A2
P R A C T I C A2
 
C sharp intro1
C sharp intro1C sharp intro1
C sharp intro1
 

Destacado

Panch tantras of agile dev teams - yashasree-tcs
Panch tantras of agile dev teams - yashasree-tcsPanch tantras of agile dev teams - yashasree-tcs
Panch tantras of agile dev teams - yashasree-tcsyashasree
 
Visual Dictionary - sp10cladding
Visual Dictionary - sp10claddingVisual Dictionary - sp10cladding
Visual Dictionary - sp10claddingSp10cladding
 
WPF 09. procesos asíncronos y programación paralela
WPF 09. procesos asíncronos y programación paralelaWPF 09. procesos asíncronos y programación paralela
WPF 09. procesos asíncronos y programación paralelaDanae Aguilar Guzmán
 
NFR in Scrum
NFR in ScrumNFR in Scrum
NFR in Scrumyashasree
 
ASP.NET MVC - implementando globalizacion and localizacion
ASP.NET MVC - implementando globalizacion and localizacionASP.NET MVC - implementando globalizacion and localizacion
ASP.NET MVC - implementando globalizacion and localizacionDanae Aguilar Guzmán
 
Yashasree barve as an architect - ai2012 - 1.0 - share
Yashasree barve   as an architect - ai2012 - 1.0 - shareYashasree barve   as an architect - ai2012 - 1.0 - share
Yashasree barve as an architect - ai2012 - 1.0 - shareyashasree
 
What and What Not, Portfolio Lead Retrospects (In Enterprise Agile context)
What and What Not, Portfolio Lead Retrospects (In Enterprise Agile context)What and What Not, Portfolio Lead Retrospects (In Enterprise Agile context)
What and What Not, Portfolio Lead Retrospects (In Enterprise Agile context)yashasree
 
Crecimiento profesional como desarrollador de software
Crecimiento profesional como desarrollador de softwareCrecimiento profesional como desarrollador de software
Crecimiento profesional como desarrollador de softwareDanae Aguilar Guzmán
 
Rubyizing the devs and ops of an enterprise 1.0
Rubyizing the devs and ops of an enterprise 1.0Rubyizing the devs and ops of an enterprise 1.0
Rubyizing the devs and ops of an enterprise 1.0yashasree
 
Yashasree barve as an architect - at2011
Yashasree barve   as an architect - at2011Yashasree barve   as an architect - at2011
Yashasree barve as an architect - at2011yashasree
 
Yashasree barve power of dev ops - ai 2012 - 1.0-share
Yashasree barve   power of dev ops - ai 2012 - 1.0-shareYashasree barve   power of dev ops - ai 2012 - 1.0-share
Yashasree barve power of dev ops - ai 2012 - 1.0-shareyashasree
 

Destacado (12)

Panch tantras of agile dev teams - yashasree-tcs
Panch tantras of agile dev teams - yashasree-tcsPanch tantras of agile dev teams - yashasree-tcs
Panch tantras of agile dev teams - yashasree-tcs
 
Visual Dictionary - sp10cladding
Visual Dictionary - sp10claddingVisual Dictionary - sp10cladding
Visual Dictionary - sp10cladding
 
WPF 09. procesos asíncronos y programación paralela
WPF 09. procesos asíncronos y programación paralelaWPF 09. procesos asíncronos y programación paralela
WPF 09. procesos asíncronos y programación paralela
 
Conceptos C#
Conceptos C#Conceptos C#
Conceptos C#
 
NFR in Scrum
NFR in ScrumNFR in Scrum
NFR in Scrum
 
ASP.NET MVC - implementando globalizacion and localizacion
ASP.NET MVC - implementando globalizacion and localizacionASP.NET MVC - implementando globalizacion and localizacion
ASP.NET MVC - implementando globalizacion and localizacion
 
Yashasree barve as an architect - ai2012 - 1.0 - share
Yashasree barve   as an architect - ai2012 - 1.0 - shareYashasree barve   as an architect - ai2012 - 1.0 - share
Yashasree barve as an architect - ai2012 - 1.0 - share
 
What and What Not, Portfolio Lead Retrospects (In Enterprise Agile context)
What and What Not, Portfolio Lead Retrospects (In Enterprise Agile context)What and What Not, Portfolio Lead Retrospects (In Enterprise Agile context)
What and What Not, Portfolio Lead Retrospects (In Enterprise Agile context)
 
Crecimiento profesional como desarrollador de software
Crecimiento profesional como desarrollador de softwareCrecimiento profesional como desarrollador de software
Crecimiento profesional como desarrollador de software
 
Rubyizing the devs and ops of an enterprise 1.0
Rubyizing the devs and ops of an enterprise 1.0Rubyizing the devs and ops of an enterprise 1.0
Rubyizing the devs and ops of an enterprise 1.0
 
Yashasree barve as an architect - at2011
Yashasree barve   as an architect - at2011Yashasree barve   as an architect - at2011
Yashasree barve as an architect - at2011
 
Yashasree barve power of dev ops - ai 2012 - 1.0-share
Yashasree barve   power of dev ops - ai 2012 - 1.0-shareYashasree barve   power of dev ops - ai 2012 - 1.0-share
Yashasree barve power of dev ops - ai 2012 - 1.0-share
 

Similar a 05. Creando e implementando objetos y métodos

03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQueryDanae Aguilar Guzmán
 
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casaTypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casaMicael Gallego
 
Intro aplicaciones web con php
Intro aplicaciones web con phpIntro aplicaciones web con php
Intro aplicaciones web con phpFer Nando
 
Javascript Básico
Javascript BásicoJavascript Básico
Javascript Básicocamposer
 
Programacion orientada a objetos en javascript
Programacion orientada a objetos en javascriptProgramacion orientada a objetos en javascript
Programacion orientada a objetos en javascriptRobert Moreira
 
Introducción a prototype javascript
Introducción a prototype javascriptIntroducción a prototype javascript
Introducción a prototype javascriptaitorgr
 
Desarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo QuilónDesarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo Quilónbetabeers
 
Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript
Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript
Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript David Ballén
 
Ejercicio de automatizacion IntelliJ+reporte.docx
Ejercicio de automatizacion IntelliJ+reporte.docxEjercicio de automatizacion IntelliJ+reporte.docx
Ejercicio de automatizacion IntelliJ+reporte.docxssuser2e6b96
 
Fundamento de poo en php
Fundamento de poo en phpFundamento de poo en php
Fundamento de poo en phpRobert Moreira
 
Metodo constructor de una clase JAVA
Metodo constructor de una clase JAVAMetodo constructor de una clase JAVA
Metodo constructor de una clase JAVAMANUEL RAMIREZ
 
La propiedad prototype en la programación orientada a objetos con JavaScript
La propiedad prototype en la programación orientada a objetos con JavaScriptLa propiedad prototype en la programación orientada a objetos con JavaScript
La propiedad prototype en la programación orientada a objetos con JavaScriptFrancisco Javier Arce Anguiano
 

Similar a 05. Creando e implementando objetos y métodos (20)

03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery
 
Javascript OOP
Javascript OOPJavascript OOP
Javascript OOP
 
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casaTypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
 
Intro aplicaciones web con php
Intro aplicaciones web con phpIntro aplicaciones web con php
Intro aplicaciones web con php
 
Javascript Básico
Javascript BásicoJavascript Básico
Javascript Básico
 
P2C2 Introducción a JEE5
P2C2 Introducción a JEE5P2C2 Introducción a JEE5
P2C2 Introducción a JEE5
 
Jquery parte 1
Jquery parte 1Jquery parte 1
Jquery parte 1
 
Prototype-based, object-oriented programming
Prototype-based, object-oriented programmingPrototype-based, object-oriented programming
Prototype-based, object-oriented programming
 
Separata java script
Separata java scriptSeparata java script
Separata java script
 
Programacion orientada a objetos en javascript
Programacion orientada a objetos en javascriptProgramacion orientada a objetos en javascript
Programacion orientada a objetos en javascript
 
Introducción a prototype javascript
Introducción a prototype javascriptIntroducción a prototype javascript
Introducción a prototype javascript
 
Prototype-based programming with PROWL.
Prototype-based programming with PROWL.Prototype-based programming with PROWL.
Prototype-based programming with PROWL.
 
Desarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo QuilónDesarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo Quilón
 
Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript
Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript
Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript
 
Ejercicio de automatizacion IntelliJ+reporte.docx
Ejercicio de automatizacion IntelliJ+reporte.docxEjercicio de automatizacion IntelliJ+reporte.docx
Ejercicio de automatizacion IntelliJ+reporte.docx
 
Fundamento de poo en php
Fundamento de poo en phpFundamento de poo en php
Fundamento de poo en php
 
Metodo constructor de una clase JAVA
Metodo constructor de una clase JAVAMetodo constructor de una clase JAVA
Metodo constructor de una clase JAVA
 
La propiedad prototype en la programación orientada a objetos con JavaScript
La propiedad prototype en la programación orientada a objetos con JavaScriptLa propiedad prototype en la programación orientada a objetos con JavaScript
La propiedad prototype en la programación orientada a objetos con JavaScript
 
Jquery 2
Jquery 2Jquery 2
Jquery 2
 
Javascript objetos
Javascript objetosJavascript objetos
Javascript objetos
 

Más de Danae Aguilar Guzmán

WPF 10. mejorando la funcionalidad y usabilidad de las aplicaciones
WPF 10. mejorando la funcionalidad y usabilidad de las aplicacionesWPF 10. mejorando la funcionalidad y usabilidad de las aplicaciones
WPF 10. mejorando la funcionalidad y usabilidad de las aplicacionesDanae Aguilar Guzmán
 
WPF 08 - manejo y vinculación de datos
WPF 08 - manejo y vinculación de datosWPF 08 - manejo y vinculación de datos
WPF 08 - manejo y vinculación de datosDanae Aguilar Guzmán
 
WPF 07 - gráficos, animación y multimedia
WPF 07 - gráficos, animación y multimediaWPF 07 - gráficos, animación y multimedia
WPF 07 - gráficos, animación y multimediaDanae Aguilar Guzmán
 
WPF 06 - personalizando los controles de interfaz de usuario
WPF 06 -  personalizando los controles de interfaz de usuarioWPF 06 -  personalizando los controles de interfaz de usuario
WPF 06 - personalizando los controles de interfaz de usuarioDanae Aguilar Guzmán
 
WPF 04 - reutilizando recursos y estilos en una aplicación WPF
WPF 04 -  reutilizando recursos y estilos en una aplicación WPF WPF 04 -  reutilizando recursos y estilos en una aplicación WPF
WPF 04 - reutilizando recursos y estilos en una aplicación WPF Danae Aguilar Guzmán
 
WPF 02 - construyendo una interfaz de usuario
WPF 02  - construyendo una interfaz de usuarioWPF 02  - construyendo una interfaz de usuario
WPF 02 - construyendo una interfaz de usuarioDanae Aguilar Guzmán
 
ASP.NET MVC - introduccion al web api
ASP.NET MVC - introduccion al web apiASP.NET MVC - introduccion al web api
ASP.NET MVC - introduccion al web apiDanae Aguilar Guzmán
 
ASP.NET MVC - bundling y minification
ASP.NET MVC - bundling y minificationASP.NET MVC - bundling y minification
ASP.NET MVC - bundling y minificationDanae Aguilar Guzmán
 
ASP.NET MVC - areas, manejo de estado
ASP.NET MVC - areas, manejo de estadoASP.NET MVC - areas, manejo de estado
ASP.NET MVC - areas, manejo de estadoDanae Aguilar Guzmán
 
ASP.NET MVC - layouts y vistas parciales
ASP.NET MVC - layouts y vistas parcialesASP.NET MVC - layouts y vistas parciales
ASP.NET MVC - layouts y vistas parcialesDanae Aguilar Guzmán
 
ASP.NET MVC - Introducción a ASP.NET MVC
ASP.NET MVC - Introducción a ASP.NET MVCASP.NET MVC - Introducción a ASP.NET MVC
ASP.NET MVC - Introducción a ASP.NET MVCDanae Aguilar Guzmán
 
09. Creando interfaces de usuario animadas y adaptables
09. Creando interfaces de usuario animadas y adaptables09. Creando interfaces de usuario animadas y adaptables
09. Creando interfaces de usuario animadas y adaptablesDanae Aguilar Guzmán
 

Más de Danae Aguilar Guzmán (20)

Microsoft HoloLens
Microsoft HoloLensMicrosoft HoloLens
Microsoft HoloLens
 
WPF 10. mejorando la funcionalidad y usabilidad de las aplicaciones
WPF 10. mejorando la funcionalidad y usabilidad de las aplicacionesWPF 10. mejorando la funcionalidad y usabilidad de las aplicaciones
WPF 10. mejorando la funcionalidad y usabilidad de las aplicaciones
 
WPF 08 - manejo y vinculación de datos
WPF 08 - manejo y vinculación de datosWPF 08 - manejo y vinculación de datos
WPF 08 - manejo y vinculación de datos
 
WPF 07 - gráficos, animación y multimedia
WPF 07 - gráficos, animación y multimediaWPF 07 - gráficos, animación y multimedia
WPF 07 - gráficos, animación y multimedia
 
WPF 06 - personalizando los controles de interfaz de usuario
WPF 06 -  personalizando los controles de interfaz de usuarioWPF 06 -  personalizando los controles de interfaz de usuario
WPF 06 - personalizando los controles de interfaz de usuario
 
WPF 05 - triggers y eventos
WPF 05 - triggers y eventosWPF 05 - triggers y eventos
WPF 05 - triggers y eventos
 
WPF 04 - reutilizando recursos y estilos en una aplicación WPF
WPF 04 -  reutilizando recursos y estilos en una aplicación WPF WPF 04 -  reutilizando recursos y estilos en una aplicación WPF
WPF 04 - reutilizando recursos y estilos en una aplicación WPF
 
WPF 03 - controles WPF
WPF 03 - controles WPF WPF 03 - controles WPF
WPF 03 - controles WPF
 
WPF 02 - construyendo una interfaz de usuario
WPF 02  - construyendo una interfaz de usuarioWPF 02  - construyendo una interfaz de usuario
WPF 02 - construyendo una interfaz de usuario
 
WPF 01 - introducción
WPF 01 -  introducciónWPF 01 -  introducción
WPF 01 - introducción
 
ASP.NET MVC - introduccion al web api
ASP.NET MVC - introduccion al web apiASP.NET MVC - introduccion al web api
ASP.NET MVC - introduccion al web api
 
ASP.NET MVC - bundling y minification
ASP.NET MVC - bundling y minificationASP.NET MVC - bundling y minification
ASP.NET MVC - bundling y minification
 
ASP.NET MVC - AJAX
ASP.NET MVC - AJAXASP.NET MVC - AJAX
ASP.NET MVC - AJAX
 
ASP.NET MVC - areas, manejo de estado
ASP.NET MVC - areas, manejo de estadoASP.NET MVC - areas, manejo de estado
ASP.NET MVC - areas, manejo de estado
 
ASP.NET MVC - validacion de datos
ASP.NET MVC - validacion de datosASP.NET MVC - validacion de datos
ASP.NET MVC - validacion de datos
 
ASP.NET MVC - layouts y vistas parciales
ASP.NET MVC - layouts y vistas parcialesASP.NET MVC - layouts y vistas parciales
ASP.NET MVC - layouts y vistas parciales
 
ASP.NET MVC - Introducción a ASP.NET MVC
ASP.NET MVC - Introducción a ASP.NET MVCASP.NET MVC - Introducción a ASP.NET MVC
ASP.NET MVC - Introducción a ASP.NET MVC
 
10. consumiendo datos
10. consumiendo datos10. consumiendo datos
10. consumiendo datos
 
09. Creando interfaces de usuario animadas y adaptables
09. Creando interfaces de usuario animadas y adaptables09. Creando interfaces de usuario animadas y adaptables
09. Creando interfaces de usuario animadas y adaptables
 
08. Propiedades de estilo HTML box
08. Propiedades de estilo HTML box08. Propiedades de estilo HTML box
08. Propiedades de estilo HTML box
 

Último

Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Opentix
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...ITeC Instituto Tecnología Construcción
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionarmando_cardenas
 
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3AlexysCaytanoMelndez1
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTEREMMAFLORESCARMONA
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOSelenaCoronadoHuaman
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfmasogeis
 

Último (7)

Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacion
 
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTER
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdf
 

05. Creando e implementando objetos y métodos

  • 1. Creando e implementando Objetos y métodos Danae Aguilar Guzmán MCT, MS, MCTS, MCP danaeaguilar@gmail.com
  • 2. Contenido del Módulo  Objetos nativos  Objetos personalizados  Herencia de un objeto  Manteniendo objetos fuera del espacio de nombres global
  • 3. Objetos en JavaScript  JavaScript es un lenguaje de programación orientado a objetos basado en prototipos  En JavaScript todo es un objeto.  Puedes crear un nuevo objeto de la nada, o crear un objeto a partir de un clon de un objeto existente, conocido como un prototipo.  Puedes simular la creación de un objeto usando una función.
  • 4. Objetos nativos Objetos String length var string1 = new String("Hola"); var string2 = "Como estas?"; var nombre = new String("Pepito"); document.write(nombre.length); //6
  • 5. Objetos nativos charAt() charCodeAt() var cadena = prompt("Ingrese algun texto", "Hola!"); var ultimoCaracter = cadena.charAt(cadena.length - 1); document.write("EL ultimo caracter es " + ultimoCaracter); var cadena = prompt("Ingrese algun texto", "Hola!"); var primerCharCode = cadena.charCodeAt(0); document.write("El primer char code es: " + primerCharCode);
  • 6. Objetos nativos fromCharCode() indexOf() y lastIndexOf() var cadena; cadena = String.fromCharCode(65, 66, 67); document.write(cadena); //ABC var cadena = "Hola pepito, como estas Pepito?"; var posicion = cadena.indexOf("Pepito"); alert(posicion);
  • 7. Objetos nativos substr() y substring() toLowerCase() y toUpperCase() var cadena = "JavaScript"; var subCadena = cadena.substring(0, 4); alert(subCadena); var cadena = "Una Cadena Con MINUSCULAS"; alert(cadena.toLowerCase());
  • 8. Objetos nativos substr() y substring() toLowerCase() y toUpperCase() var cadena = "JavaScript"; var subCadena = cadena.substring(0, 4); alert(subCadena); var cadena = "Una Cadena Con MINUSCULAS"; alert(cadena.toLowerCase());
  • 9. Objetos nativos Objetos Math abs() var radio = prompt("Ingrese el radio del círculo", ""); var area = (Math.PI) * radio * radio; document.write("El area es " + area); var numero = -101; document.write(Math.abs(numero)); // 101
  • 10. Objetos nativos ceil() y floor() round() var numero = 101.01; document.write(Math.ceil(numero) + "<br>"); //102 document.write(parseInt(numero)); //101 var numero = 44.5; document.write(Math.round(numero) + "<br>"); //45 numero = 44.49; document.write(Math.round(numero)); //44
  • 11. Objetos nativos random() pow() var cantidadLanzamientos; var valorDado; for (cantidadLanzamientos = 0; cantidadLanzamientos < 10; cantidadLanzamientos++) { valorDado = (Math.floor(Math.random() * 6) + 1); document.write(valorDado + "<br>"); } var resultado = Math.pow(5, 3); document.write(resultado); //125
  • 12. Objetos nativos Objeto Number toFixed() var numero1 = new Number(123); var numero2 = new Number('123'); var costo = 9.99; var masImpuestos = 9.99 * 1.075; document.write("El total es $" + masImpuestos + "<br>"); //10.73925 masImpuestos = masImpuestos.toFixed(2); document.write("Total con 2 decimales " + masImpuestos); //10.74
  • 13. Objetos nativos Objetos Array concat() var nombres = new Array(); nombres[0] = "Pepito"; nombres[1] = "Anita"; nombres[11] = "Luchito"; document.write("El ultimo nombre es " + nombres[nombres.length - 1]); var nombres = new Array("Pepito", "Anita", "Luchito"); var edades = new Array(21, 31, 19); var arreglo = names.concat(ages);
  • 14. Objetos nativos slice() join() var nombres = new Array("Pepito", "Sara", "Anita", "Luchito", "Boby"); var arreglo = nombres.slice(1, 3); var compras = new Array("Crereal","Platano","Leche","Pan"); var listaCompras = compras.join("<br>");
  • 15. Objetos nativos sort() reverse() var nombres = new Array("Pepito", "Sara", "Anita", "Luchito", "Boby"); nombres.sort(); document.write("Los nombres en orden" + "<br>"); var indice; for (indice = 0; indice < nombres.length; indice++) { document.write(nombres[indice] + "<br>"); } var compras = new Array("Crereal", "Platano", "Papas", "Leche", "Pan"); compras.reverse();
  • 16. Objetos personalizados El Patrón Object Literal var automovil = { anio: 2010, marca: 'Nissan', modelo: 'XTerra', obtenerDatos: function () { return 'Vehiculo: ' + this.anio + ' ' + this.marca + ' ' + this.modelo; } };
  • 17. Objetos personalizados El Patrón Object Literal  La manera mas fácil de crear objetos en JavaScript  Las llaves indican el objeto y contienen propiedades y métodos  No tienen un prototipo asociado al objeto  Usado para representar datos, ej: para enviarlos a otro código.  No se crea un tipo, solo instancias.
  • 18. Objetos personalizados El Patrón Factory  JavaScript tiene un tipo Object, podemos usarlo para crear objetos programáticamente.  Object tiene un prototipo que es clonado cuando usamos la palabra clave new
  • 19. Objetos personalizados El Patrón Factory El objeto prototipo hereda los métodos:  constructor  hasOwnProperty  isPrototypeOf  propertyIsEnumerable  toLocalString  toString  valueOf
  • 20. Objetos personalizados El Patrón Factory 1. Declarando el factory: function getVehiculo(anio, marca, modelo) { var vehiculo = new Object(); vehiculo.anio = anio; vehiculo.marca = marca; vehiculo.modelo = modelo; vehiculo.obtenerDatos = function () { return 'Vehiculo: ' + this.anio + ' ' + this.marca + ' ' + this.modelo; }; return vehiculo; }
  • 21. Objetos personalizados El Patrón Factory 2. Invocando el factory: var automovil1 = getVehiculo(2011, 'Suzuki', 'Vitara'); var automovil2 = getVehiculo(2010, 'Nissan', 'XTerra');
  • 22. Objetos personalizados El Patrón Factory  Aprovecha la naturaleza dinámica de JavaScript para agregar propiedades y métodos.  Podemos crear varias instancias  Las instancias son de tipo Object  Las propiedades son públicas
  • 23. Objetos personalizados Creando una clase  En JavaScript no existe la palabra reservada class  Se puede simular una clase con una función que será la función constructor.  Usamos var para definir las propiedades privadas  Usamos new para crear una instancia.  Cada instancia tiene su propia copia de los datos y métodos
  • 24. Objetos personalizados Creando una clase 1. Definiendo la clase: function Vehiculo(elAnio, laMarca, elModelo) { var anio = elAnio; var marca = laMarca; var modelo = elModelo; this.obtenerDatos = function () { return 'Vehículo: ' + anio + ' ' + marca + ' ' + modelo; }; } Privados
  • 25. Objetos personalizados Creando una clase 1. Definiendo la clase: function Vehiculo(elAnio, laMarca, elModelo) { var anio = elAnio; var marca = laMarca; var modelo = elModelo; this.obtenerDatos = function () { return 'Vehiculo: ' + anio + ' ' + marca + ' ' + modelo; }; } Privados
  • 26. Objetos personalizados La propiedad prototype  En JavaScript todo es de tipo Object.  Object tiene una propiedad prototype.  El prototype contiene propiedades y métodos disponibles para todas las instancias del tipo.  El prototype no tiene acceso a propiedades privadas.  Debemos exponer las propiedades para accederlas desde el prototype
  • 27. Objetos personalizados La propiedad prototype Definimos el método para compartir con todas las instancias: function Vehiculo(elAnio, laMarca, elModelo) { this.anio = elAnio; this.marca = laMarca; this.modelo = elModelo; } Vehiculo.prototype.obtenerDatos = function() { return 'Vehículo: ' + this.year + ' ' + this.make + ' ' + this.model; }; Públicos
  • 28. Objetos personalizados prototype/private compromise Exponer los datos en solo lectura (Los getters): function Vehiculo(elAnio, laMarca, elModelo) { var anio = elAnio; var marca = laMarca; var modelo = elModelo; this.getAnio = function () { return anio; }; this.getMarca = function () { return marca; }; this.getModelo = function () { return modelo; }; }
  • 29. Objetos personalizados prototype/private compromise Invocando a los getters: Vehiculo.prototype.obtenerDatos = function () { return 'Vehículo: ' + this.getAnio() + ' ' + this.getMarca() + ' ' + this.getModelo(); }
  • 30. Herencia de un objeto Tenemos la clase base: var Vehiculo = (function () { function Vehiculo(anio, marca, modelo) { this.anio = anio; this.marca = marca; this.modelo = modelo; } Vehiculo.prototype.obtenerDatos = function () { return this.anio + ' ' + this.marca + ' ' + this.modelo; }; Vehiculo.prototype.iniciarMotor = function () { return 'Broom'; }; return Vehiculo; })();
  • 31. Herencia de un objeto Definiendo la clase hija: var Auto = (function (padre) { Auto.prototype = new Vehiculo(); Auto.prototype.constructor = Auto; function Auto(anio, marca, modelo) { padre.call(this, anio, marca, modelo); this.CantidadRuedas = 4; } Auto.prototype.obtenerDatos = function () { return 'Tipo de vehiculo: Auto ' + parent.prototype.getInfo.call(this); }; return Auto; })(Vehiculo);
  • 32. Manteniendo objetos fuera del espacio de nombres global  Un problema común es la polución del espacio de nombres global.  En JavaScript no tenemos la palabra reservada namespace.  Se puede implementar un equivalente a un namespace.
  • 33. Manteniendo objetos fuera del espacio de nombres global  Ejemplo. Si tenemos:  Tenemos 5 entradas en el espacio de nombres global var cantidadVehiculos = 3; var vehiculos = new Array(); function Carro() { } function Camion() { } var reparacion = { descripcion: 'cambiado de bujias', costo: 100 };
  • 34. Manteniendo objetos fuera del espacio de nombres global  El patrón namespace:  Tenemos solo 1 entrada en el espacio de nombres global, la propiedad miApp var miApp = {}; miApp.cantidadVehiculos = 5; miApp.vehiculos = new Array(); miApp.Carro = function () { } miApp.Camion = function () { } miApp.reparacion = { descripcion: 'cambiado de bujias', costo: 100 };
  • 35. Manteniendo objetos fuera del espacio de nombres global El patrón namespace:  Podemos tener varios archivos JavaScript en la aplicación.  Para crear el namespace solo una vez (Singleton): var miApp = miApp || {};
  • 36. Manteniendo objetos fuera del espacio de nombres global (IIFE) immediately invoked function, al crear un namespace: (function () { this.miApp = this.miApp || {}; var ns = this.miApp; var cantidadVehiculos = 5; var vehicles = new Array(); ns.Carro = function () { } ns.Camion = function () { } var repair = { description: 'cambiado de bujias', cost: 100 }; }());