Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: bermartinv en 12 de Noviembre 2015, 12:52
-
Para el primer ejercicio esta es mi solucion:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<button onclick="mostrarObjeto()">Mostrar Objeto</button>
<script>
function persona(nombre,nacionalidad){
this.nombre = nombre || 'Desconociso' ;
this.nacionalidad = nacionalidad || 'Desconocido';
}
persona.prototype.mostrarNacionalidad=function(){
alert ('La nacionalidad de '+this.nombre+' 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 mostrarObjeto(){
var primerMedico=new medicoEspecialista('traumatologo','Hospital 9 de Octubre','española','Beltran');
var msg = ('El medico '+primerMedico.nombre+' con nacionalidad '+primerMedico.nacionalidad+' trabaja en '+primerMedico.centroDeTrabajo+' y tiene la especialidad de ' +primerMedico.especialidad);
primerMedico.mostrarNacionalidad();
alert(msg);
}
</script>
</body>
</html>
Y para el segundo ejercicio esta:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<button onclick="crearObjetos()">Mostrar Objetos</button>
<script>
function Persona(nombre){
this.nombre = nombre || 'Desconociodo'
this.saludar = function (){
alert ('Soy '+this.nombre+' profesor '+this.tipo);
}
}
Persona.prototype.definicion="Una persona es una persona";
function Profesor(nombre,institucionAcademica,tipo){
Persona.call(this,nombre);
this.institucionAcademica = institucionAcademica || 'Desconocido';
this.tipo = tipo || 'Desconocido';
}
function ProfesorInterino(nombre,institucionAcademica,tipo,mesesContratado){
Profesor.call(this,nombre,institucionAcademica,tipo);
this.mesesContratado = mesesContratado;
}
function ProfesorTitular(nombre,institucionAcademica,tipo,anyosTrabajados){
Profesor.call(this,nombre,institucionAcademica,tipo);
this.anyosTrabajados=anyosTrabajados;
}
Profesor.prototype=new Persona();
ProfesorInterino.prototype = new Profesor();
ProfesorTitular.prototype = new Profesor();
function crearObjetos(){
var ProfesorTitular1=new ProfesorTitular('Juan','Universidad de Leon','titular',8);
var msg1 = ('El profesor '+ProfesorTitular1.tipo+' '+ProfesorTitular1.nombre+' ha trabajado durante '+ProfesorTitular1.anyosTrabajados+' anyos en '+ProfesorTitular1.institucionAcademica);
var ProfesorInterino1=new ProfesorInterino('Pedro','Universidad Politecnica de Valencia','interino',5);
var msg2 = ('El profesor '+ProfesorInterino1.tipo+' '+ProfesorInterino1.nombre+' ha trabajado durante '+ProfesorInterino1.mesesContratado+' meses en '+ProfesorInterino1.institucionAcademica);
alert(msg1);
alert(msg2);
ProfesorTitular1.saludar();
ProfesorInterino1.saludar();
}
</script>
</body>
</html>
-
Hola bermartinv!
Para el primer ejercicio indicarte que aunque no genera un error veo preferible seguir siempre la norma de incluir paréntesis vacíos cuando se invoca new, por ejemplo medico.prototype=new persona(); en lugar de medico.prototype=new persona;
Para el segundo ejercicio veo algunas cosas que habría que mejorar:
a) En el código de Persona incluyes la función saludar y en la función saludar invocas this.tipo
Si hago esto:
var persona1 = new Persona('Antonio');
persona1.saludar();
Obtengo esto:
Soy Antonio profesor undefined
Este resultado no es correcto, ¿por qué ocurre? Porque no has respetado el esquema de herencia. Una persona no puede saber si va a ser creada directamente o si simplemente va a facilitar sus métodos y atributos en la cadena de herencia. Por tanto no debe usar atributos que no le corresponden.
b) Otra cosa que no veo correcto es el uso del atributo tipo ¿Está eso en el esquema de herencia que plantea el ejercicio? Además como parámetro no parece necesario. Si se crea un profesor titular, este atributo podrías establecerlo sin necesidad de recibirlo como parámetro, por el simple hecho de que el objeto es profesor titular, sin necesidad de recibirlo como argumento.
Entiendo que lo has hecho para hacer el saludo más completo, pero si lo planteas de esa manera tendrías que eliminar la referencia a atributos inferiores en el esquema de herencia, o hacer una comprobación de tipos antes de usar esos atributos.
Saludos!
-
Hola César, para el apartado a , es verdad que en la creación de la herencia del objeto se me ha olvidado añadir los parentesis.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<button onclick="mostrarObjeto()">Mostrar Objeto</button>
<script>
function persona(nombre,nacionalidad){
this.nombre = nombre || 'Desconociso' ;
this.nacionalidad = nacionalidad || 'Desconocido';
}
persona.prototype.mostrarNacionalidad=function(){
alert ('La nacionalidad de '+this.nombre+' 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 mostrarObjeto(){
var primerMedico=new medicoEspecialista('traumatologo','Hospital 9 de Octubre','española','Beltran');
var msg = ('El medico '+primerMedico.nombre+' con nacionalidad '+primerMedico.nacionalidad+' trabaja en '+primerMedico.centroDeTrabajo+' y tiene la especialidad de ' +primerMedico.especialidad);
primerMedico.mostrarNacionalidad();
alert(msg);
}
</script>
</body>
</html>
Para el segundo apartado, entiendo lo que me dices en los dos casos. No puedo usar 'tipo' cuando Persona no tiene por encima de él definido esta propiedad.
Para lo que me comentas de la propiedad 'tipo' que no se reciba como parametro, la verdad que tienes mucha razón, ya que es una característica que tienen común todos los profesores interinos y los profesores titulares. Lo he estado pensado y lo he definido como una propiedad estática de estos objetos.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<button onclick="crearObjetos()">Mostrar Objetos</button>
<script>
function Persona(nombre){
this.nombre = nombre || 'Desconociodo'
this.saludar = function (){
alert ('Soy '+this.nombre+' profesor ');
}
}
Persona.prototype.definicion="Una persona es una persona";
function Profesor(nombre,institucionAcademica){
Persona.call(this,nombre);
this.institucionAcademica = institucionAcademica || 'Desconocido';
}
function ProfesorInterino(nombre,institucionAcademica,mesesContratado){
Profesor.call(this,nombre,institucionAcademica);
this.mesesContratado = mesesContratado;
}
ProfesorInterino.tipoContrato="temporal";
function ProfesorTitular(nombre,institucionAcademica,anyosTrabajados){
Profesor.call(this,nombre,institucionAcademica);
this.anyosTrabajados=anyosTrabajados;
}
ProfesorTitular.tipoContrato="indefinido";
Profesor.prototype=new Persona();
ProfesorInterino.prototype = new Profesor();
ProfesorTitular.prototype = new Profesor();
function crearObjetos(){
var ProfesorTitular1=new ProfesorTitular('Juan','Universidad de Leon',8);
var msg1 = ('El profesor '+ProfesorTitular1.nombre+' ha trabajado durante '+ProfesorTitular1.anyosTrabajados+' anyos en '+ProfesorTitular1.institucionAcademica+' y tienen un contrato '+ProfesorTitular.tipoContrato);
var ProfesorInterino1=new ProfesorInterino('Pedro','Universidad Politecnica de Valencia',5);
var msg2 = ('El profesor '+ProfesorInterino1.nombre+' ha trabajado durante '+ProfesorInterino1.mesesContratado+' meses en '+ProfesorInterino1.institucionAcademica+' y tienen un contrato '+ProfesorInterino.tipoContrato);
alert(msg1);
alert(msg2);
ProfesorTitular1.saludar();
ProfesorInterino1.saludar();
}
</script>
</body>
</html>
-
Hola!
Ahora lo veo bien! Para quienes revisen el ejercicio tener en cuenta que el atributo tipoContrato no se pedía en el ejercicio, es "un añadido"
Saludos!