Autor Tema: JAVA Lenguaje Orientado a Objetos concepto de interface  (Leído 5805 veces)

atika

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
JAVA Lenguaje Orientado a Objetos concepto de interface
« en: 26 de Diciembre 2014, 11:24 »
Hola buenas, soy nuevo en el foro, y mi duda es acerca de como implementar con el for(extendido y clásico) un metodo de tipo Boolean que recibe como parametro un objeto de tipo Asignatura (este metodo se encuentra en la clase DepartamentoImpl).

El enunciado es :

El metodo devuelve true si existe al menos un profesor asignado a la asignatura a, es decir, que imparte algún crédito en ella, y false en caso contrario.

Teniendo en cuenta las siguientes INFORMACIONES:

Una clase AsignaturaImpl(su interfaz tipo Asignatura) que tiene un metodo getCreditos() de tipo Double y consultable,

una clase ProfesorImpl(su interfaz es el tipo Profesor) que tiene los atributos creditos y asignaturas,los dos son listas y consultables,

y una clase DepartamentoImpl que tiene los atributos profesores y asignaturas,los dos son conjuntos y consultables.

Todas las propiedades son básicas.

Si logran ayudarme estaría muy agradecido

« Última modificación: 01 de Enero 2015, 16:03 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:JAVA 8 Lenguaje Orientado a Objetos
« Respuesta #1 en: 26 de Diciembre 2014, 14:15 »
Hola, pega el código de que dispongas para poder revisarlo. Si no dispones de código ni sabes cómo empezar a crearlo puedes seguir las indicaciones de este curso: http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188

Por lo que se ve en el enunciado te piden que definas interfaces y luego clases que implementen las interfaces, por ejemplo la interface Profesor y la clase que implementa la interface ProfesorImpl. Pero el enunciado no parece que esté bien redactado.

Los pasos que habría que dar serían (aproximadamente):

Crear la interface Asignatura (definiendo la signatura de sus métodos).

Crear la clase AsignaturaImpl con sus atributos correspondientes, como el atributo créditos. Ahí tendrás el método getCreditos

Crear la interface Profesor (definiendo la signatura de sus métodos)

Crear la clase ProfesorImpl con sus atributos correspondientes y sobreescribiendo los métodos definidos en la interface. Un atributo de esta clase será listaAsignaturas, que contiene la lista de asignaturas impartidas por el profesor.

Crear la clase DepartamentoImpl, uno de cuyos atributos será una lista de profesores. También puedes tener como atributo una lista de asignaturas, que serán las asignaturas que imparte el departamento.

En esta clase tendrías el método solicitado, que podría llamarse boolean existeProfesorAsignadoAAsignatura (Asignatura asignatura) { }

Dentro de ese método tendrías que:

- Recorrer los profesores dentro del departartamento (por ejemplo con un iterator)

- Para cada profesor recorrer su lista de asignaturas y comprobar si el código o nombre de asignatura es igual al código o nombre de asignatura del parámetro recibido por el método. Si es así, debes hacer un return true;

Si el recorrido termina y no se ha encontrado ningún profesor asignado a la asignatura debes hacer un return false;

Como sugerencia, vete pegando el código a medida que lo vayas creando para poder ir orientándote.

Saludos

atika

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Re:JAVA 8 Lenguaje Orientado a Objetos
« Respuesta #2 en: 26 de Diciembre 2014, 14:56 »
Hola de nuevo,muchas gracias por la atención Alex Rodríguez, en lo que me has respondido pongo una aclaración: La clase DepartamentoImpl tiene como atributos profesores y asignaturas y los dos son de tipo Set<Profesor> y Set<Asignatura>, y otra cosa es lo del iterator que no lo usamos hasta el segundo cuatrimestre.Sólo nos piden para implementar el código el uso de tratamientos secuenciales(for clasico y/o extendido).En lo referente al código de las tres clases citadas,he puesto sólo los métodos que se necesitan para resolver este problema.

Esto es lo que he intentado hacer para resolverlo pero no lo consigo:
Código: [Seleccionar]

/ **public Boolean existeProfesorAsignado(Asignatura a). Devuelve true si existe al menos un profesor asignado a la asignatura a, es decir, que imparte algún crédito en ella, y false en caso contrario*/

