Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Instituto Tecnologico de Morelia Program
Instituto Tecnologico de Morelia Program
PROGRAMACIÓN II
PRESENTA:
ASESOR:
A mis padres, por todo su apoyo, sin él no podría haber llegado a este punto…
Y a quienes debo lo bueno que haya en mi.
Los ejercicios propuestos para cada unidad pretenden reforzar los temas vistos
en cada una de las mismas y están diseñados de tal manera que el alumno
siga la línea de aprendizaje descrita en el párrafo anterior procurando siempre
que inculcar en el alumno la necesidad de investigar más y profundizar más en
los temas que se analizan. Los ejemplos siguen la misma línea de aprendizaje,
todos los ejemplos están relacionados con una aplicación y situación inicial a la
cual se le va agregando funcionalidad de acuerdo al avance en el temario de la
materia.
i
ITM INDICE GENERAL
INDICE
INTRODUCCION . . . . . . . . . . . . . . . . . i
Conclusiones. . . . . . . . . . . . . . . . . . . . 202
Bibliografía. . . . . . . . . . . . . . . . . . . . . 204
INDICE DE FIGURAS
Conceptos básicos.
ITM Unidad I Fundamentos del Lenguaje
1.1.1 Objetos
Un objeto es una entidad provista de un conjunto de propiedades o atributos
(datos) y de comportamiento o funcionalidad (métodos). Corresponden a los
objetos reales del mundo que nos rodea, o a objetos internos del sistema (del
programa). Es una instancia de una clase.
Identificando objetos
Tal como tamaño, nombre, color, forma, etc. Los valores de los
atributos son referidos como el estado actual del objeto. Por
ejemplo, un objeto puede tener un atributo color con el valor de
rojo.
Otro ejemplo seria una puerta… Sus atributos serian el color, tamaño, material,
etc. Sus operaciones o métodos serian cerrar_puerta(), abrir_puerta().
El identificar objetos ayuda a diseñar las clases (o plantillas) para cada tipo de
objetos en un sistema. En la Programación Orientada a Objetos (POO) cada
objeto de una clase es llamada una instancia de clase y tiene valores distintos
en sus atributos, pero son los mismos atributos y las mismas operaciones.
Declaración de clases:
package javaApplication1;
public class MiClase{
String mensaje;
}
Declaración de objetos:
package javaApplication1;
public class Main {
public static void main(String[] args) {
//variable usada para explicar la herencia.
int i=0;
Una vez que tenemos nuestro proyecto, iremos al menú “file”, seleccionamos
la opción “New File”, en el campo “Categories” seleccionamos “Java” y en el
campo “File Types” seleccionamos “Java Class” en el caso del ejemplo la
clase se llama MiClase, debido a ello así se llama el archivo. Con esto
tendremos nuestros dos archivos creados y listos para introducir nuestro
código.
Herencia
import MiClase;
Ejercicio 1.2: Defina cuatro clases que hereden las características de la clase
Operaciones. Las nuevas clases serán Suma, Resta, Multiplica y Divide. Hasta
este momento ninguna de nuestras clases posee métodos o propiedades.
1.1.2 Eventos
Un evento es un suceso en el sistema (tal como una interacción del usuario con
la máquina, o un mensaje enviado por un objeto). El sistema maneja el evento
enviando el mensaje adecuado al objeto pertinente. También se puede definir
como evento, a la reacción que puede desencadenar un objeto, es decir, la
acción que genera.
Para soportar este tipo de desarrollo interactúan dos tipos de herramientas, una
que permite realizar diseños gráficos (En nuestro caso NetBeans) y, un
lenguaje de alto nivel que permite codificar los eventos (Java). Con dichas
herramientas es posible desarrollar cualquier tipo de aplicaciones basadas en
el entorno.
Por su parte los programas orientados a eventos son los programas típicos de
Windows, tales como Netscape, Word, Excel, PowerPoint y otros. Cuando uno
de estos programas ha arrancado, lo único que hace es quedarse a la espera
de las acciones del usuario, que en este caso son llamadas eventos.
procedimientos se llaman con un nombre que se forma a partir del nombre del
objeto y el nombre del evento como se muestra a continuación:
Para comprender más sobre los eventos tenemos el siguiente ejemplo. Solo se
muestra un mensaje de confirmación. Para ello se utiliza la clase JOptionPane,
esta clase se analiza a fondo en la unidad II.
package proyecto;
import javax.swing.JOptionPane;
/**
*
* @author saul.chavez
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
JOptionPane.showMessageDialog(null,
"Bienvenido al lenguaje Java");
System.Out.Println(Bienvenido al lenguaje Java”
}
}
package proyecto;
import javax.swing.JOptionPane;
public static void main(String[] args) {
JOptionPane.showMessageDialog(null,
"Bienvenido al lenguaje Java");
int Valor = Integer.parseInt
(JOptionPane.showInputDialog(null, "Introduce un valor"));
}
}
Pero esto nos regresa una cadena, no un entero. Por ello utilizamos el método
Integer.ParseInt(); que transforma la cadena que reciba en un valor entero. Si
se recibe como parámetro una cadena que no representa a un valor entero
(como “hola” en lugar de “200”) se producirá un error en al método ParseInt().
1.1.3 Métodos
Los métodos privados son generalmente llamados en el interior del objeto por
otras partes del mismo.
Una vez que se tiene un objeto que soporta métodos, se pueden usar los
métodos de esos objetos. En el ejemplo siguiente se usa el método calcular
para trabajar con los valores de operando1 y operando2 y almacenar el
resultado en la variable resultado.
Ejercicio 1.3: Defina en cada una de las clases de su proyecto, un método que
realice la operación a la que su nombre hace referencia (Ej. En la clase Suma
un método que sume). Cada método trabajará únicamente con dos operadores,
los cuales se recibirán como parámetros cuando una instancia de la clase los
Método main
Es un método especial que java reconoce como el punto inicial para que un
programa se ejecute desde la línea de comando. Su sintaxis es:
Polimorfismo
Para sobrecargar un método, sólo hay que definirlo más de una vez,
especificando una nueva lista de parámetros en cada una de ellas. Cada lista
de parámetros debe ser diferente de cualquier otra de alguna forma, el número
de parámetros o el tipo de uno o más de ellos.
class Calculadora
{
//método Suma que trabaja con dos operadores
int Suma(int op1, int op2)
{
return op1 + op2;
}
//método Suma que trabaja con tres operadores
int Suma(int op1, int op2, int op3)
{
return op1 + op2 + op3;
}
}
System.out.println(“Suma 2 más 2 = “ +
calc.Suma(2,2));
System.out.println(“Suma 2 más 2 más 2 = “ +
calc.Suma(2,2,2));
}
}
Como puede ver, la sobrecarga proporciona una técnica potente, con ella
podemos evitar problemas clásicos de desorden de código como la declaración
de varios métodos con nombres como: “Suma2”, “Suma3” o “SumaDosOp”,
“SumaTresOp”, etc.
Ejercicio 1.4: Sobrecargue cada uno de los métodos que contienen las clases
Suma, Resta, Multiplica y Divide para que trabajen con tres operadores de la
siguiente manera:
1.1.4 Propiedades
Una propiedad es una asignación que describe algo sobre un objeto como un
formulario, un botón, una lista, etc. Dependiendo de la propiedad, se le puede
asignar en tiempo de diseño usando la ventana Propiedades y/o en tiempo de
ejecución al programar.
Los objetos que ya existen en NetBeans como los botones, listas, formularios,
etc. Tienen propiedades definidas ya en el lenguaje, por ejemplo:
jButton1.setText(“Hola”);
por los atributos. En Java, los atributos son representados usando variables
(estas a su vez son el mecanismo para guardar datos)
Declaración de atributos
Ejemplo:
La palabra private indica que el atributo solo es accesible por los métodos
dentro de la clase. El tipo puede ser primitivo o de cualquier clase.
Por último, al igual que para los atributos de los objetos de NetBeans, para
accesar a las propiedades de un objeto se utiliza el operador punto (.).
Ejemplo:
objeto1.x=30;
//asignamos un valor al atributo x del objeto
Modificadores de acceso
NetBeans
1
Entorno Integrado de Desarrollo. Programa como NetBeans que proporciona herramientas que facilitan la programación.
2
Graphical User Interface. Interfaz Gráfica de Usuario. (Lo vemos al momento de diseñar gráficamente
nuestras aplicaciones gráficas arrastrando botones o cambiando tamaño de los elementos con jalar una
esquina, etc.)
3
Sun Microsystems es una empresa informática de Silicon Valley, fabricante de semiconductores y software.
• Administración de ventanas.
Profiler de NetBeans
El Profiler de NetBeans es una herramienta para la optimización de
aplicaciones Java: Ayuda a encontrar cuellos de botella en la memoria y a
optimizar la velocidad de las aplicaciones.
http://www.netbeans.org/kb/55/1/cnd-index.html
4
Java ME: Java Micro Edition Herramienta para crear programas para celulares y otras tecnologías moviles.
Ventana de proyectos
crear una interfaz GUI (Interfaz Gráfica de Usuario) para una tabla de base de
datos.
Como puede ver, tenemos una pequeña ventana con el nombre de “Projects”,
esta nos muestra el proyecto en el que estamos trabajando y los archivos que
necesitamos. Entre esos archivos se encuentran las librerías que incluimos.
Ventana Propiedades
Ventana de Ayuda
Para abrir la ventana de ayuda debe dar clic sobre el menú “Help” y a
continuación en “Help Contents”.
Buscar: Button
Categoría Java
Java Project with Existing Sources: importa una aplicación existente de java
para crear un proyecto estándar IDE. La aplicación de java se puede importar
de múltiples folders.
Categoría Web
Web Application: Crea una aplicación web vacía en un proyecto IDE estándar.
Web Application with Existing Sources: importa una aplicación web existente
para crear un proyecto IDE estándar.
1.5 Comentarios
En muchas ocasiones, es necesario incluir notas en el código para documentar
un poco y recordar posteriormente para que se utiliza una función u
alguna línea de código, para poder hacer esto existen los comentarios:
• Comentarios de una sola línea.
• Comentarios de una o más líneas.
Ejemplos:
Los dos primeros tipos de comentarios son los que todo programador conoce y
se utilizan del mismo modo. Los comentarios de documentación, colocados
Convenciones de nombres
• Utilizar nombres descriptivos para las clases, evitando los nombres muy
largos.
• Si el nombre tiene varias palabras ponerlas todas juntas (sin separar con
- o _) y poner la primera letra de cada palabra en mayúsculas. Por
ejemplo: InstrumentoMusical.
1.6 Constantes
En Java, se utiliza la palabra clave final para indicar que una variable debe
comportarse como si fuese constante, significando con esto que no se permite
su modificación una vez que haya sido declarada e inicializada. Como es una
constante, se le ha de proporcionar un valor en el momento en que se declare,
por ejemplo:
5
(del inglés Application Programming Interface - Interfaz de Programación de Aplicaciones) es el conjunto de funciones y
procedimientos
class Elipse {
final float PI = 3.14159;
. . .
}
Cada tipo de datos simple soporta un conjunto de literales que le pueden ser
asignados, para darles valor. En este apartado se explican los tipos de datos
simples (o primitivos) que presenta Java, así como los literales que soporta
(sintaxis de los valores que se les puede asignar).
Se usan para representar números enteros con signo. Hay cuatro tipos: byte,
short, int y long.
Tipo Tamaño
byte 1Byte (8 bits)
Literales enteros
Los literales enteros se almacenan por defecto en el tipo int, (4 bytes con
signo), o si se trabaja con números muy grandes, con el tipo long, (8 bytes con
signo), añadiendo una L ó l al final del número.
Tipo Tamaño
float 4 Bytes (32 bits)
double 8 Bytes (64 bits)
Tabla 1.3 Tipos de datos numéricos en punto flotante
De forma predeterminada son del tipo double (8 bytes). Existe la opción de usar
un tipo más corto (el tipo float de 4 bytes), especificándolo con una F ó f al final
del número.
Se usa para almacenar variables que presenten dos estados, que serán
representados por los valores true y false.
Literales Booleanos
Java utiliza dos palabras clave para los estados: true (para verdadero) y false
(para falso). Este tipo de literales es nuevo respecto a C/C++, lenguajes en los
que el valor de falso se representa por un 0 numérico, y verdadero cualquier
número que no fuese el 0.
Sintaxis: para declarar un dato del tipo booleano se utiliza la palabra reservada
boolean.
Literales carácter
La clase String
En java las cadenas se gestionan como si fueran objetos. De ahí que String no
es un tipo de dato. Se trata de una clase, una de las ventajas de esto es que
un objeto de tipo String tiene gran variedad de métodos que se pueden usar.
La clase String es muy ponderosa, pues con los métodos que proporciona
permite convertir la cadena en un arreglo de caracteres, convertir números en
cadenas, buscar cadenas, crear sub-cadenas, cambiar la cadena de
mayúsculas a minúsculas o viceversa, obtener la longitud de la cadena,
comparar cadenas y mucho mas.
char c = (char)System.in.read();
El tamaño de los tipos que queremos convertir es muy importante. No todos los
tipos se convertirán de forma segura. Por ejemplo, al convertir un long en un
int, el compilador corta los 32 bits superiores del long (de 64 bits), de forma que
encajen en los 32 bits del int, con lo que si contienen información útil, esta se
perderá.
Por ello se establece la norma de que "en las conversiones el tipo destino
siempre debe ser igual o mayor que el tipo fuente":
1.8 Variables
Las variables pueden ser de diferentes tipos y actúan como gestores de
memoria de datos. Los diferentes tipos tienen que ver con el formato de los
datos que almacenan en ellas, así como con la memoria que es necesaria para
gestionar ese dato. Por ejemplo, la variable de tipo entero (int), es de 4 bytes (o
32 bits) y se utiliza para almacenar valores enteros. Esto hace que un dato de
tipo int pueda tomar un rango de valores que van desde -2,147,483,648 hasta
2,147,483,647.
Como puede ver, hemos creado una variable para almacenar un valor y luego
visualizarlo. Una variable puede ser inicializada en el momento de declararla,
por ejemplo:
• Enteros: Estos tipos son byte, short, int y long, que guardan el signo y el
valor.
• Números en punto flotante: Estos tipos son float y double; almacenan
números flotantes con signo.
• Caracteres: char, en estas se guardan caracteres tanto alfabéticos como
numéricos.
• Booleano: en este tipo se guardan únicamente dos valores: verdadero
(true) o falso (false).
Almacenamiento en
Tipo de Variable Rango de Valores
bytes
boolean 1 Verdadero, Falso
byte 1 -128 a 127
char 2 N/A
-1.79769313486232E308 a
double 8
-94065645841247E-324
Strings
Constructor Descripción
Inicializa un nuevo objeto String para
String () gestionar una secuencia de caracteres
vecía.
Construye un nuevo objeto String
convirtiendo el arreglo de bytes
String (byte[] bytes)
mediante la codificación de caracteres
que tiene la plataforma por defecto.
Construye un nuevo objeto String
String (byte[] bytes, int offset, int convirtiendo el subarreglo de bytes
length) usando la codificación de caracteres
por defecto.
Construye un Nuevo objeto String
convirtiendo el entero length y el
String (byte[] bytes bytes, int offset,
subarreglo de caracteres utilizando la
enc)
codificación de caracteres
especificada.
Construye un nuevo objeto String
String (byte[] bytes, String enc) convirtiendo el arreglo de bytes
mediante la codificación de caracteres
que se especifica.
Aloca un nuevo objeto String para
String (char[] value) representar la secuencia de
caracteres.
Tabla 1.8 Constructores de la clase String.
String s2;
s2 = “Hola!”;
.
.
}
}
1.9 Operadores
Los operadores son un tipo de tokens que indican una evaluación o
computación para ser realizada en objetos o datos, y en definitiva sobre
identificadores o constantes. Además de realizar la operación, un operador
devuelve un valor, ya que son parte fundamental de las expresiones.
El valor y tipo que devuelve depende del operador y del tipo de sus operandos.
Por ejemplo, los operadores aritméticos devuelven un número como resultado
de su operación. Los operadores realizan alguna función sobre uno, dos o tres
operandos.
Los operadores unarios en Java pueden utilizar tanto la notación prefija como
la posfija.
Todos los operadores binarios en Java utilizan notación infija, lo cual indica que
el operador aparece entre sus operandos.
Por último, los operadores ternarios son aquellos que requieren tres operandos.
El lenguaje Java tiene el operador ternario, "?", que es una sentencia similar a
la if-else.
Este operador ternario usa notación infija; y cada parte del operador aparece
entre operandos:
• De comparación y condicionales.
• De asignación.
Operadores aritméticos
Por ejemplo:
El tipo de los datos devueltos por una operación aritmética depende del tipo de
sus operandos; si se suman dos enteros, se obtiene un entero. Estos
operadores se deben utilizar con operandos del mismo tipo, o si no realizar una
conversión de tipos de uno de los dos operandos al tipo del otro.
42 -> 00101010
incremento
Tabla 1.11 Operaciones con "++" y "--"
Además Java soporta un operador ternario, el “?:”, que se comporta como una
versión reducida de la sentencia if-else:
Operadores de bit
Un operador de bit permite realizar operaciones de bit sobre los datos. Existen
dos tipos: los que desplazan (mueven) bits, y operadores lógicos de bit.
13 >> 1;
El operador & realiza la operación AND de bit. Aplica la función AND sobre
cada par de bits de igual peso de cada operando. La función AND es evaluada
a cierto si ambos operandos son ciertos. Por ejemplo vamos a aplicar la
operación AND a los valores 12 y 13:
12 & 13
1100
& 1101
-----------
1100
int flags = 0;
Operadores de asignación
i = i + 2;
i += 2;
Precedencia de operadores
Los operadores con mayor precedencia son evaluados antes que los
operadores con una precedencia menor.
x + y / 100
x + y / 100
Es equivalente a:
x + (y / 100)
1.10 Sentencias
Condicionales
if(<condición>){
<sentencia>*
}
if(<condición>){
<sentencia>*
}else{
<sentencia>*
}
switch(<variable>){
case<valor>:
<sentencia>*
break;
case<valor>:
<sentencia>*
break;
default:
<sentencia>*
break;
}
Ciclos o Ciclos
for(<valor_inicial>;<condición>;<incremento>){
<sentencia>*
}
while(<condición>){
<sentencia>*
}
do{
<sentencia>*
} while(<condición>);
Tabla 1.17 Sentencias condicionales y de ciclo.
Como los bloques se pueden anidar no hay problemas por definir una
sentencia de control dentro de otra:
1.11 Matrices
Se define como un conjunto de datos del mismo tipo organizados en dos o más
columnas y uno o más renglones, es decir es un arreglo bidimensional o una
tabla. Los arreglos con dos dimensiones se utilizan a menudo para representar
tablas de valores, que constan de información ordenada en filas y columnas.
Para identificar un elemento especifico de una tabla, se deben especificar los
índices. Por convención, el primer índice indica la fila del elemento y el
segundo, su columna. En Java los arreglos bidimensionales son arreglos de
arreglos. Como era de esperarse, se parecen y actúan como los arreglos
multidimensionales.
Inicialización de arreglos
Para inicializar los arreglos unidimensionales, únicamente hay que poner los
valores entre llaves, un valor detrás de otro, separados por comas, empezando
con el primer valor del arreglo.
Declaración de matrices
Ejemplo:
Ejemplo:
public class MiClase{
public static void main (String [] args){
double cuentas[][]; //declaración de la matriz
//demás sentencias
Inicialización de matrices
Ejemplo:
Creación de matrices
Como en otros lenguajes de programación, en Java, las matrices, son arreglos
de arreglos. Esto quiere decir que se pueden construir arreglos como se quiera;
como en el ejemplo siguiente, en el que cada fila de un arreglo de dos
dimensiones tiene un diferente número de elementos.
Ejemplo:
La salida es:
1 2 3
10 20 30
Esto ocurrirá cada vez que tengamos que realizar un cálculo de intereses. Si la
elección se extendiera a, por ejemplo, cinco bancos, tendríamos que copiar el
algoritmo para cada uno de ellos. Para no tener que repetir una y otra vez lo
mismo, podemos recurrir a una técnica muy utilizada en programación: dividir el
código en funciones.
Debemos pasar los parámetros como se han definido, en el mismo orden y con
el mismo tipo de dato.
montoBanco2);
}
}
Ejercicio 1.5: Cree una función que muestre un menú que le permita decidir qué
operación realizar. Esto de acuerdo al proyecto que se ha venido
desarrollando. De acuerdo a cada opción, el usuario deberá ingresar un
número o una letra que identifique cada opción.
Procedimientos
Declaración de procedimientos
Sintaxis.
<modificador>*<tipo_regresado><nombre>(<argumentos>*){
<cuerpo>*
}
Para sobrecargar un procedimiento, sólo hay que definirlo más de una vez,
especificando una nueva lista de parámetros en cada una de ellas. Cada lista
de parámetros debe ser diferente de cualquier otra de alguna forma, el número
de parámetros o el tipo de uno o más de ellos.
La referencia this
}
}
/*En este ejemplo se compara el valor de la
variable peso de dos objetos, lo que se regresa
es el objeto cuyo valor en peso sea mayor.*/
El método elPesoMayor devuelve una referencia al perro que tiene mayor peso,
comparando los pesos del Perro nuevo que se recibe como argumento y el
propio. En caso de que el propio resulte mayor el método debe devolver una
referencia a sí mismo. Esto se consigue con la expresión return this.
in.read();
in.read();
in.read();
Este código además de poco elegante sería inviable para una repetición de
3000 lecturas. Por eso aparecen las estructuras de control, que facilitan que
determinadas acciones se realicen varias veces, mientras que una condición se
Ejemplo:
int contador=0;
in.read();
Donde bastaría cambiar el 3 por cualquier otro número para que la lectura se
repitiese ese número de veces.
Sentencia Clave
Toma de decisión if-else, switch-case
Ciclo for, while, do-while
Diversas break, continue, label:, return
Tabla1.18 Estructuras de control
La sentencia if - else
if ( condición ){
int
variable=Integer.parseInt(campoDeTexto.getText());
if (variable >= 0) {
//que hacer si es mayor o igual a cero
System.out.println( "Entró a >= 0 " );
}
else {
//que hacer si no es mayor o igual que cero
System.out.println( "Entró a <0 " );
}
int valor;
//leer valor
char clasificacion;
if (valor > 90){
clasificacion='A';
}
else
if (valor > 80){
clasificacion='B';
}
else
if (valor > 70){
clasificacion='C';
}
else{
clasificacion='F';
}
Se pueden escribir los if en las mismas líneas que los else. Este sistema de
programación (else if) no es demasiado recomendable cuando crece la
cantidad de condiciones, por ello el lenguaje Java incluye la sentencia switch,
que veremos a continuación, para dirigir el flujo de control de variables con
múltiples valores.
La sentencia switch
switch ( <expresionMultivalor> ) {
Cada sentencia case debe ser única y el valor que evalúa debe ser del mismo
tipo que el devuelto por la expresiónMultivalor de la sentencia switch.
Por ejemplo, supongamos un programa con una variable entera meses cuyo
valor indica el mes actual, y se desea imprimir el nombre del mes en que
estemos. Se puede utilizar la sentencia switch para realizar esta operación:
int mes;
//asignar un valor a mes
switch ( mes ){
//Demás meses
Ejercicio 1.7: Utilice las herramientas anteriores para crear dos maneras
distintas de mostrar el menú de nuestra aplicación. Al inicio, el usuario deberá
elegir uno de los dos (Uno que use if else y el otro switch)
Ciclo while
El ciclo while es el ciclo básico de iteración. Sirve para realizar una acción
sucesivamente mientras se cumpla una determinada condición.
La forma general del ciclo while es la siguiente:
while ( expresiónBooleana )
{
sentencias;
};
Se utiliza, por ejemplo para estar en un ciclo del que no hay que salir mientras
que no se cumpla una determinada condición. Por ejemplo, multiplicar un
número por 2 hasta que sea mayor que 100:
int i = 1;
Ciclo do-while
do {
sentencias;
} while ( expresiónBooleana );
La sentencia do-while debe utilizarse cuando el ciclo deba ser ejecutado por lo
menos una vez.
int c;
do {
c = System.in.read( );
// Sentencias para tratar el carácter c
} while ( c != -1 ); // No se puede leer más
(Fin del archivo)
Ciclo for
sentencias;
}
Algunos (o todos) estos componentes pueden omitirse, pero los puntos y coma
siempre deben aparecer (aunque sea sin nada entre sí).
Se debe utilizar el ciclo for cuando se conozcan las restricciones del ciclo (su
instrucción de iniciación, criterio de terminación e instrucción de incremento).
Por ejemplo, los ciclos for son utilizados comúnmente para iterar sobre los
elementos de una matriz, o los caracteres de una cadena:
Sentencia break
nombreSentencia: sentenciaEtiquetada
break nombreSentencia2;
void gotoBreak() {
Sentencia continue
Del mismo modo que en un ciclo se puede desear romper la iteración, también
se puede desear continuar con el ciclo, pero dejando pasar una determinada
iteración.
Se puede usar la sentencia continue dentro de los ciclos para saltar a otra
sentencia, aunque no puede ser llamada fuera de un ciclo o ciclo.
Del mismo modo que break, en las sentencias continue se puede indicar una
etiqueta de bloque al que hace referencia. Con ello podemos referirnos a un
bloque superior, si estamos en ciclos anidados. Si dicha etiqueta no es
indicada, se presupone que nos referimos al ciclo en el que la sentencia
continue aparece.
void gotoContinue( ) {
1
24
369
4 8 12 16
Sentencia return
Cuando un método se declara como void se debe usar la forma de return sin
indicarle ningún valor. Ejemplo:
int contador;
boolean condicion;
int devuelveContadorIncrementado(){
return ++contador;
}
void metodoReturn(){
//Sentencias
if ( condicion == true )
return;
//Más sentencias a ejecutar si condición ¡= true
}
Los componentes de GUI son parte de la JFC6 (Java Foundation Classes), las
bibliotecas de Java para el desarrollo de GUI´s para múltiples plataformas.
El Swing es una extensión de AWT así que a los métodos o clases se les
antepuso la ‘J’ para saber que era de Swing
AWT SWING
Button JButton
Label JLabel
6
Java Foundation Classes; Clases de la fundación java.
Etiquetas
contenedor.add( etiqueta1 );
//le agregamos al contenedor la etiqueta y ya está.
Campos de texto
// configurar GUI
public PruebaCampoTexto()
{
super( "Prueba de JTextField y JPasswordField" );
contenedor.add( campoContrasenia );
ManejadorCampoTexto manejador =
new ManejadorCampoTexto();
campoTexto1.addActionListener( manejador );
campoTexto2.addActionListener( manejador );
campoContrasenia.addActionListener( manejador );
Debido al tamaño que tiene el código de este ejemplo por sí solo, se omitieron
comentarios de instrucciones que ya fueron explicadas anteriormente.
JTextArea
package jtextarea_ej;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
// establecer areaTexto1
areaTexto1 = new JTextArea( cadena, 10, 15 );
cuadro.add( new JScrollPane( areaTexto1 ) );
// establecer areaTexto2
areaTexto2 = new JTextArea( 10, 15 );
areaTexto2.setEditable( false );
cuadro.add( new JScrollPane( areaTexto2 ) );
JScrollPane
Esto es un ejemplo de cómo usar el JScrollPane. Para ello vamos a poner una
imagen dentro de un JLabel y esta a su vez dentro de un JScrollPane. Todo
ello dentro de un JFrame para visualizarlo.
El JFrame saldrá con el tamaño necesario para ver la imagen completa (la
línea que dice ventana.pack() hace eso). Para que aparezcan las barras de
scroll hay que redimensionar la ventana, haciéndola más pequeña que la
imagen. También, en el código, se podría usar el método:
setVerticalScrollBarPolicy (JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
De JScrollPane para obligar a que salga siempre la barra vertical. Hay un método
similar para la horizontal.
package pruebajscrollpane;
import javax.swing.*;
// La ventana
JFrame ventana = new JFrame("Imagen");
// El panel de scroll
JScrollPane scroll = new JScrollPane();
// La etiqueta.
JLabel etiqueta = new JLabel();
// Y se visualiza todo.
ventana.pack();
ventana.setVisible(true);
}
/**
* Programa principal. Instancia un PruebaJScrollPane
*/
public static void main(String[] args) {
new PruebaJScrollPane();
}
}
Si la imagen no es .gif, no funciona. Para que aparezcan los scrolls debe hacer
la ventana más pequeña que la imagen, como se muestra a continuación. Si
desea que aparezcan sin tener que modificar la imagen utilice el método que se
mencionó anteriormente.
EJERCICIO PROPUESTOS
1.4 ¿Para qué sirven los comentarios dentro del código de una aplicación?
1.8 Diseñe las clases que serían necesarias para crear un sistema de
inventarios para una tienda de ropa. A la tienda le interesa llevar un control
sobre sus empleados, sus productos, sus clientes y las ventas realizadas para
llevar un control contable, no es necesario programarlas.
1.9 Diseñe una clase llamada Factorial, su finalidad será calcular el factorial de
un número, este número deberá ser solicitado por el programa y el resultado
deberá ser comunicado al usuario. Utilice una función recursiva para lograrlo.
Ejemplo:
Variaciones:
1.10 Crear una clase en java que permita resolver ecuaciones de segundo
grado (forma: ax2 + bx + c = 0). Si en los resultados de una ecuación dada
existe una raíz compleja (raíz de número negativo) deberá mostrarse la
expresión que la represente.
1.11 Crear una clase que contenga un arreglo de números enteros y cuyas
funciones miembro realicen las siguientes funciones:
Variaciones:
Crear una clase que pida n valores enteros para llenar un arreglo.
Posteriormente crear 4 clases que hereden de la anterior para utilizar su
método de creación del arreglo y realicen las 4 operaciones descritas.
Variación:
Utilizar el polimorfismo para lograr que una función realice las
operaciones anteriores dependiendo de si recibe un número entero
(calcular valor absoluto) o un numero entero y un carácter (determinar si
el valor dado es primo)
1.13 Llenar un arreglo de caracteres de n elementos y determinar:
1.14 Crear una clase que contenga un método que liste los divisores de un
número dado.
int a = 8 , b = 3;
double suma = 10.241;
char letra = ‘R’;
PROYECTOS INTEGRÁLES.
• Utilice objetos gráficos como JOptionPane para ingresar los datos con
los que desea trabajar.
Proyecto 2:
• Crear una agenda en memoria manejando arreglos para almacenar la
información. (Nombre, Teléfono, Mail, Dirección)
Proyecto 3:
• Desarrolle una aplicación que realice operaciones con matrices
cuadradas.
Aplicaciones gráficas.
ITM Unidad II Controles, Eventos, Métodos y Componentes
Primero crearemos una aplicación de escritorio, para ello hay que crear un
proyecto en NetBeans de tipo Java Desktop Application. La manera de crear un
proyecto ya se explicó anteriormente, debemos ir al menú File (Archivo) y a
continuación en New Project (Nuevo Proyecto). Podrá seleccionar entre los
distintos tipos de proyectos, desde aplicaciones de consola, pasando por
aplicaciones de escritorio, hasta aplicaciones para celulares o páginas web, en
este caso debemos seleccionar la categoría “Java” y el tipo de proyecto
mencionado y presionar “Next”.
Como puede observar, por default tenemos ya una pestaña de Archivo “File” y
una de ayuda “Help”, esto es debido a que es el template o esqueleto de
aplicación de escritorio por default de NetBeans, también se tienen los íconos
para ampliar la ventana, minimizarla o cerrarla. Si lo deseamos podremos
remover o cambiar lo que sea.
Una vez que tenemos nuestra aplicación de escritorio podremos crear controles
y agregarlos a la misma de una manera tan sencilla como arrastrarlos al lugar
donde los necesitemos.
Para eso, tenemos la ventana del lado derecho de la pantalla con la leyenda
“Palette”, en ella podremos localizar los componentes comunes que
encontramos en una aplicación.
Los botones proporcionan al usuario una forma rápida de iniciar alguna acción.
Hay que hacer clic sobre ellos. A los botones se les puede dar una inscripción,
Modificar propiedades.
Como puede observar, los botones tienen texto predeterminado, este texto se
almacena en una de las muchas propiedades de los objetos, veamos como
modificar algunas de estas propiedades.
Puede cambiar el texto del botón, la fuente, el color de la letra, el color del
botón, el tamaño, el nombre del botón, etc.
Ejemplo: Cambiar el texto de los botones del ejemplo a “¡Hola Mundo!” y “¡Hola
Java!”.
Para ello:
3. Presione Enter.
Ventana de propiedades
Campos de Texto.
Los cuadros de texto son componentes que soportan texto. Estos componentes
gestionan cadenas de texto de una dimensión; permiten visualizar el texto que
el usuario escribe, poner máscaras de texto cuando se introduce una clave
secreta, leer texto que el usuario ha incluido y mucho mas.
Para crear un campo de texto, llevamos a cabo el mismo proceso que en los
botones. Únicamente tenemos que arrastrarlo de la Paleta de componentes a
nuestra ventana de aplicación y ubicarlo en el lugar que queramos. Presione f6
para observar que sucede.
se lleve a cabo alguna acción cuando escriba algo, seleccionar la caja de texto,
etc.
Modificar propiedades.
Al igual que los botones tienen texto predeterminado, lo tiene la caja de texto,
este texto se almacena en una de las muchas propiedades de los objetos,
estas propiedades se modifican de la misma manera que se describió
anteriormente.
Para ello:
3. Presione Enter.
Ventana de propiedades
Las casillas de activación son como botones, salvo que tienen un doble estado,
es decir, pueden estar seleccionadas o no. Cuando se seleccionan, aparecen
con algún tipo de marca, como puede ser una marca de activación o una X (el
tipo de indicación visual depende del sistema operativo en que se haya
programado, que es una de las razones por la que Sun introdujo Swing, que
puede visualizar componentes con la misma forma independientemente del
sistema operativo). El usuario puede marcar una casilla de activación para
seleccionar un tipo de opción. Se usan las casillas de activación para permitir al
usuario opciones de selección no exclusivas.
Ejemplo: Programa que tiene dos campos de texto, uno editable y otro no
editable. Agregar dos casillas de activación al programa, cambie el texto
predeterminado de las casillas para describir lo que hará cada una, en este
caso, una que diga mayúsculas y otra que copie el texto de una casilla a la
otra.
Para ello:
1. Coloque las dos casillas de activación, arrastrándola de la paleta de
componentes, asignándoles un nombre en función de su propósito,
por ejemplo jCBcopiar (jCheckBoxcopiar).
Ventana de propiedades
Para crear un evento sobre algún objeto del formulario, seleccione el objeto
que desee y a continuación busque el evento deseado en la pestaña “Events”
que se encuentra junto a la pestaña de propiedades.
Para agregar más funcionalidad debemos utilizar los métodos de los objetos, a
continuación se listan algunos de los métodos de un campo de texto y su
funcionalidad.
Método Descripción
Dimension getMinimumSize() Obtiene las dimensiones mínimas
para el cuadro de texto
int getColumns() Obtiene el número de columnas del
cuadro de texto.
Protected String paramString() Obtiene la representación en cadena
del estado del cuadro de texto.
void removeActionListener(Action Elimina el action listener indicado,
Listener) para que no reciba eventos.
void setText(String) Asigna una cadena al objeto.
String getString () Devuelve en una cadena el contenido
de una caja de texto.
Tabla 2.1 Métodos de algunos objetos.
Cabe mencionar que NetBeans proporciona una lista y una breve descripción
del funcionamiento de cada método. Basta con utilizar la herramienta de
NetBeans mencionada anteriormente.(Ctrl+Space)
Botones
Los pasos para crear el evento son los mismos, únicamente debe seleccionar
el evento indicado. Seleccione el botón y busque el evento apropiado en la
pestaña de eventos. “mouseClicked” para el ejemplo, además es lo más común
con un botón.
El código es el siguiente:
Para el check_box 1
if (checkMayusculas.isSelected() == true){
campoTexto1.setText(campoTexto1.getText().
toUpperCase());
}
else{
campoTexto1.setText(campoTexto1.getText().
toLowerCase());
}
Para el check_box 2
private void
checkCopiarMouseClicked(java.awt.event.MouseEvent evt) {
if (campoTexto2.isSelected()==true){
campoTexto2.setText(campoTexto1.getText());
}
else{
campoTexto2.setText("");
}
}
Método Descripción
boolean isBackgroundSet() Regresa “true” si el color de fondo del
componente se ha especificado, “false” si
no.
boolean isBorderPainted() Regresa “true” si el borde del objeto está
pintado, regresa “false” de lo contrario.
boolean isEnabled() Regresa “true” si el componente está
habilitado o “false” si no.
boolean isSelected() Regresa “true” si el componente está
seleccionado o “false” si no.
void setText (String text) text – Es una cadena que se pondrá como
texto.
void setVisible (boolean aFlag) aFlag – bandera “true” para hacer que este
El código es el siguiente:
private void
opcion1StateChanged(javax.swing.event.ChangeEvent evt) {
if(opcion1.isSelected()==true){
campoTexto1.setText("Eligió la opción 1");
}
}
private void
opcion2StateChanged(javax.swing.event.ChangeEvent evt) {
if (opcion2.isSelected()==true){
campoTexto.setText("Eligió la opción 2");
}
}
Los formularios no modales permiten alternar el foco entre dos formularios sin
necesidad de cerrar el formulario inicial. El usuario puede continuar trabajando
en otro lugar, en cualquier aplicación, mientras se muestra el formulario.
Para crear una caja de dialogo en java, usted debe crear una clase desde cero,
heredar de clases predefinidas y crear por medio de texto puro cada elemento
del nuevo formulario.
Hasta este momento no puede ejecutar este cuadro de diálogo. Para ello
debe crear una instancia de su clase en nuestro formulario principal. Para
llamar el cuadro de diálogo que diseñamos anteriormente en el formulario
principal, haga lo siguiente:
2.3.2 Predefinidas
1. Confirmación (ConfirmDialog).
6. Mensaje (MessageDialog)
7. Opción (OptionDialog)
Por ejemplo:
Como puede Observar es muy sencillo, solo debe seleccionar el tipo de caja
de diálogo que desea utilizar. Si no está seguro de para qué sirve cada una,
en la parte inferior se muestra una explicación de para qué sirve, que es lo
que muestra, etc. En el listado de los métodos puede observar que
parámetros se necesitan y que devuelve la función. En fin entre las dos
ventana automáticamente desplegadas por NetBeans se muestra todo lo
que debe saber del método que crea una caja de diálogo.
Puede ser que le muestre otro error debido a que no está asignando el valor
de vuelta a ninguna variable. Ese error también se puede solucionar
fácilmente. Aunque… de hecho esto no es un error, sería el equivalente a
un warning en el lenguaje C.
Como vemos el método devuelve un entero que nos permitirá captar cual es
la opción elegida por el usuario. Los valores serán 0 para Si, 1 para No, 2
para Cancelar y -1 para el cierre de la ventana. Así podremos preguntar
cuál es el valor devuelto y realizar la acción que deseamos.
if (checkMayusculas.isSelected() == true){
ampoTexto1.setText(campoTexto1.getText().toUpperCase());
}
else{
campoTexto1.setText(campoTexto1.getText().toLowerCase());
}
}
Ahora, supongamos que usted no necesita preguntar nada al usuario, que solo
quiere mostrar un mensaje al realizar cierta acción, ya sea una confirmación o
un mensaje de que ocurrió cierto error. Para eso utilicemos un mensaje simple,
ahora lo pondremos en el botón de la aplicación.
Ejemplo: Agregar al código del evento “mouseclicked” del Botón con la leyenda
“Hola Java” de nuestra aplicación el código que muestre una mensaje que
indique que la acción se llevó a cabo correctamente. Anteriormente habíamos
mostrado una caja de dialogo en ese código. Modifíquelo si es necesario.
El código es el siguiente:
JOptionPane.showMessageDialog(mainPanel,
"La acción se realizó correctamente");
7
Swing es una biblioteca gráfica para Java. Contiene botones, cajas de texto, etc.
8
La Abstract Window Toolkit (AWT, en español Kit de Herramientas de Ventana Abstracta) es un kit de herramientas de gráficos,
e interfaz de usuario.
Las Internet Foundation Classes (IFC9) era una biblioteca gráfica para el
lenguaje de programación Java desarrollada originalmente por Netscape10.
9
Internet Foundation Classes era una biblioteca gráfica para el lenguaje de programación Java
10
Es una empresa de software famosa por ser la creadora del navegador web Netscape Navigator.
AWT vs Swing
AWT:
Pros
• Velocidad: el uso de componentes nativos aumenta la velocidad de
ejecución y el desempeño.
Contras
• Portabilidad: El uso de componentes nativos atenta contra la portabilidad
Swing:
Pros
• Portabilidad: El diseño de éstos componentes provén mayor portabilidad.
• Funciones: Swing soporta muchas más funciones como los iconos, los
pop-up, etc.
Contras
• Portabilidad Web: La mayoría de los navegadores de internet no
EJERCICIOS PROPUESTOS.
2.2 Diseñe una aplicación gráfica para manipular la información de una Agenda
electrónica. Utilice los controles swing disponibles para poder agregar,
modificar, eliminar o consultar la información de 20 personas diferentes. La
información se almacenará en memoria. Utilice arreglos de tipo que considere
necesarios.
2.3 Programe una aplicación en ambiente gráfico que le permita tener una lista
de alumnos y sus calificaciones. Utilice un objeto JList para almacenar dicha
lista y utilice JOptionPane o JTextField para ingresar la información. Luego
coloque los botones necesarios para ordenar dicha lista ya sea por nombre o
por la calificación.
2.7 Programe una aplicación que realice una conversión de temperaturas entre
Fahrenheit y Centígrados. Deberá ser capaz de que a que escala convertir, es
decir, de centígrados a Fahrenheit o viceversa.
1.10 Programe el juego del gato. Utilice una matriz de 9 elementos para llevar
un control de las posiciones. Utilice el objeto que considere conveniente para
representar de manera gráfica al gato. El programa debe llevar el control de
turno de dos jugadores y decir cuando gana alguno. Utilice botones o un menú
para crear opciones como nuevo juego o lo que necesite.
PROYECTO INTEGRAL.
Diseñe una aplicación gráfica que cree tablas de sudoku y usted pueda
resolverlas. El programa deberá ser capaz de revisar la solución que demos y
decir si es correcta o incorrecta. Existen algoritmos que describen también
como solucionarlos, de la opción al usuario para resolver un sudoku si es que
se rindió o no puede resolverlo.
INTRODUCCION.
Archivos binarios: Los archivos binarios son archivos electrónicos que han sido
guardados utilizando el código básico de las computadoras: una sucesión de
ceros y unos. Constituyen, en última instancia, la forma en la cual almacenan la
información, aunque su interacción con los usuarios requiere de lenguajes
auxiliares que resulten más inteligibles al ser humano.
Crear
Por ejemplo:
try{
FileWriter archivo = new FileWriter ("C:/prueba.txt");
}
catch (Exception e){
System.out.print("Error al crear el archivo");
}
Abrir
Por ejemplo:
Esto es equivalente a:
Cerrar
Sintaxis: Nombre_variable.close();
Este método debe invocarse para liberar los recursos11. Una vez que el archivo
ha sido cerrado, las operaciones posteriores sobre él producirán una excepción
IOException (Excepciones de entrada y salida de datos). Cerrar un archivo
previamente cerrado no tiene ningún efecto.
11
Como los descriptores de archivos.
try{
FileWriter archivoEsc = new FileWriter ("C:/prueba.txt");
FileReader archivoLee = new FileReader ("C:/prueba.txt");
archivoEsc.close();
archivoLee.close();
}
catch (Exception e){
System.out.print("Error en el archivo");
}
Entrada
Como se dijo, la clase base para los distintos tipos de entrada secuencial es
InputStream. Existen varias subclases que implementan distintos tipos de
fuentes de datos secuenciales, algunas de las más usadas son:
• Leer distintos tipos de datos además de bytes (por ejemplo: double, int,
boolean, etc.)
int contador;
do {
contador = lin.read();
if (contador >= 0) {
System.out.print((char) contador);
}
} while (contador >= 0);
System.out.println("\nSe leyeron " +
lin.getLineNumber()+1+ " lineas de texto.");
lin.close();
} catch (IOException ex) {
System.out.println("Error al leer o crear archivo");
}
Recuerde, dentro del catch usted pondrá lo que desea que el programa haga si
ocurre un error de algún tipo. De salida en caso de IOException o cualquier
error en caso de Exception. En este caso queremos que nos muestre un
mensaje explicándonos que tipo de error ocurrió, por eso ponemos la línea:
Salida
escribirArch.println(JOptionPane.showInputDialog
(campoTexto1, "Escriba la linea "+contador));
}
archivoEsc.close();
}
catch (Exception e){
System.out.print("Error al crear el archivo");
}
}
• Buscar a través del archivo Zip hasta que se localice el archivo que
quiere extraer.
• Extraer el Archivo.
Como mínimo, utilizando este argumento, habremos tenido que leer medio
archivo Zip antes de encontrar el archivo que quiere extraer. Se puede extraer
el mismo archivo de un archivo Zip de una forma más eficiente utilizando la
característica de búsqueda de un archivo de acceso aleatorio:
• Buscar (hacia atrás o adelante) dentro del archivo Zip hasta la posición
del archivo a extraer.
• Extraer el archivo.
Este algoritmo es mucho más eficiente porque sólo lee la entrada de directorio
y el archivo que se quiere extraer. (Los archivos .zip que contiene varios
archivos dentro, contienen una breve descripción de las posiciones que ocupa
cada archivo dentro de este. Eso es lo que se lee para saber dónde está el
archivo y extraerlo).
Método Función
read() Lee un byte de información del archivo.
write() Escribe un byte específico en el archivo.
readLine() Lee la siguiente Línea de texto del archivo.
writeLong() Escribe un dato tipo long en el archivo.
readShort() Lee un número con signo de 16 bits del archivo.
readLong() Lee un dato tipo long del archivo.
readInt() Lee un dato tipo Int del archivo.
Tabla 3.1 Métodos de la clase RandomAccessFile.
Esta clase posee métodos suficientes para leer cualquier tipo de dato nativo de
java, líneas en un archivo, escribir cualquier tipo de dato nativo de java e
incluso métodos para moverse a determinada posición.
RandomAccessFile miRAFile;
miRAFile = new RandomAccessFile( "/tmp/kk.dbf","rw" );
Actualización de Información
miRAFile.writeBytes(s);
miRAFile.close();
} catch (IOException ex) {
System.out.println("Error al Abrir el
archivo");
}
}
flujoSalida.close();
String str=(String)flujoEntrada.readObject();
MiClase obj=(MiClase)flujoEntrada.readObject();
4 Utilice los objetos recuperados. Una vez que llega a este punto, puede
disponer de los objetos como le plazca, puede utilizar sus métodos o
propiedades para lo que sea que los haya recuperado de la misma manera que
lo hace habitualmente. Por ejemplo, imprimiremos un dato del objeto obj y al
objeto str.
System.out.println("Valor de n "+obj1.n);
System.out.println(“El objeto String contiene ”+str);
flujoEntrada.close();
Modificador transient
Como puede ver, únicamente debe colocar la palabra transient antes del tipo
de dato. Para escribir un objeto que contenga este tipo de protección, el
proceso es el mismo.
Clase JFileChooser
• Para presentar una lista de archivos que pueden ser abiertos por la
aplicación.
Recuerde que hasta ahora, en todos los ejemplos relacionados con archivos,
debemos introducir el directorio y nombre del archivo que queremos abrir, con
esta clase, podremos elegir el archivo que deseemos abrir o guardar con el
nombre que queramos sin tener que predefinir nada en el código con relación a
estos nombres.
private void
guardarArchivoMouseClicked(java.awt.event.MouseEvent evt)
{
• El selector recuerda el directorio actual entre usos, por eso los diálogos
de abrir y grabar comparten el mismo directorio actual.
Cómo hemos podido ver en los fragmentos de código anteriores, los métodos
showOpenDialog() y showSaveDialog() devuelven un entero que indica si el
usuario ha seleccionado un archivo. Podemos utilizar el valor de retorno para
determinar si realizar o no la operación requerida.
private void
abrirArchivoMouseClicked(java.awt.event.MouseEvent evt)
{
JFileChooser fileChooser = new JFileChooser();
int valor = fileChooser.showDialog(fileChooser,
"Enviar");
}
Ejemplo: Cree un botón en nuestra aplicación o edite uno ya existente para que
al dar clic, muestre un selector de archivos personalizado. Crear un filtro
personalizado para que el selector de archivos muestre únicamente los
archivos cuya extensión pertenezca a una imagen. Para ello deberá crear una
clase separada que herede las propiedades de la clase FileFilter.
package aplicaciondeescritorio;
import java.io.File;
import javax.swing.*;
import javax.swing.filechooser.*;
if (f.isDirectory()) {
return true;
}
String s = f.getName();
int i = s.lastIndexOf('.');
return false;
}
Aceptando todos los directorios, este filtro permite al usuario navegar a través
del sistema de archivos. Si se omitieran las líneas en negrita de este método, el
usuario se vería limitado al directorio en que se inicializó el selector de
archivos.
Método Propósito
JFileChooser()
JFileChooser(File, FileSystemView)
JFileChooser(File)
Crea un ejemplar de JFileChooser.
JFileChooser(FileSystemView)
JFileChooser(String, FileSystemView)
JFileChooser(String)
int showOpenDialog(Component) Muestra un diálogo modal
int showSaveDialog(Component) conteniendo el selector de archivos.
int showDialog(Component, String)
Tabla 3.2 Métodos para crear y mostrar un selector de archivos.
Método Propósito
void ensureFileIsVisible(File) Fuerza el archivo indicado a ser
visible en la lista de archivos.
void setCurrentDirectory(File) Selecciona u obtiene el directorio
File getCurrentDirectory cuyos archivos se están mostrando en
el selector de archivos.
Cambia la lista para mostrar el
void changeToParentDirectory()
directorio padre del directorio actual.
void rescanCurrentDirectory() Comprueba el sistema de archivos y
actualiza la lista del selector.
Método Propósito
JComponent getAccessory() Selecciona u obtiene el accesorio del
void setAccessory(JComponent) selector de archivos.
void setFileFilter(FileFilter) Selecciona u obtiene el filtro primario
FileFilter getFileFilter() del selector de archivos.
void setFileView(FileView) Selecciona u obtiene el visor de
FileView getFileView() archivos del selector.
FileFilter[] getChoosableFileFilters()
void setChoosableFileFilters
(FileFilter[])
void addChoosableFileFilter(FileFilter) Selecciona, obtiene o modifica la lista
boolean removeChoosableFileFilter de filtros seleccionables.
(FileFilter)
void resetChoosable(FileFilter)
FileFilter getAcceptAllFileFilter()
void setFileHidingEnabled(boolean) Selecciona u obtiene si se muestran
boolean isFileHidingEnabled() los archivos ocultos.
Tabla 3.3 Métodos para personalizar el selector de archivos.
Método Propósito
void setFileSelectionMode(int) Selecciona el modo de selección de
try {
//Codigo donde puede ocurrir un error
}
catch (ExcepcionA ex) { // Que se va a hacer en caso que
se lance una Excepcion A }
...
catch (ExcepcionZ ex) { // Que se va a hacer en caso que
se lanze una Excepcion Z }
12
Una excepción es un evento que ocurre durante la ejecución del programa, de forma que interrumpe el flujo normal de las
sentencias.
RandomAccessFile miRAFile;
String s = "Informacion a incorporar";
miRAFile.writeBytes(s);
miRAFile.close();
} catch (IOException ex) {
System.out.println("Error al Abrir el archivo");
}
}
Dentro del bloque try { } viene encerrada la parte del programa que se desea
manejar sus excepciones. El código dentro de algún catch (TipoDeExcepcion
e) se ejecuta en caso de que se lance una excepción TipoDeExcepcion o que
pertenezca al grupo TipoDeExcepcion. El sistema de ejecución Java busca rar
el método que esté interesado en manejar una excepción particular. Es decir si
se lanza una excepción en el método A, pero si A no está interesado en
manejar dicha excepción, entonces el sistema de ejecución Java ve quién
llamó a A (supongamos que si existe, y es el método B), entonces se regresa a
B y ve si está interesado en dicha excepción, y así consecutivamente hasta
llegar al método principal de nuestra aplicación. En caso de no encontrar
alguien que quiera manejarlo, comúnmente Java manda una lista de mensajes
en nuestra ventana de consola, y en muchos casos se termina la ejecución de
nuestro programa. Cuando manejamos excepciones, podemos manejar
excepciones en forma específica (por ejemplo, usar un índice que está fuera de
los límites de nuestro arreglo), o manejar una excepción de cierta categoría
(por ejemplo, una excepción lanzada por mal uso de un arreglo de datos), o
manejar todas las excepciones en su conjunto. Para el primer caso, es
necesario este código:
catch(ArrayIndexOutOfBoundsException e){ }
Para el segundo:
Y para el último
EJERCICIOS PROPUESTOS.
3.2 Programe una pequeña función que le permita leer un archivo de entrada y
le diga cuantas palabras encontró en el mismo.
3.6 Diseñe y programe las clases necesarias para crear una aplicación que le
permita manipular una lista de alumnos y sus calificaciones almacenada en un
archivo de texto. Deberá ser capaz de ordenar a los alumnos por su nombre o
por sus calificaciones. Además, deberá ser capaz de agregar nuevos alumnos
a su lista o eliminar registros existentes. Luego de tener una lista en orden,
deberá ser capaz de guardar dicha lista ordenada en un archivo distinto al
archivo de origen.
3.7 Crear un programa traductor del idioma inglés. Para ello, introduzca un
archivo que contenga las palabras que pueden ser traducidas, cuando el
usuario escriba una palabra en ingles, el programa leerá el archivo y buscará el
significado para mostrarlo en la pantalla.
3.8 Desarrolle una aplicación que lea un archivo que contiene una lista de
nombres con diferentes longitudes. El programa deberá comprobar que todos
los nombres midan menos de 20 caracteres, de lo contrario deberá ajustarlo a
este tamaño, elimine espacios en blanco que se encuentren en los extremos (si
es que los hay) antes de comprobar el tamaño. Cree un nuevo archivo con los
nombres filtrados y haga que el programa le diga cuantos registros fueron
modificados para que su tamaño correspondiera.
3.9 Programe lo necesario para crear una aplicación que le permita leer de un
archivo una lista de personas, su dirección y su teléfono. Las columnas
deberán medir: nombre, 20 caracteres, dirección 60 caracteres y teléfono 20
caracteres. El programa deberá rellenar con espacios en blanco lo necesario
para que haya 3 columnas con los datos exactamente en ese formato. El
archivo de entrada puede tener algún formato en específico pero el de salida
deberá tener la estructura mencionada.
3.10 Diseñe un programa que lea de un archivo una lista de valores numéricos
(teléfonos) y busque si hay alguno repetido. El programa le notificará que
número y cuantas veces esta repetido.
PROYECTO INTEGRAL
ID Descripción del campo Tipo de dato Longitud Pos Inicial Pos Final Comentarios
2 Tipo de producto Numérico 6 1 6 1 AFORE
3 Tipo de solicitud Numérico 6 7 12 1 Afiliación 2 Traspaso
7 NSS Numerico 11 13 23 número de seguro social
8 CURP CHAR 18 24 41 Clave CURP
9 Ap. Paterno CHAR 40 42 81 Apellido Paterno
10 Ap. Materno CHAR 40 82 121 Apellido Materno
11 Nombres CHAR 40 122 161 Nombres
12 Telefono casa CHAR 20 162 181 Teléfono del domicilio del trabajador
13 Telefono oficina CHAR 20 182 201 Teléfono de la oficina del trabajador
12 Telefono celular CHAR 20 202 221 Teléfono celular del trabajador
12 Telefono patrón CHAR 20 222 241 Teléfono del jefe el trabajador
14 Extension oficina CHAR 6 242 247 Extensión de oficina del trabajador
13 Extension patron CHAR 6 248 253 Extensión del oficina del jefe
En resumen, debe leer del archivo de Excel las diferentes columnas o extraer la
información a un archivo de texto que le permita realizar las validaciones
necesarias a los registros. La aplicación real obedece más validaciones y
reglas pero para nuestro proyecto creo que con esto será suficiente.
Bases de Datos.
ITM Unidad IV Acceso a Datos
4.1 Introducción.
En esta unidad trabajaremos sobre bases de datos, sin embargo, no es objetivo
de esta unidad profundizar demasiado en el tema, mas bien, el dar al
estudiante una idea del funcionamiento y los beneficios de utilizar una base de
datos y también presentarle superficialmente algunas nuevas tecnologías
diseñadas para trabajar con ellas que además de proporcionar un mejor diseño
a la estructura de una aplicación, ayudan muchísimo a un funcionamiento
mucho más eficiente.
JDBC fue diseñado para mantener sencillas las cosas sencillas. Esto significa
que el API14 JDBC hace muy sencillas las tareas diarias de una base de datos,
como una simple sentencia SELECT. Esta sección nos llevará a través de
ejemplos que utilizan el JDBC para ejecutar sentencias SQL15 comunes, para
que podamos ver lo sencilla que es la utilización del API JDBC básico.
Al final de esta primera sección, sabremos cómo utilizar el API básico del JDBC
para crear tablas, insertar valores en ellas, pedir tablas, recuperar los
resultados de las peticiones y actualizar las tablas. En este proceso,
aprenderemos como utilizar las sentencias sencillas y veremos un ejemplo de
un procedimiento almacenado. También aprenderemos como realizar
transacciones y como capturar excepciones y avisos.
Para crear una aplicación que utiliza una base de datos debemos conectar
nuestro programa hecho en con el lenguaje java en NetBeans con el manejador
de la base de datos MySQL. Lo primero que debemos hacer antes de conectar
Java con MySQL en NetBeans es instalar ambos. En la primera unidad vimos
como instalar NetBeans. Para MySQL, no solo instalaremos MySQL,
instalaremos un paquete llamado Appserv16.
13
Java Database Connectivity, es un API que permite ejecutar operaciones sobre una base de datos.
14
Del inglés Application Programming Interface – Interfaz de Programación de Aplicaciones.
15
Structured Query Language – Lenguaje estructurado para consultas en una base de datos.
16
Es un paquete que instalará en la PC Apache, PHP, MySQL y phpMyAdmin, dejando las aplicaciones configuradas para su
funcionamiento.
AppServ incluye:
Instalación de AppServ.
1. Baje la versión que desee del sitio oficial de AppServ, en este caso se
utilizará la versión (2.5.10), el link de la página oficial es el siguiente:
http://www.appservnetwork.com/
Para probar que la instalación funciona debemos iniciar ambos servidores, para
hacer esto vaya a inicio y busque AppServ, luego Control Server by Service y
ahí seleccione Apache start y MySQL start.
Una vez que ambos servidores están funcionando habrá algún navegador de
internet y escriba “localhost” en el apartado de la página.
Una vez que tenemos esta página vamos a entrar a phpMyadmin para
administrar nuestras bases de datos. Para ello pulse donde dice phpMyadmin
Database Manager.
Por último veamos la tabla de MySQL donde se guardan los usuarios que
tienen acceso para ver qué usuarios tiene acceso.
Para ver la tabla donde se guardan los usuarios que tiene acceso demos click
en “Bases de Datos” y seleccione la tabla de MySQL.
Como puede observar, se muestra un listado de las tablas que contiene esa
base de datos. Seleccione la tabla “user” que está en lo más bajo.
Como puede observar, se nos muestra la sintaxis de la consulta SQL que nos
mostraría el contenido de esta tabla en la sección “consulta SQL” y en la parte
inferior nos lista los resultados de la consulta. Esta herramienta le puede ser de
gran utilidad si no está seguro de la sintaxis de alguna acción sobre una tabla
al momento de programar y necesite saber cómo hacer algo sobre alguna
tabla… todo lo que usted haga aquí de manera gráfica, se mostrara en consulta
SQL.
Como puede ver, será capaz de crear nuevos usuarios con diferentes
privilegios sobre las tablas o las cosas que puede hacer o no.
Para conectar una base de datos con java, abrimos NetBeans y creamos un
proyecto, hacemos clic en la pestaña "Runtime" (En la versión que estamos
utilizando la pestaña dice “Services”) y buscamos la opción "Databases",
hacemos doble clic sobre ella. Nos mostrará una carpeta con el nombre Driver,
a esta le daremos clic con el botón derecho del mouse y seleccionamos Add
Driver.
Ahora, veremos que en la carpeta "Driver" nos aparecerá una opción llamada
com.mysql.jdbc.Driver, la seleccionamos con el botón derecho del mouse y
seleccionamos "Connect Using"
Ahora, se nos pide los datos de la base de datos, en la opción "Database URL" debemos
ingresar la dirección de la base de datos, empezando con el prefijo
"jdbc:mysql:://host/bd, ingresamos nuestro nombre de usuario y contraseña.
La manera de conectarse con la base de datos anterior, puede ser útil para
realizar pruebas con los usuarios que se hayan creado o para otros fines pero
la manera importante de establecer la conexión es mediante código, dentro de
alguna función.
Ejemplo: Modificar nuestra aplicación para conectarse con una Base de Datos.
Cree una función que pueda llamar desde cualquier lugar para conectarse
mediante líneas de código con una base de datos.
package aplicaciondeescritorio;
Class.forName("com.mysql.jdbc.Driver");
Figura 4.15 Ejemplo de botón que invoca una conexión con la base de datos.
Ahora hay que definir que tamaño y tipo serán nuestros campos. Para el
ejemplo manejaremos el campo Id como numérico y los demás serán
caracteres. El campo Id, será la llave de cada una de las tablas. De clic en
Guardar cuando termine con cada tabla.
Una vez que creamos nuestras tablas podremos seleccionar nuestra nueva
base de datos en el menú de bases de datos y ver cómo está conformada.
Ahora vamos a nuestro ejemplo a crear registros en las tablas. Hasta este
punto, nos conectamos con nuestra base de datos al dar clic en un botón.
Obviamente no debe ser así, una aplicación de este tipo debería conectarse sin
necesidad de tener que indicárselo.
package aplicaciondeescritorio;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
}
catch(SQLException ex) {
System.out.println("Hubo un problema al intentar "+
"conectarse con la base de datos "+url);
}
catch(ClassNotFoundException ex) {
System.out.println(ex);
}
return conn;
}
}
En el ejemplo anterior nos conectamos con una base de datos vacía que se
llama test, ahora nos conectamos con la base de datos que creamos. Solo hay
que cambiar el nombre de la base a la que nos conectamos y quitar la
instrucción que nos desconectaba. También modificamos un poco la función
para que nos regrese el objeto que representa nuestra conexión. Lo
necesitaremos para los accesos a la base de datos.
java.sql.Statement st = cone.createStatement();
st.execute("INSERT INTO `negocio`.`productos` (`Id` ,`nombre` ,`precio`)
VALUES ('"+Id+"', '"+nombre+"', '"+precio+"');");
} catch (SQLException ex) {
Logger.getLogger(AplicacionDeEscritorioView.class.getName()).
log(Level.SEVERE, null, ex);
}
}
Primero se está estableciendo la conexión, luego se piden los tres valores que
se almacenarán en la tabla. Por último se crea un objeto de la clase Statement
que nos permitirá ejecutar sentencias SQL que enviemos en forma de cadenas.
Además, se puede manipular la propia base de datos para crear nuevas áreas
para el almacenamiento de información (tablas), como también alterar o
eliminar las ya existentes, entre otras cosas.
ADO substituyó tanto a DAO (Data Access Object), que eran los sistemas
previos que se usaban para acceder a las bases de datos y bases de datos
remotas. Es sencillo de usar, de entender y por lo tanto fácil y menos engorroso
de programar.
ADO.NET es mucho más poderoso que ADO pero también es muy diferente,
por lo que es necesario rediseñar los programas hechos con ADO, para que
funcionen en él.
DAO RDO
ADO
ADO.NET
ADO.NET 2 (2006)
Funcionamiento
17
Active Server Pages, tecnología de Microsoft del tipo “lado servidor” para páginas web dinámicas.
18
Estándar para manejo de bases de datos creado por Microsoft.
ADO está formado por varios objetos organizados de forma jerárquica (cada
uno de ellos con sus métodos y propiedades específicos) de los cuales vamos
a estudiar los que considero más interesantes.
Connection
Nos proporciona una conexión a una base de datos ODBC desde una página
ASP. Esta conexión nos permitirá efectuar las operaciones que deseemos
sobre la base de datos. Es el objeto primario de ADO, ninguno de los otros
objetos puede existir si este no es declarado de forma explícita o implícita (en
algunos de los ejemplos veremos que no existe una declaración del objeto
Connection, pero debemos de tener en cuenta que siempre existe, si es
necesario ADO lo declarará por sí mismo). La conexión terminará cuando
nosotros la cerremos explícitamente con el método close o bien cuando termine
la ejecución de la página ASP.
Error
Command
Recordset
Field
Propiedades:
ConnectionString
Data Source:
DSN=Nombre ODBC de la Base de Datos
Usuario:
User=Nombre de Usuario
Password:
Password=Password del usuario para la base de datos
Ejemplo:
Mode
Ejemplo:
Métodos:
BeginTrans
Abre una transacción; todas las operaciones que realicemos a partir de ese
momento no serán efectivas hasta que no cerremos la transacción.
Ejemplo:
Close
Cierra el objeto.
Ejemplo:
CommitTrans
Ejemplo:
Execute
Ejemplo:
Open
Ejemplo:
RollBackTrans
Ejemplo:
Propiedades:
Description
Number
El numero de error.
SQLState
Métodos:
Clear
.......
.......
Miconexion.open
If Miconexion.Errors.Count > 0 then
For each error in Miconexion.errors then
Response.write Error.Number & " = "& Error.Description
next
End if
Objeto RecordSet
Entendemos como cursor el puntero que nos permite desplazarnos por los
registros del recordset. Dependiendo del tipo elegido determinaremos los
Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Const adOpenStatic = 3
Const adLockReadOnly = 1
Const adLockPessimistic = 2
Const adLockOptimistic = 3%>
set rs=createobject("ADODB.Recordset")
rs.CursorType = adOpenKeyset
rs.LockType = adLockOptimistic
Método Características
Mueve el cursor Num_registros hacia abajo si
Move Num_registros
es positivo y hacia arriba si es negativo.
Mueve el cursor al primer registro del
MoveFirst
Recordset.
Mueve el cursor al último registro del
MoveLast
Recordset.
MoveNext Mueve el cursor un registro hacia adelante.
MovePrevious Mueve el cursor un registro hacia atrás.
Tabla 4.3 Métodos pa moverse en un Recorset
Propiedades usadas:
Propiedades Caracteristicas
Establece el número de registros por página
PageSize
del
(Ej. rs.Pagesize=10)
Recordset.
Mueve el cursor al primer registro de dicha
AbsolutePage
página (es necesario definir anteriormente el
(Ej. rs.AbsolutePage=2)
pageSize).
PageCount Contiene el número de páginas del recordset,
(Ej. xx=rs.PageCount) tomando como base PageSize.
Absoluteposition Mueve el cursor al num_registro especificado.
(Ej.
rs.Absoluteposition=17)
Contiene el número de registros del recordset;
RecordCount
Nota: No funciona con el cursor
(Ej. xx=rs.recordcount)
adOpenForwardOnly
Toma el valor True cuando estamos en el
BOF primer
registro del recordset
Toma el valor True cuando estamos en el
EOF ultimo
registro del recordset
Métodos usados:
Metodo Caracteristicas
AddNew Abre un nuevo registro en el recordset
para introducir
EJ. datos
rs.Addnew
rs("codigo")=1234
rs("titulo")="Todo sobre ASP"
rs.Update
Delete Elimina el registro actual
Update Actualiza un registro del recordset tras
haberlo
EJ: modificado
Métodos usados:
Método Caracteristicas
Open Sql, conexion Abre el recordset y almacena en el
resultado de sql contra la conexión
EJ.
set
rs=createobject("ADODB.Recordset")
rs.CursorType = 1
rs.LockType = 3
Sqltxt="SELECT * FROM libros"
rs.open Sqltxt, "DSN=Biblioteca"
Ejemplo de listado de un Recordset: Suponga que tiene una BD, en ella la tabla
almacén y en esa tabla los campos Id_Producto, Producto, Cantidad y Precio
para el ejemplo.
4.4.1 ADO.NET
4.4.2 JDBC
4.4.3 ODBC
4.4.4 DAO
Al igual que los objetos ADO, los objetos DAO conforman una capa que separa
las capas de lógica y de programación de nuestras aplicaciones. El beneficio
principal, como se ejemplificó anteriormente, es que si tuviéramos una
tecnología de BD y cambiáramos a otra, no tendríamos que reprogramar
nuestras clases. La capa formada por los objetos DAO se llama capa de
Persistencia de Datos.
En una aplicación, hay tantos DAOs como modelos. Es decir, en una base de
datos relacional, por cada tabla, habría un DAO.
DAO consiste básicamente en una clase que es la que interactúa con la base
de datos. Los métodos de esta clase dependen de la aplicación y de lo que
queramos hacer. Pero generalmente se implementan los métodos CRUD para
realizar las "4 operaciones básicas" de una base de datos.
Por último, debemos mencionar a los objetos DTO y podremos analizar código.
Los DTO (Data Transfer Object) o también denominados VO (Value Object).
Son utilizados por DAO para transportar los datos desde la base de datos hacia
la capa de lógica y viceversa. Por ejemplo, cuando la capa de lógica llama al
método create(), ¿qué es lo que hace DAO? inserta un nuevo dato... ¿pero qué
dato? el que la capa de lógica le pase como parámetro... ¿y cómo se lo pasa
este dato?, a través de un DTO.
Podría decirse que un DTO es un objeto común y corriente, que tiene como
atributos los datos del modelo, con sus correspondientes accesos (getters y
setters).
Por ejemplo, si tuviéramos una base de datos relacional con una tabla
Almacen, con los campos id, producto y cantidad. Entonces tendríamos que
crear una clase AlmacenDTO, con los atributos id, producto y cantidad, que van
a utilizar la capa de lógica y de persistencia para transportar los datos entre las
dos capas.
que este método tiene valor de retorno, ya que devuelve otro DTO con los
datos del resultado de la búsqueda.
Imaginemos una aplicación realizada en Java, utilizada para gestionar los datos
de una empresa (Almacen, clientes, empleados, etc.). Nosotros somos los
encargados de crear la capa de persistencia de la aplicación, y decidimos
utilizar el patrón de diseño DAO.
Los datos de los empleados, los datos de los clientes y los datos de los
productos.
Son tres modelos:
• El modelo Empleado: que almacena los datos de los empleados (el ID,
el nombre y el sueldo).
• El modelo Cliente: que almacena los datos de los clientes (el ID, el
nombre y la dirección).
• El modelo Producto: que almacena los datos de los productos (el ID, el
nombre y el precio).
Lo primero que debemos hacer es crear los DTO, uno para cada modelo:
Archivo Empleado.class:
class EmpleadoDTO {
Archivo Clientes.class:
class ClienteDTO {
//Campos de la tabla
private int id;
private String nombre;
private String direccion;
Archivo Producto.class:
class ProductoDTO {
//Campos de la tabla
private int id;
private String nombre;
private double precio;
Ahora, vamos a crear los DAO, uno para cada modelo también:
Archivo EmpleadoDAO.class:
class EmpleadoDAO {
Archivo ClienteDAO.class:
class ClienteDAO {
Archivo Producto.class:
class ProductoDAO {
/* Creamos el DAO */
EmpleadoDAO dao = new EmpleadoDAO();
/* Creamos un DTO */
Como pueden ver, lo único que hace la capa de lógica es llamar al método
create() de EmpleadoDAO, pasándole como parámetro un EmpleadoDTO,
después lo que haga el método create() es asunto de EmpleadoDAO.
EJERCICIO PROPUESTOS.
4.1 ¿Qué y para qué es el lenguaje SQL? Investigue acerca de este lenguaje
con mucho detalle. Sobre todo la sintaxis de sus consultas.
4.3 Instale el paquete AppServ y de de alta un nuevo usuario con todos los
accesos y permisos sobre las bases de datos de MySQL.
4.4 Crear una base de datos con ayuda de phpMyAdmin, deberá contener al
menos 2 tablas, utilice el ambiente gráfico para ingresar 5 registros en cada
una y luego experimente como modificar o eliminar los registros creados. Ej.
Clientes Productos
ID ID
Nombre Nombre
AP Precio
AM Existencia
4.5 Programe una función que le permita leer registro a registro el contenido de
las tablas de una base de datos. Impleméntela en una aplicación gráfica que
tenga los botones y campos de texto necesarios para ello. El usuario deberá
elegir que tabla desea consultar, en caso de que la base de datos contenga
varias.
4.6 Ejercicio de continuación del proyecto general. Cree una base de datos con
el nombre que guste que contenga una tabla que se llame “usuarios” esta tabla
deberá contener los campos: ID, usuario, password, nombre. Luego, haga que
la calculadora que ha desarrollado durante todo el material utilice esta base de
datos para el control de acceso, al igual que en la unidad anterior, donde se
utilizó un archivo estructurado.
4.7 Desarrolle una aplicación gráfica que implemente bases de datos para
almacenar palabras en ingles y sus equivalentes en español. Deberá crear la
base de datos necesaria y permitir al usuario consultar el significado de una
palabra en ingles. O sea, un traductor implementando bases de datos.
4.9 ¿Cuáles son algunos de los objetos ADO Principales? ¿Para qué sirve
cada uno?
4.10 Haga un programa sencillo en el que implemente algún objeto DAO para
una consulta de datos. Realice la misma función sin utilizar el objeto y analice
cuales son las ventajas y desventajas de usarlo, no solo para su aplicación sino
para proyectos empresariales. Investigue en internet que tanto se utiliza esta
tecnología en comparación a los objetos ADO de Microsoft.
PROYECTO INTEGRAL
Debe crear la base de datos que necesite y una interfaz que permita introducir
nuevos productos al inventario, eliminar productos que ya no se tienen o
realizar las consultas que el cliente necesita y se mencionaron anteriormente.
ActiveX
En cualquiera de los casos, deberá introducir cierto código para poder usar el
componente, una vez instalado en el servidor sobre el que vaya a ejecutarse.
Se trata, principalmente de una línea en la que crea una "instancia" del objeto
(componente) que va a usar, y el resto de código que utiliza los métodos y
propiedades de la instancia que acaba de crear. Por ejemplo, si escribimos en
una página ASP, el código debe quedar de la forma:
<%
Set OBJETO = Server.CreateObject(IDENTIFICADOR)
OBJETO.Metodo(Argumentos)
.......
%>
<%
'Aquí creamos la instancia del objeto
Set miconexion = Server.CreateObject("ADODB.Connection")
Crear un componente
Entre las más conocidas están el Visual C++ (en particular MFC ActiveX
ControlWizard) y Borland C++ respectivamente. Sin embargo, tal vez le resulte
más sencillo el uso de otros como Visual Basic o Delphi.
Podemos crear nuestros propios controles o usar los creados por otros
programadores que nos los venden o distribuyen gratuitamente. Si optamos por
programarlos nosotros mismos existen herramientas que lo convierten
prácticamente en un juego de niños, entre ellas destaca las creadas para este
fin por Microsoft y que distribuye a través de su Web (www.microsoft.com/ie/).
19
OCX hace referencia a módulos que publican controles y funciones para ser utilizados en programas para Windows, incluyendo
especialmente el navegador.
Para crear un control OCX, siga los siguientes pasos en el Visual Basic.
Como puede observar, nuestro control es como un form normal, pero sin
bordes, ahora inserte un objeto image (Image1, se encuentran del lado
izquierdo de la pantalla, pase el puntero por encima para que se muestre el
nombre de cada objeto) y ponga como picture un icono que te parezca
representativo de lo que va a hacer nuestro control. O alguna imagen que
tenga a la mano para realizar la prueba.
Esto hará que el control se vea en el formulario como si fuera solo el icono de
la imagen.
4. Ahora debemos crear los Métodos del control, para eso vaya al menú
"Complementos" (Add-Ins), de ahí a "Administrador de Complementos" (Add-In
Manager) y haga doble clic sobre "Asistente para interfaz de controles ActiveX
de VB" (VB 6 ActiveX Ctrl Interface Wizard) seleccione la casilla “Cargado/No
Cargado” (Loaded/Unloaded) y pulse "Aceptar".
names) tiene todos los métodos más comunes que puede insertar, en
"Nombres Seleccionados" (Selected names) no deje nada y pulse "Siguiente".
En esta nueva ventana podemos definir métodos personalizados.
1. "Mensaje_Apagar"
2. "Cerrar_Sesion"
3. "Apagar_Sistema"
4. "Reiniciar_Sistema"
5. "Forzar_Apagado"
El cuadro que nos salteamos nos permite decir a cuál de los componentes
insertados en nuestro control corresponden los métodos que tengamos puestos
(de los que aparecían en "Nombres Disponibles") ya que hay métodos que lo
tienen más de uno de los controles insertados y esto se presta a confusiones.
5. Vamos al código de control. Tenemos que declarar las APIs20 que realizaran
las operaciones necesarias:
(si no está familiarizado con la interfaz puede perderse en este punto, el código
siguiente debe ser insertado en la parte de las declaraciones del código de
nuestro control.)
Const EWX_LOGOFF = 0
Const EWX_SHUTDOWN = 1
Const EWX_REBOOT = 2
Const EWX_FORCE = 4
Una vez que tenemos las declaraciones, tenemos las siguientes funciones (Se
pueden ver en la parte baja del código):
20
Del inglés Application Programming Interface - Interfaz de Programación de Aplicaciones
En la figura 5.1 podemos ver el resultado obtenido tal y como se ve con Internet
Explorer 7.0. Pasemos a explicar el este código: El valor del atributo CLASSID
es el que identifica el tipo de control ActiveX que estamos insertando. Este
código es complejo y se sale de los objetivos de esta obra.
Usando este control ActiveX podemos crear efectos variados con texto…
Caption: Es el texto que debe insertarse con las características que se indican
con el resto de parámetros.
EJERCICIOS PROPUESTOS
5.10 ¿Por qué a pesar de ser una herramienta tan útil, ActiveX es una
herramienta que se utiliza poco a comparación de otras herramientas
disponibles?
PROYECTO INTEGRAL.
Recuerde: Visual Basic es una de las herramientas que permiten crear este tipo
de objetos de una manera sencilla. Después de crearlo, deberá probarlo y
utilizarlo.
Apéndice 1
Instalación de NetBeans
A continuación se darán las instrucciones de como instalar NetBeans IDE en
cada una de las plataformas soportadas. Recuerde que el JDK21 de java ya
debe estar instalado en el sistema. Hay dos versiones de NetBeans, una
normal y una que incluye ya los paquetes, sin embargo la instalación no tiene
dificultad alguna. (Es del tipo accept, next, next, finish.)
1. Bajar e instalar el JDK de internet, una de las paginas que lo tiene es:
http://java.sun.com/javase/downloads/index.jsp
2. Después de haber bajado el instalador, dar doble clic sobre el icono para
iniciar el instalador.
3. Después aparecerá el Acuerdo de Licenciamiento (License Agreement),
acéptelo y de clic en Siguiente (Next).
4. Especificar un directorio vacío donde instalar Netbeans IDE. Dar clic en
Siguiente (Next).
5. Selecciones el JDK que se quiere usar junto con el NetBeans IDE de la
lista de selección si hay más de uno. Dar clic en Siguiente (Next). (si ya
tiene instalada una versión no le pregunta)
6. Verifique que el directorio de instalación es el correcto y que se cuenta
con espacio suficiente en el sistema para la instalación.
7. De clic en Siguiente (Next) para iniciar la instalación.
21
Java Development Kit. Kit de desarrollo de Java. Necesario para trabajar con dicho lenguaje.
Apéndice 2
Introducción a MySQL
MySQL es un gestor de base de datos sencillo de usar, es uno de los motores de base
de datos más usados en Internet, la principal razón de esto es que es Open Source.
En este apéndice se pretende mostrar el uso del programa cliente mysql para crear y
usar una sencilla base de datos, se analizara solo lo necesario para llevar a cabo un
ejercicio como el que se presenta en el material.
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
Esto nos indica que mysql está listo para recibir comandos.
Sintaxis MySQL
Es posible escribir más de una sentencia por línea, siempre y cuando estén separadas
por punto y coma:
Sintaxis MySQL
Un comando no necesita ser escrito en una sola línea, así que los comandos que
requieran de varias líneas no son un problema. mysql determinará en dónde finaliza la
sentencia cuando encuentre el punto y coma, no cuando encuentre el fin de línea.
Aquí está un ejemplo que muestra una consulta simple escrita en varias líneas:
mysql> SELECT
-> USER(),
-> CURRENT_DATE;
+-------------------+--------------+
| USER() | CURRENT_DATE |
+-------------------+--------------+
| root@localhost | 2008-12-24 |
+-------------------+--------------+
1 row in set (0.00 sec)
mysql>
En este ejemplo debe notarse como cambia el texto (de mysql> a ->, a ese texto se le
conoce como propmt.) cuando se escribe una consulta en varias líneas. Esta es la
manera en cómo mysql indica que está esperando a que finalice la consulta. Sin
embargo si deseamos no terminar de escribir la consulta, podemos hacerlo al escribir \c
como se muestra en el siguiente ejemplo:
mysql> SELECT
-> USER(),
-> \c
mysql>
mysql> SELECT
USER()
->
Si esto llega a suceder, muy probablemente mysql estará esperando por un punto y
coma, si escribimos el punto y coma podremos completar la consulta y mysql podrá
ejecutarla:
mysql>
Los prompts '> y "> ocurren durante la escritura de cadenas. En mysql podemos
escribir cadenas utilizando comillas sencillas o comillas dobles (por ejemplo, 'hola' y
"hola"), y mysql nos permite escribir cadenas que ocupen múltiples líneas. De manera
que cuando veamos el prompt '> o ">, mysql nos indica que hemos empezado a
escribir una cadena, pero no la hemos finalizado con la comilla correspondiente.
Aunque esto puede suceder si estamos escribiendo una cadena muy grande, es más
frecuente que obtengamos alguno de estos prompts si inadvertidamente escribimos
alguna de estas comillas.
Por ejemplo:
En este caso, lo más simple es cancelar la consulta. Sin embargo, no basta con escribir
\c, ya que mysql interpreta esto como parte de la cadena que estamos escribiendo. En
lugar de esto, debemos escribir antes la comilla correspondiente y después \c :
El prompt cambiará de nuevo al ya conocido mysql>, indicándonos que mysql está listo
para una nueva consulta.
Es sumamente importante conocer lo que significan los prompts '> y ">, ya que si en
algún momento nos aparece alguno de ellos, todas la líneas que escribamos a
continuación serán consideradas como parte de la cadena, inclusive cuando escribimos
QUIT. Esto puede ser confuso, especialmente si no sabemos que es necesario escribir
la comilla correspondiente para finalizar la cadena, para que podamos escribir después
algún otro comando, o terminar la consulta que deseamos ejecutar.
Ahora que conocemos como escribir y ejecutar sentencias, es tiempo de acceder a una
base de datos.
Crearemos la misma base de datos y las tablas que se crean en el materia de esta
materia utilizando “phpMyadmin” así podrá realizar una comparación entre utilizar la
línea de comandos o alguna aplicación gráfica que le permita administrar su servidor
mySQL.
Primeramente usaremos la sentencia SHOW para ver cuáles son las bases de datos
existentes en el servidor al que estamos conectados:
mysql>
Es probable que la lista de bases de datos que veamos sea diferente en nuestro caso,
pero seguramente las bases de datos "mysql" y "test" estarán entre ellas. En particular,
la base de datos "mysql" es requerida, ya que ésta tiene la información de los
privilegios de los usuarios de MySQL. La base de datos "test" es creada durante la
instalación de MySQL con el propósito de servir como área de trabajo para los usuarios
que inician en el aprendizaje de MySQL, como puede recordar, cuando comenzamos a
trabajar con phpMyadmin utilizamos la base de datos “test”.
Es posible que no veamos todas las bases de datos si no tenemos el privilegio SHOW
DATABASES. Se recomienda revisar la sección del manual de MySQL dedicada a los
comandos GRANT y REVOKE.
Observe que USE, al igual que QUIT, no requieren el uso del punto y coma, aunque si
se usa no hay ningún problema. El comando USE es especial también de otra manera:
éste debe ser usado en una sola línea.
El mensaje anterior indica que la base de datos no ha sido creada, por lo tanto
necesitamos crearla.
La base de datos se crea sólo una vez, pero nosotros debemos seleccionarla cada vez
que iniciamos una sesión con mysql. Por ello es recomendable que se indique la base
de datos sobre la que vamos a trabajar al momento de invocar al monitor de MySQL.
Por ejemplo:
mysql>
Crear tabla
Crear la base de datos es la parte más fácil, pero en este momento la base de datos
está vacía, como lo indica el comando SHOW TABLES:
La parte un tanto complicada es decidir la estructura que debe tener nuestra base de
datos: qué tablas se necesitan y qué columnas estarán en cada tabla.
Los campos serán: para Clientes (Id, nombre, dirección), para Productos (Id, nombre y
precio) y para empleados (Id, nombre, salario).
Usaremos la sentencia CREATE TABLE para indicar como estarán conformados los
registros de nuestros clientes.
mysql>
Lleve a cabo el mismo procedimiento para las tres tablas. Consulte el manual de
MySQL para saber más acerca de los tipos de datos que se utilizan, sus longitudes y la
manera adecuada de asignarlos a campos dentro de una tabla.
Ahora que hemos creado la tabla, la sentencia SHOW TABLES debe producir algo
como:
mysql>
Para verificar que la tabla fue creada como nosotros esperábamos, usaremos la
sentencia DESCRIBE:
mysql>
Después de haber creado la tabla, ahora podemos incorporar algunos datos en ella,
para lo cual haremos uso de la sentencia INSERT.
Esta forma del SELECT es útil si deseamos ver los datos completos de la tabla.
Para eliminar “todos” los datos de una tabla usamos la sentencia DELETE.
Como se mostró anteriormente, es muy fácil recuperar los datos de una tabla completa.
Pero típicamente no deseamos hacer esto, particularmente cuando las tablas son
demasiado grandes..
La salida mostrada confirma que el nombre ha sido modificado de Saul Chavez a Saul
Hernandez de caifanes.
Si no deseamos ver los registros completos de una tabla, entonces tenemos que usar
los nombres de las columnas en las que estamos interesados separándolas por coma.
La extracción de información de una base de datos puede ser tan específica como lo
requiera el usuario y hay muchas palabras claves que facilitan el filtrado, ordenamiento
u otra acción a realizar en los registros resultantes de una consulta. Para conocer a
profundidad la creación de sentencias por favor consulte el manual de mySQL ya que
este material es meramente introductorio.
Conclusiones
Desarrollar material que lleve de la mano al alumno y sea una herramienta útil para el
profesor, con explicaciones sencillas.
Este material fue desarrollado de manera tal, que se facilite el aprendizaje y que este
sea además progresivo y la dificultad vaya en aumento para así no solo guiar al
alumno, sino inculcar en él la necesidad de investigar y aprender más acerca de los
temas expuestos. Por ejemplo: en la unidad uno se desarrollan los temas relacionados
con la “base” del lenguaje, sus estructuras, su sintaxis, su importancia, etc. Y todo se
realiza desarrollando proyectos en consola, con una interfaz rudimentaria y ejemplos
sencillos, de cualquier modo, los ejemplos van aumentando en su grado de
complejidad, comenzando con un simple “hola mundo” hasta pequeñas aplicaciones
donde se piden datos por medio de una interfaz ahora un poco mejor y se trabajan de
tal manera que se obliga al alumno a practicar lo expuesto durante toda la unidad
como: ciclos, estructuras, declaraciones, objetos, clases, herencia, polimorfismo, etc.
etc. etc.
Por último, en la unidad V salimos un poco de la temática que gira alrededor de Java
para analizar herramientas que trabajan con otros lenguajes como Visual Basic. El
objetivo es mostrar al alumno que además de poder programar aplicaciones poderosas
utilizando los componentes y controles existentes, es posible crear sus propios
componentes con fines específicos. Y debido a que los temas que propone el temario
están relacionados con el lenguaje Visual Basic y uno de los objetivos del libro fue
desarrollar los temas utilizando el lenguaje java, se da al alumno la tarea de analizar el
equivalente a la tecnología Active X de Microsoft en el lenguaje Java.
A pesar de que este material fue realizado en la versión más actual en cuanto a las
herramientas que involucra, siempre hay herramientas nuevas que surgen incluso día
con día y esto podría dejar atrás ciertos métodos analizados. Sin embargo, la esencia
del funcionamiento de cualquier lenguaje orientado a eventos queda plasmada y no
pasará de moda, además, analizando la evolución de los lenguajes de programación
puedo predecir que este material será de utilidad durante suficiente tiempo para cumplir
su misión y ayudar al alumnado y profesorado de la mejor institución educativa pública
del estado a aprender y enseñar respectivamente.
Bibliografía
Ed. Coriolis.
3. Taylor David.
Ed. Alfaomega.
5. Herbert Schildt.
Ed. McGrawHil.
6. Agustín Froufe.
Ed. Alfaomega.
7. Stephen R. Davis.
Ed. McGrawHill.
¡Java Ahora!
Ed. McGrawHill..
Fifth Edition
11. http://java.sun.com/
12. http://www.javaworld.com/
13. http://www.adictosaltrabajo.com/indexg.php?pagina=tutoriales
14. http://www.developer.com/java/
15. http://www.javahispano.org/canyamo.action
16. http://www.programacion.net/java/
17. http://www.exampledepot.com/
18. http://www.java2s.com/
19. http://www.lawebdelprogramador.com/
Información confiable, chat para resolver dudas, foros de consulta, libros incluso posee
un área de ofertas de trabajo.
20. http://www.elrincondelprogramador.com/
Buena fuente de información, no solo para temas relacionados con java, sino con más
lenguajes.
21. http://mindprod.com/jgloss/jgloss.html
22. http://java.dzone.com/
Pagina con foros, links e información sobre java muy confiables pero sobre temas
avanzados del lenguaje.
23. http://www.javasoft.com
24. http://www.prenhall.com/deitel
25. http://es.wikipedia.org/wiki/Java
26. http://www.java.com
27. www.manual-java.com
28. www.webtaller.com/manual-java
Manual paso a paso de Java. Muy recomendable para alguien que comienza a
introducirse en el tema.
29. http://todojava.awardspace.com/manuales-java.html
Manuales de java
30. www.itapizaco.edu.mx/paginas/Javatut/froufe/introduccion/indice.html
Glosario de Términos
A
abstract class (clase abstracta)
Una clase que contiene uno o más métodos abstractos, y, por tanto, nunca puede ser
instanciada. Las clases se definen de manera que otras clases pueden extenderse y
hacerlas concretas mediante la aplicación de los métodos abstractos.
Los métodos por los cuales las interacciones con los recursos son limitados a las
colecciones de los usuarios o programas con el fin de hacer cumplir la integridad,
confidencialidad, disponibilidad o limitaciones.
ACID
The arguments specified in a particular method call. Los argumentos que se especifican
en una llamada de método especial.
API
applet
argument (argumento)
array (arreglo)
Una colección de datos, todos del mismo tipo, en el que cada elemento ocupa una
posición única designada por un entero.
ASCII
atomic (atómica)
B
bean
Binario, sistema
bit
El operador que manipula los bits de uno o más de sus operandos por separado y en
paralelo. Los ejemplos incluyen a los operadores binario lógicos (&, |, ^), el cambio de
operadores binarios (<<,>>>>>) y el unario un complemento del operador (~).
block (bloque)
boolean
Se refiere a una expresión o variable que sólo puede tener un valor verdadero o falso.
El lenguaje de programación Java proporciona el tipo booleano y los valores literales
verdadero y falso.
break
Una palabra clave de Java utilizada para reanudar la ejecución del programa en la
instrucción inmediatamente después de la actual declaración. Si está seguido por una
etiqueta, el programa reanudará la ejecución en la etiqueta la declaración.
byte
bytecode
case
Una palabra reservada de Java que define un grupo de estados para iniciar la
ejecución si un valor coincide con el valor definido.
casting (enmascaramiento)
catch
Una palabra clave de Java utilizada para declarar un bloque de código para ser
ejecutado en caso de que haya una excepción de Java, o en un error en tiempo de
ejecución, se produce en un bloque try anterior.
char
Una palabra clave de Java utilizada para declarar una variable de tipo carácter.
class (clase)
Código
Conjunto de líneas de texto que son las instrucciones que debe seguir la computadora
para ejecutar un programa.
comment (comentario)
commit (comprometerse)
El punto en una transacción cuando todas las actualizaciones a todos los recursos que
participan en la transacción se hizo permanente.
compiler (compilador)
Componentes de Software
Todo aquel recurso desarrollado para un fin concreto y que puede formar solo o junto
con otro/s, un entorno funcional requerido por cualquier proceso predefinido. Son
independientes entre ellos, y tienen su propia estructura e implementación.
constructor (constructor)
continue (continuar)
Es una palabra clave de Java utilizados para reanudar la ejecución del programa al
final del bucle de corriente.
D
declaration (declaración)
Una línea de código que establece un identificador y los atributos asociados con él, sin
que necesariamente se reserve memoria (para datos).
default (predeterminado)
Depurador
Programa que permite depurar o limpiar los errores de otro programa informático.
do
Palabra clave de Java utilizada para declarar un bucle que va a iterar un bloque de
declaraciones. La condición de salida del bucle puede especificarse al mismo tiempo.
double
Una palabra clave de Java utilizado para definir una variable de tipo doble.
E
else
Palabra clave de Java utilizada para ejecutar un bloque de estados en el caso de que la
condición de prueba con la palabra clave if evalúa a falso.
exception (excepción)
Un evento durante la ejecución del programa que evita que el programa continúe
normalmente, en general, un error. El lenguaje de programación Java admite
excepciones con las palabras try, catch, y throw.
F
final
Palabra clave de Java que se utiliza para declarar valores constantes en una
aplicación.
float
Palabra reservada de Java utilizada para definir una variable en punto flotante.
for
Palabra clave de Java utilizada para declarar un bucle que reitera las declaraciones. El
programador puede especificar los estados para ser ejecutado, las condiciones de
salida, y variables para la inicialización del bucle.
G
garbage collection (recolección de basura)
goto
Se trata de una palabra reservada. Sin embargo, no es utilizado por las versiones
actuales del lenguaje de programación Java.
GUI
hexadecimal
I
Identificador
if
Palabra clave de Java utilizada para llevar a cabo una prueba condicional y ejecutar un
bloque de estados si la prueba se evalúa a verdadero.
import
inheritance (herencia)
Concepto de clases en el que de forma automática que contienen las variables y los
métodos definidos en sus superclases.
instancia
int
Palabra reservada de Java utilizada para definir una variable de tipo entera.
intérprete
Iteración
J
Java
JavaBeans
L
Librería
decir, pasan a formar parte de éstos. Esto permite que el código y los datos se
compartan y puedan modificarse de forma modular.
M
Memoria de datos
N
NetBeans
new
Una palabra clave de Java utilizado para crear una instancia de una clase.
null
El tipo nulo tiene un valor, la referencia nula, representada por el literal null, el cual está
formado de caracteres ASCII. Una literal es nula siempre del tipo null.
O
objeto
octal
El sistema de numeración que utiliza 8 como su base, utilizando los números 0-7 como
sus dígitos
P
Parámetro
Primitivo, tipo
Tipos de datos originales de un lenguaje de programación, esto es, aquellos que nos
proporciona el lenguaje y con los que podemos (en ocasiones) construir tipos de datos
abstractos y estructuras de datos.
private
Palabra reservada de Java que indica si una variable puede ser accedida o utilizada
únicamente por elementos de la misma clase.
propiedad
Características de un objeto que los usuarios pueden fijar, como el color de una
ventana.
protected (protegidas)
Palabra reservada de Java. Significa que el método o variable sólo puede ser visitada
por los elementos que residen en sus clases, subclases, clases o en el mismo paquete.
public público
Palabra reservada de Java. Significa que el método o variable puede ser visitada por
los elementos que residen en otras clases.
return
S
short
Una palabra clave de Java utilizado para definir una variable de tipo short.
SQL
stream corriente
super
Una palabra clave de Java utilizado para acceder a miembros de una clase heredada
de la clase en la que aparece.
Swing
T
Template
O plantilla es una forma de dispositivo que proporciona una separación entre la forma o
estructura y el contenido. Es un medio o un instrumento que permite guiar, portar o
construir un diseño o esquema predefinido.
this
Una palabra clave de Java que pueden utilizarse para representar una instancia de la
clase en la que aparece. Esto puede ser usado para acceder a las variables de clase y
métodos.
throw
Una palabra clave de Java que permite al usuario lanzar una excepción.
Token
try
Palabra clave que define un bloque de estados que pueden lanzar una excepción
lenguaje Java.
V
Variable