UT2 DESARROLLO DE APPS MEDIANTE LENGUAJES DE SCRIPT

JavaScript Orientado a Objetos

eugeniaperez.es

JavaScript Orientado a Objetos

A día de hoy las aplicaciones "empiezan a llevar más código incluso en el cliente que en el servidor". 

Y en caso de tener que programar en JS, esta es una muy buena forma de estructurar el código.

Todas las webs llevan JS, desde la web más puntera a la menos... Node.js, PhoneGap, etc

eugeniaperez.es

UT 2: lenguajes de scripting

JavaScript Orientado a Objetos

LA CLASE

  • JavaScript no tiene declaraciones de clases.
  • Se utilizan funciones en lugar de clases.
  • Por ejemplo, una clase:

eugeniaperez.es

function Person() { ... }

UT 2: lenguajes de scripting

JavaScript Orientado a Objetos

ejemplo de clase

Se define una clase llamada Person y creamos dos instancias (person1 y person2).

eugeniaperez.es

function Person() { }
var person1 = new Person();
var person2 = new Person();

UT 2: lenguajes de scripting

JavaScript Orientado a Objetos

el constructor

 

eugeniaperez.es

function Person() {
  alert(‘Person instantiated’);
}

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

No hay que definir explícitamente el constructor. Los objetos

de clase o instancias se crean con new.

UT 2: lenguajes de scripting

JavaScript Orientado a Objetos

la propiedad

Son características que se definen dentro de la clase. Para acceder a ellas dentro de la clase se utiliza this, que se refiere al objeto actual: this.property

El acceso a una propiedad fuera de la clase sintaxis:  instanceName.property

eugeniaperez.es

UT 2: lenguajes de scripting

JavaScript Orientado a Objetos

la propiedad

 

eugeniaperez.es

function Person(gender, name) {
  this.gender = gender;
  this.name = name;
  alert(‘Person ’+name+’ instantiated’);
}

var person1 = new Person(‘Male’,’Pelayo’);
var person2 = new Person(‘Female’,’Covadonga’);

/ / Muestra el género de persona1
alert (‘person1 is a’ + person1.gender); 
// Muestra el nombre de persona2
alert (‘person2 is ’ + person2.name)

UT 2: lenguajes de scripting

JavaScript Orientado a Objetos

los métodos

Se definen como funciones:

 

eugeniaperez.es

function Person(gender) {
      this.gender = gender;
      this.sayHello = function(){
         alert (‘hello’);
  };
}
var person1 = new Person(‘Male’);
var person2 = new Person(‘Female’);

person1.sayHello(); 

Con this los métodos

son públicos...

UT 2: lenguajes de scripting

JavaScript Orientado a Objetos

los métodos

Algo curioso es que podemos referirnos a la propia clase,  Person.prototype, y añadir métodos fuera de la misma, por ejemplo:

 

eugeniaperez.es

//Add a new method
Person.prototype.getGender = function() {
  alert ('Hola, Soy ' + this.gender);
};

person1.getGender();
person2.getGender();

Esto puede ser útil, cuando es una librería

ya hecha y la queremos extender...

UT 2: lenguajes de scripting

JavaScript Orientado a Objetos

var Employee = function (name, age, height, weight,salary) {
    this.name = name;
    this.age = age;
    this.height = height;
    this.weight = weight;
    this.salary = salary;

    this.getCategory = function () {
        return salary > 60000 ? "Alto cargo" : "Medio";
    }
    this.toString = function () {
        alert('Nombre: ' + this.name + ' | Edad: ' + this.age + ' | Altura: ' + 
this.height + 'm | Peso: ' + this.weight + 'kg.');
    };
    this.isAdult = function () {
        if (this.age >= 18) {
            alert(this.name + ' es mayor de edad.');
        } else {
            alert(this.name + ' es menor de edad.');
        }
    };
};

UT 2: lenguajes de scripting

JavaScript Orientado a Objetos

eugeniaperez.es

//Create two people
var billG = new Employee('Bill Gates', 62, 1.7, 72,200000);
var steveB = new Employee('Steve Ballmer', 59, 1.75, 90,50000);

//Call to the specific methods
billG.toString();
steveB.isAdult();
alert("Tiene un rango "+steveB.getCategory()); 

Para probarlo...

UT 2: lenguajes de scripting

JavaScript Orientado a Objetos

eugeniaperez.es

function Client(name, salary)
{
    this.name = name;
    this.salary = salary;
    this.deposit = deposit;
    this.extract = extract;
}

//Set method of the deposit
function deposit(amount)
{
    this.salary = this.salary + amount;
}

//Set method of the extraction
function extract(amount)
{
    this.salary = this.salary - amount;
}

UT 2: lenguajes de scripting

JavaScript Orientado a Objetos

eugeniaperez.es