public Boolean existeProfesorAsignado(Asignatura a){
Boolean res = false;
for(Profesor p: getProfesores()){
if(getProfesores().contains(p) && imparteCred(p,a))
res = true;
break;
   
}
return res;
}

private Boolean imparteCred(Profesor p,Asignatura a) {
Boolean res = false;
for(int i = 0; i<p.getAsignaturas().size(); i++){
Integer pos = p.getAsignaturas().indexOf(a);
    res = res || p.getCreditos().get(i).equals(p.getCreditos().get(pos));
}
return res;
}
« Última modificación: 26 de Diciembre 2014, 15:53 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:JAVA 8 Lenguaje Orientado a Objetos
« Respuesta #3 en: 26 de Diciembre 2014, 15:54 »
Pega el código completo de cada una de las clases, así podremos compilarlo para ver cómo resolverlo. Saludos

atika

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Re:JAVA 8 Lenguaje Orientado a Objetos
« Respuesta #4 en: 26 de Diciembre 2014, 16:50 »
Clase AsignaturaImpl

Código: [Seleccionar]

public class AsignaturaImpl implements Asignatura {

private String nombre;
private String codigo;
private Double creditos;
private Integer curso;
private Departamento departamento;


public AsignaturaImpl (String nom,String cod,Double cred,Integer curso,Departamento dpto){
checkCodigo(codigo);
checkCreditos(creditos);
checkCurso(curso);

nombre = nom;
codigo = cod;
creditos = cred;
this.curso = curso;
departamento = dpto;
}


    private void checkCodigo(String codigo) {

    if (!(codigo.length() == 7))
    throw new ExcepcionAsignaturaNoValida("El codigo no tiene 7 caracteres");
   
    if (!(Character.isDigit(codigo.charAt(0)) &&
        Character.isDigit(codigo.charAt(1)) &&
    Character.isDigit(codigo.charAt(2)) &&
    Character.isDigit(codigo.charAt(3)) &&
    Character.isDigit(codigo.charAt(4)) &&
    Character.isDigit(codigo.charAt(5)) &&
    Character.isDigit(codigo.charAt(6))))
    throw new ExcepcionAsignaturaNoValida("El codigo tiene caracteres que no son digitos");
   
}
   
    private void checkCurso(Integer curso) {
if (!(curso >= 1 && curso <= 4))
throw new ExcepcionAsignaturaNoValida("El curso no esta entre 1 y 4");
}

private void checkCreditos(Double creditos){
    if( creditos <= 0.0) //if( !(creditos >0.0))
    throw new ExcepcionAsignaturaNoValida("Los creditos no son positivos");
    }


public String getNombre() { return nombre;}

public String getCodigo() { return codigo; }

public Double getCreditos() { return creditos; }

public Integer getCurso() { return curso; }

public Departamento getDepartamento(){ return departamento; }

public void setDepartamento(Departamento nuevoDpto){
if(nuevoDpto!=departamento){
Departamento old = departamento;
departamento = nuevoDpto;
    if(old!=null){  old.eliminaAsignatura(this);    }
    if(nuevoDpto!=null){    nuevoDpto.nuevaAsignatura(this);   }
}
}

public String toString(){ return "("+getCodigo()+")"+getNombre(); }


public boolean equals(Object o){
boolean res = false;

if(o instanceof Asignatura){ Asignatura a = (Asignatura) o;
res = this.getCodigo().equals(a.getCodigo());
}
return res;
}


public int hashCode(){ return this.getCodigo().hashCode(); }


public int compareTo(Asignatura a){
int cmp = this.getCodigo().compareTo(a.getCodigo());
return cmp;
}

