SlideShare une entreprise Scribd logo
1  sur  24
Télécharger pour lire hors ligne
Javascript
Orientado a
Objetos
Estudiante de Analista en Tecnologías de la Información.
Trabajé TCS Uy, TCS Arg, GuruYu, moove-it y ahora en InfUy.
Desarrollo web apps en ruby, rails, javascript, java, felx (sí todavía existe) y sap




                                                                          @iamcherta
                                                                           cherta.info
Por qué orientado a objetos
Cómo llegamos hasta acá


● El browser como plataforma por
  encima del SO
● Javascript es el único lenguaje   Aplicaciones
  del browser
                                        más
● La capacidad de los clientes es
  mayor                              complejas
● Nuestras necesidades no son
  las mismas que hace 10 años.
Que desafíos enfrentamos

    Nuevas
                             Más código
funcionalidades




Más puntos de
                           Menor visibilidad
    fallos




Menor calidad
Qué es la programación orientada a
objetos
● Una forma de entender y resolver el
  problema

● Encapsula responsabilidades

● Ordena los conceptos
Prototipos en vez de clases
● Reuso de comportamiento se hace mediante
  la decoración o (clonación) de objetos
  existentes que sirven de prototipos.


● Programación basada en ejemplos
Objeto (Clase)
                                                        Clases
function Person() { }


                                                        Objetos
var person1 = new Person();
var person2 = new Person();




                              Para crear un nuevo ejemplo de un
                              objeto utilizamos la declaración new,
                              asignando el resultado (que es de tipo
                              Person) a una variable para tener
                              acceso más tarde.
Constructor

function Person() {
  console.log('Person instantiated');
}

var person1 = new Person();
var person2 = new Person();




   Cada acción declarada en la clase es
   ejecutada en el momento de la
   creación de la instancia.
Atributos

function Person(gender) {
  this.gender = gender;
  console.log('Person instantiated');
}

male = new Person('Male');
female = new Person('Female');



Los atributos y métodos se agregan al objeto prototype de la ¨clase¨


this hace referencia al objeto prototype que contiende Person


Cada ejemplo o instancia contendrá la propiedad gender
Métodos
function Person(gender) {
  this.gender = gender;
  console.log('Person instantiated');
}

Person.prototype.sayGender = function()
{
   console.log(this.gender);
};

male = new Person('Male');
male.sayGender();



Para definir un método asignamos una función a un
atributo de la clase




                                                    Sigue
Métodos II
    ...

    person1 = new Person('Male');

    var genderTeller = person1.sayGender;
    person1.sayGender(); // prints 'Male'
    genderTeller(); // prints undefined
    alert(genderTeller === person1.sayGender); // prints true
    alert(genderTeller === Person.prototype.sayGender); // prints true


No existen métodos
por objetos. Todas
  las referencias
apuntan a la misma
      función.              Javascript
                            "bindea" el
                        contexto del objeto
                           a la función
                                       genderTeller.call(person1); //prints
                                       'Male'
Herencia
function Person() {} // define the Person Class

Person.prototype.walk = function(){
   console.log('I am walking!');
};
Person.prototype.sayHello = function(){
   console.log('hello');
};
function Student() {
   Person.call(this); // Call the parent constructor
}

Student.prototype = new Person(); // inherit Person

Student.prototype.constructor = Student; // correct the constructor
pointer because it points to Person

// replace the sayHello method
Student.prototype.sayHello = function(){
  console.log('hi, I am a student');
}

