Autor Tema: Ejemplo prototype y relación cadenas de herencia JavaScript. Ejercicio CU01150E#  (Leído 5099 veces)

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Hola, dejo por aquí mi resolución a los dos ejercicios de este tema.

Citar
EJERCICIO 1
Crea un esquema de herencia que cumpla con estos requisitos:
a) Un Médico especialista tiene una especialidad y es un tipo de Médico.
b) Un Médico trabaja en un centro de trabajo y es un tipo de Persona.
c) Una Persona tiene un nombre y una nacionalidad. Como método común a todas las personas tenemos mostrarNacionalidad, que muestra un mensaje informando de la nacionalidad.
Se desea crear un objeto de tipo MedicoEspecialista pasándole como parámetros para su creación además de sus propiedades intrínsecas las propiedades que hereda de sus supertipos y sobre este objeto invocar el método mostrarNacionalidad(), que deberá ser reconocido por herencia.

Código: [Seleccionar]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Ejemplo aprenderaprogramar.com</title><meta charset="utf-8">
<style>
#pulsador {padding:15px; width: auto; display: inline-block; margin: 25px;
cursor: pointer; color: yellow; border-radius: 40px; background: purple;}
</style>
<script type="text/javascript">
function Persona(nombre, nacionalidad){
this.nombre = nombre || 'desconocido';
this.nacionalidad = nacionalidad || 'desconocida';
}
Persona.prototype.mostrarNacionalidad = function(){
alert('Hola me llamo ' + this.nombre + ' y mi nacionalidad es ' + this.nacionalidad);
}
function Medico(nombre, nacionalidad, centroDeTrabajo){
Persona.call(this, nombre, nacionalidad);
this.centroDeTrabajo = centroDeTrabajo || 'desconocido';
}
function MedicoEspecialista(especialidad, centroDeTrabajo, nacionalidad, nombre){
Medico.call(this, nombre, nacionalidad, centroDeTrabajo);
this.especialidad = especialidad || 'desconocida';
}
Medico.prototype = new Persona();
MedicoEspecialista.prototype = new Medico();
function ejemploObjetos(){
var unMedicoEspecialista = new MedicoEspecialista('Traumatólogo', 'Hospital La Paz', 'Española', 'Pedro');
var msg = 'El objeto unMedicoEspecialista se llama ' + unMedicoEspecialista.nombre + ', trabaja en ' + unMedicoEspecialista.centroDeTrabajo;
msg = msg + ' es ' + unMedicoEspecialista.especialidad + ' y su nacionalidad es ' + unMedicoEspecialista.nacionalidad;
alert(msg);
unMedicoEspecialista.mostrarNacionalidad();
}
</script>
</head>
<body>
<div id="cabecera"><h2>Cursos aprenderaprogramar.com</h2></div>
<div id ="pulsador" onclick="ejemploObjetos()"> Probar </div>
</body>
</html>

Citar
EJERCICIO 2
Crea un código que represente el siguiente esquema de herencia permitiendo instanciar los subtipos pasándole los parámetros necesarios para inicializar las propiedades de los supertipos. Crea un objeto ProfesorTitular profesorTitular1 al que le pases como parámetros 8 (años trabajados), Universidad de León (institución académica), Juan (nombre),  e invoca el método saludar sobre este objeto.

Código: [Seleccionar]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Ejemplo aprenderaprogramar.com</title><meta charset="utf-8">
<script type="text/javascript">
Persona.prototype.definicion = 'Individuo de la especie humana.';
function Persona(nombre){
this.nombre = nombre || 'desconocido';
}
Persona.prototype.saludar = function(tipoProfesor){
alert('Hola, me llamo ' + this.nombre + ' y trabajo en ' + this.institucionAcademica + tipoProfesor);
}
Profesor.prototype = new Persona();
function Profesor(nombre, institucionAcademica){
this.institucionAcademica = institucionAcademica || 'desconocida';
Persona.call(this, nombre);
}
ProfesorInterino.prototype = new Profesor();
ProfesorTitular.prototype = new Profesor();
function ProfesorInterino(mesesContrato, nombre, institucionAcademica){
this.mesesContrato = mesesContrato || 0;
Profesor.call(this, nombre, institucionAcademica);
}
function ProfesorTitular(annosTrabajados, nombre, institucionAcademica){
this.annosTrabajados = annosTrabajados || 0;
Profesor.call(this, nombre, institucionAcademica);
}
function ejemploObjetos(){
var profesorTitular1 = new ProfesorTitular(8, 'Juan', 'Universidad de León');
profesorTitular1.saludar(' desde hace ' + profesorTitular1.annosTrabajados + ' años.');
var profesorInterino1 = new ProfesorInterino(12, 'Luis', 'Universidad Autónoma de Madrid');
profesorInterino1.saludar(' durante ' + profesorInterino1.mesesContrato + ' meses.');

}
</script>
</head>
<body>
<div id="cabecera"><h2>Cursos aprenderaprogramar.com</h2><h3>Ejemplos JavaScript</h3></div>
<div style="color:blue;" id ="pulsador" onclick="ejemploObjetos()"> Probar </div>
</body>
</html>

,,
« Última modificación: 13 de Septiembre 2020, 19:35 por Ogramar »

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Re:Cadenas de herencia JavaScript. Ejercicio CU01150E.
« Respuesta #1 en: 28 de Octubre 2015, 09:31 »
Hola Pedro, lo veo bien planteado y estructurado. En el ej. 1 creas un objeto medicoEspecialista, y eres capaz de acceder al método mostrarNacionalidad() sobre este objeto gracias a la cadena de herencia.

En el ejercicio 2 hay algo que no entiendo. El método saludar lo has definido como

Persona.prototype.saludar = function(tipoProfesor){
            alert('Hola, me llamo ' + this.nombre + ' y trabajo en ' + this.institucionAcademica + tipoProfesor);
         }


Pero después lo llamas como profesorTitular1.saludar(' desde hace ' + profesorTitular1.annosTrabajados + ' años.');

El parámetro tipoProfesor sería (' desde hace ' + profesorTitular1.annosTrabajados + ' años.')

¿Qué tiene que ver eso con un tipo de profesor? No sé si es por los nombres o si cambiaste algo a última hora.


Saludos

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Hola Mario.

Lo hice de esa forma para diferenciar si el saludo lo daba un ProfesorTitular o un ProfesorInterino.

Si el saludo proviene de un ProfesorTitular en el saludo se mostrará los años de antigüedad y si proviene de un ProfesorInterino el saludo mostrará los meses de contrato.
Lo mismo habría sido más acertado en vez de tipoProfesor, tipoDeMensaje.


Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
No sé, yo lo que veo es que el contenido del parámetro es un texto que pasas tú, por tanto el nombre de parámetro más lógico sería "mensaje", no veo que sea un tipo de profesor ni un tipo de mensaje, simplemente lo veo como una cadena de texto. Pero bueno, está claro que es una simple cuestión de nombres, no veo motivo para darle más vueltas...

Saludos

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Ahora me quedó totalmente claro.

La parte del código afectada, quedaría asi:

Código: [Seleccionar]
Persona.prototype.saludar = function(mensaje){
alert('Hola, me llamo ' + this.nombre + ' y trabajo en ' + this.institucionAcademica + mensaje);
}

,,

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Sí, así lo veo más correcto.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".