Proyecto#2 Encapsulacion

  • December 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Proyecto#2 Encapsulacion as PDF for free.

More details

  • Words: 3,044
  • Pages: 23
REPUBLICA DE PANAMA CENTRO REGIONAL UNIVERSITARIO DE VERAGUAS “LABORATORIO #5 ENCAPSULACIÓN” PROGRAMACION III PROFESOR: DIEGO SANTIMATEO INTEGRANTES: NORBERTO DELGADO 9-731-110 FERNANDO VILLARREAL 6-711-1562 SEMESTRE: II AÑO LECTIVO: 2008

INTRODUCCION En el siguiente laboratorio trataremos la encapsulación que no es más que la capacidad de un objeto de poder encerrar sus propiedades y comportamientos dentro de una especie de cápsula para evitar que otras clases la puedan acceder o modificar. La encapsulación permite interactuar con los objetos aún cuando se den cambios en sus respectivos códigos. En este trabajo encontrara que la creación de un problema basado en encapsulación en el encontrara dicho problema, las clases y métodos y que función hacen en el problema en la descripción del problema encontrara en si lo que el problema debe hacer y la ejecución del mismo. Espero que sea de su agrado y que conlleve todo lo que dicho trabajo requería.

DESCRIPCION DEL PROBLEMA 1- escriba un programa en Java estrictamente orientado a objetos que capture el nombre, el puesto académico que ocupa y el código de la asignatura de mayor calificación para cada uno de los N estudiantes de un grupo. El programa debe determinar el nombre del estudiante con mayor puesto y desplegar la descripción de la asignatura con mayor calificación. Ni la clase que representa al estudiante, ni la que representa las asignaturas, ni la clase que contiene al main deben realizar entradas ni salidas. La clase Asignatura maneja un archivo que contiene el código y la descripción de cada materia. Puede crear el archivo con el editor de texto. Considere los siguientes aspectos: • Diseñe e implemente una clase que permita capturar datos para cualquiera que sea la aplicación, de manera que el programa que recurra a ella sea el único conocedor de lo que se desea capturar. • Deben existir N objetos Estudiantes creados en la clase principal (la que contiene al main). • La salida debe desplegase con un mensaje a un método de la clase que hace la entrada y salida (I/O). Esto implica que usted debe construir el mensaje de salida para usarlo en la interfaz del método de la clase I/O. • Ni la clase principal ni la clase Estudiante pueden hacer I/O • La clase Estudiante contiene todos los métodos relativos a la actividad del o con el estudiante. • Cada método debe atender solo una tarea o función. • Incluya cada clase en un archivo diferente. 2- Adicione a la clase Estudiante un método para calcular la calificación promedio de un estudiante. Use la clase I/O sin modificarla para capturar las M notas de los N estudiantes, sus respectivos nombres y cédulas. Implemente otra clase Principal para controlar la ejecución. Lea una cédula para saber a que estudiante se le debe calcular el promedio.