Student.prototype.sayGoodBye = function(){ // add sayGoodBye method
  console.log('goodBye');
Herencia II
      var student1 = new Student();
      student1.sayHello();
      student1.walk();
      student1.sayGoodBye();

      // check inheritance
      console.log(student1 instanceof Person); // true
      console.log(student1 instanceof Student); // true




                   Sobreescribir el prototype de la clase hija no corrige el constructor
           Nota:
                   (Hay que hacerlo manualmente)

                   La clase hija Student no necesita conocer la implementación del
Encapsulamiento:   padre (el método walk por ejemplo) y sin embargo puede usarlo.
                   Tampoco es necesario definirlo a menos que queramos cambiarlo.
Recapitulando
Closures
                               makeFunc devuelve
function makeFunc() {          displayName antes que esta
  var name = "Mozilla";
  function displayName() {     se ejecute.
    alert(name);
  }
  return displayName;
                               Podemos pensar que la
}                              variable name no se necesita
                               más después de ejecutar
var myFunc = makeFunc();       makeFunc() //NOT!
myFunc();

                               La realidad es que myFunc es
//Sobró   ppt   para   abajo
//Sobró   ppt   para   abajo
                               una closure.
//Sobró   ppt   para   abajo
//Sobró   ppt   para   abajo
//Sobró   ppt   para   abajo
//Sobró   ppt   para   abajo
//Sobró   ppt   para   abajo
//Sobró   ppt   para   abajo
//Sobró   ppt   para   abajo
Qué es una closure
Un tipo de objeto que combina: una función y el
entorno (scope) en la cual esta función es
creada.
function makeAdder(x) {
  return function(y) {
     return x + y;
  };
}
                                   add5 y add10 son
var add5 = makeAdder(5);            dos closures que
var add10 = makeAdder(10);        comparten el body
console.log(add5(2)); // 7         de la función pero
console.log(add10(2)); // 12      contienen diferentes
                                        scopes.
Closures en el mundo real

Una closure es un tipo de objeto que nos permite
asociar datos (el environment) con una función
que trabaje sobre esos datos.

Un objeto permite asociar datos (propiedades)
con uno o más métodos (funciones) que trabaje
sobre esos datos.

Podemos usar closures donde normalmente
usaríamos un objeto con un sólo método. Por
ejemplo: eventos.
Closures en el mundo real (cont.)
function makeSizer(size) {
  return function() {
     document.body.style.fontSize = size + 'px';
  };
}

var size12 = makeSizer(12);
var size14 = makeSizer(14);
var size16 = makeSizer(16);

document.getElementById('size-12').onclick = size12;
document.getElementById('size-14').onclick = size14;
document.getElementById('size-16').onclick = size16;
Closures en el mundo real (cont.)
var Counter = (function() {
  var privateCounter = 0;                Creamos una función anónima y
  function changeBy(val) {               la llamamos inmediatamente
    privateCounter += val;
  }                                         El scope es compartido por las
  return {                                  tres closures.
    increment: function() {
       changeBy(1);                           Todo lo que no se retorna no se
    },                                        puede acceder desde fuera.
    decrement: function() {
       changeBy(-1);
    },
    value: function() {
       return privateCounter;
    }
  }
})();

alert(Counter.value()); /* Alerts 0 */
Counter.increment();
Counter.increment();
alert(Counter.value()); /* Alerts 2 */
Counter.decrement();
alert(Counter.value()); /* Alerts 1 */
Closures cuando

● Usaríamos un objeto con un sólo método:
  Eventos, callbacks, etc.
● Nos interesa privatizar ciertos métodos y sólo
  exponer ciertas interfaces.

Característica:
● Son más caras en términos de memoria /
  procesamiento
Prototype cuando

● Queremos modelar objetos, herencias y
  polimorfismos.
● El comportamiento de un objeto puede ser
  modificado por un conjunto de métodos.

Característica:
● Podemos mutar el comportamiento del objeto
  en cualquier momento
Para finalizar
"Las prácticas ya no tienen que ver con lo
necesario, lo razonable o lo pertinente si no
con aquello que es posible hacer -que se
convierte, fatalmente, en aquello que debemos
hacer."
                               Sandino Núñez, Prohibido Pensar




"Existe el medio y la tecnología mucho antes
que aparezca la necesidad o la razón."
                               Sandino Núñez, Prohibido Pensar
Referencias
https://developer.mozilla.org/en-US/docs/JavaScript/Introduction_to_Object-
Oriented_JavaScript
https://developer.mozilla.org/en-
US/docs/JavaScript/Reference/Global_Objects/Object/create
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/instanceof
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/typeof
https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Closures

Contenu connexe

Tendances

Jyoc java-cap10 clases complementarias y enumerados
Jyoc java-cap10 clases complementarias y enumeradosJyoc java-cap10 clases complementarias y enumerados
Jyoc java-cap10 clases complementarias y enumeradosJyoc X
 
SCJP, Clase 1: Introducción al curso, Intro a Java, Declaración y Control de ...
SCJP, Clase 1: Introducción al curso, Intro a Java, Declaración y Control de ...SCJP, Clase 1: Introducción al curso, Intro a Java, Declaración y Control de ...
SCJP, Clase 1: Introducción al curso, Intro a Java, Declaración y Control de ...flekoso
 
Javascript Módulo 5 - Bucles, Arrays. Funciones como objectos. Ámbitos. Cierr...
Javascript Módulo 5 - Bucles, Arrays. Funciones como objectos. Ámbitos. Cierr...Javascript Módulo 5 - Bucles, Arrays. Funciones como objectos. Ámbitos. Cierr...
Javascript Módulo 5 - Bucles, Arrays. Funciones como objectos. Ámbitos. Cierr...David Zapateria Besteiro
 
Javascript Módulo 7 - PROFUNDIZACIÓN EN ARRAYS, OBJETOS, PROPIEDADES, MÉTODOS...
Javascript Módulo 7 - PROFUNDIZACIÓN EN ARRAYS, OBJETOS, PROPIEDADES, MÉTODOS...Javascript Módulo 7 - PROFUNDIZACIÓN EN ARRAYS, OBJETOS, PROPIEDADES, MÉTODOS...
Javascript Módulo 7 - PROFUNDIZACIÓN EN ARRAYS, OBJETOS, PROPIEDADES, MÉTODOS...David Zapateria Besteiro
 
Curso TDD Ruby on Rails #06: Mocks y stubs
Curso TDD Ruby on Rails #06: Mocks y stubsCurso TDD Ruby on Rails #06: Mocks y stubs
Curso TDD Ruby on Rails #06: Mocks y stubsAlberto Perdomo
 
Jyoc java-cap01 tipos de datos y entrada-salida
Jyoc java-cap01 tipos de datos y entrada-salidaJyoc java-cap01 tipos de datos y entrada-salida
Jyoc java-cap01 tipos de datos y entrada-salidaJyoc X
 
Constructores en java(grupo 8)
Constructores en java(grupo 8)Constructores en java(grupo 8)
Constructores en java(grupo 8)Manuel Ch.
 
Investigacion v unidad
Investigacion v unidadInvestigacion v unidad
Investigacion v unidadElena Perz
 
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...David Zapateria Besteiro
 

Tendances (18)

Jyoc java-cap10 clases complementarias y enumerados
Jyoc java-cap10 clases complementarias y enumeradosJyoc java-cap10 clases complementarias y enumerados
Jyoc java-cap10 clases complementarias y enumerados
 
SCJP, Clase 1: Introducción al curso, Intro a Java, Declaración y Control de ...
SCJP, Clase 1: Introducción al curso, Intro a Java, Declaración y Control de ...SCJP, Clase 1: Introducción al curso, Intro a Java, Declaración y Control de ...
SCJP, Clase 1: Introducción al curso, Intro a Java, Declaración y Control de ...
 
Clase 5 funciones en javaScript
Clase 5 funciones en javaScriptClase 5 funciones en javaScript
Clase 5 funciones en javaScript
 
Clase 6 objetos de javaScript
Clase 6 objetos de javaScriptClase 6 objetos de javaScript
Clase 6 objetos de javaScript
 
Javascript Módulo 5 - Bucles, Arrays. Funciones como objectos. Ámbitos. Cierr...
Javascript Módulo 5 - Bucles, Arrays. Funciones como objectos. Ámbitos. Cierr...Javascript Módulo 5 - Bucles, Arrays. Funciones como objectos. Ámbitos. Cierr...
Javascript Módulo 5 - Bucles, Arrays. Funciones como objectos. Ámbitos. Cierr...
 
Clase 7 objetos globales de javaScript
Clase 7 objetos globales de javaScriptClase 7 objetos globales de javaScript
Clase 7 objetos globales de javaScript
 
Javascript Módulo 7 - PROFUNDIZACIÓN EN ARRAYS, OBJETOS, PROPIEDADES, MÉTODOS...
Javascript Módulo 7 - PROFUNDIZACIÓN EN ARRAYS, OBJETOS, PROPIEDADES, MÉTODOS...Javascript Módulo 7 - PROFUNDIZACIÓN EN ARRAYS, OBJETOS, PROPIEDADES, MÉTODOS...
Javascript Módulo 7 - PROFUNDIZACIÓN EN ARRAYS, OBJETOS, PROPIEDADES, MÉTODOS...
 
Curso TDD Ruby on Rails #06: Mocks y stubs
Curso TDD Ruby on Rails #06: Mocks y stubsCurso TDD Ruby on Rails #06: Mocks y stubs
Curso TDD Ruby on Rails #06: Mocks y stubs
 
Definición de clases en POO
Definición de clases en POODefinición de clases en POO
Definición de clases en POO
 
Jyoc java-cap01 tipos de datos y entrada-salida
Jyoc java-cap01 tipos de datos y entrada-salidaJyoc java-cap01 tipos de datos y entrada-salida
Jyoc java-cap01 tipos de datos y entrada-salida
 
Constructores en java(grupo 8)
Constructores en java(grupo 8)Constructores en java(grupo 8)
Constructores en java(grupo 8)
 
Investigacion v unidad
Investigacion v unidadInvestigacion v unidad
Investigacion v unidad
 
Modelo Persistente
Modelo PersistenteModelo Persistente
Modelo Persistente
 
Codigo
CodigoCodigo
Codigo
 
Tema2
Tema2Tema2
Tema2
 
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
 
C++
C++C++
C++
 
Programación en c++
Programación en c++Programación en c++
Programación en c++
 

Similaire à JavaScript OO y Closures

Object Oriented Javascript
Object Oriented JavascriptObject Oriented Javascript
Object Oriented JavascriptGabriel Chertok
 
Intro aplicaciones web con php
Intro aplicaciones web con phpIntro aplicaciones web con php
Intro aplicaciones web con phpFer Nando
 
05. Creando e implementando objetos y métodos
05. Creando e implementando objetos y métodos05. Creando e implementando objetos y métodos
05. Creando e implementando objetos y métodosDanae Aguilar Guzmán
 
JavaScript no es Vietnam
JavaScript no es VietnamJavaScript no es Vietnam
JavaScript no es VietnamAlex Casquete
 
Todo lo que un desarrollador no puede desconocer de javascript tutorial j q...
Todo lo que un desarrollador no puede desconocer de javascript   tutorial j q...Todo lo que un desarrollador no puede desconocer de javascript   tutorial j q...
Todo lo que un desarrollador no puede desconocer de javascript tutorial j q...Marcelino Ortiz
 
Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6Gabriela Bosetti
 
Curso de Desarrollo Web 2
Curso de Desarrollo Web 2Curso de Desarrollo Web 2
Curso de Desarrollo Web 2juliocombativo
 
Taller de introducción al desarrollo web con Django
Taller de introducción al desarrollo web con DjangoTaller de introducción al desarrollo web con Django
Taller de introducción al desarrollo web con DjangoJuan Rodríguez
 
Buenas prácticas para la construcción de software
Buenas prácticas para la construcción de softwareBuenas prácticas para la construcción de software
Buenas prácticas para la construcción de softwareIker Canarias
 
Programación orientada a objetos (I)
Programación orientada a objetos (I)Programación orientada a objetos (I)
Programación orientada a objetos (I)Cristian
 
Ejercicio de automatizacion IntelliJ+reporte.docx
Ejercicio de automatizacion IntelliJ+reporte.docxEjercicio de automatizacion IntelliJ+reporte.docx
Ejercicio de automatizacion IntelliJ+reporte.docxssuser2e6b96
 
El Mal Odiado Javascript
El Mal Odiado JavascriptEl Mal Odiado Javascript
El Mal Odiado JavascriptEl Jota
 
OOP-JS pjs
OOP-JS pjsOOP-JS pjs
OOP-JS pjsJona Val
 
OOP.JAVAS pjs
OOP.JAVAS pjsOOP.JAVAS pjs
OOP.JAVAS pjsJona Val
 
Todo Javascript para canibales
Todo Javascript para canibalesTodo Javascript para canibales
Todo Javascript para canibalesbriant pati
 

Similaire à JavaScript OO y Closures (20)

Object Oriented Javascript
Object Oriented JavascriptObject Oriented Javascript
Object Oriented Javascript
 
Jquery parte 1
Jquery parte 1Jquery parte 1
Jquery parte 1
 
Intro aplicaciones web con php
Intro aplicaciones web con phpIntro aplicaciones web con php
Intro aplicaciones web con php
 
Jquery 2
Jquery 2Jquery 2
Jquery 2
 
05. Creando e implementando objetos y métodos
05. Creando e implementando objetos y métodos05. Creando e implementando objetos y métodos
05. Creando e implementando objetos y métodos
 
JavaScript no es Vietnam
JavaScript no es VietnamJavaScript no es Vietnam
JavaScript no es Vietnam
 
Manual de usuario
Manual de usuarioManual de usuario
Manual de usuario
 
Todo lo que un desarrollador no puede desconocer de javascript tutorial j q...
Todo lo que un desarrollador no puede desconocer de javascript   tutorial j q...Todo lo que un desarrollador no puede desconocer de javascript   tutorial j q...
Todo lo que un desarrollador no puede desconocer de javascript tutorial j q...
 
Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6
 
Curso de Desarrollo Web 2
Curso de Desarrollo Web 2Curso de Desarrollo Web 2
Curso de Desarrollo Web 2
 
Taller de introducción al desarrollo web con Django
Taller de introducción al desarrollo web con DjangoTaller de introducción al desarrollo web con Django
Taller de introducción al desarrollo web con Django
 
Buenas prácticas para la construcción de software
Buenas prácticas para la construcción de softwareBuenas prácticas para la construcción de software
Buenas prácticas para la construcción de software
 
10.Polimorfismo Java
10.Polimorfismo Java10.Polimorfismo Java
10.Polimorfismo Java
 
Programación orientada a objetos (I)
Programación orientada a objetos (I)Programación orientada a objetos (I)
Programación orientada a objetos (I)
 
Ejercicio de automatizacion IntelliJ+reporte.docx
Ejercicio de automatizacion IntelliJ+reporte.docxEjercicio de automatizacion IntelliJ+reporte.docx
Ejercicio de automatizacion IntelliJ+reporte.docx
 
El Mal Odiado Javascript
El Mal Odiado JavascriptEl Mal Odiado Javascript
El Mal Odiado Javascript
 
Microservicios con Quarkus
Microservicios con QuarkusMicroservicios con Quarkus
Microservicios con Quarkus
 
OOP-JS pjs
OOP-JS pjsOOP-JS pjs
OOP-JS pjs
 
OOP.JAVAS pjs
OOP.JAVAS pjsOOP.JAVAS pjs
OOP.JAVAS pjs
 
Todo Javascript para canibales
Todo Javascript para canibalesTodo Javascript para canibales
Todo Javascript para canibales
 

Dernier

Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesEdomar AR
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificialcynserafini89
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzzAlexandergo5
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 

Dernier (20)

Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, Aplicaciones
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificial
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzz
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 

JavaScript OO y Closures

  • 2. Estudiante de Analista en Tecnologías de la Información. Trabajé TCS Uy, TCS Arg, GuruYu, moove-it y ahora en InfUy. Desarrollo web apps en ruby, rails, javascript, java, felx (sí todavía existe) y sap @iamcherta cherta.info
  • 3. Por qué orientado a objetos
  • 4. Cómo llegamos hasta acá ● El browser como plataforma por encima del SO ● Javascript es el único lenguaje Aplicaciones del browser más ● La capacidad de los clientes es mayor complejas ● Nuestras necesidades no son las mismas que hace 10 años.
  • 5. Que desafíos enfrentamos Nuevas Más código funcionalidades Más puntos de Menor visibilidad fallos Menor calidad
  • 6. Qué es la programación orientada a objetos ● Una forma de entender y resolver el problema ● Encapsula responsabilidades ● Ordena los conceptos
  • 7. Prototipos en vez de clases ● Reuso de comportamiento se hace mediante la decoración o (clonación) de objetos existentes que sirven de prototipos. ● Programación basada en ejemplos
  • 8. Objeto (Clase) Clases function Person() { } Objetos var person1 = new Person(); var person2 = new Person(); Para crear un nuevo ejemplo de un objeto utilizamos la declaración new, asignando el resultado (que es de tipo Person) a una variable para tener acceso más tarde.
  • 9. Constructor function Person() { console.log('Person instantiated'); } var person1 = new Person(); var person2 = new Person(); Cada acción declarada en la clase es ejecutada en el momento de la creación de la instancia.
  • 10. Atributos function Person(gender) { this.gender = gender; console.log('Person instantiated'); } male = new Person('Male'); female = new Person('Female'); Los atributos y métodos se agregan al objeto prototype de la ¨clase¨ this hace referencia al objeto prototype que contiende Person Cada ejemplo o instancia contendrá la propiedad gender
  • 11. Métodos function Person(gender) { this.gender = gender; console.log('Person instantiated'); } Person.prototype.sayGender = function() { console.log(this.gender); }; male = new Person('Male'); male.sayGender(); Para definir un método asignamos una función a un atributo de la clase Sigue
  • 12. Métodos II ... person1 = new Person('Male'); var genderTeller = person1.sayGender; person1.sayGender(); // prints 'Male' genderTeller(); // prints undefined alert(genderTeller === person1.sayGender); // prints true alert(genderTeller === Person.prototype.sayGender); // prints true No existen métodos por objetos. Todas las referencias apuntan a la misma función. Javascript "bindea" el contexto del objeto a la función genderTeller.call(person1); //prints 'Male'
  • 13. Herencia function Person() {} // define the Person Class Person.prototype.walk = function(){ console.log('I am walking!'); }; Person.prototype.sayHello = function(){ console.log('hello'); }; function Student() { Person.call(this); // Call the parent constructor } Student.prototype = new Person(); // inherit Person Student.prototype.constructor = Student; // correct the constructor pointer because it points to Person // replace the sayHello method Student.prototype.sayHello = function(){ console.log('hi, I am a student'); } Student.prototype.sayGoodBye = function(){ // add sayGoodBye method console.log('goodBye');
  • 14. Herencia II var student1 = new Student(); student1.sayHello(); student1.walk(); student1.sayGoodBye(); // check inheritance console.log(student1 instanceof Person); // true console.log(student1 instanceof Student); // true Sobreescribir el prototype de la clase hija no corrige el constructor Nota: (Hay que hacerlo manualmente) La clase hija Student no necesita conocer la implementación del Encapsulamiento: padre (el método walk por ejemplo) y sin embargo puede usarlo. Tampoco es necesario definirlo a menos que queramos cambiarlo.
  • 16. Closures makeFunc devuelve function makeFunc() { displayName antes que esta var name = "Mozilla"; function displayName() { se ejecute. alert(name); } return displayName; Podemos pensar que la } variable name no se necesita más después de ejecutar var myFunc = makeFunc(); makeFunc() //NOT! myFunc(); La realidad es que myFunc es //Sobró ppt para abajo //Sobró ppt para abajo una closure. //Sobró ppt para abajo //Sobró ppt para abajo //Sobró ppt para abajo //Sobró ppt para abajo //Sobró ppt para abajo //Sobró ppt para abajo //Sobró ppt para abajo
  • 17. Qué es una closure Un tipo de objeto que combina: una función y el entorno (scope) en la cual esta función es creada. function makeAdder(x) { return function(y) { return x + y; }; } add5 y add10 son var add5 = makeAdder(5); dos closures que var add10 = makeAdder(10); comparten el body console.log(add5(2)); // 7 de la función pero console.log(add10(2)); // 12 contienen diferentes scopes.
  • 18. Closures en el mundo real Una closure es un tipo de objeto que nos permite asociar datos (el environment) con una función que trabaje sobre esos datos. Un objeto permite asociar datos (propiedades) con uno o más métodos (funciones) que trabaje sobre esos datos. Podemos usar closures donde normalmente usaríamos un objeto con un sólo método. Por ejemplo: eventos.
  • 19. Closures en el mundo real (cont.) function makeSizer(size) { return function() { document.body.style.fontSize = size + 'px'; }; } var size12 = makeSizer(12); var size14 = makeSizer(14); var size16 = makeSizer(16); document.getElementById('size-12').onclick = size12; document.getElementById('size-14').onclick = size14; document.getElementById('size-16').onclick = size16;
  • 20. Closures en el mundo real (cont.) var Counter = (function() { var privateCounter = 0; Creamos una función anónima y function changeBy(val) { la llamamos inmediatamente privateCounter += val; } El scope es compartido por las return { tres closures. increment: function() { changeBy(1); Todo lo que no se retorna no se }, puede acceder desde fuera. decrement: function() { changeBy(-1); }, value: function() { return privateCounter; } } })(); alert(Counter.value()); /* Alerts 0 */ Counter.increment(); Counter.increment(); alert(Counter.value()); /* Alerts 2 */ Counter.decrement(); alert(Counter.value()); /* Alerts 1 */
  • 21. Closures cuando ● Usaríamos un objeto con un sólo método: Eventos, callbacks, etc. ● Nos interesa privatizar ciertos métodos y sólo exponer ciertas interfaces. Característica: ● Son más caras en términos de memoria / procesamiento
  • 22. Prototype cuando ● Queremos modelar objetos, herencias y polimorfismos. ● El comportamiento de un objeto puede ser modificado por un conjunto de métodos. Característica: ● Podemos mutar el comportamiento del objeto en cualquier momento
  • 23. Para finalizar "Las prácticas ya no tienen que ver con lo necesario, lo razonable o lo pertinente si no con aquello que es posible hacer -que se convierte, fatalmente, en aquello que debemos hacer." Sandino Núñez, Prohibido Pensar "Existe el medio y la tecnología mucho antes que aparezca la necesidad o la razón." Sandino Núñez, Prohibido Pensar