       ************************************************************
Clase ProfesorImpl

Código: [Seleccionar]
public class ProfesorImpl implements Profesor {

private Categoria categoria;
private List<Asignatura> asignaturas;
private List<Double> creditos;
private Departamento departamento;

public ProfesorImpl(Categoria categoria,Departamento depart){
this.categoria = categoria;
asignaturas = new LinkedList<Asignatura>();
creditos = new LinkedList<Double>();
departamento = depart;
}

   

public Categoria getCategoria() { return categoria; }

public List<Asignatura> getAsignaturas(){
return new LinkedList<Asignatura>(asignaturas);
}

public List<Double> getCreditos(){ return new LinkedList<Double>(creditos);}

public Departamento getDepartamento(){ return departamento; }

public void setCategoria(Categoria categoria) {this.categoria = categoria;}


public String toString(){ return  "("+getCategoria()+")";}

public void imparteAsignatura(Asignatura asig,Double dedicacion){

int pos = asignaturas.indexOf(asig);
if(pos>=0){creditos.set(pos, dedicacion);}
asignaturas.add(asig);
creditos.add(dedicacion);
}


public Double dedicacionAsignatura(Asignatura asig){
Double res = 0.0;
int pos = asignaturas.indexOf(asig);
if(pos>=0){res = creditos.get(pos);}
return res;
}

public void eliminaAsignatura(Asignatura asig){
int pos = asignaturas.indexOf(asig);
if(pos>=0){
             asignaturas.remove(pos);
            creditos.remove(pos);
}
}
}

        **************************************************************
Clase DepartamentoImpl

Código: [Seleccionar]
public class DepartamentoImpl implements Departamento {

private String nombre;
private Set<Asignatura> asignaturas;
private Set<Profesor> profesores;

public DepartamentoImpl(String nombre){
this.nombre = nombre;
asignaturas = new HashSet<Asignatura>();
profesores = new HashSet<Profesor>();
}

   
public String getNombre() {return nombre;}

public Set<Asignatura> getAsignaturas() {return new HashSet<Asignatura>(asignaturas); }

public Set<Profesor> getProfesores(){ return new HashSet<Profesor>(profesores); }


public String toString(){ return getNombre();}


public boolean equals (Object o){
boolean res = false;
if(o instanceof Departamento){
Departamento d = (Departamento) o;
res = this.getNombre().equals(d.getNombre());
}
return res;
}


public int hashCode(){ return getNombre().hashCode();}


public int compareTo(Departamento d){
int cmp = getNombre().compareTo(d.getNombre());
return cmp;
}

}

« Última modificación: 27 de Diciembre 2014, 20:41 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:JAVA 8 Lenguaje Orientado a Objetos
« Respuesta #5 en: 27 de Diciembre 2014, 20:43 »
Hola, he intentado compilarlo pero falta el código de las interfaces Asignatura, Profesor y Departamento  ???


atika

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Re:JAVA 8 Lenguaje Orientado a Objetos
« Respuesta #6 en: 28 de Diciembre 2014, 03:42 »

Hola, espero que estén bien los codigos

interface Asignatura
Código: [Seleccionar]
public interface Asignatura extends Comparable<Asignatura>{
String getNombre();
String getCodigo();
Double getCreditos();
Integer getCurso();
Departamento getDepartamento();
void setDepartamento(Departamento nuevoDepartamento);
}


interface Profesor
Código: [Seleccionar]
public interface Profesor extends Comparable<Profesor>{
Categoria getCategoria();
void setCategoria(Categoria categoria);

Departamento getDepartamento();
List<Asignatura> getAsignaturas();
List<Double> getCreditos();
void imparteAsignatura(Asignatura asig,Double dedicacion);
Double dedicacionAsignatura(Asignatura asig);
void eliminaAsignatura(Asignatura asig);
}


interface Departamento
Código: [Seleccionar]
public interface Departamento extends Comparable<Departamento> {
String getNombre();
 Set<Profesor> getProfesores();
Set<Asignatura> getAsignaturas();
Boolean existeProfesorAsignado(Asignatura a);
}
« Última modificación: 01 de Enero 2015, 15:55 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:JAVA 8 Lenguaje Orientado a Objetos
« Respuesta #7 en: 01 de Enero 2015, 16:03 »
He revisado el código y tienes fallos de concepto. El código no compila, las interfaces están mal concebidas, por ejemplo cometes un error básico que es declarar campos dentro de las interfaces.

Te recomiendo que estudies el concepto de interface para poder comprender cómo se trabaja con interfaces: http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=669:concepto-de-interface-y-herencia-multiple-en-java-implements-ejemplos-y-diagramas-de-clases-cu00696b&catid=68:curso-aprender-programacion-java-desde-cero&Itemid=188

Y de forma más amplia te recomiendo el seguimiento de este curso donde se trabajan todos los conceptos de base para la programación java: http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188

Saludos

 

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".