Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
UNIVERSIDAD DE CÓRDOBA INGENIERIA DE SISTEMAS ING. MARIO MACEA ANAYA Tutor. Lógica Computacional RETOMAMOS EJERCICIO D Ejercicio Diseñar una clase que permita calcular el total de estudiantes de un colegio teniendo en cuenta que el colegio tiene 6 salones los cuales se distribuyen de la siguiente manera. El grado primero tiene X estudiantes, el grado segundo tiene 1/3 que el grado primero, el grado tercero es dos veces el grado 2, el grado cuarto tiene Y estudiantes, el quinto grado tiene ½ de cuarto grado más el total de segundo, 6º tiene1/8 de la población estudiantil anterior. Del diseño general pasamos a uno más particular con los siguientes pasos: 1. Asignamos un tipo de dato a los atributos, en este caso trabajaremos tipos de datos int que nos indica que trabajaremos con números enteros. Para proteger los atributos los declaramos en una sección privada (private) para que solo pueden ser accedidos por los métodos de la misma clase, los descendientes no tienen acceso a ellos. Sintaxis: private int e_1; int e_4; 2. Definimos nuestro método constructor. Constructor: Este métodos constituye la operaciones de inicialización de valores para los atributos, como también la inicialización de las estructuras internas de las clases (direccionamiento de memoria), por ende deben ser los primeros en ser activados al momento de utilizar la clase. Se caracteriza por tener el mismo nombre de la Clase. Sintaxis: Total_Estudiante () { e_1 = 0; e_4 = 0; } UNIVERSIDAD DE CÓRDOBA INGENIERIA DE SISTEMAS ING. MARIO MACEA ANAYA Tutor. Lógica Computacional 3. Segundo aplicamos regla de encapsulado para los atributos y métodos. a) Para los atributos. “Establece que para acceder a los atributos, asignarles valores o leer los datos guardados en ellos se deben definir métodos especializados en dichas operaciones de tal manera que los atributos sean manejados por medio de la activación de dichos métodos.” Para asignar valores a los atributos creamos los métodos pedirE_1 () que guarda datos en el atributos E_1 y pedirE_4 () que guarda datos en el atributo E_4. A estos métodos se les conocen como procedimientos Sintaxis: public void pedirE_1 (int x) { e_1 = x; } Donde x es un parámetro por valor utilizado solamente para introducir valores al método que lo procesa. Debe ser del mismo tipo de dato del atributo declarado en este caso un tipo de dato entero (int). Para leer los valores guardados en los atributos y utilizarlos en las operaciones creamos los métodos obtE_1 () que retorna el datos del atributos E_1 y obtE_4 () que retorna el datos del atributo E_4. Sintaxis: public int obtE_1 ( ) { return e_1; } Nota: Como el método devuelve un valor este debe tener un tipo de dato definido en este caso un tipo de dato entero (int). UNIVERSIDAD DE CÓRDOBA INGENIERIA DE SISTEMAS ING. MARIO MACEA ANAYA Tutor. Lógica Computacional b) Par los métodos “Determinando sobre éstos un criterio de unicidad funcional, es decir, que un método debe encargarse de realizar una tarea (proceso) única; De esta forma una clase define tantos métodos como tareas deba efectuar.” Sintaxis: public int calcular_Est_2() { int g_2 = 0; g_2 = obtE_1 ( ) * 1/3; return g2; } A estos métodos se les conocen como funciones: Al igual que los procedimientos, una función constituye un método que realiza operaciones sobre datos de un tipo específico; datos que son leídos desde los atributos, otros métodos de la clase y/o pasados por parámetros, pero que a diferencia de los procedimientos, las operaciones efectuadas sobre dichos datos devuelven uno y solo un valor que por supuesto tiene un tipo definido y el cual caracteriza el tipo de la función. Nota: Como el método devuelve un valor este debe tener un tipo de dato definido en este caso un tipo de dato entero (int). g_2, es una variable local es decir que solo la podrá utilizar el método calcular_Est_2 ( ), y que inicializamos asignándole el valor de cero (0). A g_2 le asignamos la operación de tomar lo que nos retorna el método obtE_1 ( ), este caso el valor guardado en el atributo e_1 (el total de estudiantes del grado 1) y lo multiplicamos por 1/3. UNIVERSIDAD DE CÓRDOBA INGENIERIA DE SISTEMAS ING. MARIO MACEA ANAYA Tutor. Lógica Computacional La implementación de los métodos de la clase en Java quedaría de la siguiente forma: public class Total_Estudiantes { private int e_1; int e_4; // Sección privada donde declaro el atributo e_1 y e_4. public Total_Estudiantes( ) // Método Constructor de objectos de clase Total_Estudiantes. { e_1 = 0; // inicializa instancia atributo. e_4 = 0; } DISEÑO UML ESQUEMA LENGUAJE JAVA clase Total_Estudiante class Total_Estudiante { private int e_1; int e_4; public Total_Estudiante ( ) {implementación } void pedirE_1 (int x) { impl } void pedirE_4 (int y) { impl } int obtE_1 ( ) { impl } int obtE_4 ( ) { impl } int calcular_Est_2 ( ) { impl } int calcular_Est_3 ( ) { impl } int calcular_Est_5 ( ) { impl } int calcular_Est_6 ( ) { impl } int calcular_Total_Est ( ) { impl } void mostrar_Resultados ( ) { impl } } int e_1 int e_4 Total_Estudiante ( ) { } void pedirE_1 (int x) { } void pedirE_4 (int y) { } int obtE_1 ( ) { } int obtE_4 ( ) { } int calcular_Est_2 ( ) { } int calcular_Est_3 ( ) { } int calcular_Est_5 ( ) { } int calcular_Est_6 ( ) { } int calcular_Total_Est ( ) { } void mostrar_Resultados ( ) { } UNIVERSIDAD DE CÓRDOBA INGENIERIA DE SISTEMAS ING. MARIO MACEA ANAYA Tutor. Lógica Computacional //Método: procedimiento (No retorna valor) para asignar valor al atributo a través parámetro por referencia public void pedirE_1 (int x) { e_1 = x; } public void pedirE_4 (int y) { e_4 = y; } //Método: función (siempre retorna un valor de algún tipo de dato), su función es obtener valor del atributo public int obtE_1 ( ) { return e_1; } public int obtE_4 ( ) { return e_4; } //Función que nos nos permite calcular en Nro de estudiantes del grado 2 //la función nos retorna el resutado de la operación gradada en la variable local g_2. public int calc_Est_2 ( ) { int g_2 ; //variable local, se crea cuando se ejecuta el método calc_Est_2( ). g_2 = (obtE_1() / 3); // realiza la operación y lo asigna a variable g_2. return g_2; //valor que retorna la función calc_Est(). } public int calc_Est_3 ( ) { int g_3; g_3 = calc_Est_2() * 2; return g_3; } public int calc_Est_5 ( ) { int g_5; g_5 = (1/2 * obtE_4())+ calc_Est_2(); return g_5; } UNIVERSIDAD DE CÓRDOBA INGENIERIA DE SISTEMAS ING. MARIO MACEA ANAYA Tutor. Lógica Computacional public int calc_Est_6 ( ) { int g_6; int pa; pa = (obtE_1( )+calc_Est_2( )+calc_Est_3( )+obtE_4( )+calc_Est_5( )); g_6 = (1/8) * pa; return g_6; } public int calcTotal_E ( ) { int te; te = obtE_1()+calc_Est_2()+calc_Est_3()+ obtE_4()+calc_Est_5()+calc_Est_6(); return te; } public void mostrar_Rdos( ) { System.out.println( " No Estudiantes Grado 1 es : " +obtE_1 ( )); System.out.println ( " No Estudiantes Grado 2 es : " +calc_Est_2 ( )); System.out.println ( " No Estudiantes Grado 3 es : " +calc_Est_3 ( )); System.out.println ( " No Estudiantes Grado 4 es : " +obtE_ 4( )); System.out.println ( " No Estudiantes Grado 5 es : " +calc_Est_5 ( )); System.out.println ( " No Estudiantes Grado 6 es : " +calc_Est_6 ( )); System.out.println ( " El Total de Estudiantes 6 es : " +calcTotal_E ( )); } } UNIVERSIDAD DE CÓRDOBA INGENIERIA DE SISTEMAS ING. MARIO MACEA ANAYA Tutor. Lógica Computacional INSTANCIANDO CLASES Hasta ahora nos hemos dedicado a diseñar e implementar clases que son solución a problemas, pero nos embargan unas preguntas: Bueno y como se usan esas clases? Si funcionan? Como las pruebo? Bien para poder utilizar una clase debemos: Para definir una instancia seguimos la misma regla: Primero definir una instancia de la clase, lo cual es crear una o varias referencias a la clase a través de nombres o identificadores que definimos, como lo hacemos cuando definimos los atributos: Ejemplo: Tipo de Dato Identificador int e_1; Total_Estudiantes rector ; Donde Total_Estudiantes es la clase y rector es la instancia de la clase. Segundo crear la instancia alumno de la siguiente manera: Rector = new Total_Estudiantes ( ); Donde new es una palabra reservada de java que permite crear el espacio de memoria para la instancia. Hay que tener en cuenta que en java cuando se crea la instancia automáticamente se llama el constructor y ejecuta las instrucciones que estén definidas en él, lo cual indica que si lo definimos en la clase con parámetros debemos pasarle los valores en el mismo momento de crear dicha instancia. Tercero hacer el llamado de los métodos así: rector.obtE_1 ( ); rector.calc_Est_3 ( ); rector.calc_Est_6 ( ); UNIVERSIDAD DE CÓRDOBA INGENIERIA DE SISTEMAS ING. MARIO MACEA ANAYA Tutor. Lógica Computacional Cuando los métodos devuelven valores debemos guardar los valores que devuelven en variables previamente definidas: Ejemplo float promedio; promedio = rector.calculapromedio ( ); El orden de llamado de los métodos depende exclusivamente de cómo se requiere resolver el problema, pero tenga en cuenta de llamar los métodos que guardan valores antes de llamar métodos que efectúen operaciones con dichos valores. Ejemplo : A continuación instanciamos la clase Total_Estudiantes y activaremos sus métodos, y haremos análisis de lo que sucede. int total; Total_Estudiantes rector; rector = new Total_Estudiantes ( ); rector. pedirE_1 (36); rector.pedirE_4 (46); total = rector.calcTotal_E(); Análisis 1. Definimos la instancia rector de tipo de clase Total_Estudiantes. 2. Creamos la instancia con new, nótese que el constructor no ejecuta instrucción alguna ni tampoco recibe valores como parámetros. 3. Enviamos el valor 36 al atributo e_1 a través del método pedir_E1 ( ). 4. Enviamos el valor 46 al atributo valor a través del método pedir_E4 ( ). 5. A la variable total le asignamos el resultado de las operaciones que realiza el método calcTotal_E ( ). Operaciones del método calcTotal_E(): Se declara la variable local te, a la cual se le asigna operación que llama a los siguientes métodos: UNIVERSIDAD DE CÓRDOBA INGENIERIA DE SISTEMAS ING. MARIO MACEA ANAYA Tutor. Lógica Computacional El método obtE_1 ( ), el cual retorna el valor del atributos e_1. El método calcular_Est_2 ( ), asigna a la variable local g_2 la operación que a su vez llama al método obtE_1( ), le calcula el 1/3 y lo que retorna el método se lo suma a obt_1 ( ). El método calcular_Est_3 ( ), asigna a la variable local g_3 la operación que a su vez llama al método calcular_Est_2 ( ), lo multiplica por 2 y lo que retorna el método se lo suma al anterior. El método obtE_4 ( ), el cual retorna el valor del atributos e_4 y lo que retorna el método se lo suma al anterior. El método calcular_Est_5 ( ), asigna a la variable local g_5 la operación que a su vez llama al método obtE_4 ( ) y el calcula 1/2, ese valor se lo suma a lo que retorna el método calcular_Est_2 ( ). y lo que retorna el método se lo suma al anterior- El método calcular_Est_6 ( ), primero asigna a la variable local pa (población anterior) la operación que llama a todos los métodos obtE_1 ()+ calcular_Est_2 ()+calcular_Est_3 ()+obtE_5 ()+calcular_Est_3 (). Como segundo se asigna a la variable local g_6, la operación de multiplicar 1/8 por lo que está guardado en la variable pa y se lo suma al anterior Después de analizar cómo se usan las clases a través de su instancia al lector le pueden embargar otras preguntas como: Donde escribo el código que define y crea las instancias? Para responder la primera pregunta lo que se debe realizar es crear una clase en java que implemente el siguiente método: public static void main(String args[ ]) Escribiendo dentro del código correspondiente a la definición de la instancia y al llamado de los métodos respectivos. Ejemplo de uso de la clase Restaurante: UNIVERSIDAD DE CÓRDOBA INGENIERIA DE SISTEMAS ING. MARIO MACEA ANAYA Tutor. Lógica Computacional //Instancia del programa principal utilizando clase BufferedReader import java.io.*; import java.io.BufferedReader; //clase que nos permite el ingreso de datos por teclado public class PpalT_Est { public static void main(String[ ] args) { Total_Estudiantes rector; rector = new Total_Estudiantes(); int m,n; // Clase BufferedReader y InputStreamReader para leer datos por teclado BufferedReader br = new BufferedReader (new InputStreamReader(System.in)); try { System.out.println (" Digite # de estudiantes grado 1"); // Se pide un dato al usuario, y se guarda como String m = Integer.parseInt(br.readLine()); // Se transforma la entrada anterior en un entero rector.pedirE_1(m); el Objeto rector hace un llamado al método pedirE_1 ( ) que lleva lo guardado en m System.out.println (" Digite# de estudiantes grado 4"); n = Integer.parseInt(br.readLine()); rector.pedirE_4(n); } catch (IOException varerror) {System.out.println("Error");} System.out.println (" El # estudiantes por grado y el total es : "); rector.mostrarRdos ( ); } } Nota: Definimos la instancia rector de tipo de clase Total_Estudiantes. Creamos la instancia rector con new Total_Estudiantes ( ), lo que nos crea el vínculo para acceder a los métodos de la clase Total_Estudiantes Como se observa en pantallazo UNIVERSIDAD DE CÓRDOBA INGENIERIA DE SISTEMAS ING. MARIO MACEA ANAYA Tutor. Lógica Computacional Observe que encabezado incluye la instrucción import java.io.*; Esto es para poder utilizar las clases de entrada y salida. Además la instrucción System.out.println se usa para mostrar por pantalla el resultado de cualquier operación o para mostrar mensajes al usuario. BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); En esta instrucción se crea una instancia de la clase bufferedReader que java tiene implementada y la llamamos br la cual es capaz de leer caracteres desde el teclado. br.readLine(); El objeto br, hace un llamado al método readline que permite leer una línea de caracteres por pantalla y guardarla en los atributos donde se asigne. Integer.parseInt; Convierte la cadena leída en datos enteros y este valor convertido debe asignarse a un datos de tipo entero (integer) en este ejemplo. Todo esto se debe realizar dado que en java lo que se captura son cadenas de caracteres y debemos hacer las conversiones a sus valores numéricos correspondiente. NOTA: BufferedReader para lectura de datos en Java Como pudimos ver en el código anterior, ha sido bastante sencillo obtener la entrada del usuario y almacenar ese valor en una variable. El único "problema" es que BufferedReader únicamente posee el método readLine() para leer la entrada y este siempre retorna String, de modo que para obtener un número debemos leer primero como String y luego enviarle dicho String al método parseInt() de la clase Integer. Hay que ser muy cuidadosos con Integer.parseInt() pues si el usuario no ingreso un número sino letras, se disparará una excepción que debemos controlar. UNIVERSIDAD DE CÓRDOBA INGENIERIA DE SISTEMAS ING. MARIO MACEA ANAYA Tutor. Lógica Computacional //Instancia del programa principal utilizando clase Scanner import java.io.*; import java.util.Scanner; //clase del paquete util que nos permite el ingreso de datos por teclado public class PpalT_Est { public static void main(String[ ] args) { int m,n; Total_Estudiantes rector; rector = new Total_Estudiantes(); // Clase Scanner utilizada para obtener los datos de entrada Scanner sc = new Scanner(System.in); System.out.println (" Digite # de estudiantes grado 1"); // Se pide un dato al usuario, y se guarda como String m = Integer.parseInt(sc.nextLine( )); // Se transforma la entrada anterior en un entero rector.pedirE_1(m); el Objeto rector hace un llamado al método pedirE_1 ( ) que lleva lo guardado en m System.out.println (" Digite # de estudiantes grado 4"); n = Integer.parseInt(sc.nextLine( )); rector.pedirE_4(n); System.out.println (" El # estudiantes por grado y el total es : "); rector.mostrarRdos ( ); } } Definimos la instancia rector de tipo de clase Total_Estudiantes. Creamos la instancia rector con new Total_Estudiantes ( ), lo que nos crea el vínculo para acceder a los métodos de la clase Total_Estudiantes Como se observa en pantallazo UNIVERSIDAD DE CÓRDOBA INGENIERIA DE SISTEMAS ING. MARIO MACEA ANAYA Tutor. Lógica Computacional NOTA: Scanner para lectura de datos en Java La clase Scanner está disponible a partir de Java 5 y facilita la lectura de datos en los programas Java. Para utilizar Scanner en el programa tendremos que hacer lo siguiente: 1. Escribir el import La clase Scanner se encuentra en el paquete java.util por lo tanto se debe incluir al inicio del programa la instrucción: import java.util.Scanner; 2. Crear un objeto Scanner Tenemos que crear un objeto de la clase Scanner asociado al dispositivo de entrada. Si el dispositivo de entrada es el teclado escribiremos: Scanner sc = new Scanner(System.in); Se ha creado el objeto sc asociado al teclado representado por System.in Una vez hecho esto podemos leer datos por teclado. Otra forma de realizar lectura: Para leer podemos usar el método nextXxx() donde Xxx indica en tipo, por ejemplo nextInt() para leer un entero, nextDouble() para leer un double, etc. Ejemplo de lectura por teclado de un número entero: int n; System.out.print("Introduzca un número entero: "); n = sc.nextInt(); Ejemplo de lectura de un número de tipo double: double x; System.out.print("Introduzca número de tipo double: "); x = sc.nextDouble(); Ejemplo de lectura de una cadena de caracteres: String s; System.out.print("Introduzca texto: "); s = sc.nextLine(); UNIVERSIDAD DE CÓRDOBA INGENIERIA DE SISTEMAS ING. MARIO MACEA ANAYA Tutor. Lógica Computacional //Instancia del programa principal utilizando clase JOptionPane import javax.swing.JOptionPane; ; //clase del paquete javax.swing permite crea cuadro de diálogos import static java.lang.Integer.parseInt; // analiza el argumento de la cadena s como un entero decimal con signo. public class PpalT_Est { public static void main(String[ ] args) { int m,n; Total_Estudiantes rector; rector = new Total_Estudiantes(); m=Integer.parseInt(JOptionPane.showInputDialog(null," Digite # de estudiantes grado 1")); rector. pedirE_1 (m); el Objeto rector hace un llamado al método pedirE_1 ( ) que lleva lo guardado en m n=Integer.parseInt(JOptionPane.showInputDialog(null," Digite # de estudiantes grado 4")); rector. pedirE_4 (n); el Objeto rector hace un llamado al método pedirE_1 ( ) que lleva lo guardado en m JOptionPane.showMessageDialog(null, " El # estudiantes del grado 1 es : " +rector.obtE_1()); JOptionPane.showMessageDialog(null, " El # estudiantes del grado 2 es : " +rector.calc_Est_2()); JOptionPane.showMessageDialog(null, " El # estudiantes del grado 3 es : " +rector.calc_Est_3()); JOptionPane.showMessageDialog(null, " El # estudiantes del grado 4 es : " +rector.obtE_4()); JOptionPane.showMessageDialog(null, " El # estudiantes del grado 5 es : " +rector.calc_Est_5()); JOptionPane.showMessageDialog(null, " El # estudiantes del grado 6 es : " +rector.calc_Est_6()); JOptionPane.showMessageDialog(null, " El # total de estudiantes es : " +rector.calcTotal_E()); } } Definimos la instancia rector de tipo de clase Total_Estudiantes. Creamos la instancia rector con new Total_Estudiantes ( ), lo que nos crea el vínculo para acceder a los métodos de la clase Total_Estudiantes Como se observa en pantallazo UNIVERSIDADDE CÓRDOBA INGENIERIA DE SISTEMAS ING. MARIO MACEA ANAYA Tutor. Lógica Computacional
Compartir