Manual de Java
Manual de Java
com
Manual de Java
Por Manuel Ortez - [email protected]
1. Presentación
2. Introducción a la Programación Orientada a Objetos
3. Introducción al Lenguaje de Programación Java
4. Entorno Gráfico y Applets
5. Cadenas de Caracteres, Métodos Matemáticos y Excepciones
6. Sentencias de Control
7. Arreglos en Java
8. Clases en Java
9. Paquetes, Interfaces y Herencia
10. Hilos
11. Elementos Gráficos en Java
12. Bibliografía
Presentación
Como ya lo hice una vez, con el Manual de C; es realmente para , mi un verdadero privilegio el poder
presentar parte del aprendizaje colectado durante éste año.
Pero ésta vez, en un documento que, pretende como principal fin, el servir como guía al estudiante en
su aprendizaje de éste interesantísimo y actual lenguaje de programación.
A diferencia de C, considero respecto a Java, podemos encontrar una gran cantidad de recursos
didácticos para la enseñanza-aprendizaje, de dicho lenguaje de programación, recursos, que dicho
sea de paso; son de excelente calidad.
Sin embargo, no es mi intención el quedarme atrás sin aportar un granito de mostaza, a la
comunidad de programadores, y aquellos que inician esta aventura, en Java.
Una aventura que, puede ser de gran utilidad en nuestra vida como programadores profesionales,
debido a gran cantidad de aplicaciones que Java posee, no sólo en área de la programación, sino
también en el entretenimiento y en la web.
Finalmente debo recordar que, los sueños no son para los soñadores; sino para aquellos que luchan
y trabajan para hacer que sus sueños se conviertan en una realidad…
Animo y adelante!!!!!
Capítulo I: “Introducción a la Programación Orientada a Objetos”
Nos estamos adentrando a una nueva aventura, en la cual, conoceremos acerca del
interesantísimo, útil y actual lenguaje de Programación: Java.
En esta nueva aventura, es necesario, así como lo hicimos en el Manual de C, iniciar con la parte
aburrida, sí, es necesario que empecemos con mucho: bla-bla-bla..
1.1 Programación Convencional
Como todos sabemos, los programas se componen de procedimientos y datos. Los procedimientos
son los que se encargan de realizar tareas específicas, como calcular la suma de dos números, o
mostrar un Frame en pantalla. Los argumentos (datos que se le pasan a los procedimientos), son
generalmente estructuras globales o se pasan como parámetros.
Java, es un lenguaje de programación Orientado a Objetos…mmm… entonces, ¿qué es la
programación orientada a objetos?... pues bien, es una técnica de programación, que usa los objetos
como secuencia de construcción.
Y, ¿qué es un objeto?, Un Objeto es una colección de datos, junto con las funciones asociadas a
esos datos y que operan sobre ellos.
Lo importante y fundamental de los objetos, son las propiedades de ellos, y éstas son:
• Herencia
• Encapsulamiento o Encapsulación
• Polimorfismo.
Supongo que, al igual que yo, es muy difícil de buenas a primeras comprender la Abstracción de los
objetos, en programación.
Pero no es tan difícil como parece, solo mire a su alrededor… ¿Qué ve?... una lámpara, un
escritorio, una computador, ¿qué es lo que ve?... un sofá, unos libros…. Pues bien, todas las cosas
que usted ve, son objetos. Debemos tener presente que, los humanos pensamos en términos de
objetos.
Por ejemplo, si usted ve una lámpara, inmediatamente la identifica como tal, pero usted sabe que
un lámpara se compone de una base (que puede ser de metal, de porcelana, de plástico), se
compone también de un foco, el cual es el que emite la luz, posee también una cortinilla, que a veces
es sólo cartón forrado, y que sirve como adorno. Etc, etc… pero usted cuando piensa en una lámpara,
NO piensa en los componentes de ésta, sino que piensa en el objeto_lámpara
1.2 Características de los Objetos
Los objetos como tales, presentan muchas cualidades diferentes, respecto a una variable simple.
Entre ellas podemos mencionar las siguientes:
1. Los objetos se pueden agrupar en rubros (o tipos) denominados Clases
2. El estado de los objetos está determinado por los datos del mismo
3. Permite lo que se conoce como Ocultación de datos
4. Pueden heredar propiedades de otros objetos
5. Por medio de los Mensajes un objeto se puede comunicar con otro
6. Los métodos definen el comportamiento de los objetos
Un objeto se puede representar gráficamente de la siguiente manera:
En donde, Nombre, es identificar correspondiente a ese objeto: Por ejemplo Empleados(), Alumnos(),
Datos(), etc, etc.
Los atributos, son los datos con los que operan los métodos (o Funciones) del objeto.
Y las Funciones o Métodos, son las que operan sobre esos datos.
Clases
Se puede decir, que son tipos definidos por el usuario, las cuales determinan la estructura de los
datos y las funciones asociadas con esos tipos.
Las clases como plantillas (que el programador crea). La clase define las variables y los métodos
comunes a los objetos de ese tipo, pero luego, cada objeto tendrá sus propios valores y compartirán
las mismas funciones.
Primero deberemos crear una clase antes de poder crear objetos o instancias (ejemplares) de esa
clase.
¿Qué son los mensajes?
Para poder crear una aplicación se necesita más de un objeto, y estos objetos no pueden estar
aislados unos de otros, para comunicarse esos objetos se envían mensajes.
Los mensajes son simples llamadas a las funciones o métodos del objeto con el se quiere comunicar
para decirle que haga alguna cosa.
¿Qué es la herencia?
La herencia es un mecanismo que permite crear una clase basándose en una clase existente, y ésta
tendrá todas las variables y los métodos de su ‘superclase’, y además se le podrán añadir otras
variables y métodos propios.
Se llama ‘Superclase’ a la clase de la que desciende una clase.
Polimorfismo
(Poli=muchos; morfo=Formas), Polimorfismo, es la cualidad de tener más de una forma. Java,
permite que el código de sus programas tenga la posibilidad de ser usados con diferentes tipos de
datos u objetos.
Por ejemplo, supongamos que A y B son dos variables de tipo entero, entonces, la operación:
C= A+B
Nos devolverá la suma de éstos dos números, el cuyo resultado será guardado en la variable C.
Pero supongamos que A y B son del tipo String (es decir, dos cadenas de caracteres):
String A= “Hola”;
String B= “Bienvenidos a la Programación en Java”;
String C;
C=A+B;
Al tener esa secuencia de commandos, ya no obtendremos como resultado la suma de esos dos
números, sino la concatenación de esas dos cadenas. Por tanto, el resuldao en pantalla, sería el
siguiente:
Después que haya instalado a JGrasp ( si es que está haciendo uso de éste programa), debe abrir
éste programa (JGrasp) y en el menú principal, escoger Setting, luego Compiler Setting y luego
Workspace. Deberá aparecer una ventana, como la que se muestra a la derecha. En ella debe
cerciorarse que en la opción de lenguaje, sea Java y que esté seleccionada las pestaña que dice:
Enviromennt.
Luego seleccionar la carpeta j2sdk 1.5 y dar un clic en el botón copy , aparecerá otra ventana. Luego
debe seleccionar esa copia que acaba de hacer (generalmente aparece hasta el final del listado) y
dar un clic en el botón edit , en la ventana que aparecerá, puede cambiar el nombre de la copia. Y en
la opción llamada V1(%V1) que aparece casi al final de la ventana debe instalar la dirección
completa en la cual se encuentra instalado Java en su máquina (Ejemplo: C:\Archivos de
programa\Java\jdk1.5.0_08\bin\)
Las demás opciones No deben ser modificadas, luego clic en OK. Ahora debe verificar que tiene
seleccionado el ambiente que recién acaba de crear, para ello, seleccione nuevamente el ambiente
que ha creado (la copia de j2sdk 1.5), luego clic en Apply y clic en Ok.
Explicación
En la línea numero Uno, encontramos la llamada al paquete, el cual es java.lang (éste paquete nos
ayuda para usar las funciones matemáticas y otras funciones como System.out.println, sin embargo
NO es necesario especificarlo, ya que Java, por defecto, incluye éste paquete en todos los
programas que creamos).
Luego encontramos la declaración de la clase, la cual es PrimerPrograma, como puede observar la
primera letra es mayúscula, y como el nombre está compuesto por dos palabras (Primer y Programa),
es por tal razón que cada una de ellas tienen su primera letra mayúscula. Otra cosa importante es
que, el nombre del archivo, ( que tiene extención *.java), SIEMPRE se debe llamar igual que la clase;
es decir que, este código, está guardado como: PrimerPrograma.java. Si está usando JGrasp,
generalmente el coloca el nombre y lo unico que tenemos que hacer es dar clic en guardar en el
commandwindow, pero a veces, con esos paradigmas de la programación, JGrasp no lo coloca, es
por tal razón que debemos estar seguros que el archivo ha sido guardado con el mismo nombre de la
clase. Por que de lo contrario lanzará una excepción ( de la cual hablaremos más adelante) y NO
correrá el programa. Posteriormente, encontramos la sentencia System.out.println(), el cual nos sirve
para mandar información a pantalla, la cual será mostrada en la consola de DOS, y será más o
menos así:
Valor: No es necesario, pero Java permite inicializar variables, por ejemplo, los contadores,
acumuladores , etc;
Ejemplos:
1 int i;
2 float suma=0;
3 double saldo;
4 String Nombre
En la línea uno, estamos declarando una variable de tipo entero, identificada por i. en la línea dos,
tenemos una variable del tipo real, inicializada a cero, podemos asumir que se trata de un
acumulador. Luego, se puede hacer notar que saldo, está declarada como real de doble precisión, y
finalmente en la línea 4 se encuentre Nombre que es una variable de tipo String, es decir; una cadena
de caracteres, ya que Java soporta este tipo de datos.
Ejemplo 2.2
Programa que Muestra el nombre, edad y sueldo de una persona.
class DatosPersonales {
public static void main (String args[]) {
String Nombre="Manuel Ortez";
int edad=20;
double sueldo=500.00;
System.out.println("Sueldo: "+sueldo);
}//fin del main
}//fin de la clase
Explicación
Como puede notarse, la variable Nombre, es una cadena de caracteres, la cual está inicializada, y
todos los valores de una cadena se escriben entre comillas dobles. Además note que, en el método
System.out.printl, podemos hacer varias combinaciones al momento de mandar a la impresión. Para
el caso, si una ( o más cadenas) se van a mandar a impresión acompañadas de una (o más
variables), estos argumentos se unen, mediante el operador ‘+’. Sin embargo, esto no es necesario
cuando se trata de la impresión de una sola variable:
System.out.println(edad);
Ejemplo 2.3
Programa que calcula el area y el perímetro de un círculo
class Circulo {
public static void main (String args[]) {
double radio=2.3;
double perimetro;
double area;
area=Math.PI*radio*radio;
perimetro=2*Math.PI*radio;
System.out.println("El area es: "+area+" Y el perímetro es: "+perimetro);
}
}
Explicación
Me parece que, en lo único que debemos poner atención es en dos cosas.
La primera, es que Math.PI es una constante, (3.14159….), la cual, está dentro del paquete de
java.lang; el cual, como ya lo hemos dicho, está incluido, por defecto, en todos nuestros programas
de manera automática; además que, note que la única impresión que se hace, enlazamos los
parámetros con el operador ‘+’.
System.out.println("El area es: "+area+" Y el perímetro es: "+perimetro);
Aritméticos DESCRIPCIÓN
+ Suma
- Resta
* Multiplica
/ Divide
% Devuelve el resto de una división
++ Incrementa en 1
-- Decremento en 1
Tabla 2.2
Ejemplo 2.4
Programa que usa varios tipo de instrucciones
class Operadores {
public static void main (String args[]){
int x=10;
int y=12;
int resultado;
resultado=x+y;
System.out.println("El resultado de la suma es: "+resultado);
resultado=y-x;
System.out.println("El resultado de la resta es: "+resultado);
resultado=x/y;
System.out.println("El resultado de la división es: "+resultado);
x++;
y++;
System.out.println("Ahora x es: "+x+"y Y es: "+y);
}
}
Operadores Lógicos
Operador Descripción
&& Y lógico. Condicion1 && Condicion2
|| O lógico. Condicion1 || Condicion2
! Negación. !(Condicion1)
Operadores Relacionales
Operador Descripción
== Es igual a
!= No es igual a (Distinto)
> Mayor que
< Menor que
>= Mayor o Igual a
<= Menor o igual que
Comentarios
Un comentario es un mensaje cualquiera, que se escribe entro del código; pero que no es
interpretado por le compilador, y que ayuda, al programador para futuros mantenimientos y para
comprender, tiempo después, la secuencia de ejecución del programa.
Java, posee tres tipos de comentarios:
1. Tradicional:
Comienza con /* y termina con */, en él podemos escribir una línea o un párrafo completo. Ejemplo:
/*Ejemplo de un comentario */
/* También podemos escribir
Nuestros comentarios
En varias líneas*/
2. De una sola línea:
Comienzan con una doble barra (//), y se extiende hasta el final de la línea. Ejemplo:
//Este comentario es válido sólo para una línea
3. Comentario de Documentación
Comienza con /** y termina con */ son comentario especiales que javadoc utiliza para generar,
documentación acerca del programa.
Ejemplo:
/** Programa Visor 3.11
San Salvador, El Salvador
Diciembre de 2006*/
Literales
Los literales, son valores fijos que son legibles, para nosotros los humanos. Generalmente son
llamados constantes.
En java, los literales, pueden ser del tipo real, entero, cadenas, booleanas y null. Las constantes de
tipo carácter, se encierran entre comillas simples, así: ‘m’, `$`.
Las constantes enteras, son aquellas que no llevan parte fraccionaria, ni tampoco van entre comillas.
Ejemplo: 10, -1.
Las constantes de tipo flotante, son aquellas que se componen de una parte entera, un punto
decimal, y una parte fraccionaria: 8.75, 142.639.
Las Literales de tipo cadena, se especifican entre comillas dobles. Así: “Ejemplo de una cadena”;
Además, un literal de tipo String, puede contener una o más secuencias de escape. Por ejemplo, la
secuencia de escape ‘\n’, se utiliza para cambiar de línea. Así:
“Manuel\nOrtez”;
Si mandamos a imprimir esa literal, veremos el siguiente resultado:
Preguntas
1. Mencione, cuáles son los dos grandes rubros de tipos de datos en
Java:______________________________________________________________________
__________________________________________________________________
2. ¿Cuál es la diferencia entre el tipo float y
double?____________________________________________________________________
___________________________________________________________________________
__________________________________________
3. ¿Para que sirve el tipo Srtring, y el tipo
double?____________________________________________________________________
___________________________________________________________________________
__________________________________________
4. ¿Un literal y una constante, son lo mismo?, ¿si? ¿no? ¿Por
qué?_______________________________________________________________________
___________________________________________________________________________
__________________________________________
5. ¿Cuáles son la diferencias entre los 3 tipos de comentarios que Java
soporta?____________________________________________________________________
___________________________________________________________________________
__________________________________________
Ejercicios
1. Escriba un programa que imprima su nombre en pantalla
2. Diseñe un programa en Java, que muestre la cantidad de gramos que hay en 3 Kg
(1Kg=1000g).
3. Diseñe un programa que muestre en pantalla, los 5 primeros números y a la par, como se
leen cada uno de esos números
4. Diseñe una clase en Java, que produzca como resultado, la tabla de multiplicar del 7.
5. Se desea crear una clase, que contenga un método main, el cual muestre, en un solo
método de impresión, el nombre de cinco personas, en orden alfabético.
Capítulo III: “Entorno Gráfico y Applets”
Hasta, el momento, no hemos conocido las bondades de Java, por que, tal parece que, nuestros
programas fuesen compilados en C, ya que corren en la ventana de DOS.
Sin embargo Java permite el uso de ventanas, para leer y mostrar datos. Así como el uso de
aplicaciones web, lo que se conoce como Applet.
3.1 Uso del paquete javax.swing.*;
Este paquete, contiene dos de los métodos más importantes, en cuanto a lo que a entorno gráfico se
refiere. Por ejemplo, si queremos mandar imprimir en pantalla algún mensaje, por medio de una
ventana, la sintaxis es la siguiente:
JOptionPane.showMessageDialog(null, “Mensaje”);
En donde:
Null, es argumento que, SIMPRE lo pondremos en el método MessageDialog
“Mensaje”, es la cadena de caracteres que queremos imprimir.
Ejemplo 3.1
Veamos este ejemplo que, manda a impresión el mensaje de Hola
1 import javax.swing.*;
2 class Mensaje{
3 public static void main (String args[]){
4 JOptionPane.showMessageDialog(null,"Hola");
5 }
6}
El resultado que veremos en la pantalla es el siguiente:
Ejemplo 3.2
Note, las secuencias de escape que, también se pueden utilizar en éste método
1 import javax.swing.*;
2 class Mensaje1{
3 public static void main (String args[]){
4 JOptionPane.showMessageDialog(null,"Manual de Java\nUna forma Facil de Aprender a
Programar\n\n\t\tDiciembre de 2006");
5 JOptionPane.showMessageDialog(null, "Creado por Manuel Ortez");
6 }
7}
Leer Datos
Para leer los datos, usamos el método ShowInputDialog, de la forma siguiente:
Var=JOptionPane.showInputDialog(“Mensaje”);
Donde:
Var: es el nombre de la variable que hace referencia al valor leído.
Mensaje: Es el mensaje que aparecerá, en la caja de diálogo.
Pero debemos tener presente que, éste método devuelve un tipo de dato String, por tal razón cuando
leamos un flotante, double, int, etc, debemos realizar la conversión.
Ejemplo 3.3
Programa que lee un nombre y luego lo imprime
1 import javax.swing.*;
2 class Mensaje2{
3 public static void main (String args[]){
4 String Nombre;
5 Nombre=JOptionPane.showInputDialog("Digite su nombre");
6 JOptionPane.showMessageDialog(null, "Bienvenido "+Nombre);
7
8 }
9}
Ejemplo 3.4
Se desea Crear una Mini-calculadora, que permita, sumar, restar y multiplicar dos números
ingresados por el usuario.
1 import javax.swing.*;
2 class MiniCalcu{
3 public static void main (String args[]){
4 double n1, n2, resultado;//Estos son los numeros
5 String leer;//variable auxiliar con la cual leeremos los datos
6 leer=JOptionPane.showInputDialog("Escriba el primer Número");
7 //Esta es la forma para hacer el cambio de cadena a doble
8 n1=Double.parseDouble(leer);
9 leer=JOptionPane.showInputDialog("Escriba el primer Número");
10 n2=Double.parseDouble(leer);
11 resultado=n1+n2;
12 JOptionPane.showMessageDialog(null, "El resultado de la suma es: "+resultado);
13 resultado=n1-n2;
14 JOptionPane.showMessageDialog(null, "El resultado de la resta es: "+resultado);
15 resultado=n1*n2;
16 JOptionPane.showMessageDialog(null, "El resultado de la multiplicación es:
"+resultado);
17 resultado=n1/n2;
18 JOptionPane.showMessageDialog(null, "El resultado de la división es: "+resultado);
19 }
20 }
Explicación
El lector, debe notar, la forma en que debe hacer la conversión de un carácter a un valor diferente.
Para el caso, la línea 8 y 13, después de haber leído los valores correspondiente, hacemos el cambio
así:
N1=Double.parseDouble(leer);
Double, es la clase que contiene al tipo de dato double, luego se escribe el método parse, y le
pasamos como argumento, la variable leer, que contiene el número(en cadena de caracteres), que
deseamos convertir a double.
Si queremos convertir a entero:
N1=Integer.parseInt(leer);
Si lo que queremos es convertirlo a float:
N1=Float.parseFloat(leer);
3.2 Uso de Applet`s
Muchos de los libros y Manuales de Java, tratan éste tópico hasta muy avanzados en el curso. Sin
embargo, considero que, es mejor aprender a usar applets, antes de tratar otros temas como los
elementos gráficos, animaciones, etc, que generalmente, son más conocidas en Internet.
¿Qué es un Applet?
Un Applet, es una mini-aplicación escrita en Java, y que se ejecuta en un navegador (Netscape,
Internet Explorer, etc), al cargar una página HTML que contiene información sobre el applet a
ejecutar.
Algunas características de las applets
Las características de las applets se pueden considerar desde el punto de vista del programador y
desde el del usuario. En este manual lo más importante es el punto de vista del programador:
Las applets no tienen un método main() con el que comience la ejecución. El papel central de su
ejecución lo asumen otros métodos que se verán posteriormente.
Todas las applets derivan de la clase java.applet.Applet. La
Figura de la izquierda muestra la jerarquía de clases de la que deriva la clase Applet. Las applets
deben redefinir ciertos métodos heredados de Applet que controlan su ejecución: init(), start(), stop(),
destroy().
Se heredan otros muchos métodos de las super-clases de Applet que tienen que ver con la
generación de interfaces gráficas de usuario (AWT). Así, los métodos gráficos se heredan de
Component, mientras que la capacidad de añadir componentes de interface de usuario se hereda de
Container y de Panel.
Las applets también suelen redefinir ciertos métodos gráficos: los más importantes son paint() y
update(), heredados de Component y de Container; y repaint() heredado de Component.
Las applets disponen de métodos relacionados con la obtención de información, como por
ejemplo: getAppletInfo(), getAppletContext(), getParameterInfo(), getParameter(), getCodeBase(),
getDocumentBase(), e isActive().
Métodos que controlan la ejecución de un applet
Los métodos que se estudian en este Apartado controlan la ejecución de las applets. De ordinario el
programador tiene que redefinir uno o más de estos métodos, pero no tiene que preocuparse de
llamarlos:
el browser se encarga de hacerlo.
Método init()
Se llama automáticamente al método init() en cuanto el browser o visualizador carga el applet. Este
método se ocupa de todas las tareas de inicialización, realizando las funciones del constructor (al que
el browser no llama).
En Netscape Navigator se puede reinicializar un applet con Shift+Reload.
Método start()
El método start() se llama automáticamente en cuanto el applet se hace visible, después de haber
sido inicializada. Se llama también cada vez que el applet se hace de nuevo visible después de haber
estado
oculta (por dejar de estar activa esa página del browser, al cambiar el tamaño de la ventana del
browser, al hacer reload, etc.).
Es habitual crear threads en este método para aquellas tareas que, por el tiempo que requieren,
dejarían sin recursos al applet o incluso al browser. Las animaciones y ciertas tareas a través de
Internet son ejemplos de este tipo de tareas.
Método stop()
El método stop() se llama de forma automática al ocultar el applet (por haber haber dejado de estar
activa la página del browser, por hacer reload o resize, etc.).
Con objeto de no consumir recursos inútilmente, en este método se suelen parar las threads que
estén corriendo en el applet, por ejemplo para mostrar animaciones.
Método destroy()
Se llama a este método cuando el applet va a ser descargada para liberar los recursos que tenga
reservados (excepto la memoria). De ordinario no es necesario redefinir este método, pues el que se
hereda cumple bien con esta misión.
Métodos para dibujar el applet
Las applets son aplicaciones gráficas que aparecen en una zona de la ventana del browser. Por ello
deben redefinir los métodos gráficos paint() y update(). El método paint() se declara en la forma:
public void paint(Graphics g)
El objeto gráfico g pertenece a la clase java.awt.Graphics, que siempre debe ser importada por el
applet. Este objeto define un contexto o estado gráfico para dibujar (métodos gráficos, colores, fonts,
etc.) y es creado por el browser.
Todo el trabajo gráfico del applet (dibujo de líneas, formas gráficas, texto, etc.) se debe incluir en el
método paint(), porque este método es llamado cuando el applet se dibuja por primera vez y también
de
forma automática cada vez que el applet se debe redibujar.
En general, el programador crea el método paint() pero no lo suele llamar. Para pedir explícitamente
al sistema que vuelva a dibujar el applet (por ejemplo, por haber realizado algún cambio) se utiliza el
método repaint(), que es más fácil de usar, pues no requiere argumentos. El método repaint() se
encarga de llamar a paint() a través de update().
El método repaint() llama a update(), que borra todo pintando de nuevo con el color de fondo y luego
llama a paint(). A veces esto produce parpadeo de pantalla o flickering. Existen dos formas de evitar el
flickering:
1. Redefinir update() de forma que no borre toda la ventana sino sólo lo necesario.
2. Redefinir paint() y update() para utilizar doble buffer.1
Mediante el objeto de la clase Font asignaremos tipo de letra, estilo y tamaño. Luego utilizaremos el
método setFont para establecer ese tipo de letra. Para mostrar esa cadena utilizaremos otros
métodos dentro de paint. En resumen para trabajar con texto, primero le damos las características,
luego las establecemos y por último lo mostramos.
MOSTRAR TEXTO:
Objeto_gráfico.drawString(“mensaje”,x,y);
Objeto_grafico.drawChars(“mensaje”,pos_char,1,x,y);
Cuando mostramos la cadena, la posición donde se muestra se lo indicamos mediante los valores de
x e y, que es el extremo izquierdo de la línea base de los caracteres. Los valores que puede tomar el
parámetro estilo son:
ESTILO DESCRIPCIÓN
Font.BOLD Negrita.
Font.ITALIC Cursiva.
Font.PLAIN Normal.
Ejemplo 3.5
Diseñe un Applet que Dibuje una leyenda, la cual el usuario ingresará mediante una caja de texto.
1 import java.applet.Applet;
2 import java.awt.*;
3 import javax.swing.*;
4 //declaración de la clase
5 public class PrimerApplet extends Applet
6{
7 String leyenda;
1
Tomado de: Aprenda Java como si estuviera en Primero. Pags 129-131
8 public void init()
9 {
10 //vamos a leer
11 leyenda=JOptionPane.showInputDialog("Ingrese la Leyenda que Desea Dibujar:");
12 }
13 public void paint(Graphics g)
14 {
15 //llamar a la versión del método paint de la clase Applet
16 super.paint(g);
17 g.drawString(leyenda, 50,50);
18 //dibujamos el contenido de leyenda, comenzando en las coordenadas x=50 y Y=50
19 }
20 }
Explicación
Para correr èste código, lo que debemos hacer es guardar el archivo, una vez que hemos digitado
todas las instrucciones. Luego compilarlo, una vez hecho esto, procedemos a ejecutarlo, dando un
indexOf(String, [int]) Devuelve la posición en la que aparece por primera vez un String
en otro
String, a partir de una posición dada (opcional)
Tabla 4.1
Ejemplo 4.1
Diseñe un Programa que, lea una cadena de Caracteres, y luego, muestre esa misma cadena en
minúsculas, mayúsculas y la longitud de la misma.
1 import javax.swing.*;
2 public class UsoCadenas {
3 public static void main (String args []) {
4 String cadena, aux;
5 cadena=JOptionPane.showInputDialog("Ingrese la Cadena");
6 /*En la variable aux, guardamos la nueva cadena
7 Note la forma en la que llamamos los métodos:
8 Variable.Nombre_del_Metodo();*/
9 aux=cadena.toLowerCase();
10 JOptionPane.showMessageDialog(null, "Cadena en Minúsculas: "+aux);
11 aux=cadena.toUpperCase();
12 JOptionPane.showMessageDialog(null, "Cadena en Mayúsculas: "+aux);
13 JOptionPane.showMessageDialog(null, "La longuitud de la cadena es: "+cadena.length());
14 }
15 }
Explicación
Declaramos dos referencias a objetos de la clase String, una de ellas es identificada por “cadena”, la
cual guardamos, la cadena que, el usuario ha ingresado. La otra referencia (aux), nos sirve para
guardar, el resultado que devuelven los métodos que hemos llamado.
En las líneas 9,10 y 11, puede observar, la forma en la que se llaman a los métodos correspondientes,
para las operaciones que deseamos realizar. La sintaxis es la siguiente:
Nombre_de_la_refencia_de_objeto . Nombre_del_metodo();
Existen, algunos métodos que, reciben parámetros, los cuales, deben especificarse, dentro de los
paréntesis del mismo. Pero, en el ejemplo anterior no es el caso.
La clase StringBuffer se utiliza prácticamente siempre que se desee modificar una cadena de
caracteres.
Completa los métodos de la clase String ya que éstos realizan sólo operaciones sobre el texto que no
conllevan un aumento o disminución del número de letras del String.
Recuérdese que hay muchos métodos cuyos argumentos deben ser objetos String, que antes de
pasar esos argumentos habrá que realizar la conversión correspondiente. La Tabla 4.2 muestra los
métodos más importantes de la clase StringBuffer.
Nombre del Método Descripción
StringBuffer() Constructores del Objeto.
capacity() Devuelve el espacio disponible del Objeto StringBuffer
charAt(int) Devuelve el carácter que ocupa la posición especificada.
getChars(int, int, char[], Copia los caracteres indicados en la posición indicada de
int) un array de caracteres
Ejemplo 4.2
Escriba un Applet que, lea una cadena de caracteres y luego, la imprima tal cual fue digitada, y luego
la dibuje de al revés.
1 import javax.swing.*;
2 import java.awt.*;
3 public class UsaBuffer extends JApplet
4 {
5 String aux;
6 StringBuffer cadena;//Declaración del objeto
7 public void init()
8 {
9 //Realizamos la lectura
10 aux=JOptionPane.showInputDialog("Ingrese la Cadena");
11 cadena=new StringBuffer(aux);// al constructor del objeto le enviamos el valor de aux
12 }
13 public void paint (Graphics g)
14 {
15 super.paint(g);
16 g.drawString("La cadena Original es: "+cadena, 25,25);
17 cadena.reverse();
18 g.drawString("La cadena invertida es: "+cadena, 25,50);
19 }
20
21 }
2
Tomado de: Guiones de Clase. Programación III. MSc. Inga. Patricia Estrada
double sqrt (double a) Devuelve la raíz cuadrada de a
double exp(double a) Devuelve el avlor de ea
double log (double a) Devuelve el logaritmo a de a
double pow(double a, double b) Devuelve el valor de ab
double acos(double a) Devuelve el arco coseno de a
double asin(double a) Devuelve el arco seno de a
double atan(double a) Devuelve el arco tangente de a
double sin(double a) Devuelve el seno de a
double cos(double a) Devuelve el coseno de a
double tan(double a) Tangente de a
Tabla 4.3
Ejemplo 4.3
Diseñe una aplicación en Java que dado el valor de un ángulo, encuentre su seno, coseno, tangente.
Luego, le permita ingresar un dato al usuario, con el cual, pueda calcular su raíz cuadrada.
1 import javax. swing.*;
2 class UsaMetodos
3{
4 public static void main(String args [])
5 {
6 String leer;
7 double angulo, valor;
8 leer=JOptionPane.showInputDialog("Ingrese el valor del ángulo: ");
9 angulo=Double.parseDouble(leer);
10 JOptionPane.showMessageDialog(null, "El valor del seno es: "+Math.sin(angulo)+"\nEl Valor
del Coseno del angulo es: "+Math.cos(angulo)+"\nY la tangente es: "+Math.tan(angulo));
11 leer=JOptionPane.showInputDialog("Ingrese el valor, al cual le desea calcular la raíz
cuadrada:");
12 valor=Double.parseDouble(leer);
13 JOptionPane.showMessageDialog(null, "La raíz cuadrada de: "+valor+" es:
"+Math.sqrt(valor));
14 }
15 }
Explicación:
Recuerde que, le método showInputDialog, devuelve un tipo de dato String, es por esa razón que,
siempre debemos realizar el cambio al tipo de dato que deseamos usar, en nuestro caso double.
Además que, para llamar los diferentes métodos matemáticos, lo hacemos de la siguiente forma:
Math.nombre_de_metodo(parámetro);
Además que, en vez de realizar el cálculo y la impresión en la misma línea (en el método
showMessageDialog), podríamos haber calculado los respectivos valores por separado, asignarlos a
tres variables auxiliares, y mandar a impresión esas variables.
4.5 Excepciones
Una excepción es una condición anormal que surge en una secuencia de código durante la
ejecución. La gestión de excepciones lleva a la gestión de errores en tiempo de ejecución. Cuando
surge una condición excepcional se crea un objeto Exception.
El trabajo con excepciones se realiza mediante las siguientes palabras clave:
try Tiene el código de ejecución, si se produce un error lanza (throw) una excepción que
será capturada.
catch Captura la excepción lanzada por try que le precede. Puede capturar más de una
excepción, es decir que se pueden añadir.
finally La excepción es tratada en un gestor por omisión.
SINTAXIS DE EXCEPCIONES:
try{
Bloque de código;
}
catch(TipoExcepcion1 e){
gestión de la excepción;
}
catch(TipoExcepcion2 e){
gestión de la excepción;
throw(e);
}
finally{}3
Ejemplo 4.4
Supongamos que, una persona, desea realizar una división entre cero:
1 public class EjemploExcep{
2 public static void main (String args[]){
3 try{
4 double resul;
5
6 resul=27/0;
7 System.out.println("Resultado es: "+resul);
8 }//fin del try
9 catch (ArithmeticException e){
10 System.out.println("Java, lanza una excepción, ya que no puede realizar una división entre
cero");
11 }
12 }
13 }
A continuación mostramos una lista de las excepciones lanzadas por Java:
Preguntas:
1. ¿Cuáles son las diferencias entre un objeto y una
variable?___________________________________________________________________
_________________________________________________________________
3
Tomado de: Programación en Java. Framk Mora Rodríguez
2. ¿En que se diferencian las clases String y
StringBuffer?________________________________________________________________
_____________________________________________________
3. ¿Los métodos matemáticos, sólo pueden utilizarse con el tipo de dato double?¿Por
qué?_______________________________________________________________________
_____________________________________________________
4. ¿Por qué Java lanza una
Excepción?_________________________________________________________________
_____________________________________________________
5. try y finally. ¿Tienen la misma
Función?___________________________________________________________________
_____________________________________________________
Descubre el error
1. string b;
2. StringBuffer str= StringBuffer(“Hola”);
3. sqrt(g);
4. try{
...
}
catch{
...
}
Ejercicios
1. Cree un Applet que indique si una frase ingresada por el usuario, es palíndromos. Es decir
que se lee de igual manera al derecho que al revés.
2. Se desea una aplicación en Java, que muestre la posición exacta que ocupa una letra, en una
cadena que haya ingresado anteriormente.
3. Cree un Applet, en el cual, el usuario ingrese una cadena, con espacios en blanco, y luego se
dibuje en el Applet, esa misma cadena pero sin espacios en Blanco.
4. Diseñe un programa que muestre diez números aleatorios, que se encuentren en el rango de
1 a 10
5. Escriba un programa en Java, que dadas 5 notas de un alumno, muestre en pantalla, el
promedio del alumno, pero redondeando la nota al entero más cercano.
6. Cree un Applet, que reciba dos números (a y b), y que muestre, cual de ellos es mayor, cual
es menor, y ab y ba
7. En un banco, se desea calcular el interés que, recibirá un cliente al final del período por sus
ahorros. La fórmula para determinar el interés es la siguiente: I=C*i*t. donde C, es el monto
de los ahorros, i es la tasa de interés y t es el período te tiempo en días.
Capítulo V: Sentencias de Control
Todo lenguaje de programación cuenta (o al menos debería contar), con una serie de
iunstrucciones que, le permitan controlar el flujo de ejecución de las instrucciones.
Afortunadamente Java posee dos grandes rubros de dichas sentencias:
Estructuras Selectivas, en las cuales encontramos el if, elseif y switch.
Estructuras Repetitivas o Cilclos, entre las cuales están: while, do… while y for.
5.1 Estructuras Selectivas
En la vida, muchas veces, nos toca elegir entre un camino y otro a seguir. En muchas de las
actividades que realizamos día con día, nos enfrentamos a decisiones que debemos tomar y que,
de una u otra forma, alteran el cause normal de nuestra vida (o de nuestro programa).
Sentencia if
La sentencia if (o si condicional), le permite a un programa decidir, mediante la evaluación de una
condición, ejecutar una u otra acción o acciones.
La sintaxis General es La siguiente:
if(condicion1)
Accion1;
En donde:
Condición 1: Representa una expresión que puede ser del tipo booleana.
Acción 1: es la acción que, al evaluar la condición como verdadera, se ejecutará.
Si son varias acciones, van entre llaves.
Ejemplo 5.1
Diseñe un programa en Java, que calcule, los descuentos a un trabajador, sabiendo que, son
aplicables, un 6.25% del salario en AFP, sólo si éste es superior a $300.00; Además que, si es un
trabajador hombre, se le descuenta, aparte del AFP, el 3% sobre el sueldo en concepto de ISSS
y 10% en concepto de Renta.
1 import javax.swing.*;
2 class Descuentos{
3 public static void main (String args []) {
4 String datos;
5 int sexo;
6 double sueldo, afp=0, isss, totalre, nsueldo, renta;
7 datos=JOptionPane.showInputDialog("Ingrese el sueldo del empleado (a)");
8 sueldo=Double.parseDouble(datos);
9 if(sueldo>300)//Preuntamos si el sueldo es mayor a 300
10 afp=sueldo*0.0625;// si es mayor, aplicamos descuento
11 JOptionPane.showMessageDialog(null, "Este empleado tiene un sueldo de: "+sueldo+" y
El descuento del AFP es: "+afp);
12 datos=JOptionPane.showInputDialog("Ingrese el Sexo: \nSi es Masculino (1)\nSi es
Femenino (2)");
13 sexo=Integer.parseInt(datos);
14 if(sexo==1)//Si es de sexo masculino
15 {
16 isss=sueldo*0.03;//aplicamos las otras retenciones
17 renta=sueldo*0.10;
18 totalre=afp+isss+renta;
19 nsueldo=sueldo-totalre;
20 JOptionPane.showMessageDialog(null, "A este empleado, se le retiene: "+isss+" En
concepto de ISSS\nAdemás Se le retiene: "+renta+" En Concepto de Renta\nLo que hace un total
de: "+totalre+"\nY su nuevo sueldo es: "+nsueldo);
21 }//del if
22
23 }//del main
24 }// de la clase
En las sentencias if, podemos agregar la sentencia else, la cual indica que, si al evaluar la
condición, ésta es falsa, entonces, realizará las acciones, que estén después del else. La sintaxis
es la siguiente:
if(condición1)
{
Acciones;
}
else
{
Condiciones;
}
Ejemplo 5.2
Al ingresar la nota de un alumno, se desea saber si éste aprobó o no, una materia en el colegio.
Se sabe que para aprobar, se necesita una nota mayor o igual a 7.0. Diseñe una aplicación en
Java que, al ingresar la nota, muestre con un mensaje, si el alumno, aprobó o no. Además se
sabe que si la nota está entre 6.50 y 6.99, tiene la posibilidad de realizar un examen de
suficiencia para aprobar.
1 import javax.swing.*;
2 public class NotaAlum{
3 public static void main (String args []){
4 String leer;
5 double Nota;
6 leer=JOptionPane.showInputDialog("Ingrese la nota del alumno");
7 Nota=Double.parseDouble(leer);
8 if(Nota>=7.0)
9 JOptionPane.showMessageDialog(null, "El alumno APROBÓ!!!!!!");
10 else
11 {
12 JOptionPane.showMessageDialog(null, "El alumno reprobó");
13 if(Nota>=6.5 && Nota<=6.99)
14 JOptionPane.showMessageDialog(null, "Pero tiene la posibilidad de
realizar el examen de suficiencia");
15 }//del else
16 }//del main
17 }//de la clase
Explicación:
En la línea 13, colocamos una condición compuesta, es decir que, si el alumno alcanza una nota
mayor o igual a 6.5, pero menor a 7.0 (es decir 6.99), tiene la posibilidad de realizar el examen.
Note además que, una estructura, puede estar dentro de otra, lo que llamamos Anidamiento, para
el caso, el if de la línea 13, está dentro del else, que inicia en la línea 10.
Sentencia elseif
Esta estructura, es una consecuencia de las estructuras if anidadas, sus formato es el siguiente:
if(condicion1)
Sentencia 1;
elseif(condicion2)
Sentencia 2;
elseif(condicion3)
Sentencia 3;
...
else
Sentencia n;
Funciona de la siguiente manera:
Se evalúa la primera condición, si resulta verdadera se ejecuta la sentencia 1, y se continúa con
la ejecución del programa; de lo contrario, de evalúa la condición 2, si resulta verdadera, se
ejecuta la sentencia 2, de lo contrario se evalúa la condición 3 y así sucesivamente. Si al evaluar
todas las condiciones, ninguna resulta verdadera, se ejecuta el bloque del else.
Ejemplo 5.3
Cree un Applet que, reciba como ingreso la nota de un alumno y la clasifique, según la siguiente
tabla:
10.9 Excelente
8.7 Muy Bueno
6.5 Bueno
4.3 Regular
2.1 Necesita Mejorar
Cabe recalcar que dicha escuela, maneja solamente notas cerradas, es decir, sin decimales.
1 import javax.swing.*;
2 import java.awt.*;
3 public class NotasAlumno extends JApplet
4{ //declaracion de variables
5 String leer;
6 double nota;
7 public void init()
8 {
9 leer=JOptionPane.showInputDialog("Ingrese La Nota:");
10 nota=Double.parseDouble(leer);
11 }
12 public void paint(Graphics g)
13 {
14 super.paint(g);
15
16 if(nota<=10 && nota>=9)
17 g.drawString("Excelente!!!!", 50,50);
18 else if(nota<=8 && nota>=7)
19 g.drawString("Muy Bueno!!!!", 50,50);
20 else if(nota<=6 && nota>=5)
21 g.drawString("Bueno", 50,50);
22 else if(nota<=4 && nota>=3)
23 g.drawString("Regular", 50,50);
24 else if(nota<=2 && nota>=1)
25 g.drawString("Necesita Mejorar...", 50,50);
26 else
27 g.drawString("Nota Incorrecta!!!", 50,50);
28 }//del paint
29 }// de la clase
Sentencia switch
Esta sentencia, permite ejecutar, una u otra u otra acción, al evaluar una condición, cuyo resultado es
el que indica que bloque (o bloques) de instrucciones se van a ejecutar.
Su sintaxis es la siguiente:
switch(expresión)
{
case 1:
Sentecia 1;
break;
case 2:
Sentecia 2;
break;
...
default:
Sentencias;
break;
}
En donde, expresión es una condición que, al evaluarla, nos indicará que camino debemos seguir.
Además ésta puede ser, una expresión entera char, byte, int y short. Además que, la expresión
constante que acompaña a la palabra reservada case debe ser del mismo tipo que expresión. La
cláusula default es opcional y puede omitirse en los programas que desarrollemos.
Ejemplo 5.4
En una tienda, se realizan diferentes descuentos, a sus clientes al momento de cancelar en caja. Ya
que, cuando se disponen a cancelar tienen la oportunidad de sacar una bolita, y dependiendo del
color de la misma, se le aplica su respectivo descuento. Si la bolita es roja, se le aplica un 10% de
descuento sobre la compra; si la bola es verde, se le aplica un 5% de descuento, y si la bolita es
blanca, no se le aplica descuento alguno. Diseñe una aplicación que de soporte a ésta actividad en el
súper mercado.
1 import javax. swing.*;
2 public class SuperMercado
3{
4 public static void main (String args [])
5 {
6 String aux;
7 int bolita;
8 double compra, descuento=0, monto;
9 //leemos el import de la compra
10 aux=JOptionPane.showInputDialog("Ingrese el importe de la compra: ");
11 compra=Double.parseDouble(aux);
12 //leemos el color de la bolita
13 aux=JOptionPane.showInputDialog("Ingrese el color de la Bolita:\nSi es Roja, ingrese 1\nSi
fue Verde, Ingrese 2\nSi fue Blanca, ingrese 3");
14 bolita=Integer.parseInt(aux);
15 switch(bolita)
16 {
17 case 1:
18 {
19 descuento=compra*.10;
20 monto=compra-descuento;
21
22 }
23 break;
24 case 2:
25 {
26 descuento=compra*.05;
27 monto=compra-descuento;
28
29 }
30 break;
31 case 3:
32 monto=compra;
33 break;
34 default:
35 monto=compra;
36 break;
37 }//del switch
38 JOptionPane.showMessageDialog(null, "El cliente había consumido: "+compra+" Pero
sacó una bolita color: "+bolita+"\nPor lo que se aplicó un descuento de: "+descuento+"\nAhora el
saldo a cancelar es: "+monto);
39 }//del main
40 }// de la clase
Estructuras Iterativas
Introducción
Es muy común encontrar en los programas operaciones que se deben ejecutar un número repetido
de veces en períodos más o menos espaciados. Si bien las instrucciones son las mismas, los datos
sobre los que operan varían. A nuestro alrededor, encontramos problemas que presentan esas
características, por ejemplo: el cálculo de la nota final de los estudiantes de Programación III, se
realizará tantas veces como alumnos hayan inscritos en dicha asignatura, el cálculo del salario de los
empleados de una empresa, etc. En estos casos la solución que se diseñe para un solo grupo de
datos se debe repetir tantas veces como sea necesario (de acuerdo al número de estudiantes y de
empleados para los ejemplos anteriores).
Los cálculos simples o la manipulación de pequeños conjuntos de datos se pueden realizar fácilmente
a mano, pero las tareas grandes o repetitivas son realizadas con mayor eficacia por una
computadora, ya que estas están especialmente preparadas para ello.
Para repetir varias veces un proceso determinado haremos uso de los ciclos repetitivos, a los cuales
se les conoce con el nombre de estructura repetitiva, estructura iterativa, lazo o bucle.
En C, al igual que en Java podemos encontrar tres tipos de ciclos:
• Entrada Asegurada (while)
• Ciclo Controlado Por Contador (for)
• Hacer Mientras (do.. while)
Funcionamiento de Un Ciclo
Un ciclo, funciona de la siguiente manera: Evalúa una condición de resultar cierta, realiza una acción
o bloque de acciones, luego vuelve a evaluar la condición y si nuevamente resulta cierta, realiza la (s)
acción (es). Cuando la condición de cómo resultado falso, se sale del ciclo y continúa con la ejecución
normal del programa.
Acumulador:
Es una variable, que , como su nombre lo indica se encarga de acumular valores. Esto se vuelve muy
útil, por ejemplo, cuando queremos encontrar la suma de los números del 0 al 9, en el acumulador,
vamos guardando los valores de dichas cifras. Puede ser tanto real como entera. Su valor inicial, en
la mayoría de los casos es cero.
Contador:
Es una variable de tipo entero, que nos ayuda, en el programa a contabilizar el número de
ejecuciones de una misma acción, de un grupo de alumnos etc. Un acumulador tiene tres valores
distintos:
• Valor Inicial: es el valor con el cual iniciamos nuestro contador. Generalmente es cero. Esta
asignación puede hacerse cuando se declara la variable.
• Valor Final: después de la ejecución del ciclo, el valor del contador, será distinto a su valor
inicial, este puede ser mayo o menor que el mismo, todo depende si fue una cuenta creciente
o decreciente.
• Valor de Cambio: Es el valor Constante, en el cual se irá incrementando nuestro contador,
este puede ser positivo o negativo; es decir, si la cuanta se realiza de manera ascendente o
descendente.
Bandera:
Las variables tipo bandera son aquellas que sólo admiten dos valores: cierto o falso, true o false,
hombre o mujer... etc
Ciclo de Entrada Asegurada
La sintaxis es la siguiente:
while(condición)
Acción;
Funciona de la siguiente manera: primero evalúa la condición, si da como resultado cierta realiza la
acción, luego vuelve a evaluar la condición, si su resultado es falso, se sale del ciclo y continúa con la
ejecución del programa. Hay que tener mucho cuidado, cuando trabajamos con ciclos, ya que
podemos caer en un ciclo infinito, es decir que nunca se sale de él. Por lo cual en las acciones
debemos siempre colocar algo que haga que se modifique el resultado de la condición, lo cual puede
ser una bandera, un contador o un acumulador.
Ejemplo 5.5
En una empresa, se desea se tienen datos correspondientes a los sueldos de 10 empleados, de los
cuales, se desea saber, quien goza del sueldo mayor, quien goza del sueldo menor y cuantos poseen
un sueldo mayor a $300.00
1 import javax.swing.*;
2 class UsaWhile{
3 public static void main (String args []){
4 String leer;
5 double sueldo, mayor=0, menor=10000;
6 int i=1, contador=0;
7 while(i<=10)
8 {
9 leer=JOptionPane.showInputDialog("Ingrese el sueldo del empleado: "+i);
10 sueldo=Double.parseDouble(leer);
11 while(sueldo<0)//si el sueldo es negativo
12 {
13 leer=JOptionPane.showInputDialog("ERROR, el sueldo no puede ser Negativo\nIngrese
el sueldo del empleado: "+i);
14 sueldo=Double.parseDouble(leer);
15 }
16 if(sueldo>300)
17 contador=contador+1;
18 if(sueldo>mayor)
19 mayor=sueldo;
20 if(sueldo<menor)
21 menor=sueldo;
22 i=i+1;
23 }
24 JOptionPane.showMessageDialog(null, "El sueldo mayor es de: "+mayor+"\nEl sueldo menor
es: "+menor+"\n"+contador+" Empleados tienen un sueldo mayor a $300");
25 }
26 }
Ciclo Controlado por contador.
En algunas ocasiones, sabemos a ciencia cierta el número de veces que se tiene que repetir una
misma acción o bloque de acciones. Y para ello es que nos sirve, esta estructura. Su sintaxis es la
siguiente:
for( valor inicial; condición; incremento)
accion;
Donde:
Valor inicial: es el valor con el cual inicializamos nuestra variable de control.
Condición: si la cumple, ejecuta la acción o acciones e incrementa o decrementa la variable de
control, sino la cumple la condición, se sale del ciclo.
Incremento; que puede ser positivo o negativo (decremento).
Ejemplo 5.6
Escriba un Applet que dibuje un rectángulo, unas líneas u óvalos en base a la entrada del usuario.
(Tomado de cómo Programar en Java)
1 import java.awt.*;
2 import javax.swing.*;
3 public class PruebaFor extends JApplet{
4 int opcion; //la opcion del usuario
5 public void init ()
6 {
7 String entrada;
8 //obtener la opcion del usuario
9 entrada=JOptionPane.showInputDialog("Escriba 1 para dibujer Lineas\nEscriba 2 para dibujar
rectangulos\nEscriba 3 pàra dibujar Ovalos");
10 opcion=Integer.parseInt(entrada);
11 }//fin del metodo init
12 //dibujer figuras en el fondo el Applet
13 public void paint (Graphics g)
14 {
15 super.paint(g);
16 for(int i=0; i<10; i++)
17 {
18 switch(opcion)
19 {
20 case 1://dibujar lineas
21 g.drawLine(10,10,250,10+i*10);
22 break;
23 case 2://dibujar rectangulos
24 g.drawRect(10+i*10,10+i*10,50+i*10, 50+i*10);
25 break;
26 case 3: //dibujar un Ovalo
27 g.drawOval(10+i*10, 10+i*10, 50+i*10, 50+i*10);
28 break;
29 default: //Valor Incorrecto
30 g.drawString("Se escribió un valor Incorrecto", 10,20+i*15);
31 }//fin del switch
32 }//fin del for
33 }//fin del paint
34 }//fin de la clase
Preguntas
1. ¿Qué es, y cuales son los tipos de estructuras que Java
soporta?____________________________________________________________________
_____________________________________________________
2. ¿Cuál es la diferencia entre la estructura while y
do..while?___________________________________________________________________
____________________________________________________
3. ¿Para que nos sirven las estructuras repetitivas en
Java?______________________________________________________________________
______________________________________________________
4. ¿En que se diferencian las variables de tipo acumulador con las de tipo
contador?___________________________________________________________________
_____________________________________________________
5. ¿Cuándo una condición se convierte en
compuesta?_________________________________________________________________
____________________________________________________
Ejercicios.
1. Diseñe Un Applet que dibuje tantas veces, como el usuario el usuario lo desee, un rectángulo.
2. Se necesita crear una aplicación en Java que le permita al usuario ingresar tantos dígitos,
como éste quiera, para luego, imprimir el valor mayor, el valor menor, y el promedio de todos
los valores que se introdujeron.
3. Se desea crear una aplicación (ya sea Applet o Windows) que permita visualizar la
construcción de un triángulo, en pantalla. El usuario, deberá ingresar la cantidad de niveles
que desea y el programa, mostrará el resultado. Ejemplo: 3 niveles
*
* *
* * *
4. Diseñe Un programa, que, dados el peso, edad, nombre y estatura de un grupo de 30
alumnos, muestre los siguientes datos:
-Listado de Niños que están aptos para jugar Basketball
-Listado de Niñas que están aptas para jugar Basketball
Los requisitos para ello, son los siguientes:
Los niños deben tener un estatura mayor que 1.70mts y pesar más de 150 lbs. Y las niñas deben
ser mayores de 1.60 mts y pesar más de 145lbs.
5. Diseñe un Applet que, muestre si un número es primo o no. Si es primo, se indicará
dibujando una leyenda en el fondo del Applet, de lo contrario, se dibujarán todos los divisores
de ese número.
6. El valor del seno de un ángulo x se puede aproximar sumando n términos de la serie: sin(x) =
x - x^3/3! + x^5/5! - x^7/7! + ... Escribir un programa que solicite n y un ángulo x e informe del
valor aproximado de su seno.
7. En una empresa de telefonía local, se tiene la siguiente política: si el consumo mensual, de
una determina familia, excede los 300 minutos, se le cobra $0.03 por cada minuto. Si excede
los 500 minutos, se le cobran los primeros 300 minutos a precio normal y los restantes a
$0.02. Pero si el consumo mensual, es superior a $800 minutos, se aplica la regla de
asignación anterior, además que se le realiza un descuento de 1.25% del total. Diseñe una
Aplicación en Java que de soporte a dicha política de cobro.
8. Escribir un programa en Java, que le permita al usuario ingresar las notas de cierta cantidad
de alumnos, y que luego muestre la cantidad de aprobados (notas mayores o iguales a 6.00),
la cantidad de reprobados, y las notas extremas. Así como los nombres de los alumnos que
obtuvieron dichas notas.
9. Abarrotes, S.A. de C.V., desea tener un mayor control, sobre las venta sy las respectivas
ganancias que realizan por día. Para lo cual, se le soliciota que escriba un programa en Java,
que le permita contabilizar las ventas diarias, los importes totales de cada venta, la ganancia
neta ( que es de 10% de cada venta).
Ejemplo 6.2
Se tienen las notas de 5 exámenes de 10 alumnos, y se desea promediar la nota final de cada
uno de ellos. Diseñe una aplicación que solucione este problema.
1 import javax.swing.*;
2 public class MatrizNotas{
3 public static void main (String args []) {
4 int f,c;
5 double suma, promedio;
6 double notas [][]=new double[10][5];
7 String leer;
8 for(f=0; f<10; f++)//las filas
9 {
10 suma=0;
11 for(c=0; c<5; c++)
12 {
13 leer=JOptionPane.showInputDialog("Ingrese la nota: "+c+" del alumno: "+f);
14 notas[f][c]=Double.parseDouble(leer);
15 while(notas[f][c]>10 || notas [f][c]<0)
16 {
17 leer=JOptionPane.showInputDialog("Ingrese la nota: "+c+" del alumno: "+f);
18 notas[f][c]=Double.parseDouble(leer);
19 }
20 suma=suma+notas[f][c];
21 }
22 promedio=suma/5;
23 JOptionPane.showMessageDialog(null, "El alumno, tiene un promedio de: "+promedio);
24 }
25 }
26 }
27
Algunas de sus características más importantes de los arrays son las siguientes:
1. Los arrays se crean con el operador new seguido del tipo y número de elementos.
2. Se puede acceder al número de elementos de un array con la variable miembro implícita length
(por ejemplo, vect.length).
3. Se accede a los elementos de un array con los corchetes [] y un índice que varía de length-1.
4. Se pueden crear arrays de objetos de cualquier tipo. En principio un array de objetos es un array
de referencias que hay que completar llamando al operador new.
5. Los elementos de un array se inicializan al valor por defecto del tipo correspondiente (cero para
valores numéricos, el carácter nulo para char, false para boolean, null para Strings y para
referencias).
6. Como todos los objetos, los arrays se pasan como argumentos a los métodos por referencia.
7. Se pueden crear arrays anónimos (por ejemplo, crear un nuevo array como argumento actual en la
llamada a un método).
Inicialización de arrays:
1. Los arrays se pueden inicializar con valores entre llaves {...} separados por comas.
2. También los arrays de objetos se pueden inicializar con varias llamadas a new dentro de unas
llaves {...}.
3. Si se igualan dos referencias a un array no se copia el array, sino que se tiene un array con dos
nombres, apuntando al mismo y único objeto.
4. Creación de una referencia a un array. Son posibles dos formas:
double[] x; // preferible
double x[];
5. Creación del array con el operador new:
x = new double[100];
6. Las dos etapas 4 y 5 se pueden unir en una sola:
double[] x = new double[100];
Preguntas
1. ¿Qué es un arreglo, array, matriz o
vector?_____________________________________________________________________
___________________________________________________
2. ¿Par que sirve el operador new, al momento de declarar un
arreglo?____________________________________________________________________
_____________________________________________________
3. ¿Cuáles son las diferencias entre un arreglo de una dimensión y dos
dimensiones?________________________________________________________________
____________________________________________________
4. Mencione dos de las características más releventes de los
arryas?_____________________________________________________________________
____________________________________________________
Descubre el error
A continuación se presentan una serie de códigos los cuales pueden poseer alguna clase de error,
puedes identificarlos y corregirlos???
Ejercicios
1. Diseñe un programa que guarde los 10 números dígitos y luego los imprima en forma
ascendente y descendente. Usando, para ello, un arreglo de una dimensión.
2. Dibuje, en un Applet, el nombre más grande de cierta cantidad de alumnos en una escuela.
Cuyos datos están almacenados en arreglo de cadenas.
3. Diseñe una aplicación en java, que lea un vector de 10 posiciones y luego, muestre un
mensaje en la pantalla, indicando la cantidad de ceros que hay en el arreglo. La cantidad de
cifras positivas y la cantidad de cifras negativas.
4. En un vector de 20 posiciones se almacenan los sueldos de n empleados, de los cuales se
desea saber, cuantos empleados ganan más del mínimo (sueldo mínimo: $160.00), cuántos
ganan menos que el sueldo mínimo.
5. Realice una búsqueda binaria en un arreglo unidimensional. Una búsqueda binaria, es de la
siguinte forma: se lee el valor que se desea buscar, se compara la primera posición, si son
iguales, fin de la búsqueda; de lo contrario, compararlo con la posición dos, y así
sucesivamente, si se llega al final del arreglo y no se encontró el valor, se debe indicar con
una leyenda. Pero si se encuentra, se debe especificar la posición, que ese valor ocupa en el
arreglo.
6. diseñe una matriz en Java, de 6*6 elementos, y luego muestre, la suma de sus filas, y
columnas por separado.
7. Se desea crear un Applet, el cual sea capaz de leer una matriz de 5*6, y luego determine si
la suma de la diagonal es mayor que la suma de la diagonal menor, además que dibuje estos
valores, junto con los elementos de la matriz en el fondo del Applet.
8. Se desea saber la suma y la multiplicación de dos matrices A y B, cada una con m*n
elementos.
9. Dibuje una matriz de 3*3 elementos en un Applet y simule, y luego encuentre su
determinante, por el método de Sarros, el cual consiste el aumentarle a la matriz original la
primera y segunda columna, luego multiplicar en diagonal, cambiando de signo los productos
realizados de arriba hacia abajo. Posteriormente se suman todos los productos y el resultado
es el determinante.
Cuando se hace referencia a un método este debe estar declarado y desarrollado al igual que el
objeto. Para declarar y desarrollar un método debe estar dentro de una clase y se debe indicar el
valor que devuelve, el nombre y los valores que se le pasan.
Definición de los Métodos
valor devuelto nombre_método([valores])
{
cuerpo;
}
Si tenemos que hacer referencia a las variables de instancia y los métodos contenidos en un objeto
se necesita el operador punto(.).
Objeto.nomb_método( );
Objeto.nomb_método(valores);
Objeto.variable;
4
Tomado de: Aprenda Java como si estuviera en Primero
1 /*Archivo Alumnos.Java*/
2 import javax.swing.*;
3 public class Alumnos{
4 //declaración de los atributos
5 public String Nombre;
6 public int Edad;
7 public double Nota;
8
9 //declaración de los métodos
10 public void EstablecerNombre()
11 {
12 Nombre=JOptionPane.showInputDialog("Ingrese el nombre: ");
13 }
14 public void EstablecerEdad(int x)
15 {
16 Edad=x;//el valor recibido lo asigna a Edad
17 }
18 public void EstablecerNota(double y)
19 {
20 Nota=y;
21 }
22 /*Este método, muestra todos los datos del
23 del objeto en pantalla*/
24 public void MostrarDatos()
25 {
26 String salida="Nombre del Alumno: "+Nombre+"\nEdad: "+Edad+"\nNota: "+Nota;
27 JOptionPane.showMessageDialog(null, salida);
28 }
29 }
2. Luego guarde el archivo, Compílelo, pero NO lo ejecute. Con esto estamos creando nuestra Clase,
con la cual, podremos construir Objetos de este tipo.
3. Ahora, y en otro archivo digite las siguientes sentencias:
1 /*Archivo UsaAlumnos.java*/
2 class UsaAlumnos{
3 public static void main (String args []) {
4 //declaramos y creamos un objeto del tipo Alumnos
5 Alumnos Datos=new Alumnos();
6 //LLamamos a los métodos
7 Datos.EstablecerNombre();
8 Datos.EstablecerEdad(20);
9 Datos.EstablecerNota(9.5);
10
11 //Ahora mostramos los Datos
12 Datos.MostrarDatos();
13 }
14 }
4. Luego Guarde el archivo, Compílelo y Ejecútelo.
Explicación.
En el ejemplo anterior puede notar que, los atributos, son esas variables simples, es las cuales
almacenaremos información relevante a los objetos que, crearemos a partir de esa clase.
Además que, los estamos declarando como públicos, lo cual indica que tenemos acceso directo
desde cualquier otro archivo a los atributos. Los métodos son del tipo public y no devuelven ningún
valor, por tal razón son declarados como void. Además que. El método EstablecerEdad y
EstablecerNota, reciben un argumento cada uno de ellos, el cual es asignado al respectivo atributo.
Constructores
Un Constructor es una función, método, etc, de las clases, la cual es llamada automáticamente
cuando se crea un objeto de esa clase.
Por ser métodos, los constructores también aceptan parámetros. Cuando en una clase no
especificamos ningún tipo de constructor, el compilador añade uno público por omisión sin
parámetros, el cual NO hace nada.
Características de los Constructores
1. Un constructor, tiene el mismo nombre de la clase a la cual pertenece.
2. No puede ser Heredado.
3. No retorna ningún valor (Ni void), por lo cual no debe especificarse ningún tipo de dato.
4. Debe declararse como public, sólo en casos realmente extraordinarios será de otro tipo.
Supongamos una clase llamada Datos
public class Datos
{
//declaracion de atributos
public Datos();//constructor sin parametros
public Datos(int Edad)
{//Constructor con parámetros
EdadM=Edad;
}
}
Ejemplo 7.2
Se Desea crear un objeto del tipo Coordenadas, que indique, la posición de un punto en el plano
cartesiano, y permita calcular la distancia existente con otro punto, además del punto medio entre
ellos.
1 /*Archivo Coordenadas.java*/
2
3 public class Coordenadas {
4 private int x,y;//Atributos
5 public Coordenadas (int x1 , int y1)//constructor
6 {
7 //asignamos esos valores
8 x=x1;
9 y=y1;
10 }
11 public double Distancia (int x1, int y1)
12 {
13 //este método recibe como parametros
14 //las coordenadas del segundo punto
15 double D;
16 D=Math.sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1));
17 return D;//Retornamops el valor de la distancia
18 }
19 public void Pmedio(int x1, int y1)
20 {
21 double p1, p2;
22 p1=(x+x1)/2;
23 p2=(y+y1)/2;
24 System.out.println("El puntomedio es: "+p1+","+p2);
25 }
26 }
1 /*Archivo UsaCoordenadas.java*/
2 public class UsaCoordenadas {
3 public static void main (String args []){
4 Coordenadas P=new Coordenadas (10,20);
5 //calculamos la Distancia:
6 System.out.println("La Distancia es: "+P.Distancia(5,6));
7 //Punto Medio
8 P.Pmedio(5,6);
9 }
10 }
Explicación:
Un método, si va a devolver algún valor, éste debe especificarse cuando se hace la definición del
mismo, para el caso, el método Distancia, devuelve el valor de la distancia, es por ello que lo
especificamos como public double. Además que, cuando realizamos la llamada de ese método, es
en ese preciso lugar que aparecerá el valor que devuelve. Por otra parte, los atributos, son de acceso
privado, lo cual implica que, sólo podemos acceder a ellos, en la clase Coordenadas.
Sobrecarga
Cuando en una clase, se definen un mismo método, con diferente número de parámetros, o bien con
el mismo numero de parámetros pero diferenciándose en la definición, en la cual, al menos un
parámetro sea de diferente tipo, cuando esto sucede, se dice que el método está sobrecargado.
Ejemplo 7.3
Cree una aplicación en Java, que imprima un número imaginario. Nota, los números imaginarios,
poseen una parte real y otra imaginaria, acompañada por la constante i.
1 class Imaginario {
2 private int real, imag;
3 public Imaginario()
4 {
5 real=0;
6 imag=0;
7 }
8 public Imaginario(int x, int y)
9 {
10 real=x;
11 imag=y;
12 }
13 public void Mostrar()
14 {
15 System.out.println("El Numero Imaginario es: "+real+" + "+imag+"i");
16 }
17 }
1 class UsaImaginario{
2 public static void main (String args []) {
3 Imaginario oI=new Imaginario(5,6);
4 oI.Mostrar();
5}
6}
Preguntas
1. ¿Que es y para que sirven las
Clases?_______________________________________________________________
____________________________________________________________
2. ¿Cuál es la diferencia entre las sentencia public y
private?_______________________________________________________________
_________________________________________________
3. ¿Qué es un
constructor?___________________________________________________________
________________________________________________
4. Mencione dos características de los
constructores:__________________________________________________________
_____________________________________________________________________
______________________________________
5. ¿Por qué, la clase a partir de la cual creamos los objetos y la clase que la utiliza,
deben estar en el mismo
directorio?_____________________________________________________________
_____________________________________________________________________
______________________________________
Descubre el error
1. class punto{
Public int x;
Private int y;
void punto( )
{x=10;y=20;}
}
2. punto p=new Punto( );
3. System.out.printl(p.X + “ “+p.Y);
4. public punto(int , int ){x=a;y=b;}
5. punto(int a, int b){a=x; y=b;}
punto(){a=-1;b=-1;}
Ejercicios
1. Diseñe Una clase que permita crear Objetos del tipo Perros. La cual almacene información
pertinente al nombre, raza y peso de cierta cantidad de Perros.
2. Se desea crear un programa que lea dos números imaginarios, y luego imprima: la suma,
resta y multiplicación de ellos. (La parte real se suma con la parte real, la parte imaginaria con
la parte imaginaria, y así para la resta y multiplicación).
3. Diseñe una mini-Agenda, en la cual usted guarde los datos personales (nombre, teléfono y e-
mail) de sus amigos. Haga uso, para ello de un Arreglo de referencias a objetos del tipo
Agenda().
4. Diseñe una clase en Java, llamada Leer(), la cual devuelva una cadena que el usuario haya
ingresado por separado, y luego las concatene, dejendo un espacio entre ellas.
Ejemplo=str1=Manuel; str2=Ortez Cadena=Manuel Ortez.
5. Cree un Objeto del tipo Fecha(), el cual recibe como argumentos, el día, mes y año. Y luego
imprima esos Datos.
6. Se desea crear un objeto del tipo Moneda, el cual realice el cambio de colones a dólares (1
colón=8.75 dólares). Al ingresar una cantidad en colones imprima la respectiva equivalencia
el dólares, pero solo con DOS decimales.
Capitulo VIII: Paquetes, Interfaces y Herencia
8.1 Paquetes (Packages)
Un package es una agrupación de clases. En la API de Java 1.1 había 22 packages; en Java 1.2 hay
59 packages, lo que da una idea del “crecimiento” experimentado por el lenguaje. Además, el usuario
puede crear sus propios packages. Para que una clase pase a formar parte de un package llamado
pkgName, hay que introducir en ella la sentencia:
package pkgName;
que debe ser la primera sentencia del fichero sin contar comentarios y líneas en blanco.
Los nombres de los packages se suelen escribir con minúsculas, para distinguirlos de las clases, que
empiezan por mayúscula. El nombre de un package puede constar de varios nombres unidos por
puntos (los propios packages de Java siguen esta norma, como por ejemplo java.awt.event). Todas
las clases que forman parte de un package deben estar en el mismo directorio. Los nombres
compuestos de los packages están relacionados con la jerarquía de directorios en que se guardan las
clases. Es recomendable que los nombres de las clases de Java sean únicos en Internet. Es el
nombre del package lo que permite obtener esta característica. Una forma de conseguirlo es incluir el
nombre del
dominio (quitando quizás el país), como por ejemplo en el package siguiente:
es.ceit.jgjalon.infor2.ordenar
Las clases de un package se almacenan en un directorio con el mismo nombre largo (path) que el
package. Por ejemplo, la clase,
es.ceit.jgjalon.infor2.ordenar.QuickSort.class
debería estar en el directorio,
CLASSPATH\es\ceit\jgjalon\infor2\ordenar\QuickSort.class
donde CLASSPATH es una variable de entorno del PC que establece la posición absoluta de los
directorios en los que hay clases de Java (clases del sistema o de usuario), en este caso la posición
del directorio es en los discos locales del ordenador.
Pasos Para Crear un Paquete
1. Seleccionar el Nombre de Paquete. Ejemplo: MiPaquete.es; misClases.Utilidades. Para ello
cree una carpeta llamada Ejemplo, en el disco duro.
2. Crear una estructura Jerárquica de carpetas en el disco duro. Esta estructura jerárquica se
hace corresponder con una estructura en el disco duro con una estructura jerárquica de
carpetas, de tal forma que los nombres de las carpetas coinciden con los nombres de los
elementos del paquete. (Para ello, dentro de la carpeta Ejemplo, cree una carpeta llamada
MIsClases, y dentro de ella, una llamada es) Lo cual se especifica con la variable
CLASSPATH. Para nuestro ejemplo, la variable CLASSPATH debe indicar, entre otras, la ruta
de la carpeta MisClases. En JGRASP en Settings escoger Path/Classpath luego escoger la
carpeta CLASSPATH.
3. Copie en esta carpeta (Carpeta es) los archivos correspondientes a Alumnos.java,
Coordenadas.java e Imaginario.java (los cuales han sido creados en el capítulo anterior).
4. Modifique estos archivos, colocándoles a cada uno de ellos la instrucción:
package MisClases.es;
5. vuélvalos a compilar.
6. Luego copie el archivo que utiliza la clase Coordenadas.java (Nos referimos al archivo
UsaCoordendas.java). este archivo puede guardarlo en la dirección: C:\Ejemplo.
7. Modifique este archivo colocándole la sentencia:
import MisClases.es.Coordenadas;
8. Vuélvalo a Compilar y Ejecútelo.
Con lo Anterior ya hemos creado, nuestro primer paquete, lo cual, es de manera similar, que Java
controla, los paquetes que dispone para la realización de nuestros programas.
Interfaces
Una interfaz, pareceriera que no tiene ningún tipo de aplicación o implementación, dentro de los
programas que, creamos en Java. Sin embargo no es así. Ya que, una interfaz indica, como será la
“apariencia”, que la clase tendrá. Además que, establece cierto “protocolo” entre las clases.
Para declarar una clase haremos uso de la palabra reservada interface (la cual sustituye a la palabra
class).
Y para implementar la interfaz, haremos uso de la palabra reservada implements la cual debe
especificarse, al momento de declarar la clase que, implementará dicha interfaz.
Ejemplo:
Supongamos que queremos crear un programa que, dadas la base y la altura de un rectángulo, nos
devuelva su area, su perímetro y su volumen. Pero haciendo uso de una interfaz.
Solución:
1. En archivo nuevo digite el siguiente código:
1 //declaración de la interfaz
2 public interface Calculos {
3 public double Perimetro();//calcula el Perímetro
4 public double Area();//calcula Area
5 public double Volumen();//calcula el volumen
6 }//fin de la interfaz
2. Guarde este archivo y compílelo.
3. En otro archivo digite el siguiente código:
1 //Declaración de la clase que implementa la Interfaz Calculos
2 public class Rectangulo extends Object implements Calculos{
3 private double base, altura;
4 public Rectangulo()//constructor
5 {
6 base=0;
7 altura=0;
8 }
9 //establece la base
10 public void AignarBase(double x)
11 {
12 base=x;
13 }
14 //estabece el valor de la altura
15 public void AsignarAltura(double y)
16 {
17 altura=y;
18 }
19 //Calculamos el Perímetro
20 public double Perimetro()
21 {
22 return 2*base+2*altura;
23 }
24 //calculamos el area
25 public double Area()
26 {
27 return base*altura;
28 }
29 public double Volumen()
30 {
31 double espesor=5;
32 return base*altura*espesor;
33 }
34 }
4. Guarde y compile.
5. Ahora digite, en otro archivo, la siguiente secuencia de código:
1 //vamos a probar la clase
2 //y la interfaz
3 import javax.swing.*;
4 import java.text.DecimalFormat;//para que los resultados
5 //se muestren con decimales
6 public class PruebaRect {
7 public static void main (String args []) {
8 double a,b,c;
9 String salida;
10 DecimalFormat df=new DecimalFormat(".00");
11 //creamos el objeto, que contenga sólo dos decimales
12 Rectangulo rect=new Rectangulo();
13
14 //Dimenciones del rectangulo:
15 rect.AsignarBase(8.5);
16 rect.AsignarAltura(10.98);
17
18 //calculos
19 a=rect.Perimetro();
20 b=rect.Area();
21 c=rect.Volumen();
22
23 //impresión
24 salida="El rectangulo, tiene un perímetro de: "+df.format(a)+"\nUn area de:
"+df.format(b)+"\nY un volumen de: "+df.format(c);
25 JOptionPane.showMessageDialog(null, salida);
26 }
En este caso, todos los animales tienen, por ejemplo, un método comer, todos los mamíferos un
método mamar y todas las aves un método volar. Aquí el mecanismo de herencia permite desarrollar
una sola vez los métodos de son comunes a todas las subclases y sólo programar en éstas aquellas
características que las diferencian de sus pares.
Se considera que una instancia de una subclase es también instancia de toda superclase de la
misma, en el ejemplo, todo perro es un mamífero y también un animal, lo cual implica que todo
perro tiene todas las propiedades y métodos propias de los mamíferos, así como también aquellas de
los animales.
De este modo, una clase puede utilizar métodos que no tiene definidos de la misma forma en que
utilizaría los propios:
class SuperClase
{
protected int unMetodo()
{
return 1;
}
}
5
Tomado de: Introducción a Java. Por Mauro Chojrín.
5. ¿Para que sirve la
herencia?___________________________________________________________________
_____________________________________________________
Descubre el error
class punto{
private int x , y;
private punto(int a, int b){x=a;y=b;}
}
/****************** Interfeces*****************/
class MiOtraClase implemens MiInterface
{
void miMetodo()
{
system.out.println(“Chau mundo!”);
}
}
Ejercicios
1. Diseñe un programa, que reciba como parámetros dos cadenas e indique con un mensaje si
son iguales.
2. Diseñe una clase (usando las interfaces) que, indique si un nombre es válido o No. Para que
un nombre sea válido debe iniciar con mayúscula. Ejemplo: Manueles un nombre propio
válido. ManuelNO es un nombre propio válido.
3. Desarrollar una clase ModificadorCadenas, la cual tenga un método que reciba una cadena
de caracteres y dos letras y reemplace todas las apariciones de la primera letra por la
segunda. Crear una aplicación Java que reciba como parámetro una cadena de caracteres y
dos caracteres y emita un mensaje conteniendo el reemplazo de todos las apariciones del
primer caracter por el segundo.
4. Crear una clase llamada Clase1 la cual pertenezca al paquete paquete1 y tenga un método
llamado mostrarHola, el cual muestre por pantalla el mensaje “Hola”. Desarrollar otra clase
llamada Clase2 la cual pertenezca al paquete paquete2 y tenga un método main, el cual cree
una instancia de Clase1 y ejecute su método mostrarHola.
5. Basándose en la aplicación anterior, crear otra clase llamada Clase1a la cual contenga un
método mostrarChau, el cual muestre por pantalla el mensaje “Chau” pero que no sea
pública. ¿Qué pasa al intentar instanciarla desde la Clase2?.Agregar un método a la clase
Clase1 para que permita utilizar la clase Clase1a.
6. Se desea controlar la cantidad de clientes que una empresa posee y la mora de los mismos.
Para lo cual se le solicita que cree una aplicación en Java, la cual contenga un arreglo de n
referencias a n objetos. Los objetos contienen información como: nombre del cliente, monto
de la deuda, Interés (I=Monto*tasa*tiempo). Para ello se le pide que utilice la Herencia de
Java.
7. Cree una clase, llamada Circulo, la cual, implementa una interfaz llamada Figura(), y prueba
en otra clase llamada UsaCirculo, y permita visualizar el perímetro, el Area y el volumen del
mismo. Además que la clase circulo, esté sobrecargado con dos constructores. Y además en
la clase circulo, debe existir un método de establecer radio y establcer perímetro. NOTA:
todos los atributos son de acceso privado.
6
Tomado de Guión de clases Programación III. Inga. Patricia Estrada. Universidad de El Salvador. Año 2006.
12 for (int i=1; i<=1000; i++)
13 System.out.print(getName() + " "+i+"\r");
14 System.out.println();
15 }
16 }
El operador new crea un hilo cuentaAdelante (el hilo está en el estado nuevo). El método start cambia
el estado del hilo a preparado. De ahora en adelante y hasta que finalice la ejecución del hilo
cuentaAdelante, será el planificador de hilos el que determine cuando éste pasa al estado de
ejecución y cuando lo abandona para permitir que se ejecuten simultáneamente otros hilos.
El método start no hace que se ejecute inmediatamente el método run del hilo, sino que lo sitúa en el
estado preparado para que compita por la UCP junto con el resto de los hilos que haya en este
estado. Solo el planificador puede asignar tiempo de UCP a un hilo y lo hará con cuentaAdelante en
cualquier instante después de que haya recibido el mensaje start. Por lo tanto, un hilo durante su
tiempo de vida, gasta parte de él en ejecutarse y el resto en alguno de los otros estados.
Lo que no se debe hacer es llamar directamente al método run; esto ejecutaría el código de este
método sin que intervenga el planificador. Quiere esto decir que es el método start el que registra el
hilo en el planificador de hilos.
Ejemplo 9.27
Dos hilos se crean utilizando el método setPriority con dos niveles de prioridad distintos. Se inician
ambos y se les permite la ejecución durante 10 segundos. Cada hilo gira en torno a un bucle que
cuenta cuantas veces se ejecuto el mismo.
class pulso implements Runnable{
int pulsa=0;
private Thread hilo;
private boolean corre=true;
class hilos{
7
Tomado de Programación en Java. Ing. Frank Mora Rodríguez
public static void main(String args[]){
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
pulso h1=new pulso(Thread.NORM_PRIORITY+2);
pulso h2=new pulso(Thread.NORM_PRIORITY-2);
h1.start();
h2.start();
try{Thread.sleep(10000);}
catch(Exception e){}
h1.stop();
h2.stop();
Preguntas
1. ¿Qué es y para que sirve un
Hilo?_________________________________________________________________
_______________________________________
2. Mencione dos características de los
Hilo:_________________________________________________________________
_________________________________________________
3. ¿Cuál es la diferencia entre un Hilo y un
proceso?_____________________________________________________________
_____________________________________________________________________
_______________________________________
4. Mencione cuales son los métodos más importantes de un
Hilo:_________________________________________________________________
_________________________________________________
Descubra el Error
En el siguiente programa se genera un número aleatorio, que será el retardo de cada hilo. Por tanto
según el número generado saldrá primero uno y luego el otro en orden aleatorio.
import java.util.*;
Ejemplo 10.2
Muestra una serie de imágenes en movimiento. Ideal para crear animaciones.
1 import java.awt.*;
2 import java.applet.*;
3
4 public class move extends Applet implements Runnable {
5 Image tabla[]=new Image[3];
6 Image img_pintar;
7 Thread pasos;
8
9 public void init(){
10 setBackground(Color.white);
11 tabla[0]=getImage(getDocumentBase(),”t3.gif”);
12 tabla[1]=getImage(getDocumentBase(),”t4.gif”);
13 tabla[2]=getImage(getDocumentBase(),”t5.gif”);
14 }
15
16 public void start() {
17 pasos = new Thread(this);
18 pasos.start();
19 }
20
21 public void run() {
22 for(;;){
23
24 //se puede hacer un bucle
25 //para evitar estas líneas
26 //de código.
27
28 img_pintar = tabla[0];
29 repaint();
30 pausa(500);
31
32 img_pintar = tabla[1];
33 repaint();
34 pausa(500);
35
36 img_pintar = tabla[2];
37 repaint();
38 pausa(500);
39 }
40 }
41
42 public void paint(Graphics g){
43 g.drawImage(img_pintar,10,10,this);
44 }
45
46 void pausa(int tempo) {
47 try {Thread.sleep(tempo);}
48 catch (InterruptedException e) {}
49 }
50 }
Ejemplo 10.3
Muestra la impresión de una imagen en diferentes tamaños.
1 import java.awt.*;
2 import javax.swing.*;
3 public class DiferentesTamanos 54xtendí Japplet{
4 Image imagen;//declaracion del objeto
5 public void init()
6 {
7 imagen=getImage(getCodeBase(), “warning.gif”);
8 }
9 public void paint (Graphics g)
10 {
11 int ancho=imagen.getWidth(this);
12 int alto=imagen.getHeight(this);
13 int pos=10;
14
15 //impresion del 25%
16 g.drawImage(imagen, pos, 10, ancho/4, alto/4, this);
17 //impresion del 50%
18 pos+=ancho/4 +15;
19 g.drawImage(imagen, pos, 10, ancho/2, alto/2, this);
20
21 //impresion del 100 %
22 pos+=ancho/4+15;
23 g.drawImage(imagen, pos, 10, this);
24 //impresión del 150%
25 pos+=ancho/4+15;
26 g.drawImage(imagen, 10, ancho+30,(int)(ancho*1.5), alto/4, this);
27 }//del paint
28 }//de la clase
Botones
Los Botones disparan un evento (acción), cuando son accionados (al dar un clic sobre él).
Los botones se construyen mediante la Clase Button:
Public Button(); //Crea un Botón sin rótulo
Public Button(String S); //Crea un Botón con el rótulo S
Para asociar los controles como botones, listas, casillas, etc... a un método debemos
implementar el método action. En dicho método deberemos escribir las acciones que van a realizar
cada uno de los controles que tengamos en el applet, teniendo en cuenta lo siguiente.
El método action recibe dos parámetros, el primero es un objeto de la clase Event que recoge el
evento producido en el applet. El segundo es un objeto de la clase Object que recoge cual a sido el
control que a producido la acción.
Con estos dos objetos lo primero que debemos escribir en el método action son sentencias if
para determinar el tipo de control que a producido la acción (línea 1). Si hay más controles del mismo
tipo, deberemos distinguir uno de otro con más sentencias if dentro de cada if que gestiona el tipo de
control (línea 2). Por último, cada uno de estos if deben llevar una sentencia return true para indicar
que todo ha ido bien (lineal). Al final del método se debe incluir la sentencia return false para no
hacer nada en caso de que la acción realizada no tenga interés para nuestra aplicación (línea 4).
public boolean action(Event nombre_ev, Object nombre_obj)
{
(1)if (nombre_ev.target instanceof Button)
{
(2) cuerpo con if para cada uno de ese tipo;
(3) return true;
}
(4)return false;
}
Ejemplo 10.58
Muestra como usar los botones.
8
Tomado de “Java Como Programar”. Deitel y Deitel
1 //creacion de botones para pulsar
2 import java.awt.*;
3 import java.applet.Applet;
4 public class MisBotones extends Applet
5 {
6 private Button boton1, boton2, boton3;
7 public void init()
8 {
9 boton1 = new Button("Pulse aqui");
10 boton2 = new Button("Yo no hago nada");
11 boton3 = new Button("Sin rotulo");
12 //agregar botones
13 add(boton1);
14 add(boton2);
15 add(boton3);
16 }
17 //manejar los eventos de boton
18 public boolean action (Event e, Object o)
19 {
20 //verificar si un boton disparo el evento
21 if (e.target instanceof Button) {
22 //comprobar si se pulso boton1 o boton2
23 //no se hara nada si se pulso boton2
24 // En o se guarda el nombre del boton que se pulsó
25 if (e.target == boton1)
26 showStatus ("Usted pulso: "+ o.toString());
27 else if (e.target == boton3)
28 showStatus ("Usted pulso: "+ e.arg);
29 return true; //el evento se manejo aqui
30 }
31 return true;
32 }
33 }
Campos de Texto
TextField implementa un área de entrada de texto de una sola línea. Todo aquello que escribimos
en una caja de texto es de tipo String por tanto si queremos realizar operaciones matemáticas
deberemos transformarlo a un valor numérico.
CREACIÓN:
POSICIONAMIENTO:
nombre_objeto.reshape(x,y,ancho,alto);
GUARDAR TEXTO: valido para etiquetas.
variable=nombre_objeto.getText();
MOSTRAR TEXTO: valido para etiquetas.
nombre_objeto.setText(variable);
Ejemplo 10.6
1 import java.awt.*;
2 import javax.swing.*;
3 public class Contrsena extends JApplet {
4 Label rotulo;
5 Button boton1;
6 TextField text1;
7 public void init()
8 {
9 rotulo=new Label("Ingrese su contraseña");
10 text1=new TextField(10);
11 boton1=new Button("Aceptar");
12
13 add(rotulo);
14 add(text1);
15 add(boton1);
16 }
17 public boolean action ( Event e, Object o)
18 {
19 if(e.target instanceof Button)
20 if(e.target==boton1)
21 {
22 String password=text1.getText();
23 if(password.equals("Carolina"))
24 JOptionPane.showMessageDialog(null, "Contraseña Correcta");
25 else
26 JOptionPane.showMessageDialog(null, "Contraseña Incorrecta");
27 }
28 return true;
29 }
30 }
31
32
LISTAS9
Mediante la clase List crearemos el objeto. Este tipo de lista puede admite más de una selección,
el orden de sus elementos es según han sido añadidos. Los miembros son los mismos que en el
control anterior solo cambia el modo de construirlos. En este control aparecen unas barras de
desplazamiento verticales automáticamente.
CREAR:
List nombre_objeto=new List(0,true); múltiple selección.
List nombre_objeto=new List(0,false); selección simple.
EJEMPLO:
import java.awt.*;
import java.applet.*;
public class lista extends Applet{
add(eti1);
add(eti2);
add(mira);
add(lista);
eti1.reshape(120,10,40,50);
eti2.reshape(160,10,40,50);
mira.reshape(10,90,75,40);
9
Tomado de Programación en Java. Ing. Frank Mora Rodríguez
lista.reshape(10,10,100,75);
lista.addItem("Uno");
lista.addItem("Dos");
lista.addItem("Tres");
lista.addItem("Cuatro");
lista.addItem("Cinco");
lista.addItem("Seis");
}
// int num1=lista.countItems();
// String cad2=String.valueOf(num1);
// eti1.setText(cad2);
}
return false;
}
}
Preguntas
1. ¿Que es la GUI y para que
sirve?______________________________________________________________________
____________________________________________________
2. En que se diferencian las cajas de texto con las
Etiquetas?__________________________________________________________________
_____________________________________________________
3. ¿Que ocurre cuando se da clic sobre un
botón?_____________________________________________________________________
_____________________________________________________
4. Dos Botones, ¿pueden tener el mismo nombre?, ¿y el mismo rótulo? ¿Por
qué?_______________________________________________________________________
___________________________________________________________________________
___________________________________________________________________________
___________________________________________________________________________
____________________
5. Menciones los pasos para presentar una imagen en un
Applet:_____________________________________________________________________
___________________________________________________________________________
___________________________________________________________________________
_______________________________
Descubre el error
TextField caja_texto= TextField(10);
label etiqueta=new Label(" ",)
String nombre;
Ejercicios
1. Diseñe un Applet que al presionar un botón muestre una imagen y al presionar otro botón,
muestre otra imagen a la per de la anterior.
2. Diseñe Un Applet que, al ingresar su nombre, lo dibuje, pero al revés, esto, al accionar un
botón.
3. Se desea saber la equivalencia de grados Celsius a Fahrenheit y viceversa, para lo cual se le
pide que cree un Applet que dados los grados muestre su respectivo equivalente.
4. Diseñe un contenedor que, posea una Caja de texto en la cual usted pueda ingresar una
cadena, la cual al accionar un botón, pueda copiar ese texto en una etiqueta.
5. Cree una galería de imágenes (por lo menos 5), en una carpeta gurde las respectivas
imágenes. Luego en una lista, coloque los nombres de dichas imágenes, para que el usuario
al dar clic sobre el nombre de una de ellas pueda verla en el fondo de un Applet.
BIBLIOGRAFÍA
1. "Java como programar". Deitel y Deitel. 5º edición, Person Education 2004
2. "Programación en Java", Mora Rodríguez, Frank.Año: 2006
http://www.lawebdelprogramador.com
3. "Aprenda Java como si estuviera en Primero".García de Jalón, Javier. Rodríguez, José
Ignacio.y otros. Escuela Superior de Ingenieros Industriales. Universidad de Navarra. Marzo,
1999
4. "Teach Yourself Java 2 In 21 Days". Doherty, Donald. Manning, Michelle.
Sams Publishing. Año 1998
5. "Introducción a Java". Chojrin, Mauro. Año 2006
6. Guiones de Clases. Inga. MSc. Patricia Haydeè Estrada de López. Programación III Ciclo
II/2006. Falcultad de Ingeniería y Arquitectura. Universidad de El Salvador
DEDICATORIA
A mi madre, mis hermanos y a todos aquellos que siempre me animan y se interesan por lo que hago.
Por
Manuel Ortez
[email protected]
San Salvador, El Salvador. Diciembre de 2006