Logo Studenta

EJERCICIO PRACTICO DE INFORMATICA

¡Este material tiene más páginas!

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

Continuar navegando