var client1 = new Client('Dennis Ritchie', 1200);
document.write('Nombre del cliente:' + client1.name + '<br />');
document.write('Saldo actual:' + client1.salary + '<br />');
client1.deposit(120);
document.write('Saldo después de depositar $120---->' + client1.salary + '<br />');
client1.extract(1000);
document.write('Saldo después de extraer $1000---->' + client1.salary + '<br />');

Para probarlo...

UT 2: lenguajes de scripting

JavaScript Orientado a Objetos

eugeniaperez.es

Métodos públicos y privados

this -> públicos

var o function -> privados

Métodos públicos y privados

 

//Define the class
function Programmer(name) {
    this.greet = function () {
        return toString("My name is: " + name);
    };
    this.getProgrammingLanguage = function () {
        return toString("I'm incapable of discriminating any programming language," + 
                " no matter how crappy can be!");
    };
    this.setProgrammingLanguage = function (language) {
        var message = "";
        switch (language.toUpperCase()) {
            case 'JAVA':
                message = "I'm a Java fanboy.";
                break;
            case 'C#':
                message = "I'm a .NET fanboy.";
                break;
            default:
                message = this.getProgrammingLanguage();
        }
        return toString(message);
    };

    //toString method
    function toString(message) {
        alert(message);
    }
}

para probarlo:

 

var programmer1 = new Programmer('Eugenia');
programmer1.greet();
programmer1.getProgrammingLanguage();
programmer1.setProgrammingLanguage('Java');

eugeniaperez.es

UT 2: lenguajes de scripting

JavaScript Orientado a Objetos

UT 2: lenguajes de scripting

JavaScript Orientado a Objetos

eugeniaperez.es

Métodos públicos y privados

 

var person = new Programmer("Eugenia");
alert(person.greet());
//Define the class
function Programmer(name) {
    var greet = function () {
        return toString("My name is: " + name);
    };
...
}
var person = new Programmer("Eugenia");
alert(person.greet());

UT 2: lenguajes de scripting

JavaScript Orientado a Objetos

eugeniaperez.es

HERENCIA

 

Sirve para crear una clase especializada a partir de otra. Es decir que herede sus propiedades y métodos. 

UT 2: lenguajes de scripting

JavaScript Orientado a Objetos

eugeniaperez.es

HERENCIA

 

En el ejemplo de la página 59, se define la clase Student como una clase secundaria de Person. Luego redefinimos el método sayHello() y agregamos el método sayGoodBye().

UT 2: lenguajes de scripting

JavaScript Orientado a Objetos

eugeniaperez.es

HERENCIA

 

En el ejemplo de la página 59, se define la clase Student como una clase secundaria de Person. Luego redefinimos el método sayHello() y agregamos el método sayGoodBye().

Descarga ahora el repositorio : 

https://eugenia_perez@bitbucket.org/eugenia_perez/dw.ut2.js.inheritanceexample.git

ut 2: lenguajes de scripting

 

eugeniaperez.es

JavaScript OO

Text

UT 2: lenguajes de scripting

JavaScript Orientado a Objetos

eugeniaperez.es

namespaces

 

Text

var subtract = function(a, b){
  return a - b;
}; 
			 
var add = function(a, b){
  return a + b;
};

var multiply = function(a, b) {
  return a * b;
};
			
var divide = function(a, b) {
  return a / b;
};
var result = add(2,3);
alert(result);

Mayor legibilidad...

UT 2: lenguajes de scripting

JavaScript Orientado a Objetos

eugeniaperez.es

namespaces

 

Text

var basics = new function() {
  //Funciones privadas. No es posible llamarlas desde fuera de este ámbito.
  var subtract = function(a, b){
    return a - b;
  }; 
			 
  var add = function(a, b){
    return a + b;
  };

  //Funciones públicas
  this.multiply = function(a, b) {
   return a * b;
  };
			
  this.divide = function(a, b) {
   return a / b;
  };		
};
var result = basics.multiply(2,3);
alert(result);
var result = basics.add(2,3); //ERROR

UT 2: lenguajes de scripting

JavaScript Orientado a Objetos

eugeniaperez.es

namespaces

 

var complex = new function() {
  //Funciones públicas
  this.pow = function(a, b) {
   return Math.pow(a, b);							
   };		
};
result = complex.pow(2,3);
alert(result);

UT 2: lenguajes de scripting

JavaScript Orientado a Objetos

eugeniaperez.es

otra sintaxis PARA LOS NAMESPACES...

 

Pág. 58

UT 2: lenguajes de scripting

JavaScript Orientado a Objetos

eugeniaperez.es

test unitarios con jasmine

 

http://jasmine.github.io/

Está documentado en los apuntes en la pág. 60

UT2.B JS OO

By eugenia_perez

UT2.B JS OO

  • 1,203