Tutorial Java
Tutorial Java
V UNIDAD.- ARREGLOS
1.- INTRODUCCION
2.- ARREGLOS TRADICIONALES
3.- ARREGLOS TIPO LISTA
4.- LISTAS(CONTINUACION)
5.- COMPONENTE LIST
6.- LISTAS EN SEVLETS Y JSP
7.- ARREGLOS TIPO TABLA
VI UNIDAD.- OOP
1.- PROCEDIMIENTOS Y FUNCIONES
2.- PARAMETROS
3.- VARIABLES LOCALES Y GLOBALES
4.- FUNCIONES
5.- INT A OOP
6.- CLASES
7.- CLASES PROPIAS
5.- GRABACION
6.- LECTURA
7.- BUSQUEDA
8.- FILTROS O CONDICIONES
9.- BAJAS O ELIMINACION
10.- EDICION O MODIFICACION
En el mundo moderno, las necesidades de información se han incrementado bastante en la vida diaria de
los individuos asi como de las organizaciones.
Esta nueva necesidad se esta cubriendo con la integracion y participacion personal y de las empresas,
hacia la red de redes, el Internet I, y esperen a internet2.
Nuevos paradigmas de programacion se ocupan para la creacion de nuevos sisJAVA TEMA s y
necesidades creativas de informacion.
Java un lenguaje de programacion moderno implementado en su versión final por la compañía
www.java.sun.com a a finales de 1996, se ha convertido en el lenguaje estandar, para la construccion de
aplicaciones basadas en internet.
Los nuevos sisJAVA TEMA s de información son costosos en tiempos y recursos, la solución moderna de
sisJAVA TEMA s de información exigen nuevas herramientas y metodologías para resolver rápida,
económica y eficiente los problemas de información planteados por las organizaciones.
Aun mas el pleno potencial del hardware no es aprovechado plenamente y existe un considerable retraso
con el software y sus aplicaciones, generando lo que se conoce como "crisis del software".
En programación tradicional, modular o estructurada un programa describe una serie de pasos a ser
realizados para la solución de un problema, es decir es un algoritmo.
En programación orientada a objetos ( OOP ) un programa es considerado como un sisJAVA TEMA de
objetos interactuando entre sí, ambientes de desarrollo visuales facilitan aun más la construcción de
programas y solución de problemas, porque permiten abstraer al ingeniero de software de todo el GUI
(interfase gráfica) del problema, que constituye más del 60% del código normal de un programa.
Es decir, en programación modular o estructurada un problema sencillo de información es descompuesto
en una serie de módulos(llamados procedimientos o funciones) donde cada uno de ellos realiza una tarea
específica, por ejemplo uno de ellos captura los datos, otro resuelve operaciones, etc.
En OOP todo problema aun aquellos sencillos de información, se consideran y resuelven como módulos de
código gigante (clase) que contiene todo el código necesario(variables, procedimientos, funciones,
interfaces, etc.) para solucionar el problema.
En programación visual( que también es heredera de OOP ),la interfase con el usuario( pantallas) son
generadas por el propio compilador y el ingeniero de software solo se concentra en resolver el problema
planteado.
En programacion java basica, se tiene la mezcla de lo mejor de estos tres mundos, es decir construimos
programas, aplicaciones y sisJAVA TEMA s de informacion usando tecnivas estructuradas, contruyendo
objetos y diseñando sisJAVA TEMA s graficos, y todo orientado a la construcción de sisJAVA TEMA s de
información basados en redes de cualquier tipo o tamaño.
Una herramienta rápida que nos permite descomponer en partes un problema para su solución, es el
llamado modelo de solución, este consiste de una pequeña caja que contiene los tres elementos más
básicos en que se puede descomponer cualquier problema sencillo de información, estas tres partes son:
a. LA PRIMERA PARTE son todos los datos que el computador ocupa para resolver el problema, estos
datos son almacenados internamente en la memoria del computador en las llamadas variables de
entrada.
b. LA SEGUNDA PARTE son todas las operaciones generalmente algebraicas necesarias para
solucionar el problema, generalmente esta parte del modelo es una formula (o igualdad matemática, ej.
X= y + 5).
c. LA TERCERA PARTE es el resultado o solución del problema que generalmente se obtiene de la parte
de operaciones del modelo y dichos datos están almacenados en las llamadas variables de salida.
En resumen para todo problema sencillo de información es necesario plantearse las siguientes preguntas:
* Que datos ocupa conocer el computador para resolver el problema y en cuales variables de entrada se
van a almacenar ?
* Que procesos u operaciones debe realizar el computador para resolver el problema planteado ?
* Que información o variables de salida se van a desplegar en pantalla para responder al problema
planteado originalmente?
Como nota importante no confundir los términos datos, variables e información;
Datos se refiere a información en bruto, no procesada ni catalogada, por ejemplo "Tijuana", "calle primera #
213","15 años", " $2,520.00", etc.
Variables es el nombre de una localidad o dirección interna en la memoria del computador donde se
almacenan los datos, ejemplo de variables para los casos del inciso anterior, CIUDAD, DIRECCION,
EDAD, SUELDO, ETC.
Información son datos ya procesados que resuelven un problema planteado.
EJEMPLO DE MODELO DE SOLUCION
Construir un modelo de solución que resuelva el problema de calcular el área de un triángulo con la formula
área igual a base por altura sobre dos.
ENTRADA Operación Salida
(integers)
(real numbers)
(other types)
Sin embargo su caracteristica mas importante a tomar en cuenta, es que objetos numericos derivados de
estaS clase, no pueden entrar a operaciones DIRECTAMENTE, ni recibir el resultado de operaciones.
Class Integer
public final class java.lang.Integer extends java.lang.Number
{
// Fields
public final static int MAX_VALUE;
public final static int MIN_VALUE;
// Constructors
public Integer(int value);
public Integer(String s);
// Methods
public double doubleValue();
public boolean equals(Object obj);
public float floatValue();
public static Integer getInteger(String nm);
public static Integer getInteger(String nm, int val);
public static Integer getInteger(String nm, Integer val);
public int hashCode();
public int intValue();
public long longValue();
public static int parseInt(String s);
public static int parseInt(String s, int radix);
public static String toBinaryString(int i);
public static String toHexString(int i);
public static String toOctalString(int i);
public String toString();
public static String toString(int i);
public static String toString(int i, int radix);
public static Integer valueOf(String s);
public static Integer valueOf(String s, int radix);
}
Esta clase convierte un dato de tipo int a un objeto.
Este objeto contiene un solo campo de tipo int.
Pero tambien el objeto contiene una serie de metodos para convertir un valor int a una String y tambien
para convertir una String a int.
Ademas de otros metodos de igual utilidad.
// Constructors
public Double(double value);
public Double(String s);
// Methods
public static long doubleToLongBits(double value);
public double doubleValue();
public boolean equals(Object obj);
public float floatValue();
public int hashCode();
public int intValue();
public boolean isInfinite();
public static boolean isInfinite(double v);
public boolean isNaN();
public static boolean isNaN(double v);
public static double longBitsToDouble(long bits);
public long longValue();
public String toString();
public static String toString(double d);
public static Double valueOf(String s);
}
// Constructors
public Long(long value);
public Long(String s);
// Methods
public double doubleValue();
import java.lang.math ;
public static double pow(double a, double b);
Esta función ocupa dos valores o datos( base y exp) ambos de tipo double, y regresa un resultado también
de tipo double, ejemplo;
• resolver el problema de calcular
import java.io.*;
import java.lang.Math;
public class ejemplo1
{public static void main(String args[])
{ double base =5;
double exponente=3;
double potencia =0;
potencia = Math.pow(base, exponente);
System.out.println("potencia =" +potencia);
}// cerrar main
} //cerrar clase
En java jsp y servlets para resolver el problema de raíces, se aprovecha una de las mas elementales y
conocida de las leyes de exponentes que dice:
n a m = a m/ n
Es decir una raíz cualquiera se puede transformar a una potencia con un exponente fraccionario.
Ejemplo:
problema y = 3 x esto es equivalente a y = 3⋅x1 /2 entonces
// Usando la función pow y = 3*Math.pow(x, 0.5);
• En este ejemplo no funcional se esta dando por supuesto que no interesa el tipo de dato que
requiere la función pow() para trabajar correctamente
Para realizar operaciones con objetos numéricos, recordar que no se pueden hacer directamente
operaciones con ellos ni tampoco pueden recibir resultados en ellos, lo que se debe hacer es usar una
variable temporal de tipo apropiado, hacer la operacion con dicha variable y al final si se quiere convertir
esta variable al objeto numerico apropiado(esto ultimo se vera en el siguiente JAVA TEMA ), como lo
muestra el siguiente ejemplo;
Integer alfa = new Integer(20);
Double zeta = new Double(5);
double alfa1=0, zeta1=0;
alfa1=alfa.doubleValue();
zeta1=zeta.doubleValue();
alfa1=alfa1 + zeta1;
desplegar alfa1;
Como se observa se crearon dos objetos numericos, luego dos variables numericas normales, luego estas
dos ultimas variables se cargan con los objetos numericos que emplean metodos propios para convertirlos
a datos normales.
En java jsp y java servlets la libreria maJAVA TEMA tica completa incluye:
Class Math
public final class java.lang.Math
extends java.lang.Object
{ // Fields
public final static double E;
public final static double PI;
// Methods
public static double abs(double a);
public static float abs(float a);
public static int abs(int a);
public static long abs(long a);
public static double acos(double a);
public static double asin(double a);
public static double atan(double a);
public static double atan2(double a, double b);
public static double ceil(double a);
public static double cos(double a);
public static double exp(double a);
public static double floor(double a);
public static double IEEEremainder(double f1, double f2);
public static double log(double a);
public static double max(double a, double b);
public static float max(float a, float b);
public static int max(int a, int b);
public static long max(long a, long b);
public static double min(double a, double b);
public static float min(float a, float b);
public static int min(int a, int b);
public static long min(long a, long b);
public static double pow(double a, double b);
public static double random();
public static double rint(double a);
public static long round(double a);
public static int round(float a);
public static double sin(double a);
public static double sqrt(double a);
public static double tan(double a);
}
Esto también va a permitir evaluar expresiones matemáticas de manera mas directa y sencilla, solo
recordando usar un pow() por cada potencia y cada raíz de la ecuación, ejemplo:
sea
dentro de un programa esto se resuelve con;
// área de declaración de variables
double y, x;
// área de captura de datos
capturar el valor de x;
// área de operaciones
y = 3 * Math.pow(x, (double)3) - Math.pow(x, (1/3.0)) + 4 * Math.pow(x, (double)2));
// área de despliegue de resultados
desplegar x, y
En java jsp y java servlets para convertir tipos de datos numericos a objetos numericos y viseversa
se deberan usar los metodos que traen las clase numericas de manera apropiada, en general
existen tres casos generales difrentes, considerando datos o variables numericas, objetos
numericos y strings que es un caso especial y comun:
a.1) Variable numerica a variable numerica
Usar el operador cast ejemplo:
//var to var
int alfa1=10; double alfa2=3.1416;
alfa1= (int)alfa2;
observar que valores decimales deben declararse como doubles
a.2) variable numérica a string
ejemplo;
// var to string
int zeta=50;
String alfa= String.valueOf(zeta);
a.3) variable numerica a objeto numerico
caso 1: usando constructor
int zeta=80;
Float alfa4 = new Float(zeta);
caso 2: ya existe el objeto numerico
Double alfa5 = new Double(0);
Int zeta=30;
alfa5=Double.valueOf(String.valueOf(zeta));
b.1) Objeto Numerico a Variable numerica
todos los objetos numericos deben crearse inicializados aunque sea a (0)
Integer alfa = new Integer(300);
Int zeta = alfa.intValue();
1.
2.
2.
aquí los paréntesis están de mas, porque por orden de operaciones, multiplicación y división tienen la
misma jerarquía y entonces se resuelven de izquierda a derecha, en otras palabras ni que falten paréntesis
ni que sobren paréntesis en ningun programa java jsp o java servlet.
9.- APLICACIONES
Recordar que JAVA es un lenguaje de programación moderno, que esta enfocado a la construcción de
sisJAVA TEMA s de informacion que se ejecutarán en una plataforma muy diversa de procesadores y
sisJAVA TEMA s operativos.
Esto indica la necesidad de construir diversos tipos de aplicaciones, programas o sisJAVA TEMA s, en
general, este curso se centra alrededor de los sguientes tipos de aplicaciones basicas:
1.- Aplicaciones o programas que se ejecuten en "consolas", es decir ambientes del tipo msdos, linux,
terminales tontas, etc.
2.-Aplicaciones o sisJAVA TEMA s que se ejecuten en ambientes graficos o de tipo "ventanas:, ejemplo
windows, kde o gnome de linux, sistem 8 de apple, etc.
3.- Aplicaciones de tipo APPLETS, que tambien son programas en java que se mandan a una pc remota o
lejana, donde esa pc se encarga de correrla o ejecutarla o compilarla y correrla.
Este applet lo manda un servidor de paginas(web server) junto con la pagina correspondiente, cada vez
que un usuario se conecta al web server y requiere la pagina que contiene el applet.
Para el caso de applets, estos se ejecutan no en consola, tampoco en una ventana, sino dentro de el
browser de la maquina remota que puede ser el internet explorer de microsoft o el netscape.
Por supuesto que el browser del cliente debe estar preparado para ejecutar applets, esto se hace teniendo
constantemente actualizado el browser (internet explorer o netscape) y estando sobre todo seguro que en
la actualización del browser se incluya la maquina virtual de java.
4.-Aplicacion de tipo SERVLETS, que son programas en java que se ejecutan direcatemente en el servidor
de paginas o web server, que al ser invocado o llamado por una pc remota, el web server ejecuta el servlet,
ya ejecutado se mandan generalmente los resultados a la maquina remota, estos resultados se mandan en
forma de una pagina html, para que la maquina remota los vea en su propio browser.
Una vez que el web server o servidor de paginas ejecuta un servlet, lo mantiene vivo o despierto, para
responder de manera mas rapida a las peticiones siguientes que se hagan del servlet.
5.- Aplicaciones JSP (Java Server Pages), tecnologia que combina codigo html y codigo java en un solo
programa o aplicación, cuando al web server le piden un jsp, lo compila, lo convierte a servlet con todas las
implicaciones que se mencionarón en el inciso anterior y manda los resultados a la pc remota que lo
solicitó.
6.- Beans y Java Beans, tecnologias de tipo servlet pero que estan especializadas principalmente en
mantener enlaces constantes a bases de datos de cualquier marca (access, oracle, mysql, etc), esto
permite que una serie de varios programas o aplicaciones a la vez esten interactuando con el mismo java
bean y por consiguiente con la base de datos.
7.-Existen otra serie de aplicaciones diferntes que se pueden construir con java, tales como aplicaciones
rmi, aplicaciones en tiempo real, ejb , pero de momento estan fuera del alcance de estas notas.(estarse
pendiente de la siguiente actualizacion de este texto)
En general las aplicaciones a desarrollar en este curso ( consola, graficas, applets y servlets, jsp, beans )
todas tienen en comun el lenguaje e instrucciones de programacion de java.
El compilador a usar es el SDK (standard development kit) de Java, este kit estandar de desarrollo de
programas se encuentra en http://www.java.sun.com/j2se/, de aqui bajarlo e instalarlo.
Solo renombrar el folder de default donde se instala a c:\jdk1.3 en lugar del que trae que es c:\Jdk1.3.0_02
2.- Todos los programas en java, deben llevar un metodo principal, llamado main() quien es quien contiene
el codigo normal del programa.
3.- La clase y el metodo main deben abrir y cerrar sus propias llaves {}
4.- Las instrucciones terminan con punto y coma (;)
5.- Java tambien es "case sensitive", es decir diferencía mayusculas y minusculas.
Problema .- bajar, instalar el sdk java y construir, compilar y ejecutar este programa de ejemplo
Como ya se indico, todo programa en java, debe ser un clase y toda aplicación o programa debe tener un
metodo main.
El programa empieza creando un objeto llamado ventana, derivado de la clase FRAME, observar y
aprender el formato de creacion, es formato similar para cuando se crean mas objetos.
Es el objeto ventana quien debera cargarse con los demas componentes y o controles que tendra la
aplicación.
En este programa ejemplo, se muestra como asociar eventos a el objeto ventana, primero se quiere
aclarar algunas cuestiones.
Las propiedades o metodos derivados de la clase superior component de FRAME son:
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener,
addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener,
addMouseMotionListener, addPropertyChangeListener, addPropertyChangeListener, bounds, checkImage,
checkImage, coalesceEvents, contains, contains, createImage, createImage, disable, disableEvents,
dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, getBackground,
getBounds, getBounds, getColorModel, getComponentOrientation, getCursor, getDropTarget, getFont,
getFontMetrics, getForeground, getGraphics, getHeight, getInputMethodRequests, getLocation,
getLocation, getLocationOnScreen, getName, getParent, getPeer, getSize, getSize, getTreeLock, getWidth,
getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isDisplayable, isDoubleBuffered,
isEnabled, isFocusTraversable, isLightweight, isOpaque, isValid, isVisible, keyDown, keyUp, list, list, list,
location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move,
nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent,
processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent,
processMouseEvent, processMouseMotionEvent, removeComponentListener, removeFocusListener,
removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener,
removeKeyListener, removeMouseListener, removeMouseMotionListener, removePropertyChangeListener,
removePropertyChangeListener, repaint, repaint, repaint, repaint, requestFocus, reshape, resize, resize,
setBackground, setBounds, setBounds, setComponentOrientation, setDropTarget, setEnabled,
setForeground, setLocale, setLocation, setLocation, setName, setSize, setSize, setVisible, show, size,
toString, transferFocus
Como se observa, en el programa ejemplo solo se usan muy poquitas de ellas.
Pero aún hay mas, FRAME tambien puede usar las siguientes propiedades y metodos de la clase superior
container y son:
add, add, add, add, add, addContainerListener, addImpl, countComponents, deliverEvent, doLayout,
findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt,
getComponentAt, getComponentCount, getComponents, getInsets, getLayout, getMaximumSize,
getMinimumSize, getPreferredSize, insets, invalidate, isAncestorOf, layout, list, list, locate, minimumSize,
paint, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, remove,
removeAll, removeContainerListener, setFont, setLayout, update, validate, validateTree
De aqui tambien se tomarón algunas para el programa ejemplo.
Pero sigue la mata dando, FRAME tambien puede usar metodos y propiedades de la clase superior
windows:
addWindowListener, applyResourceBundle, applyResourceBundle, dispose, getFocusOwner,
getGraphicsConfiguration, getInputContext, getListeners, getLocale, getOwnedWindows, getOwner,
getToolkit, getWarningString, hide, isShowing, pack, postEvent, processEvent, processWindowEvent,
removeWindowListener, setCursor, show, toBack, toFront
Observar que tambien de aqui se tomarón varias para el programa ejemplo.
Pero!!! FRAME tambien tiene sus propias propiedades y metodos que son:
Method Summary
void addNotify()
Makes this Frame displayable by connecting it to a native screen resource.
AccessibleContext getAccessibleContext()
Gets the AccessibleContext associated with this Frame.
int getCursorType()
Deprecated. As of JDK version 1.1, replaced by Component.getCursor().
Image getIconImage()
Gets the image to be displayed in the minimized icon for this frame.
MenuBar getMenuBar()
Gets the menu bar for this frame.
int getState()
Gets the state of this frame.
String getTitle()
Gets the title of the frame.
boolean isResizable()
Indicates whether this frame is resizable by the user.
void remove(MenuComponent m)
Removes the specified menu bar from this frame.
void removeNotify()
Makes this Frame undisplayable by removing its connection to its native screen
resource.
Notas:
El 12 en el constructor de TextField, es un parametro para indicarle de cuantos caracteres tendra la cajita.
Se esta usando un layout nuevo (flowLayout), para acomodar los componentes dentro del panel de
contenido, un layout (null) es para aomodarlos en coordenadas xy especificas esto no es recomendable por
java, en virtud de que el programa o aplicación puede y debe ejecutarse en procesadores-sisJAVA TEMA s
operativos diferentes, en el siguiente JAVA TEMA se tratan todos los layouts que tiene java.
B) FlowLayout: acomoda los componentes de izquierda a derecha, hasta que se acaba la pantalla y
entonces empieza en el siguiente renglon:
Este layout es el default de FRAME y en el programa3 se esta demostrando.
Corrida
C) GridLayout: Acomoda los componentes en columnas y renglones de tamaño fijo, su constructor ocupa
como parametros la cantidad de renglones y de columnas.
Programa ejemplo:
import java.lang.*; import java.awt.*; import java.awt.event.*;
public class prog6 {
//declaracion, creacion e inicializacion de componentes, objetos y variables
static Frame ventana= new Frame();
static Label l1 = new Label("label1");
static Label l2 = new Label("label2");
static Label l3 = new Label("label3");
static Label l4 = new Label("label4");
static Button b1 = new Button("buton1");
// parte principal de programa
public static void main(String[] args)
{ // area de definicion de propiedades de el objeto
ventana.setTitle("mi programa");
ventana.setLayout(new GridLayout(0,3));
ventana.add(l1); ventana.add(l2); ventana.add(l3);
ventana.add(l4); ventana.add(b1);
ventana.pack(); ventana.setVisible(true);
Notas:
Solo se usa awt
un applet no lleva main() lleva un metodo llamado init()
La pagina que lo llama y se lo lleva a la pc remota, lleva el siguiente codigo:
<HTML>
<HEAD>
<TITLE>MI PRIMER APPLET</TITLE>
</HEAD>
<BODY>
<APPLET CODE="prog6" width=200 height=200></APPLET>
</BODY>
</HTML>
Como se observa la directiva que lo activa es <APPLET CODE, los otros dos parametros
son la altura y anchura de la ventana que se creara en el browser y que ocupara el applet.
Recordar que la pagina.html y todas las clases incluso las intermedias que genero el
compilador javac, deberan estar juntas en el directorio principal de su sitio.
TAREAS JAVA
1.- LOS MISMOS DE JAVA JFRAME
Codigo java:
import java.io.*; import javax.servlet.*; import javax.servlet.http.*;
public class prog12 extends HttpServlet
{ public void doPost (HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{ PrintWriter pagina;
String temp=request.getParameter("SUELDO");
int sueldo = Integer.parseInt(temp);
response.setContentType("text/html");
pagina = response.getWriter();
pagina.println("<HTML>");
//empezar la pagina y poner aqui la condicion
if(sueldo > 500) {pagina.println("RICO");}
else {pagina.println("POBRE");};
//no olvidar terminar y cerrar la pagina
pagina.println("</HTML>");
pagina.close();
};
public void destroy(){super.destroy();};
}
Recordar compilar con javac y la clase ftp al directorio servlets de su
sitio.programacionfacil.com
i. codigo JAVA JSP
Tambien se ocupa form.html y prog13.jsp
CODIGO HTML
<HTML>
<FORM ACTION=http://127.0.0.1:9090/prog13.jsp METHOD=POST>
DAME SUELDO <INPUT TYPE=TEXT NAME=SUELDO><BR>
<INPUT TYPE=SUBMIT VALUE=EVALUAR>
</FORM>
</HTML>
CODIGO JSP
<%! int sueldo; %>
<HTML>
<%
sueldo = Integer.parseInt(request.getParameter("SUELDO"));
if (sueldo > 500){ out.println("RICO");}
else {out.println("POBRE"); };
%>
</HTML>
html y jsp , hacer ftp y ponerlos juntos en su sitio.programacionfacil.com normal
TAREAS JAVA CONSOLA APPLETS JSP SERVLET
1.- Capturar un numero cualesquiera e informar si es o no es mayor de 100 (consola)
2.- Capturar un numero entero cualesquiera e informar si es o no es múltiplo de 4
( recordar el operador mod(%), analizado en el JAVA TEMA de operadores aritméticos).
( java servlet )
3.- Capturar los cinco datos mas importantes de un Empleado, incluyendo el sueldo diario
y los días trabajados esto en un panel, desplegarle su cheque semanal en un segundo
panel solo si ganó mas de $500.00 en la semana, en caso contrario desplegarle un bono
de despensa semanal de $150.00 en un tercer panel. ( java jframe )
4.- Capturar los datos mas importantes de un estudiante incluyendo tres calificaciones,
todo esto en una ventana, una segunda ventana que contiene una boleta de calificaciones
es llamada si el estudiante es de la carrera de medicina, en caso contrario una tercera
ventana despliega un oficio citando a los padres del estudiante a una platica amistosa con
los maestros dela escuela. ( java applet )
5.- Capturar los datos mas importantes de un producto cualesquiera, incluyendo cantidad,
precio, etc., desplegar una orden de compra, solo si el producto es de origen nacional, en
caso contrario no hacer nada.( java jsp )
UNIDAD 4: JAVA CONTROL DE PROGRAMA
JAVA TEMA 6: JAVA CONDICIONES COMPUESTAS
En muchas ocasiones es necesario presentar mas de una condición para su evaluación al
computador.
Por ejemplo que el computador muestre la boleta de un alumno, si este estudia la carrera
de medicina y su promedio de calificaciones es mayor de 70.
Una condición compuesta se define como dos o mas condiciones simples unidas por los
llamados operadores lógicos.
Los operadores lógicos que java reconoce son;
operador significado
&& -------> y
|| -------> 0
! -------> NO
Para que el computador evalúe como CIERTA una condición compuesta que contiene el
operador lógico "y", las dos condiciones simples deben ser ciertas.
Para que el computador evalúe como CIERTA una condición compuesta que contiene el
operador lógico "o", basta con que una de las condiciones simples sea cierta.
La cantidad total de casos posibles cuando se unen dos o mas condiciones simples
esta dada por la relación donde n = cantidad de condiciones, la primera mitad de ellos
ciertos y la segunda mitad falsos.
Ejemplo, si formamos una condiciona compuesta con dos condiciones simples y el
operador lógico "y", la cantidad total de casos posibles serian , y se puede construir
la siguiente tabla de verdad.
Tabla de verdad con "y"
1cs 2cs Eval
CCC
CFF
FCF
FFF
La evaluación final, se obtiene usando la regla anteriormente descrita para una condición
compuesta, que contiene el operador "y".
Esta tabla significa lo siguiente;
1.- Cualquiera que san la cantidad de datos procesados,, siempre caerá en uno de estos
cuatro posibles casos.
La tabla de verdad para una condición compuesta con "O" es la sig.;
1cs 2cs Eval
CCC
CFC
FCC
FFF
Como se observa, una condición compuesta con "O", es menos restrictiva, o el 75% de
los casos terminarían ejecutando el grupo CIERTO de instrucciones de la instrucción
condicional.
Construir una tabla de verdad para una condición compuesta de tres o mas condiciones
simples, es también tarea sencilla, solo recordar que;
1.- La cantidad posible de casos es casos posibles, la mitad empiezan con Cierto y
la otra mitad empiezan c con falso.
2.- Para evaluar esta condición triple, primero se evalúan las dos primeras incluyendo su
operador, bajo las reglas ya descritas y luego se evalúa, el resultado parcial contra la
ultima condición, y ultimo operador, para obtener la evaluación final.
Ejemplo una condición compuesta de tres condiciones simples, donde el primer operador
lógico es el "y" y el segundo operador lógico es el "O", daría la siguiente tabla de verdad.
1cs 'y' 2cs Eva Parcial 'o' 3cs Eva final
CCcCc
CCcFc
CFfCc
CFfFf
FCfCc
FCfFf
FFfCc
FFfFf
En la practica, cada condición simple debe ir encerrada en su propio paréntesis y las dos
condiciones simples también deben encerrarse entre sus propios paréntesis, como en el
siguiente ejemplo;
if((sueldo> 500)%%(departamento=="VENTAS") )
{ // aquí se construye una panel o ventana
// por ejemplo que despliegue su cheque semanal }
else
{ // aquí se construye o despliega un panel o ventana
// que despliegue por ejemplo un bono de despensa
// o un oficio de motivación } ;
• Recordar, cada condición simple debe estar entre paréntesis y las dos condiciones
simples también deben estar entre paréntesis.
• Observar donde se deben incluir los puntos y comas y donde no se deben incluir
los puntos y comas.
TAREAS JAVA( usando modelos diferentes consola jframe applet jsp servlets )
1.- Construir un programa que capture un numero cualesquiera e informe si es o no es
mayor de 50 y múltiplo de tres. ( solo escribir el mensaje de respuesta de manera muy
clara y esto resuelve el problema ) (consola)
2.- Construir un programa que indique si un numero es un par positivo. ( java applet)
3.- Capturar los datos de un producto incluyendo su cantidad en existencia, construir un
panel que despliegue una orden de compra si la cantidad en existencia del producto es
menor que el punto de reorden, o si el origen del producto es nacional.( java servlet )
4.- Construir el programa del ejemplo del empleado, pero construirlo con tres ventanas, la
del empleado, la del cheque y la del bono.( java jsp )
UNIDAD 4: JAVA CONTROL DE PROGRAMA
JAVA TEMA 7: JAVA INSTRUCCION SWITCH ()
También existen ocasiones o programas donde se exige evaluar muchas condiciones a la
vez, en estos casos, o se usan una condición compuesta muy grande o se debe intentar
convertir el problema a uno que se pueda resolver usando la instrucción switch();
La instrucción switch() es una instrucción de decisión múltiple, donde el compilador
prueba o busca el valor contenido en una variable contra una lista de constantes ints o
chars, cuando el computador encuentra el valor de igualdad entre variable y constante,
entonces ejecuta el grupo de instrucciones asociados a dicha constante, si no encuentra
el valor de igualdad entre variable y constante, entonces ejecuta un grupo de
instrucciones asociados a un default, aunque este ultimo es opcional.
En JAVA jsp, servlets, consola el formato de esta instrucción es el siguiente;
capturar o asignar variable de condición;
switch(var int o char)
{ case const1: instrucción(es);
break;
case const2: instrucción(es);
break;
case const3: instrucción(es);
break; ..................
default: instrucción(es);
};
Mejor un ejemplo;
Capturar o inicializar variable char llamada opcion;
// modulo de switch
switch(opcion)
{
case 'a':desplegar "aguila";
break;
case 'b': case 'B': desplegar"Borrego"; break;
default:desplegar "No hay";
};
}
Notas:
1.- Solo se puede usar como variable de condición una variable entera o variable char.
2.- Las constantes que estamos buscando y comparando son de tipo char, por eso se
deben encerrar entre apóstrofes ( ').
5.- Si se quiere resolver el problema de mayúsculas o minúsculas en el teclado, observar
que se usan dos case, pero con un solo break;
6.- Recordar que switch() solo trabaja con constantes y variables de tipo char o int, en
este ultimo caso;
En particular, instrucciones de tipo switch() se utilizaban para construir programas de
selección de menús, donde al usuario se le planteaban dos o tres problemas distintos y el
propio usuario seleccionaba cual de ellos quería ejecutarse.
TAREAS JAVA
1.- Construir una ventana que contenga el siguiente menú ( java jframe )
conversión de pesos a dólares
conversión de libras a kilogramos
conversión de kilómetros a millas
fin de menú
seleccionar opción [ ] aqui se captura el dato de variable opcion
2.- Construir un programa que capture un deporte y despliegue dos implementos
deportivos apropiados.( java servlet )
3.- Evaluar cualquier función vista para cuando x =3,-4, 5 ( java jsp )
UNIDAD 4: CONTROL DE PROGRAMA
JAVA TEMA 8: COMPONENTES VISUALES DE SELECCION Y DESICION
Las instrucciones if y switch(), nos permiten tomar decisiones o realizar seleccionas
dentro del código de un programa.
JAVA proporciona una serie de componentes visuales que permiten al usuario, no al
programador, tomar decisiones en pantalla, el programador solo se encarga de implantar
código adecuado a la decisión tomada por el usuario.
Recordarque de momento, estos componentes o controles visuales, solo son
aplicables para JFRAME y JAPPLET.
UNIDAD 4: CONTROL DE PROGRAMA
1.- Evaluar la función para x 2,-5, 8 (usar un CheckBox por cada valor
de x, y programar cada evento OnClick de cada CheckBox con la operación
correspondiente y el despliegue del resultado).( applet)
2.- Construir un panel con los datos de un automóvil, un segundo panel muestra un plan
de financiamiento a dos años y un tercer panel muestra un plan de financiamiento a tres
años. ( son dos checkbox en el primer panel y no hay botón de ok). (jframe)
3.- Construir el programa de menú, que se dejo en el JAVA TEMA de instrucción switch().
( aquí no se ocupa switch() ni pedir la opción, ni botón de ok, solo un CheckBox
programado a un lado de cada opción del menú). (jframe)
UNIDAD 4: CONTROL DE PROGRAMA
JAVA TEMA 10: JRADIOBUTTON
Primero se usa swing en función de que awt no trae como default un componente
radiobutton, asi que los ejemplos y pruebas se tendran que hacer con JFrame.
Este Componente se utiliza para presentar al usuario un conjunto de opciones
mutuamente excluyentes entre si, es decir si el usuario selecciona un componente
RadioButton todos los demás componentes RadioButton en la forma, se desmarcan solos,
o se deseleccionan solos, como mejor se entienda.
Recordar también que cuando el usuario selecciona un RadioButton, todos los demás
RadioButton en el objeto(forma o ventana) son deseleccionados automáticamente, esto
es por que dos RadioButton son mutuamente excluyentes entre si.
Esta ultima situación deberá resolverse por parte del programador, es decir se supone un
programa donde el usuario debe seleccionar uno de entre dos sexos y uno de entre cinco
municipios, en este caso se ocupan ocho RadioButton, pero como todos son mutuamente
excluyentes entre si, cuando el usuario seleccione uno de ellos, todos los demás se
desmarcaran automáticamente.
Para resolver este problema se deberá usar sus propios componentes de agrupamiento
que son incluidos en java como lo muestra el siguiente ejemplo:
import java.lang.*; import java.awt.*; import java.awt.event.*; import javax.swing.*;
public class prog15 {
//declaracion, creacion e inicializacion de componentes, objetos y variables
static JFrame ventana= new JFrame();
static JPanel p1= new JPanel(); static JPanel p2= new JPanel();
static JTextField jt1=new JTextField(15); static JButton jb1= new JButton("OK");
static JRadioButton jrb1=new JRadioButton("5",true);
static JRadioButton jrb2=new JRadioButton("10");
// se ocupa un contenedor o grupo especial para los radiobuttons
static ButtonGroup grupo= new ButtonGroup();
Notas:
1.- En general es una jerarquia sencilla de componentes, primero se ocupa una Barra de
Menu ( MENUBAR ) que contendra las columnas o menus (MENU) y esta barra de menu (
MENUBAR ) es quien se pega a FRAME, como se observa en el programa ejemplo.
2.- Se ocupan despues las columnas o menus( MENU ) que se pegan a MENUBAR y
contienen items ( MENUITEMS ), observar que al momento de crearlo (new) su
constructor lleva el titulo o encabezado de la columna.
3.- Se ocupan al final items ( MENUITEM ) apropiados para cada columna o menu, estos
items se pegan al menu o columna apropiada, y es a estos items a quien se les pega el
escuchador apropiado ( ACTIONLISTENER ), observar que este escuchador no se le
puede ni debe pegar ni a MENU ni tampoco a MENUBAR.
Observar tambien que al momento de crearlos(new) su constructor incluye el titulo de la
opción.
4.- Cada escuchador, lleva su propio codigo, aunque en general en la practica lo unico
que hace es ocultar(hide) FRAME1 que contiene el menu y mostrar(show o visible)
FRAME2 que contiene el programa apropiado.
5.- No olvidar poner en FRAME2 un boton de regreso a FRAME1 o menu.
6.- Si en FRAME no se pone mas que MENUBAR , al ejecutarse el programa de menu, no
aparecera en forma horizontal, sino en forma vertical.
TAREAS JAVA
1.- EL DE LA MUESTRA CON DOS CONVERSIONES MONETARIAS, DOS OPCIONES
DE TEMPERATURAS Y DOS DE DISTANCIAS.
• NO OLVIDE PONER ALGUNAS LABELS DE ENCABEZADO EN LA VENTANA
PRINCIPAL
EN EL BOTON OK O EN OTRO BOTON SIMILAR DE CADA VENTANA DE TRABAJO
NO OLVIDAR AGREGAR CODIGO PARA OCULTAR DICHA VENTANA Y REGRESAR A
LA VENTANA CON EL MENU PRINCIPAL.
TAREAS JAVA
1.- CONSTRUIR UN MENU CON LAS SIGUIENTES OPCIONES:
[AUTOS] FINANCIAMIENTO A 2,3,4 años
[LAVADORAS] FINANCIAMIENTO A 2,3 años
UNIDAD 5: ARREGLOS
JAVA TEMA 2: ARREGLOS TRADICIONALES EN JAVA
En programación tradicional siempre se manejan dos tipos de arreglos, los arreglos tipo
listas, vectores o unidimensionales y los arreglos tipo tablas, cuadros, concentrados,
matrices o bidimensionales, en ambos casos son variables que permiten almacenar un
conjunto de datos del mismo tipo a la vez, su diferencia es en la cantidad de columnas
que cada uno de estos tipos contiene, como en los siguientes ejemplos;
A. ARREGLOS TIPO LISTA
Juan
Pedro ---> Nombres[1]
José
Ana ---> Nombres[3]
Carmen
18 ---> Edad[0]
20
25
30 ---> Edad[3]
B. ARREGLOS TIPO TABLAS
CIA ACME
ING MENS VTAS
(MILES DE $)
ENE FEB MAR ABR MAY
SUC A 10 12 15 10 9
SUC B 8 7 5 9 6
SUC C 11 18 20 14 17
INST TECN DE TIJUANA
CONCENTRADO DE CALIF
MAT FIS QUIM HIST
JUAN 5 5 5 5
JOSE 4 4 4 4
PEDRO 3 3 3 3
ANA 9 9 9 9
Como se observa, la diferencia principal entre un arreglo tipo lista, y un arreglo tipo tabla,
son las cantidades de columnas que contienen.
NOTA IMPORTANTE.- LOS CONCEPTOS MANEJADOS AQUI ESTAN ENFOCADOS A
LOS SISJAVA TEMA S DE INFORMACION CONTABLE FINANCIEROS
ADMINISTRATIVOS.
EN ALGEBRA MATRICIAL, SI SON IMPORTANTES LOS CONCEPTOS DE VECTORES
Y MATRICES, PERO LAS OPERACIONES Y METODOS SON PRECISAMENTE LOS
DEL ALGEBRA MATRICIAL Y NO ES PROPOSITO, TIEMPO Y LUGAR INDICADO
PARA TRATAR PROBLEMAS Y OPERACIONES CON MATRICES, SE TENDRAN QUE
ESPERAR A LA PROXIMA EDICION DE ESTE LIBRO.
Observar que para procesar la lista se ocupara un ciclo for con una variable llamada
renglón que tambien se usara como indice del arreglo.
TAREAS JAVA CONSOLA JSP SERVLET
1.- Capturar y desplegar 5 precios de productos cualesquiera.
2.- Capturar 4 sueldos y desplegarlos aumentados en un 25%.
3.- Capturar los datos de 5 productos comprados en una tienda, incluyendo nombre,
precio y cantidad en sus 3 listas respectivas, después calcular una cuarta lista con el
gasto total por cada producto desplegarlo todo también el gran total.
4.- Capturar en una lista solamente 6 números múltiplos de 5, se debe de estar capture y
capture números hasta que se completen los 6 múltiplos de 5.
UNIDAD 5: ARREGLOS
JAVA TEMA 4: Listas (continuación)
Tambien las clases numericas pueden dar origen a listas, como lo muestra el siguiente
ejemplo:
import java.io.*;
class prog21 {
public static void main(String[] args) {
Integer edad[]= new Integer[5]; int reng;
BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
//ciclo de captura
for(reng=0; reng <=4; reng++)
{ System.out.println("dame edad "+reng+":");
try { edad[reng]= edad[reng].valueOf(teclado.readLine());
}catch(IOException varerror){};
};
//ciclo de proceso
for(reng=0;reng<=4;reng++)
{int temp=edad[reng].intValue()*12;
edad[reng]=edad[reng].valueOf(String.valueOf(temp));
};
//ciclo de despliegue
for(reng=0; reng <=4; reng++)
System.out.println(edad[reng]);
} // cierra main
} // cierra clase
Como se observa es muy similar, este objeto arreglo a la variable arreglo vista en el JAVA
TEMA anterior.
Tambien pueden crearse listas de strings, de manera similar a este ejemplo.
NOTAS:
Conversiones, conversiones, conversiones
recordar que solo podran emplearse en aplicaciones de tipo FRAME Y APPLET.
Este componente, contiene muchas propiedades y métodos que facilitan el trabajo con
datos, entre ellas se encuentran:
Constructor Summary
List()
Creates a new scrolling list.
List(int rows)
Creates a new scrolling list initialized with the specified number of visible lines.
Method Summary
void addActionListener(ActionListener l)
Adds the specified action listener to receive action events from this list.
void addItemListener(ItemListener l)
Adds the specified item listener to receive item events from this list.
void addNotify()
Creates the peer for the list.
boolean allowsMultipleSelections()
Deprecated. As of JDK version 1.1, replaced by isMultipleMode().
void clear()
Deprecated. As of JDK version 1.1, replaced by removeAll().
int countItems()
Deprecated. As of JDK version 1.1, replaced by getItemCount().
AccessibleContext getAccessibleContext()
Gets the AccessibleContext associated with this List.
int getItemCount()
Gets the number of items in the list.
String[] getItems()
Gets the items in the list.
Dimension getMinimumSize()
Determines the minimum size of this scrolling list.
Dimension getPreferredSize()
Gets the preferred size of this scrolling list.
int getRows()
Get the number of visible lines in this list.
int getSelectedIndex()
Gets the index of the selected item on the list,
int[] getSelectedIndexes()
Gets the selected indexes on the list.
String getSelectedItem()
Get the selected item on this scrolling list.
String[] getSelectedItems()
Get the selected items on this scrolling list.
Object[] getSelectedObjects()
Returns the selected items on the list in an array of Objects.
int getVisibleIndex()
Gets the index of the item that was last made visible by the method
makeVisible.
boolean isMultipleMode()
Determines whether this list allows multiple selections.
Dimension minimumSize()
Deprecated. As of JDK version 1.1, replaced by getMinimumSize().
Dimension preferredSize()
Deprecated. As of JDK version 1.1, replaced by getPreferredSize().
void removeActionListener(ActionListener l)
Removes the specified action listener so that it no longer receives action
events from this list.
void removeAll()
Removes all items from this list.
void removeItemListener(ItemListener l)
Removes the specified item listener so that it no longer receives item
events from this list.
void removeNotify()
Removes the peer for this list.
void setMultipleMode(boolean b)
Sets the flag that determines whether this list allows multiple selections.
void setMultipleSelections(boolean b)
Deprecated. As of JDK version 1.1, replaced by setMultipleMode(boolean).
TABLAS TOMADAS DEL API DE JAVA
TAREAS JAVA
1.- EN JAVA CAPTURAR EN UNA LISTA LOS SUELDOS DE 6 EMPLEADOS Y
DESPLEGARLOS EN UNA SEGUNDA LISTA AUMENTADOS EN UN 30% ( java frame )
2.- EN JAVA CAPTURAR EN UNA LISTA LOS PESOS EN KILOGRAMOS DE 6
PERSONAS DESPLEGARLOS EN UNA SEGUNDA LISTA CONVERTIDOS A LIBRAS Y
ADEMAS SOLO LOS MAYORES DE 100 LIBRAS. ( java applet )
3.- EN JAVA CAPTURAR EN SUS 4 LISTAS RESPECTIVAS MATRICULA, NOMBRE Y
DOS CALIFICACIONES DE 5 ALUMNOS, DESPUÉS CALCULAR UNA LISTA DE
PROMEDIOS DE CALIFICACIONES. ( java frame )
4.-EN JAVA CAPTURAR EN SUS LISTAS RESPECTIVAS NUMEMPLEADO,
NOMEMPLEADO, DÍAS TRABAJADOS Y SUELDO DIARIO DE 5 EMPLEADOS,
DESPLEGAR EN OTRA PANTALLA O PANEL LA NOMINA PERO SOLO DE AQUELLOS
EMPLEADOS QUE GANAN MAS DE $300.00 A LA SEMANA.( java applet )
TAREA JAVA
Construir un programa que contenga puras llamadas a procedimientos dentro de un menu.(puntos
extras si el programa es giu, applet, servlet o jsp)
Menu.
a) Pesos a dolares.
b) Area de un triangulo.
c) Emitir Boleta.
d) Fin de menu.
UNIDAD 6: OOP
JAVA TEMA 2: PARAMETROS
Un parametro es una variable que puede pasar su valor a un procedimiento desde el principal o desde
otro procedimiento.
Existen ocasiones en que es necesario mandar al procedimiento ciertos valores para que los use en
algún proceso.
Estos valores que se pasan del cuerpo principal del programa al procedimiento se llaman parametros.
Entonces la declaración completa de un procedimiento es :
Static void NomProc(lista de parametros)
{ cuerpo de instrucciones; };
prog.java
import java.awt.*; import java.applet.*; import java.awt.event.*;
public class prog25 extends Applet {
static TextField t1=new TextField(10);
static Button b1=new Button("ok");
public void init() {
// abajo no se puso el objeto a la propiedad, porque el default es el propio prog25 o applet
add(t1); add(b1);
b1.addMouseListener(new MouseAdapter()
{ public void mousePressed(MouseEvent e) {
int x = 500;
proc1(x);
} } );
} // cierra init
static void proc1(int x)
{ x=x+100;
t1.setText(String.valueOf(x));
};
} // cierra clase
codigo.html que activa applet
<HTML>
<APPLET CODE="prog25" width=100 height=100></APPLET>
</HTML>
corrida:
Es permitido poner mas de un return en el cuerpo de instrucciones sobre todo en condiciones, pero solo
un return se ejecutara.
Ejemplo;
if (suma >= 10)
{ return 10; }
else
{ return 20; }
EN JAVA EXISTEN 3 CLASES USUALES DE FUNCIONES.
Las primeras son de tipo computacional que son diseñadas para realizar operaciones con los
argumentos y regresan un valor basado en el resultado de esa operación.
Las segundas funciones son aquellas que manipulan información y regresan un valor que indican la
terminacion o la falla de esa manipulacion.
Las terceras son aquellas que no regresan ningun valor, es decir son estrictamenta procedurales.
TAREAS JAVA JSP Y JAVA SERVLETS
Imprimir nombre y promedio de un alumno, capturar 3 calificaciones y nombre en un procedimiento,
calcular promedio en una funcion y desplegar
Crear una tabla de multiplicar, captura y control de ciclo en el principal, operaciones en una funcion,
despliegue en el principal.
Construir una funcion que nos regrese el triple de cualquier numero.
Construir un programa que emita una factura si el articulo es importado, una funcion lo graba con el
20% de iva si es nacional, la misma funcion lo graba con el 15% de iva si no lo es.
Construir una funcion que nos regrese la letra "I" o "P" si el numero que recibio fue impar o par
respectivamente.
UNIDAD 6: OOP
JAVA TEMA 6: CLASES
Definimos una clase, como una colección o conjunto de objetos que comparten caracteristicas comunes
entre si.
Esta definición es muy similar al concepto de conjuntos del algebra booleana, y la razon es que oop es
en esencia algebra booleana.
Tanto una clase, asi como un objeto derivado de la misma, contienen tres aspectos importantes que nos
permiten hacer clasificaciones con ellos, dichos aspectos son:
Ambos tienen propiedades, es decir tienen un conjunto de caracteristicas propias que permiten
individualizarlos entre si, caracteristicas tan genericos como son la forma, el color, el tamaño, etc. o
caracteristicas, propiedades o atributos mas particulares como , nombre, edad, etc.
Po ejemplo la clase gatos tienen como propiedades o atributos, nombre, edad, color, peso, estatura, etc.
La clase FRAME tiene como propiedades , el tamaño, el background, etc.
El segundo aspecto de las clases o sus objetos derivados, son las conductas, comportamientos o mas
apropiado los llamados metodos.
Los metodos son las conductas propias del objeto que se trate, es decir mientras las propiedades
reflejan el "SER" del objeto, los metodos nos indican el "HACER" del objeto.
Por ejemplo los metodos del oobjeto o clase gatos, son dormir(), maullar(), comer(), etc.
Por ejemplo los metodos de una buena ventana son, abrirse(), cerrarse(), maximizarse(), minimizarse()
etc.
El tercer aspecto de una clase u objeto, son los eventos, es decir la capacidad que tienen de
relacionarse con otros objetos derivados de la misma clase o de otras clases.
Es decir los objetos no existen, ni mucho menos se programan en solitario, es decir de que sirve un
programa que nada mas tenga una ventana y nada mas, o un alumno sin maestro, o garfield sin ollie.
Esta relación produce un evento cuando los dos objetos entran en contactoentre si, es decir una
relación de momento la podemos definir como una frase que contenga los dos objetos y un verbo que
los une, de esta manera tendremos eventos o relaciones como los siguientes.
R1.- el alumno saluda al maestro.
R2.- garfield detecta una gata
R3.- la ventana detecta un click del raton
En todos los casos, en el momento del evento o relación, ambos objetos, disparan una serie de
metodos propios y no necesariamente en el mismo orden.
Por ejemplo en el evento "el gato detecta el perro", el gato activa sus metodos, bufar(), esponjar(),
correr(), saltar(), etc, mientras que el perro activa sus metodos ladrar(), correr(), etc.
Es tarea comun del un programador, proveer de mecanismos de activacición de metodos, cuando el
sisJAVA TEMA operativo, informa que se ha realizado un evento , entre dos objetos del programa.
Dentro de un programa, lo mas comun es derivar un objeto de una clase ya predeterminada o
porpocionada muy amablemente por los fabricantes de compiladores, por ejemplo cuando se crearón
applets o servlets, se estuvierón realmente creando objetos derivados de las clases Applet o de la clase
HttpServlet, es decir prog1 o prog5 , etc son realmente objetos derivados de esas clases.
Tambien cuando se realizarón programas visuales, las clases Frame, TextField, Panel, etc, dieron
origen a muchos objetos.
Es tambien tarea común en programación derivar un objeto de alguna clase y agregarle nuevos
metodos o propiedades, para darle mayor funcionalidad al nuevo objeto, no nada mas usar los metodos
o propiedades que el fabricante de compiladores tuvo la gentileza de darle, como se ha estado haciendo
en todos los programas realizados hasta la fecha.
Sin embargo por motivos didacticos, empezamos nuestra unidad de oop, creando nuestras propias
clases, y derivando objetos de nuestras propias clases, para aplicarlos en nuestros programas.
class alumno{
void alumno(){};
static String nombre= new String();
static int edad;
static void inicializar(){
alumno.nombre="pepe el toro";
alumno.edad=18; };
static void desplegar(){
System.out.println(alumno.nombre);
System.out.println(alumno.edad);
};
} // temina la clase
corrida:
Para indicar a "java" durante cualquier proceso que la variable a utilizar es un campo de una
clase, se debera utilizar el siguiente formato.
nomclase.nombredelcampo
TAREAS JAVA
1.-Crear una clase de alumno que incluya un metodo que capture 3 califaciones.(consola)
2.-Declarar una clase o registro de empleado, capturarlo y desplegarlo un numero indeterminado
de veces.(consola)
3.- Capturar una clase o registro de empleados, aumentar sueldo en 25% y desplegar.( java
servlet )
4.-Capturar una clase o registro de cuentas por cobrar, mandar imprimir un aviso si el saldo esta
atrazado.( java servlet )
//grabando al archivo
archivo.writeInt(matricula);
archivo.writeUTF(nombre);
archivo.writeInt(edad);
archivo.close();
//pagina de aviso
PrintWriter pagina;
response.setContentType("text/html");
pagina = response.getWriter();
pagina.println("<HTML>");
pagina.println("REGISTRO? INSERTADO USAR BACK PARA REGRESAR E INSERTAR
OTRO");
pagina.println("</HTML>");
pagina.close();
}
catch(FileNotFoundException fnfe) { /* Archivo no encontrado */ }
catch (IOException ioe) { /* Error al escribir */ }
destroy();
};
public void destroy(){super.destroy();};
}
NOTAS:
Se construye la aplicacion de tipo java servlet
Se usa una clase llamada FileOutputStream, especializada en archivos con muchos metodos y
constructores para crear, manipular y procesar archivos, el constructor usado solo lleva dos
parametros, el primero todo la ruta o path a donde quedara el archivo(cuidado con no poner la
doble diagonal \\) y el segundo parametro es la palabra "true", esto es para que el archivo se abra
en modo llamado "APPEND", es decir que cada nuevo registro se vaya escribiendo al final del
archivo, si no se pone este parametro(true), un nuevo registro se sobreescribiria sobre el registro
anterior.
Sin embargo en el programa no se uso FILEOUTPUSTREAM( solo para crear el archivo), sino se
usa DATAOUTPUTSTREAM, esta segunda clase es derivada de la anterior y comparte muchos
de sus metodos, la diferencia es que fileoutputstream esta especializada en grabar y leer bytes,
mientras que dataoutputstream esta especializada en grabar y leer datos formateados, observar
que los metodos que uso el objeto archivo, se especializan en algun tipo de dato en especial, sus
metodos son:
Method Summary
int size() Returns the current value of the counter written, the number of bytes written to this
data output stream so far.
void write(int b) Writes the specified byte (the low eight bits of the argument b) to the
underlying output stream.
void writeByte(int v)
Writes out a byte to the underlying output stream as a 1-byte value.
void WriteBytes (String s) Writes out the string to the underlying output stream as a sequence
of bytes.
void writeChar(int v) Writes a char to the underlying output stream as a 2-byte value, high
byte first.
void WriteChars (String s) writes a string to the underlying output stream as a sequence of
characters.
void writeDouble(double v)
Converts the double argument to a long using the doubleToLongBits method in class
Double, and then writes that long value to the underlying output stream as an 8-byte
quantity, high byte first.
void writeFloat(float v) Converts the float argument to an int using the floatToIntBits method in
class Float, and then writes that int value to the underlying output stream as a 4-byte
quantity, high byte first.
void writeInt(int v)
Writes an int to the underlying output stream as four bytes, high byte first.
void writeLong(long v)
Writes a long to the underlying output stream as eight bytes, high byte first.
void writeShort(int v)
Writes a short to the underlying output stream as two bytes, high byte first.
void writeUTF (String str) writes a string to the underlying output stream using UTF-8
encoding in a machine-independent manner.
TABLA TOMADA DEL API DE JAVA
Observar que la grabación lleva un try-catch filenotfound y ioexception, que son obligatorios o no
compila el programa.
No olvidar cerrar el archivo, con la instruccion archivo.close
El Codigo html que alimenta este java servlet es el siguiente:
<HTML>
<FORM ACTION=http://programacionfacil.com:9090/servlet/susitio.prog34 METHOD=POST>
RECORDAR QUE PARA SERVLETS EL PUERTO ES 9090<BR>
MATRICULA:<INPUT TYPE=TEXT NAME=MATRICULA><BR>
NOMBRE:<INPUT TYPE=TEXT NAME=NOMBRE><BR>
EDAD:<INPUT TYPE=TEXT NAME=EDAD><BR>
<INPUT TYPE=SUBMIT VALUE=GRABAR>
</FORM></HTML>
TAREAS JAVA JSP JAVA SERVLET
1.- crear y cargar un archivo2.dat que contenga registros de empleados.
2.- crear y cargar un archivo3.dat que contenga registros de productos
Notas:
Observar en codigo que ahora se usan FILEINPUTSTREAM Y DATAINPUTSTREAM como clases
en fileinputstream, solo se uso el parametro de abrir archivo(no el true de append), estas clases se
especializan en archivos de lectura.
el ciclo de lectura se realiza con un while(true)
El codigio de html construye una tabla visual, recordar volver a leer el tutorial de html.
los metodos de DATAINPUTSTREAM SON:
Method Summary
int read(byte[] b)
See the general contract of the read method of DataInput.
boolean readBoolean()
See the general contract of the readBoolean method of DataInput.
byte readByte()
See the general contract of the readByte method of DataInput.
char readChar()
See the general contract of the readChar method of DataInput.
double readDouble()
See the general contract of the readDouble method of DataInput.
float readFloat()
See the general contract of the readFloat method of DataInput.
void readFully(byte[] b)
See the general contract of the readFully method of DataInput.
int readInt()
See the general contract of the readInt method of DataInput.
String readLine()
Deprecated. This method does not properly convert bytes to characters. As
of JDK 1.1, the preferred way to read lines of text is via the
BufferedReader.readLine() method. Programs that use the DataInputStream
class to read lines can be converted to use the BufferedReader class by
replacing code of the form:
DataInputStream d = new DataInputStream(in);
with:
BufferedReader d
= new BufferedReader(new InputStreamReader(in));
long readLong()
See the general contract of the readLong method of DataInput.
short readShort()
See the general contract of the readShort method of DataInput.
int readUnsignedByte()
See the general contract of the readUnsignedByte method of DataInput.
int readUnsignedShort()
See the general contract of the readUnsignedShort method of DataInput.
String readUTF()
See the general contract of the readUTF method of DataInput.
int skipBytes(int n)
See the general contract of the skipBytes method of DataInput.
TAREAS JAVA
1.- java servlets que lean y desplieguen los archivos creados en el JAVA TEMA anterior.
2.- Construir una aplicacion, donde una pagina, llama a las paginas de lectura y escritura de un
archivo de provedores.
Como ya se indico, SQL, es un lenguaje especializado en procesar bases de datos y por tanto, ES
NECESARIO, IMPRESCINDIBLE Y OBLIGATORIO QUE CONSIGAN UN TUTORIAL DE SQL LO
RESUMAN Y LO TENGAN A LA MANO, porque se va usar dentro de nuestros programas o
aplicaciones de java que se quieran comunicar con una base de datos.
Una de las ventajas de SQL es que es tambien un lenguaje de programacion muy sencillo, con
pocas instrucciones, las que mas interesan son las mas elementales, SELECT, UPDATE,
DELETE, INSERT.
Observar que entraron a tomar este curso, para aprender el lenguaje de programacion JAVA y
tambien tuvierón que aprender el lenguaje de programación HTML y ahora el lenguaje de
programación SQL, tres cursos de programación, por el precio de uno, WOWW.
Por supuesto que la empresa SUN, la fabricante del lenguaje JAVA, nunca escribio su driver
ODBC, por la sencilla razon de que lo propuso microsoft, en su lugar SUN, propone otro driver
especializado y con el mismo fin, llamado JDBC(java database conectivity), que segun ellos (y los
hechos lo confirman) es mas seguro, rapido, eficiente que ODBC.
Ahora las demas empresas especializadas en lenguajes de programación o en DBMS, tienen que
producir dos drivers ( ODBC y JDBC ) para cada uno de sus productos.
Ambos drivers o traductores son incompatibles, y por supuesto que microsoft le regreso el favor a
sun y tampoco fabrica un driver JDBC para sus productos.
Entonces como se construye una aplicacion en java que tenga que procesar una base de datos
hecha en access, existen dos maneras, la primera de ellas es que hay algunas empresas
especializadas en drivers que han fabricado odbcs para java y sus productos y jdbcs para
microsoft y sus productos, por supuesto que si empeño hasta la camisa, probablemente alcanze a
dar el enganche de alguno de ellos.
La otra solución, es que Sun, en su infinita misericordia proporciona, no un driver sino un
bridge(puente) llamado JDBCODBCdriver, que es un doble traductor, es decir java se comunica
con la parte jdbc de este puente luego este puente lo convierte a odbc que ya se puede comunicar
con el odbc de access, cuando el proceso es inverso, access le manda los datos a su odbc que a
su vez los manda al odbc del puente este ultimo lo transfiere a jdbc y este se lo manda a java,
esto significa un doble traducción en la parte de java, con el consiguiente retraso en la aplicación
o programa en java.
Para efectos de este curso, utilizaremos este puente (JDBCODBC ) por la parte de java y el
ODBC de Microsoft Access , por razones conocida ($$$).
TEMA 2: ACCESS Y JAVA ODBC
En este tema no se pretende enseñar a construir una base de datos en access, lo que se
pretende es conectar la base de datos a su traductor o driver ODBC.
Primero deberan crear un folder en el disco C:\, en mi ejemplo le puse base (muy original), cargar
access y crear una base de datos y guardarla en el folder antes mencionado,( yo le puse
mibase.mdb), ya creada la base, crearle una tabla con los campos apropiados y grabarla (yo le
puse tabla, con campos clave, nombre,edad).
Cargarle algunos registros o renglones de prueba para la tabla.
Salirse de access y cargarle el driver odbc, procedimiento:
Nota: este procedimiento depende de la version de windows que se este usando, yo uso win2000,
pero es muy similar(no igual) para todos los windows.
1.- Abrir control panel y se encuentran una opcion que dice algo de data sources y odbc.(en
win2000 se encuentra dentro de administrative tools).
Observar que hay drivers para access 97 y access mas nuevos, yo uso access 97.
En otros windows, esta pantalla sale despues que se usa user dsn (creo).
3.- Usarla opcion ADD (debe estar seleccionado el driver apropiado),y aparece la siguiente
pantalla.
Observar que se vuelve a seleccionar el driver de access.
4.- Usar opcion finish y sale la siguiente pantalla:
corrida java:
tareas java seguir construyendo java servlets de busqueda para sus tablas y base de datos
JAVA TEMA 6: FILTROS O CONDICIONES SQL SELECT
Como su nombre lo indica,en este proceso se pretende desplegar todo un conjunto de renglones
que cumplan con la condición, por ejemplo se pide desplegar todos los alumnos de "sisJAVA
TEMA s" o todos los empleados que sean de "sinaloa", etc.
En este caso el resultado es un conjunto de renglones de la tabla que cumplan la condición,
simple o compuesta.
Codigo html:
<HTML>
<FORM ACTION=http://192.168.1.133/servlet/prog41 METHOD=POST>
EDAD >=<INPUT TYPE=TEXT NAME=EDAD><BR>
<INPUT TYPE=SUBMIT VALUE=BUSCAR>
</FORM></HTML>
Codigo Java:
import java.io.*; import java.util.*; import java.net.*; import java.sql.*;
import javax.servlet.*; import javax.servlet.http.*;
public class prog41 extends HttpServlet {
static Connection canal = null;
static ResultSet tabla= null;
static Statement instruccion=null;
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
canal=DriverManager.getConnection("jdbc:odbc:mibase", " ", " ");
instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
} catch(java.lang.ClassNotFoundException e){} catch(SQLException e) {};
response.setContentType("text/html");
//capturando dato de filtro
Integer temp=Integer.valueOf(request.getParameter("EDAD"));
int edad1= temp.intValue();
//filtrando, edad>=100 c/u puede ser un text en html
try{
tabla= instruccion.executeQuery("Select * from tabla where edad >= "+edad1);
PrintWriter pagina =response.getWriter();
pagina.println("<HTML><HEAD><TITLE>MI SERVLET</TITLE></HEAD>");
pagina.println("<P ALIGN="+"CENTER"+">MI TABLA</P>");
pagina.println("<P ALIGN="+"CENTER"+">CLAVE NOMBRE EDAD</P>");
pagina.println("<DIV ALIGN="+"CENTER"+"><CENTER>");
pagina.println("<TABLE BORDER="+"1"+">");
while(tabla.next()) {
pagina.println("<TR>");
pagina.println("<TD>"+tabla.getString(1)+"</TD>");
pagina.println("<TD>"+tabla.getString(2)+"</TD>");
pagina.println("<TD>"+tabla.getString(3)+"</TD>");
pagina.println("</TR>"); }; // fin while
pagina.println("</TABLE></CENTER></DIV></HTML>");
pagina.close();
tabla.close(); } //fin try no usar ; al final de dos o mas catchs
catch(SQLException e) {};
destroy();
try {canal.close();} catch(SQLException e) {};
};//fin dopost
public void destroy() {super.destroy();};
} //fin clase
Otra vez un programa sencillo, con una instrucción SELECT de SQL.
Corrida html:
Corrida java:
tareas java sugeridas, construir dos o tres java servlets de filtro, en uno de ellos poner los tres
inputs texts para que el usuario contruya completamente la condición.(suerte)
JAVA TEMA 7: BAJAS O ELIMINACION SQL DELETE
Baja o eliminación, es un proceso comun tambien con los registros o renglones de las tablas en
las bases de datos.
Lo bueno es que existe la instruccion SQL DELETE solo observar bien el cambio que se hace en
el execute.
Para todos los select vistos en los procesos se uso la instrucción executequery(instrucciónsql),
pero para insert, delete y update se debera usar executeupdate(instrucciónsql).
Codigo Html:
<HTML>
<FORM ACTION=http://192.168.1.133/servlet/prog42 METHOD=POST>
CLAVE A ELIMINAR:<INPUT TYPE=TEXT NAME=CLAVE><BR>
<INPUT TYPE=SUBMIT VALUE=DELETE>
</FORM></HTML>
Codigo Java:
import java.io.*; import java.util.*; import java.net.*; import java.sql.*;
import javax.servlet.*; import javax.servlet.http.*;
public class prog42 extends HttpServlet {
static Connection canal = null;
static ResultSet tabla= null;
static Statement instruccion=null;
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
canal=DriverManager.getConnection("jdbc:odbc:mibase", " ", " ");
instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
} catch(java.lang.ClassNotFoundException e){} catch(SQLException e) {};
response.setContentType("text/html");
//capturando clave a eliminar
Integer temp=Integer.valueOf(request.getParameter("CLAVE"));
int clave1= temp.intValue();
String borrar=" DELETE FROM tabla WHERE clave = "+clave1;
//executeUpdate se usa para insert, update y delete executequery para select
//y en access cuando se construya la relación no olvidar poner en cierto
//enforce relational integrity, cascade update y cascade delete
try{
//eliminando
instruccion.executeUpdate(borrar);
PrintWriter pagina =response.getWriter();
pagina.println("<HTML>");
pagina.println("BORRADO BACK TO REGRESAR");
pagina.println("</HTML>");
pagina.close();
tabla.close(); } //fin try no usar ; al final de dos o mas catchs
catch(SQLException e) {};
destroy();
try {canal.close();} catch(SQLException e) {};
};//fin dopost
public void destroy() {super.destroy();};
} //fin clase
Corrida de vista tabla original(prog38):
Corrida html de eliminacion:
try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
canal=DriverManager.getConnection("jdbc:odbc:mibase", " ", " ");
instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
} catch(java.lang.ClassNotFoundException e){System.out.println("classnotfound");}
catch(SQLException e) {System.out.println("error de enlace canal");}
response.setContentType("text/html");
//cargando los campos a modificar
Integer temp=Integer.valueOf(request.getParameter("CLAVE"));
int clave1= temp.intValue();
String nombre = request.getParameter("NOMBRE");
//capturando y conviertiendo edad
temp=Integer.valueOf(request.getParameter("EDAD"));
int edad= temp.intValue();
// y el formato de update es:
// update tabla set campo1=dato, campo2=dato where clave = 300;
// se supone que la clave no se ocupa modificar solo el resto de campos
String q = "UPDATE tabla SET " +
"NOMBRE='" + nombre +
"', EDAD='" + edad +
"' WHERE clave=" + clave1;
try {
// modificando renglon (update)
int n=instruccion.executeUpdate(q);
//avisando que se hizo la instruccion
PrintWriter pagina =response.getWriter();
pagina.println("<HTML>");
pagina.println(n+"YA SE MODIFICO, BACK PARA REGRESAR");
pagina.println("</HTML");
pagina.close(); } //termina try
catch(SQLException e) { System.out.println("error del sql probable mala instruccion sql"); };
destroy();
try {canal.close();} catch(SQLException e) {System.out.println("error el cerrar el canal");};
} ;//fin dopost
public void destroy() {super.destroy();};
}//fin clase prog44
tan tan el curso se acabo y a empezar a construir su proyecto un java servelet que tenga dos
tablas basicas y una tabla de relacion 1-kte, suerte.