2014
Programación Orientada a Objetos PAC 2 – PROGRAMACIÓN WEB NÚRIA ESPINOZA
PAC2 – Programación Web – Núria Espinoza Nazar
PAC2 - JavaScript: POO. 1.- Explica amb les teves paraules en que consisteix l’herència i quina diferencia hi ha entre una classe i un objecte.
En la Programación Orientada a Objetos, definimos “plantillas” o clases que describen características de un conjunto de objetos similares. Por ejemplo, la clase ordenador describe las características de los ordenadores. Sus atributos referiran por tanto a color, tamaño, potencia, velocidad, etc. Siguiendo este ejemplo, un ordenador concreto de una marca, tamaño, velocidad, color etc serà un objeto. Una clase, por tanto, es una plantilla que, en el software, describiría un conjunto de objetos con atributos y comportamientos similares. La herencia es un concepto relevante en la Programación Orientada a Objetos: refiere a la capacidad de clear clases a partir de otras clases, en las que las nuevas “heredan” las características de las originales. Por tanto, surgen nuevas subclases que presentan características de la clase original y que además introduce nuevas. Por ejemplo, en la creación de un nuevo tipo de ordenador. Se construyen modelos diferentes que siguen un mismo esquema: disco duro, placa base, ventilador, etc. Sus características son muy similares pero será un modelo nuevo y diferente de los anteriores. 2.- Explica la diferencia que existeix entre el polimorfisme paramètric i el de sobrecàrrega. Así como la herencia se relaciona con las clases, el polimorfismo se relaciona con los métodos. En lenguajes con tipado fuerte como por ejemplo Java, una variable siempre deberá tener un objeto de la clase que se indicó en el momento de la declaración. Una función declarada de una clase, sólo podrá recibir objetos de esa clase. Mediante el polimorfismo, podemos “relajar” este sistema para que acepte objetos de una clase hija a la declarada, por ejemplo. Por ejemplo, si se crea el método play, nos servirá tanto si tenemos una clase “película” o “serie” o “corto” y reproducirá lo que le corresponda en cada caso. En el caso del método play, si sirve para clases totalmente independientes unas de otras, que no necesariamente son heredadas, hablaríamos de polimorfismo “de sobrecarga”. Play nos servirá igual para reproducir si recibimos “película”, “serie” o “corto”. Si por otro lado, definimos varios métodos play llamados igual pero con diferentes parámetros, automáticamente definiría el método a utilizar dependiendo de los datos que reciba. Esto se refiere al polimorfismo “paramétrico”. Siguiendo con el sencillo ejemplo, play realizaría una acción diferente si recibiera una “película” que si recibiera una “serie” o un “corto”.
1
PAC2 – Programación Web – Núria Espinoza Nazar
3.- Crea una clase JavaScript amb les següents característiques: a) Identificador “edifici”. Function edifici() { } b) Amb les propietats següents: “nom”, “descripció”, “adreça”, “data inauguració”, “arquitecte”, “cost” Function edifici() { //Inicializo las propiedades this.nom = ‘museu_basic’; this.descripcio = ‘museu’; this.adreca = ‘espanya’; this.datainauguracio = 19101997; var.arquitecte = ‘arquitecte’; var.cost = 2500000; } c) Amb els mètodes necessaris per consultar i modificar les propietats anteriors, un mètode constructor de la classe i un mètode “mostra” que mostri en un alert les propietats de la instància. Function edifici() { //Inicializo las propiedades this.nom = ‘museu_basic’; this.descripcio = ‘museu’; this.adreca = ‘espanya’; this.datainauguracio = 01101990; var.arquitecte = ‘arquitecte’; var.cost = 2000000;
//Setter para modificar el valor de la propiedad privada this.setarquitecte = function(valor){ arquitecte = valor;
}
this.setcost = function(valor){ cost = valor; 2
}
PAC2 – Programación Web – Núria Espinoza Nazar
//Getter para obtener el valor de la propiedad privada this.getarquitecte = function(){ return arquitecte; } this.getcost = function() { return cost; }
//método muestra para mostrar en alert las propiedades This.construir = function() { Alert(“Este edificio tiene por nombre “ + edifici1.nom + “, se describe como “ + edifici1.descripcio + “, se encuentra en “ + edifici1.adreca + “, se inauguró en “ + edifici1.datainauguracio + “. Su arquitecto es “ + edifici1.getarquitecte() + “ y costó una suma de “+ edifici1.getcost() + “ euros”) } }
//constructor function edifici(enom, edescripcio, eadreca, edatainauguracio, earquitecte, ecost){ this.nom = enom; this.descripcio = edescripcio; this.adreca = eadreca; this.datainauguracio = edatainauguracio; var arquitecte = earquitecte; var cost = ecost; } var edifici_nom = ‘guggenheim’; var edifici_descripcio = ‘museu’; var edifici_adreca = ‘bilbao’; var edifici_datainauguracio = 19101997; var edifici_arquitecte = ‘Gehry’; var edifici_cost = 2500000; var edifici1 = new edifici(edifici_nom, edifici_descripcio, edifici_adreca, edifici_datainauguracio, edifici_arquitecte, edifici_cost); 3
PAC2 – Programación Web – Núria Espinoza Nazar
c) Crea una instància de la classe anterior i crida al mètode que mostra les propietats de la instància.
//construye un nuevo objeto Var edifici1 = new edifici (); //llamamos al método que muestra las propiedades Edifici1.construir();
4.- A partir de la classe de l’exercici anterior crea una nova classe hospital que hereta de l’anterior les propietats i els mètodes, però que: a) Afegeix la següent propietat: “tipus” Function hospital() { //Inicializo las propiedades this.nom = ‘hospital_basic’; this.descripcio = ‘sanitari’; this.adreca = ‘españa’; this.datainauguracio = 19101997; var.tipus = 1; var.arquitecte = ‘arquitecte’; var.cost = 2500000; } b) Afegeixi els mètodes necessaris per actualitzar la propietat anterior. //Setter para modificar el valor de tipus this.settipus = function(valor){ tipus = valor; } //Getter para obtener el valor de tipus this.gettipus = function(){ return tipus; } c) Actualitza el mètode “mostra” per a que també aparegui la propietat “tipus”. //método muestra para mostrar en alert las propiedades This.construir = function() { Alert(“Este hospital, de “ + hospital1.gettipus + ”,tiene por nombre “ + hospital1.nom + “, se describe como “ + hospital1.descripcio + “, se encuentra en “ + hospital1.adreca + “, se inauguró en “ + hospital1.datainauguracio + “. Su arquitecto es “ + hospital1.getarquitecte() + “ y costó una suma de “+ hospital1.getcost() + “ euros”) } d) Crea una instància de la classe anterior i crida al mètode que mostra les propietats de la instància. 4
PAC2 – Programación Web – Núria Espinoza Nazar
//construye un nuevo objeto Var hospital1 = new hospital (); //llamamos al método que muestra las propiedades hospital1.construir ();
5.- Crea un script que realitzi el següent: a)
Demanarà a l’usuari que introdueixi 3 preguntes i les respostes corresponents (primer es sol·licitarà la introducció de la pregunta i desprès es sol·licitarà la resposta), serà necessari validar que no hem deixat en blanc la pregunta ni la resposta.
b) Acte seguit el programa escollirà de manera aleatòria una de les preguntes que haguem introduït i ens demanarà que introduïm la resposta, si la resposta és correcta ens felicitarà, en cas contrari ens ho comunicarà i tornarà a demanar la introducció de la resposta. c) Un cop introduïda la resposta correcta el programa ens preguntarà si volem realitzar una altre pregunta, en cas afirmatiu tornarem a repetir els passos a i b assegurant-nos de no repetir la pregunta anterior. Ver fichero “Pregunta5.html”
6.- Crea un script on l'usuari introdueix una cadena de text i sobre aquest l'script realitzarà les següents manipulacions, mostrant al final el resultat a la pàgina HTML (3 punts):
• •
• • •
Tornarà el nombre de caràcters i espais en blanc. Tornarà el nombre de paraules de la cadena. Canviarà a majúscula la primera lletra de cada paraula. Indicarà per a cada lletra el nombre d'aparicions en la frase. Codificarà i descodificarà la cadena de text introduïda seguint un criteri de codificació definit per vosaltres.
Ver fichero “Pregunta6.html” 7.- Crea un script que al clicar un botó sol·liciti que introduïm una data, una vegada introduïda ens dirà la diferencia en dies que hi ha entre la data actual i la data introduïda, aquesta data podrà ser anterior o posterior a l’actual, serà necessari validar que la data tingui el format dd/mm/aaaa. (1 punt) Ver fichero “Pregunta7_b.html” y “Pregunta7.html”
5