UNIVERSIDAD DE PANAMÁ CENTRO REGIONAL UNIVERSITARIO DE VERAGUAS Escuela: Ingeniería en informática Facultad: Informática electrónica y comunicación Carrera: Licenciatura en informática para la gestión educativa y empresarial Asignatura: Programación IV. Laboratorio: Laboratorio #5 – Encapsulación.
Facilitado por: Santimateo, Diego Integrantes: Irving Corro
9-713-136
Carlos Alvarez H 9-718-2419
Fecha de entrega: 2008-29-08
INTRODUCCIÓN Proceso de ocultación de todos los detalles de una entidad que no contribuyen a sus características esenciales. La encapsulación es la capacidad de un objeto de ser un contenedor (o cápsula) de sus propiedades y comportamiento. Esto significa que los datos o variables y el código del objeto deben estar ocultos detrás de la interfaz. La idea es que la interfaz (método público en una clase) que esté bien diseñada y en consecuencia sea permanentemente consistente, permita interactuar con los objetos aún cuando se den cambios en sus respectivos códigos. En el siguiente documentos mostramos como podemos encapsular los atributos de un objeto y como se pueden usar estos datos de el objeto. Se creo un programa en java que orientado a objetos 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
estudiantes de un grupo. El programa determina el nombre del
estudiante con mayor puesto y desplegar la descripción de la asignatura con mayor calificación También en otra clase captura las M notas de los N estudiantes, con sus respectivos nombres y cédulas y estas se despliegan en pantalla dependiendo de que cedula introducimos en la búsqueda
ENUNCIADO DEL PROBLEMA 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. 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.
OBJETIVO Crear un programa en Java orientado a objetos para capturar 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 y determinar el nombre del estudiante con mayor puesto desplegando la descripción de la asignatura con mayor calificación. Capturar las M notas de los N estudiantes, sus respectivos nombres y cédulas. Leer una cédula para saber a que estudiante se le debe calcular y desplegar el promedio.
MÉTODOS Y CLASES DE JAVA USADOS EN LA SOLUCIÓN DEL PROBLEMA PROPUESTO Clase FileReader: Está orientadas a manejar ficheros de texto, Permitiendo tanto operaciones de lectura. Clase BufferedReader: Mantiene un buffer de lectura/escritura que permite optimizar el número de accesos a fichero, haciéndolos muy útiles en operaciones de entrada/salida. Clase String: Para la creación de objetos String o manipulación de ellos. Métodos Usados: • •
Indexof (): Devuelve el índice de la primera aparición del objeto String especificado en la instancia en cuestión. equals(): se utiliza para saber si dos objetos separados son del mismo tipo y contienen los mismos datos. El método devuelve true si los objetos son iguales y false en caso contrario.
•
Split:tLa función split pone cada elemento encontrado en una posición del vector de Strings, para mostrar los elementos sólo hace falta recorrerlo.
•
Length: devuelve la longitud de la cadena o de un vector.
Clase Integer: una clase empleada para representar al tipo básico int, y para transformar de String a int, pero puede lanzar excepciones • parseInt(): transforma de la cadena a entero. Clase JOptionPane: Para el uso de cuadros de dialogo. Métodos Usados • •
JOptionPane.showMessageDialog: Para enviar un mensaje por medio de una ventana. JOptionPane.showInputDialog: envia un mensaje por medio de una ventana en la cual podemos introducir un valor, carácter o cadena.
DIAGRAMA UML
Class Principal
Class Principal2
Main
Main
Class Asignatura NomAsigEncon Asignatura( ) AbreAr( )
Class Estudiante nombre cedula codigo puesto notas[ ] promedio1 asignatura Estudiante( ) Buscamayor( ) Datos( ) Datos2( ) CalculaPromedio( ) BuscaCedula( )
Class CapturaDespliega CadDatos CapNumEst( ) Captura( ) Captura2( ) DevCadena( ) Despliega( ) CapturaCedula( )
FUNCIONAMIENTO DE LAS CLASES UTILIZADAS
Clases
Class Asignatura
Class Estudiante
Descripción del Funcionamiento de las Clase Atributos Métodos private String NomAsigEncon: public Asignatura() Variable de instancia, se le asigna el Constructor, asigna a la variable de instancia nombre de la asignatura encontrada el nombre de la asignatura. en el archivo. private String AbreAr( ) Abre el archivo y retorna el nombre de la asignatura. private String nombre; variable de instancia, que se le asigna el nombre del estudiante private String cedula; variable de instancia, que se le asigna la cedula del estudiante private String codigo; variable de instancia, que se le asigna el código de la asigantura private int puesto; variable de instancia, que se le asigna el puesto de la asignatura de mayor índice académico private int notas[]; vector que se le asignan las notas de la asignatura, private double promedio1; private String asignatura; variable de instancia, que se le asigna el nombre de la asignatura encontrada en el archivo, por medio del código.
public Estudiante() Constructor, asigna a las variables instancia los datos del estudiante
de
public Estudiante Buscamayor() Método, busca el estudiante con mayor puesto academico. public String Datos() Método, devuelve en una cadena con los datos del estudiante, utilizada en la clase principal.. public String Datos2() Método, devuelve en una cadena con los datos del estudiante, utilizada en la clase principal2. public double CalculaPromedio() Método, calcula el promedio de las notas del estudiante. public Estudiante BuscaCedula() Metodo, busca la cedula del estudiante en el
vector de opbjeto. public CapturaDespliega() Constructor, asigna a la variable de instancia la cantidad de estudiantes. private String CadDatos variable de instancia, que contiene public int CapNumEst() el numero de estudiantes. Método, captura el numero de estudiantes Class CapturaDesliega
public void Captura() Método, captura datos del estudiante para la clase principal public void Captura2() Metodo, captura datos del estudiante pa la clase principal2 public String DevCadena() Método, devuelve los datos de el estudiante en una cadena
Class CapturaDesliega
private String CadDatos variable de instancia que contiene el numero de estudiantes. public void Despliega() Método, despliega los datos del estudiante
public String CapturaCedula() Método, captura la cedula del estudiante a buscar
CLASE PRINCIPAL O MAIN import java.io.*; import java.lang.String; import javax.swing.*; class principal{ public static void main(String[] args)throws IOException { CapturaDespliega DatCap= new CapturaDespliega(); int k = DatCap.CapNumEst();//Captura numero de estudiantes Estudiante [] ToEst= new Estudiante[k];//Crea vector de objetos Asignatura Asig = new Asignatura();//Crea objeto int i; String CadenaDevuelta; String AsignaturaDevuelta; String DatTok[]; int Posicion; for (i=0;i
Estudiante datmay = EstMay.Buscamayor(ToEst);//Busca el estudiante de mayor poscicion DatCap.Despliega(datmay.Datos());//Despliega datos de el estudiante de mayor puesto }//fin del main } CLASE PRINCIPAL2 O MAIN } import java.io.*; import java.lang.String; class principal2{ public static void main(String[] args)throws IOException { CapturaDespliega DatCap= new CapturaDespliega();//Crea objeto int k = DatCap.CapNumEst();//Captura nmero de estudiantes Estudiante [] ToEst= new Estudiante[k];//Crea vector de objeto Estudiante prom=new Estudiante();// Crea objeto int i,j; int z=0; String CadenaDevuelta; for (i=0;i
Estudiante EstMay=new Estudiante(); Estudiante datmay = EstMay.BuscaCedula(ToEst,cedula);//Busca la cedula DatCap.Despliega(datmay.Datos2());// Despliega datos de el estudiante }//fin del main Clase Estudiante import javax.swing.*; class Estudiante{ private String nombre; private String cedula; private String codigo; private int puesto; private int notas[]; private double promedio1; private String asignatura; public Estudiante(){//constructor } public Estudiante(String nom,String cedU,String cod,int pues,String asinatura1){ this.nombre=nom; this.cedula=cedU; this.puesto=pues; this.codigo=cod; this.asignatura=asinatura1; } public Estudiante(String nom,String cedU,int not[],double prome1){//constructor this.nombre=nom; this.cedula=cedU; this.notas=not; this.promedio1=prome1; } //////////////////////////////////////////////////////////////////////////////////////////////////////// public Estudiante Buscamayor(Estudiante ToEst[]){//Busca en el vector de estudiantes a la persona que ocupa el primer puesto Estudiante aux; aux=ToEst[0]; for (int i=0;i < ToEst.length;i++) if (ToEst[i].puesto < aux.puesto){ aux=ToEst[i]; } return(aux); }
//////////////////////////////////////////////////////////////////////////////////////////////////////// public String Datos(){// Devuelve en una cadena los datos del estudiante String dat1=("Nombre: "+this.nombre+"\nCedula: "+this.cedula+"\n Codigo: "+this.codigo+"\n Puesto: "+this.puesto+"\nAsignatuta: "+this.asignatura); return (dat1); } //////////////////////////////////////////////////////////////////////////////////////////////////////// public String Datos2(){//Devuelve en una cadena los datos del estudiante pa la clase2 String dat1=("Nombre: "+this.nombre+"\nCedula: "+this.cedula+"\n Promedio: "+this.promedio1); return (dat1); } /////////////////////////////////////////////////////////////////////////////////////////////////////// public double CalculaPromedio(int notas[]){//Calcula el promedio int suma=0; int i; double promedio1; for(i=0;i<notas.length;i++){ suma=suma+notas[i]; } promedio1= suma/notas.length; return(promedio1); } /////////////////////////////////////////////////////////////////////////////////////////////////////// public Estudiante BuscaCedula(Estudiante ToEst[] , String cedula1){// busca la cedula en el vector de estudiante. Estudiante aux; aux=ToEst[0]; for (int i=0;i < ToEst.length;i++) if(ToEst[i].cedula.indexOf(cedula1)>=0) { JOptionPane.showMessageDialog(null,"Cedula encontrada","Información del estudiante",JOptionPane.INFORMATION_MESSAGE); aux = ToEst[i]; } else{ aux=null; } return(aux); }
/////////////////////////////////////////////////////////////////////////////////////////////////////// }
Clase CapturaDespliega import java.io.*; import javax.swing.*; class CapturaDespliega{ private String CadDatos; public CapturaDespliega(){ } //////////////////////////////////////////////////////////////////////////////////////////////////////// public int CapNumEst(){//captura el numero de estudiantes this.CadDatos=JOptionPane.showInputDialog(null, estudiantes"); int CantEst=Integer.parseInt(CadDatos); return(CantEst);
"Numero
de
} //////////////////////////////////////////////////////////////////////////////////////////////////////// public void Captura(){// captura datos del estudiante para la clase principal this.CadDatos=JOptionPane.showInputDialog(null, "Nombre,cedula,Codigo de mayor asignatura,\nPuesto academico\n Despues de cada dato introducido coloque una coma"); } //////////////////////////////////////////////////////////////////////////////////////////////////////// public void Captura2(){// captura datos del estudiante pa la clase principal2 this.CadDatos=JOptionPane.showInputDialog(null, "Nombre, cedula, Notas\n Despues de cada dato introducido coloque una coma"); } //////////////////////////////////////////////////////////////////////////////////////////////////////// public String DevCadena(){//Devuelve los datos de el estudiante en una cadena String cadena = CadDatos; return(cadena); } //////////////////////////////////////////////////////////////////////////////////////////////////////// public void Despliega( String dat){//Despleiga los datos del estudiante JOptionPane.showMessageDialog(null,dat,"Información del estudiante",JOptionPane.INFORMATION_MESSAGE); } //////////////////////////////////////////////////////////////////////////////////////////////////////// public String CapturaCedula(){//captura la cedula del estudiante a buscar
String cedula; cedula = JOptionPane.showInputDialog(null, "Introduzca la cedula de el estudiante a buscar"); return(cedula); } } CLASE ASIGNATURA import java.lang.*; import java.io.*; import java.util.*; import javax.swing.*; class Asignatura{ private String NomAisgEncon; //private String codigo; public Asignatura(){//constructor } public String AbreAr(String DatTok[]){// Abre el archivo donde se encuentran las asignaturas y el codigo de asigantura try { int j=0; String linea; FileReader arch1 = new FileReader("Datos.txt"); BufferedReader in = new BufferedReader(arch1); String s = new String(); while((s = in.readLine())!= null){ //lectura del archivo if(s.indexOf(DatTok[2])>=0) { linea = s; String [] campos = linea.split(" "); while(j
{ System.err.println("***Error al leer o abrir el archivo...\n" +e); } return(this.NomAisgEncon);
}
}//fin de la clase
PROGRAMA EN EJECUCIÓN Clase principal
Se le pide al usuario que introduzca el número de estudiantes para entonces así crear un vector de objetos del tamaño indicado por el usuario.
En pantalla se le pide al usuario que introduzca los datos del estudiante separados por coma, para posteriormente a esto realzarle un split o cortes a la cadena y separa los datos en donde encuentre una coma en la cadena.
Se despliegan en pantalla los datos del estudiante que ocupa la posición más alta.
En este paso introduje un codigo que no se encuentra en el archivo de texto.
Al no encontrarse en código envía una mensaje indicándole que no se encuentra el codigo por lo tanto debe volver a introducir los datos.
Al equivocarse en la introducción del codigo deberá volver a introducir los datos
PROGRAMA EN EJECUCIÓN Clase principal2
Se le pide al usuario que introduzca el número de estudiantes para entonces así crear un vector de objetos del tamaño indicado por el usuario.
Se introducen los datos de los estudiantes.
Luego se introduce la cedula que será buscada en el vector de objetos para desplegar en pantalla los datos del estudiante, nombre, cedula, promedio.
Al encontrar la cedula en el vector de objeto nos envía un mensaje indicándonos de que la cedula fue encontrada y posterior a esto nos despliega en pantalla la información del estudiante buscado por medio de la cedula con su respectivo promedio.
REFLEXIONES
Irving Corro
9-713-136
Este laboratorio pudimos ver como trabajar con lo que era la encapsulacion de los atributos y me di cuenta de que no se podían acceder a estos atributos, si no que por medio de un método podíamos hacer una copia de estos datos y trabajarlos de esta manera en otra clase, algo muy interesante ya que no hay manera de que pueda ser modificada por cualquiera clase que no sea la en donde ellas se encuentran; Además de la creación de vectores de objeto creados con el constructor, estos eran creados de manera dinámica y de forma muy sencilla y en ella era donde se alojaban los datos que íbamos a trabajar posteriormente. También la forma en como se separaba una cadena con el método split() que mas sencilla que la que usábamos en C# ya que esta no necesitaba de un ciclo ni de un puntero.
Carlos Álvarez H
9-718-2419
En la elaboración de este laboratorio, trabajamos con encapsulacion viendo la diferencia de las clases que tienen atributos publico y privados, aprendiendo a reutilizar la información de los atributos, pero sin modificarlos. Utilizamos dos constructores en la misma clases, e invocándolas cuando era necesario mediante los parámetros requeridos. Aprendí a crear y utilizar los vectores de objetos, que fueron de gran importancia en la elaboración del laboratorio. Este laboratorio utilizamos funciones de java que permitían cortar la cadena capturada por medio de un delimitador, y trabajar con la cadena ya separada, llamando al constructor y asignándolas a las variables de instancia. Esto me ayudo a enfocarme mucho mas en la programación Orientada Objeto, reutilizando los código y así hacer un programa menos extenso.
CONCLUSION La encapsulación es el término de orientación a objetos con el que podemos describir la forma de vincular las operaciones y estados a un objeto particular. La encapsulación está íntimamente relacionada con la ocultación de la información, definiendo qué partes de un objeto son visibles y qué partes están ocultas. La encapsulación abarca a la ocultación de la información. Algunas partes son visibles (el interfaz público) Otras partes son ocultas (o privadas) En resumen, la encapsulación es como la jerarquía de clases que podemos utilizar en java y en otros lenguajes de programación.