CODIGO FUENTE CLASE PRINCIPAL import java.io.*; import javax.swing.*; class Principal { public static void main(String args[])throws IOException { int n=0,puest=0; String cadena; /******************************************************/ Captura_Despliega objeto = new Captura_Despliega(); Estudiante[] arr = new Estudiante[50]; /******************************************************/ n = objeto.Lee_Cantidad(); for(int i=0;i
CLASE CAPTURA _ DESPLIEGA import java.io.*; import javax.swing.*; class Captura_Despliega { /************************************************************************* *****/ public int Lee_Cantidad()throws IOException { int cantidad; String cadena; cadena=JOptionPane.showInputDialog(null, "Cuantos estudiantes tiene el grupo", "Entrada", JOptionPane.QUESTION_MESSAGE); cantidad = Integer.parseInt(cadena); return(cantidad); } /************************************************************************* *****/ public String Lee_Datos(int var)throws IOException { int i,m; String cadena1; String cadena2; String cadena3; String cadena4; String cadena5; String cadena6; String cadena7="0"; String cadena8; cadena1 =JOptionPane.showInputDialog(null, "Introduzca el nombre del estudiante "+(var+1)+"", "Entrada", JOptionPane.QUESTION_MESSAGE); cadena4=JOptionPane.showInputDialog(null, "Introduzca la cedula", "Entrada", JOptionPane.QUESTION_MESSAGE); cadena3=JOptionPane.showInputDialog(null, "Introduzca el puesto academico", "Entrada", JOptionPane.QUESTION_MESSAGE); cadena2=JOptionPane.showInputDialog(null, "Introduzca el codigo de la asignatura de mayor nota",

"Entrada", JOptionPane.QUESTION_MESSAGE); cadena5=JOptionPane.showInputDialog(null, "Cuantas notas tiene el estudiante", "Entrada", JOptionPane.QUESTION_MESSAGE); m=Integer.parseInt(cadena5); for(i=0;i<m;i=i+1) { cadena6=JOptionPane.showInputDialog(null, "Introduzca la nota "+(i+1)+"", "Entrada", JOptionPane.QUESTION_MESSAGE); cadena7=cadena7+";"+cadena6+""; } cadena7=cadena7+";fin"; cadena8=""+cadena1+":"+cadena2+":"+cadena3+":"+cadena4+":"+cadena7+":"; return(cadena8); } /************************************************************************* *****/ public void imprime_datos(Estudiante arr[],int n)throws IOException { float promedio; String cadena; JOptionPane.showMessageDialog(null, "A continuacion se muestran los datos de los estudiantes evaluados", "Salida", JOptionPane.INFORMATION_MESSAGE); for(int i=0;i "+arr[i].nombre+"", "Salida", JOptionPane.INFORMATION_MESSAGE); JOptionPane.showMessageDialog(null, "El codigo de la asignatura de mayor nota es ==> "+arr[i].codigo+"", "Salida", JOptionPane.INFORMATION_MESSAGE); JOptionPane.showMessageDialog(null, "Su puesto academico es ==> "+arr[i].puesto+"", "Salida", JOptionPane.INFORMATION_MESSAGE); JOptionPane.showMessageDialog(null, "Su cedula es ==> "+arr[i].cedula+"", "Salida", JOptionPane.INFORMATION_MESSAGE);

} Estudiante est = Estudiante.Devuelve_Estudiante_mayor(arr,n); Despliega(est); cadena = Lee_cedula(); promedio = Estudiante.Calcula_prom(arr,n,cadena); Despliega_promedio(promedio); } /************************************************************************* *****/ private void Despliega(Estudiante est)throws IOException { String cadena; JOptionPane.showMessageDialog(null, "A continuacion se muestran los datos del estudiante de mayor puesto academico", "Salida", JOptionPane.INFORMATION_MESSAGE); JOptionPane.showMessageDialog(null, "Nombre del estudiante de mayor puesto academico es ==> "+est.nombre+"", "Salida", JOptionPane.INFORMATION_MESSAGE); JOptionPane.showMessageDialog(null, "Su puesto academico es ==> "+est.puesto+"", "Salida", JOptionPane.INFORMATION_MESSAGE); JOptionPane.showMessageDialog(null, "Codigo de la asignatura de mayor calificacion es ==> "+est.codigo+"", "Salida", JOptionPane.INFORMATION_MESSAGE); JOptionPane.showMessageDialog(null, "Su cedula es ==> "+est.cedula+"", "Salida", JOptionPane.INFORMATION_MESSAGE); cadena = Asignatura.Compara(est.codigo); Despliega_descripcion(cadena); } /************************************************************************* *****/ private void Despliega_descripcion(String des) { JOptionPane.showMessageDialog(null, "Descripcion de la asignatura ==> "+des+"", "Salida", JOptionPane.INFORMATION_MESSAGE); } /************************************************************************* *****/

private String Lee_cedula() { String cadena=""; cadena=JOptionPane.showInputDialog(null, "Introduzca la cedula a evaluar", "Entrada", JOptionPane.QUESTION_MESSAGE); return(cadena); } /************************************************************************* *****/ private void Despliega_promedio(float prom) { if(prom > 0) { JOptionPane.showMessageDialog(null, "El promedio del estudiante es ==> "+prom+"", "Salida", JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog(null, "La cedula no existe en el registro", "Salida", JOptionPane.INFORMATION_MESSAGE); } Salida(); } /************************************************************************/ private void Salida() { JOptionPane.showMessageDialog(null, "Ha salido del programa !!!!", "Salida", JOptionPane.INFORMATION_MESSAGE); } /************************************************************************/ } Descripción: Esta clase es la encargada de llevar tanto las entradas como las salidas por pantalla a cabo, es decir, todas las entradas desde el teclado o las salidas por pantalla las controla esta clase. Ella cuenta con 8 métodos:

El método Lee_Cantidad (): Este método se encarga de leer la cantidad de estudiantes que tiene el grupo. Es de tipo int y retorna la cantidad al main. Consta de dos variables: Cadena la cual almacena la cantidad de estudiantes como una cadena y cantidad que es la cadena transformada a entero mediante  Integer.parseInt (). El método Lee_Datos (): Este método se encarga de leer todos los datos relacionados con cada estudiante (su nombre, cedula, puesto académico, código de la asignatura de mayor nota y las notas que el estudiante realizo). Este método recibe un argumento y no es más que el índice del ciclo for proveniente del main para indicar a que estudiante le estamos leyendo sus datos. Solo es para relacionarlo o identificarlo. Consta de 10 variables: i que nos sirve de índice para controlar el for donde se len las m notas de cada estudiante. m que guarda la cantidad de notas para cada estudiante. Cadena1 que almacena el nombre del estudiante. Cadena2 que almacena el código de la signatura de mayor nota. Cadena3 que almacena el puesto académico del estudiante. Cadena4 que almacena la cedula del estudiante. Cadena5 que almacena la cantidad de notas pero como una cadena, esta cadena se transforma a entero con Integer.parseInt () y se le asigna a m. Cadena6 que guarda la nota que se vaya leyendo del estudiante dentro del ciclo for y se concadena a cadena7 que ya contiene un cero como punto de avance. Nótese que se separan por “;” para separar las notas de los otros datos como el nombre, cedula, etc. ya que estos los separa los dos puntos “:”. Al salir del ciclo concadenamos a cadena7 la palabra fin para saber que ese es el fin de la cadena. Esta cadena7 es muy importante ya que contiene todas las notas del estudiante separadas por “;” y nos servirá a la hora de obtener el promedio ya que se pueden separar una a una utilizando el método  split. Al final todas las cadenas se concadenan unas de otras a cadena8 que es la cadena total, es decir la cadena que tiene tanto los datos del estudiante separados por “:” como las notas separadas por “;”. Este método es de tipo String y retorna cadena8 al main para ser trabajada. El método imprime _ datos (): Este método se encarga de imprimir los datos de los n estudiantes sin incluir las notas. Recibe dos argumentos: El arreglo de objetos que contiene los datos de los estudiantes y n que contiene la cantidad de estudiantes. Utilizando la variable i mediante un for podemos recorrer cada posición del arreglo e ir imprimiendo sus atributos que no son más que los datos de cada estudiante. Luego este método invoca al método Devuelve_Estudiante_mayor() de la clase Estudiante para encontrar al estudiante de mayor puesto académico. Se le pasan dos argumentos: El arreglo de objetos y la cantidad de estudiantes y este método retorna un objeto y se le asigna a est, luego se invoca al método Despliega que imprime los datos del objeto evaluado anteriormente ( el estudiante est), luego se invoca al método Lee_cedula() que nos lee la cedula del estudiante que queremos determinar su promedio y se invoca al método Calcula_prom() de la clase Estudiante que determina el promedio, Nótese que este método

recibe la cedula como argumento, el arreglo de objetos y la cantidad de estudiantes y finalmente se invoca al método Despliega_promedio() que imprime dicho promedio. El método Despliega (): Este método se encarga de imprimir los datos del estudiante de mayor puesto académico. Recibe por argumento al objeto evaluado en el método imprime_datos(). Luego se invoca al método Compara de la clase Asignatura pasándole por argumento el código de la asignatura de mayor puesto de este estudiante para buscar en el archivo la descripción de la materia perteneciente al código y si la encuentra es retornada a este método (Despliega) asignándosele a cadena donde se invoca al método Despliega_descripcion () pasándole esta variable para ser imprimada. El método Despliega_descripcion (): Que ya fue explicado anteriormente. Este método imprime la descripción de la materia perteneciente al código de mayor nota asociado al estudiante de mayor puesto académico. Recibe por argumento la variable que contiene la descripción. El método Lee _ cedula (): Este método se encarga de leer la cedula del estudiante al cual se le desea calcular el promedio. Es de tipo String y devuelve la cedula al método imprime_datos para ser trabajada. El método Despliega_promedio (): Este método se encarga de imprimir el promedio calculado en la clase Estudiante. Lo recibe mediante argumento desde el método imprime_datos y finalmente invoca al método Salida() que es explicado posteriormente. El método Salida (): Este método es invocado desde el método Despliega_promedio () E imprime un mensaje indicándole al usuario que ya a terminado la ejecución del programa.

CLASE ESTUDIANTE import java.io.*; class Estudiante { String nombre; String codigo; int puesto; String cedula; String notas; /************************************************************************/ public Estudiante(String nom,String cod,int pues,String ced,String not) { this.nombre=nom; this.codigo=cod; this.puesto=pues; this.cedula=ced; this.notas=not; } /************************************************************************/ public static Estudiante Devuelve_Estudiante_mayor(Estudiante arr[],int n) { int i,menor=10000,aux=2; for(i=0;i
j=0; while(sw==0) { if(datos[j].equals("fin")) sw=1; if(sw==0) { suma=suma+Integer.parseInt(datos[j]); cn=cn+1; } j=j+1; } prom=suma/(cn-1); } } return(prom); } /**********************************************************************/ } Descripción: Esta clase contiene los atributos en los cuales se guardan los datos de los estudiantes a la hora de realizar las instancias además contiene dos métodos: El método Devuelve_Estudiante_mayor (): Este método calcula y devuelve al método imprime_datos el objeto estudiante de mayor puesto académico. Recibe el arreglo de objetos y la cantidad de estudiantes (n) por argumento. Lo que hace es recorrer todo el arreglo e ir comparando cada puesto académico del estudiante con una variable inicializada con un valor grande. Si es menor que esta variable se guarda su posición y a la variable de valor grande se le asigna el puesto académico para seguir buscando el mayor. Al final del ciclo se retorna todo el objeto estudiante perteneciente a la posición guardada al método imprime_datos para ser trabajado. El método Calcula_prom (): Este método se encarga de calcular el promedio del estudiante que se leyó su cedula, para ello recibe por argumento el arreglo de objetos, la cantidad n y la cedula a buscar. Lo que hace es comparar cada cedula de los estudiantes con la cedula que se recibe por argumento, si son iguales se le asigna a una cadena el atributo notas que contiene las cadenas de notas separadas por “;” y se separan mediante  split. Luego se hace un ciclo while para recorrer todas las notas de la cadena e ir sumando y contando. Nótese que antes de sumar se compara la nota con la palabra fin para ver si ya hemos llegado al final de la cadena y así poder salir del ciclo. Si esto ocurre, a prom le asignamos la suma entre el contador y este es el promedio del estudiante que es retornado al método imprime_datos para ser trabajado. Nótese que este método es de tipo float ya que calcula el promedio. El contador es reducido en 1 ya que contamos el numero 0 que marca el inicio de la cadena de notas a la hora de sacar el promedio.

CLASE ASIGNATURA import java.io.*; import java.lang.*; class Asignatura { /************************************************************************/ public static String Compara(String cod)throws IOException { String cadena="No existe"; String cadena1=""; String cadena2=""; String cadena3=""; boolean b; FileReader arch1 = new FileReader("datos.txt"); BufferedReader in = new BufferedReader(arch1); String s =new String(); cadena2=""+cod+""; while((s=in.readLine())!= null) { cadena1=s; String[] datos = cadena1.split(";"); cadena3=datos[0]; b=cadena2.equals(cadena3); if(b) cadena=datos[1]; } in.close(); return(cadena); } /************************************************************************/ } Descripción: Esta clase es la que permite buscar en el archivo el código de la asignatura de mayor nota relacionado al estudiante de mayor puesto académico. Recibe por argumento el código de la asignatura y se compara con cada código de la lectura por línea que realiza esta clase del archivo. Al leer una línea se le asigna a una cadena, esta cadena se descompone en dos cadenas mediante split ya que las dos cadenas están separadas por “;”.. Una con el código y la otra con la descripción. Comparamos el código recibido con el código separado, si son iguales en otra cadena se guarda la descripción. Al final se retorna esta cadena al método Despliega para ser trabajada. Nótese que la cadena que guarda la

descripción se inicializó con la cadena “No existe”, para indicar que si el código no se encuentra imprima que no existe.

EJECUCIÓN DEL PROGRAMA

En esta ventana leemos la cantidad De estudiantes que tiene el grupo.

Leemos su cedula.

Leemos el código de la asignatura de mayor nota.

Leemos el nombre del estudiante 1.

Leemos su puesto académico.

Leemos la cantidad de notas que presentó.

Leemos la nota numero 1.

Leemos la nota numero 3.

Leemos su cedula.

Leemos la nota numero 2.

Leemos el nombre del Estudiante numero2.

Leemos su puesto académico.

Leemos el código de la asignatura de mayor nota.

Leemos la nota 1.

Leemos la nota 3.

Leemos la cantidad de Notas que presento.

Leemos la nota 2.

Leemos la nota 4.

Leemos el nombre del estudiante 3.

Leemos su cedula.

Leemos su puesto académico.

Leemos el código de la Asignatura de mayor nota

Leemos la cantidad de notas Que presento el estudiante.

Leemos la nota 1.

Leemos la nota 2.

Este mensaje índice que vamos A imprimir los datos de los Estudiantes.

Con este mensaje le indicamos al usuario que se van a imprimir los datos del estudiante de mayor puesto académico.

Aquí pedimos la cedula para Encontrar el promedio de un Estudiante.

Aquí vemos el promedio del Estudiante evaluado.

Aquí salimos del programa.

Este es el archivo que guarda el código y las descripciones de las materias.

COMENTARIO Fernando: En lo que respecta a este laboratorio, fue mucho más fácil que el primero ya que trabajar con un arreglo de objetos es bastante práctico y muy fácil, buscar el código en el archivo e imprimir la materia se tornaba algo difícil pero al final no fue mayor cosa. El encapsulamiento no fue mayor problema ya que solo había que declarar los métodos privados y que la clase que los tenía las llamara sin necesidad de que el main u otra clase intervinieran.

Norberto: Este trabajo fue un poco mas sencillo que el del laboratorio numero 1 ya que la encapsulación fue mas entendible para mi y por consiguiente la creación del mismo problema en si no tubo mayor inconveniente aunque l problema fue la entrega del mismo ya que se nos presentaron distintos imprevistos y no nos permitió entregarlo en el momento que se pidió.

Conclusión Este trabajo se baso en la encapsulación de variables de instancia en problemas de archivos los cuales son en general la creación de una variable que no pueda ser utilizada por otros métodos de otras clases este problema requería el empleo de archivos y la manipulación de dicho archivo. Este trabajo fue creado con la función de mejorar y afianzar el conocimiento de nosotros los programadores de java y por consiguiente todo lo que conlleva la manipulación de java. Espero que este trabajo haya sido de su agrado ya que a nosotros nos permitió el manejo de variables privadas y publicas y así tener mas conocimiento de java y así tener mas entendimiento de java y de todos sus maneras de implementación.

Related Documents

Proyecto2
May 2020 4
Proyecto2
June 2020 7
Proyecto2
May 2020 6
Proyecto2
November 2019 9
Encapsulacion Lab
November 2019 18
Proyecto2.docx
November 2019 23