LA IMPLEMENTACION DE LOS MÉTODOS Y LA INSTANCIAS DE LAS CLASES
3. 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 :
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 :
int sueldo;
Para definir una instancia seguimos la misma regla: testudiante alumno;
Donde testudiante es la clase y alumno es la instancia de la clase. Segundo crear la instancia alumno de la siguiente manera:
alumno= new testudiante();
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 hallamos definido en el, 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 asi: alumno.AsisgnarNota1(10);
alumno.AsisgnarNota2(50); alumno.AsisgnarNota3(17);
Cuando los métodos devuelven valores debemos guardar los valores que devuelven en variables previamente definidas:
float promedio;
El orden de llamado de los métodos depende exclusivamente de como 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 instaciamos la clase trabajador y activaremos sus métodos, y haremos análisis de lo que sucede.
trabajador empleado; float total;
empleado= new trabajador(); empleado.asignarhoras(36); empleado.asignavalor(3546); total=empleado.Neto();
Analisis
1. Definimos la instancia empleado de tipo de clase trabajador.
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 numerohoras a través del método asignarhoras.
4. Enviamos el valor 3546 al atributo valor a través del método asignavalor.
5. A la variable total le asignamos el resultado de las operaciones que realiza el método neto.
Operaciones del método neto:
• llama al método basico, el cual obtiene el valor de los atributos por intermedio de sus métodos.
• Llama el método descuentoiss y se lo resta a basico.
• Llama a descuentoretencion y también se lo resta al valor devuelto por el básico.
• Llama al método subsidio y se lo suma al básico.
Después de analizar como 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?
Por que se dan valores directamente o es que no se pueden ser definidos por el usuario?
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 de el código correspondiente a la definición de la instancia y al llamado de los métodos respectivos.
Ejemplo de uso de la clase trabajador import java.io.*;
class Principal {
public static void main(String args[]) {
trabajador empleado = new trabajador(); empleado.asignarhoras(36);
empleado.asignavalor(3546);
System.out.println(empleado.Neto()); }
}
Nota: 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. Ahora planteamos un problema y desarrollamos su solución donde se involucren todos los elementos hasta ahora tratados y responda el interrogante de la segunda pregunta de interfaz con el usuario.
Diseñar una clase que permita manejar la información de llamadas en un sai teniendo como base la duración de la llamada y el valor del minuto. Solución class Llamada{ int ValMin,Tiempo; Llamada(){ }
public void LlevaMinuto(int Val) {
ValMin = Val; }
public void LlevaTiempo(int Ti) { Tiempo = Ti; } int TraeMinuto() { return ValMin; } int TraeTiempo() { return Tiempo; } int ValorLlamada() { int Calcula; Calcula = TraeMinuto()*TraeTiempo(); return Calcula;} }
Clase que instancia import java.io.*;
class Principal{
public static void main(String args[]){ Llamada Llamar = new Llamada(); int Vmin = 0;
int Tiem = 0;
BufferedReader Tecla = new BufferedReader(new InputStreamReader(System.in));
try {
System.out.print("Digite el valor del minuto :"); Vmin =Integer.parseInt(Tecla.readLine());
Llamar.LlevaMinuto(Vmin);
System.out.print("Digite el tiempo :"); Tiem =Integer.parseInt(Tecla.readLine());
Llamar.LlevaTiempo(Tiem);
} catch (IOException varerror) {System.out.println("Error");} System.out.println(" ");//mostrar el valor de la llamada
System.out.println("El valor de la llamada "+Llamar.ValorLlamada()); System.out.println(" "); } } Análisis La instrucción try { }catch
Permite capturar algún error ocurrido al escribir los datos y evitamos que se bloquee el programa cuando estemos cargando datos desde el teclado.
BufferedReader Tecla = new BufferedReader(new InputStreamReader(System.in));
En esta instrucción se crea una instancia de la clase bufferedReader que java tiene implementada llamada tecla la cual es capaz de leer caracteres desde el teclado.
Tecla.readLine() Se 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 integer.
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 numericos correspondientes.
Taller
1. Explique para que son los parámetros en los métodos. 2. Concluya para que sirve el encapsulado.
3. Que diferencias existen entre cada uno de los métodos. 4. Explique para que sirven los conectores lógicos
5. Para que se usan las estructuras condicionales. 6. ¿Que es una instancia?
7. ¿Hay diferencia entre instancia y clase?
8. ¿Se puede instanciar una clase varias veces?, ¿como? Diseñe e implemente:
1. Dados tres números calcular el mayor, el menor y el número medio, diseñar e implementar la clase pertinente.
2. Dado el nombre, la edad y sexo de una persona diseñe e implemente una clase en la que el constructor inicialice los atributos, además que determine si la persona es apta para votar teniendo en cuenta que solo votan las personas que cumplan las siguientes condiciones: mujeres mayores de 21 años, hombres mayores de 18 años.
3. diseñe e implemente una clase que dado el nombre, estatura, edad, peso. Determine si esa persona puede practicar o no los siguientes deportes teniendo en cuenta las restricciones:
a. Fútbol : estatura mínima 170, edad máxima 17 años
b. Básquet: estatura mínima 180, edad mínima 16 años máxima 19 años
c. Softbol : peso mínimo 70 kilos , edad mínima 18 años. d. Boxeo : peso máximo 100 kilos, estatura mínima 170. 4. Cree la instancia que utilice la solución del ejercicio 3.
5. Cree una clase que utilice y aplique dos instancias para le solución planteada en el ejercicio 2 y de valores que cumplan para cada condición.
Para consulta se presentan dos ejemplos de clases, una para manejo de ventanas y otra clase para manejo de texto y conversión de números que pueden usar y complementar en el futuro.
import java.awt.*; import java.lang.*; import java.awt.event.*; class MiVentana {
static Frame ventana=new Frame();
static Label Eventana=new Label("Digite un nombre"); static TextField Tventana=new TextField(15);
static Button boton1=new Button("Guardar"); static Button boton2=new Button("Otro"); static int dato=0;
public static void main(String args[]) { ventana.setTitle("manejo de ventanas"); ventana.setLayout(new FlowLayout()); ventana.add(Eventana); ventana.add(Tventana); ventana.add(boton1); ventana.add(boton2); ventana.pack(); ventana.setVisible(true);
boton1.addMouseListener( new MouseAdapter() {public void mousePressed(MouseEvent e) { dato=Integer.parseInt(Tventana.getText()); if (dato <100)
dato =dato+20; else
boton2.addMouseListener( new MouseAdapter() {public void mousePressed(MouseEvent e)
{Tventana.setText(String.valueOf(dato));}}); ventana.addWindowListener(new WindowAdapter()
{public void windowClosing(WindowEvent e) { System.exit(0);}});
} }
Import java.io.*;
public class LeeTeclado { InputStreamReader tecla; BufferedReader teclado; public LeeTeclado() {
tecla = new InputStreamReader(System.in); teclado = new BufferedReader( tecla ); }
public String leerString(){
String valor = new String(); try{
valor = teclado.readLine(); }catch(IOException ioe){
System.out.println("Error de lectura de datos"); valor = "";
}
return valor; }
public int leerEntero(){
int valor = 0; try{
String valorLeido = teclado.readLine(); Integer convierte = new Integer(valorLeido); valor = convierte.intValue();
}catch(IOException ioe){
System.out.println("Error de lectura de datos"); valor = 0;
}
return valor; }
CAPITULO III