Está en la página 1de 6

Estructuras de datos y de control

Estructuras de control
Las estructuras de control pueden dividirse en dos: Estructuras de control Condi
cional y Estructuras de control Repetitivo.
Las estructuras de control condicional son las que incluyen alternativas de sele
ccin en base al resultado de una operacin booleana(El resultado de una operacin boo
leana es siempre verdadero o falso), como por ejemplo, una comparacin (A=B). Segn
la expresin sea cierta o falsa, se ejecutar un trozo de cdigo u otro. Es el caso de
la sentencia IF(Si) THEN(Entonces) ELSE(Sino) de Pascal o Basic:
IF A=0 THEN
PRINT "A vale 0"
ELSE
PRINT "A no vale 0"
Otra sentencia de control son las de tipo SWITCH CASE. En este tipo de sentencia
s se especifica la variable a comparar y una lista de valores con lo que compara
r. Aquel que sea el verdadero, se ejecutar:
Quizs suene ms complicado de lo que es. Un ejemplo: Queremos sumar dos nmeros. Nues
tro programa tendr que tener tres cajones: Uno para cada nmero y otro para el resu
ltado. Cada cajn tiene un nombre en vez de una posicin de memoria, de manera que sl
o hay que nombrarlo:
Necesito cajones A, B y Resultado
Lee un nmero y gurdalo en A
Lee un nmero y gurdalo en B
Suma A y B y gurdalo en Resultado
Imprime el contenido de Resultado
He aqu nuestro programa. Como cabe pensar, un procesador no tiene la instruccin "I
mprime por pantalla"; esto es una llamada a otra porcin de cdigo que, gracias a la
abstraccin, nosotros no hemos escrito, o hemos escrito una sola vez; a partir de
lo cual podemos imprimir todo el texto que queramos en la pantalla.
Las posiciones de memoria A y B son Variables. Si queremos leerlas o escribirlas
, podemos hacerlo. Tpicamente, existirn datos que no pensamos modificar; no querre
mos que el usuario tenga que introducirlos cada vez, pues son de naturaleza ms co
nstante que otros (como puede ser el valor Pi para calcular el permetro o rea de u
n crculo). Para evitar modificarlos por error, podemos pedir al sistema variables
especiales, que no puedan ser reescritas. Son las Constantes. Un ejemplo:
VIERNES, 2 DE DICIEMBRE DE 2011
Tcnicas Bsicas de Programacin
La programacin estructurada sigue tres reglas: la secuencia, la iteracin y la deci
sin. La primera de ellas indica que las instrucciones del cdigo se leern de princip
io a fin; la segunda indica que, segn cierta condicin, un nmero de instrucciones po
dran repetirse un numero determinado de veces, y la tercera indica que segn unas c
iertas condiciones se ejecutarn o no un conjunto de instrucciones. En el siguient
e algoritmo para limpiar platos se aprecian estas tres caractersticas. La indenta
cin de las instrucciones indican cules son englobadas y cules no por sus predecesor
as.
mientras haya platos
coger plato
mientras haya suciedad

echar jabon
pasar el estropajo por el plato
si plato es azul
ponerlo con los azules
En cdigo no estructurado, quedara algo ms extrao, pero igualmente valido.
1
2
3
4
5
6
7

coger plato
echar jabn
pasar el estropajo por el plato
si hay suciedad ir a la instruccin 2
si el plato no es azul ir a la instruccin 7
ponerlo con los azules
si hay ms platos ir a la instruccin 1

En programas ms grandes, esto es muchsimo ms complicado, pero puede aprender.


Ahora conocemos la ejecucin de los algoritmos. Sin embargo, un programa se compon
e tanto de algoritmos como de una estructura de datos sobre la cual operar. As qu
e veamos primero algunas cosas importantes:
Antes de empezar un programa
Estructura de un programa
En la programacin estructurada hay un inicio y un fin perfectamente bien definido
de acuerdo al diagrama de flujo que se plante al concebir la idea del programa.
Un programa bien estructurado debera tener algn subprograma que capture cualquier
error dentro del programa principal o de cualquier subprograma dentro de la apli
cacin de tal modo que el subprograma que captura los errores genere un registro d
e datos que describa el error generado y/o en qu subprograma se gener el error par
a posteriormente corregirlo. Para facilitar la correccin de estos errores se hace
uso de los comentarios agregados en el cdigo fuente.
Variables y constantes
Como hemos visto, el ordenador sigue una serie de instrucciones. Pero esas instr
ucciones tienen que operar sobre una serie de datos. El ordenador tpico slo proces
a una instruccin a la vez, por lo que necesita 'espacios de memoria' donde guarda
r o depositar, a modo de cajones, por usar un smil conocido, los diversos datos c
on los que trabaja. Aqu es donde entran en juego las variables y constantes.
1 coger plato
2 echar jabn
3 pasar el estropajo por el plato
4 si hay suciedad ir a la instruccin 2
5 si el plato no es azul ir a la instruccin 7
6 ponerlo con los azules
7 si hay ms platos ir a la instruccin 1
mientras haya platos
coger plato
mientras haya suciedad
echar jabon
pasar el estropajo por el plato
si plato es azul
ponerlo con los azules
CUNDO USAR JFRAME Y CUNDO JDIALOG
En una aplicacin java con ventanas debera haber un nico JFrame, correspondiente a l
a ventana principal de la aplicacin. El resto de ventanas secundarias deberan ser

JDialog.
Por qu es esto?
Un JFrame en una ventana que en Windows crea, en la barra de herramientas, donde
est el men de "inicio" y las aplicaciones que tenemos abiertas, un nuevo botn de a
plicacin abierta. En una aplcacin lo normal es que slo haya un botn ah. Si creamos va
rios JFrame en nuestra aplicacin, apareceran varios botones, uno por cada JFrame.
El JDialog no muestra este botn. Por ello, el resto de las ventanas de nuestra ap
licacin deberas ser JDialog.
Hay otro motivo ms. Un JFrame no admite a ninguna otra ventana como padre. El JDi
alog s admite como padres un JFrame u otros JDialog. Esto es importante porque un
a ventana hija siempre quedar por encima de su ventana padre. Si al crear los JDi
alog les pasamos el JFrame como padre, los JDialog siempre estarn visibles por en
cima del JFrame. No se podrn ir "detrs" de l.
Si adems, en el constructor del JDialog ponemos a true el flag que indica que es
modal, adems de pasarle una ventana padre, entonces el JDialog impedir el acceso a
las otras ventanas hasta que se cierre. Esta seria una forma de crear el JFrame
y el JPanel pueden tambin descargarse el cdigo fuente el link lo deje mas abajo.
String path="";//creamos una variable global para guardar el path
private void open() throws IOException {
//empezamos implementando la clase JFileChooser para abrir archivos
JFileChooser JFC = new JFileChooser();
//filtro que muestra solo los archivos con extension *.edu
JFC.setFileFilter(new FileNameExtensionFilter("todos los archivos *.EDU"
, "edu","EDU"));
//se comprueba si se ha dado al boton aceptar
int abrir = JFC.showDialog(null, "Abrir");
if (abrir == JFileChooser.APPROVE_OPTION) {
FileReader FR = null;
BufferedReader BR = null;
try {
//abro el fichero y creo un BufferedReader para hacer
//una lectura comoda (tener el metodo readLine();)
File archivo = JFC.getSelectedFile();//abre un archivo .lengf
//evitar abrir archivo con otra extension que no sea *.LFP
String PATH = JFC.getSelectedFile().getAbsolutePath();
if(PATH.endsWith(".edu")||PATH.endsWith(".EDU")){
FR = new FileReader(archivo);
BR = new BufferedReader(FR);
//leyendo el archivo
String linea;//variable para leer linea por linea el archivo
de entrada
if(path.compareTo(archivo.getAbsolutePath())==0){
JOptionPane.showMessageDialog(this, "Archivo Abierto","O
ops! Error", JOptionPane.ERROR_MESSAGE);
}else{
path = archivo.getAbsolutePath();
jTextArea.setText(null);//limpiamos el textArea antes de
sobreescribir
while((linea=BR.readLine())!=null){ //cuando termina el
texto del archivo?

jTextArea.append(linea+"\n");//utilizamos append par


a escribir en el textArea
}
}
}else{
JOptionPane.showMessageDialog(this, "Archivo no soportado","
Oops! Error", JOptionPane.ERROR_MESSAGE);
open();
}
} catch (FileNotFoundException ex) {
ex.printStackTrace();
//Logger.getLogger(fileChooser.class.getName()).log(Level.SEVERE
, null, ex);
//cerramos el fichero, para asegurar que se cierra tanto
// si todo va bien si salta una excepcion
} finally {
try {
if(null!= FR){
FR.close();
}
} catch (IOException ex) {
ex.printStackTrace();
//Logger.getLogger(fileChooser.class.getName()).log(Level.SE
VERE, null, ex);
}
}
}
}
private void save(){
String texto = jTextArea.getText();//variable para comparacion
if (texto.matches("[[ ]*[\n]*[\t]]*")) {//compara si en el JTextArea hay
texto sino muestrtra un mensaje en pantalla
JOptionPane.showMessageDialog(null,"No hay texto para guardar!", "Oo
ps! Error", JOptionPane.ERROR_MESSAGE);
}else{
JFileChooser fileChooser = new JFileChooser();
fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("todo
s los archivos *.EDU", "edu","EDU"));//filtro para ver solo archivos .edu
int seleccion = fileChooser.showSaveDialog(null);
try{
if (seleccion == JFileChooser.APPROVE_OPTION){//comprueba si ha
presionado el boton de aceptar
File JFC = fileChooser.getSelectedFile();
String PATH = JFC.getAbsolutePath();//obtenemos el path del
archivo a guardar
PrintWriter printwriter = new PrintWriter(JFC);
printwriter.print(jTextArea.getText());//escribe en el archi
vo todo lo que se encuentre en el JTextArea
printwriter.close();//cierra el archivo
//comprobamos si a la hora de guardar obtuvo la extension y
si no se la asignamos
if(!(PATH.endsWith(".edu"))){
File temp = new File(PATH+".edu");
JFC.renameTo(temp);//renombramos el archivo

}
JOptionPane.showMessageDialog(null,"Guardado exitoso!", "Gua
rdado exitoso!", JOptionPane.INFORMATION_MESSAGE);
}
}catch (Exception e){//por alguna excepcion salta un mensaje de erro
r
JOptionPane.showMessageDialog(null,"Error al guardar el archivo!
", "Oops! Error", JOptionPane.ERROR_MESSAGE);
}
}
}
JFileChooser para abrir y/o guardar archivos
JFileChooser es una clase java que nos permite mostrar fcilmente una ventana para
la seleccin de un fichero. En esta oportunidad les dejare un ejemplo de una de l
as muchas formas de como Abrir y Guardar un archivo aplicando filtros tambin que
al momento de guardar genere automticamente la extensin y que evite abrir un archi
vo que ya se encuentra abierto.
La relacin empleada para organizar los casos de uso es la de un extend, ya que se
intenta identificar que cualquiera de estas funcionalidades se pueden o no real
izar tanto individual corno conjuntamente. Adems, hemos relacionado mediante un e
xtend el caso de uso de Gestin de locales y de pisos con el caso de uso Gestin de
edificio. Con esto reflejamos que la gestin de edificios puede conllevar la gestin
de locales, de pisos o de ambos.
En el
s con
po de
as de
?
?
?
?
?

siguiente diagrama (ver Figura 2) se muestran los casos de uso relacionado


el actor inquilino. El inquilino va a ser aquella persona que tiene algn ti
aval, de los expuestos en el enunciado, y, por tanto, puede realizar algun
las siguientes operaciones en el sistema:

Alquilar.
Desalquilar.
Darse de baja.
Modificar sus datos.
Consultarlos.

Para cada una de estas operaciones hay un caso de uso en el diagrama reflejando
la situacin anterior. Adems, ya que se nos dice que para la realizacin de cualquier
a de las operaciones es necesaria su identificacin, se ha reflejado un caso de us
o nombrado Identificacin que se relaciona con los anteriores mediante la relacin d
e include. Con la relacin de include hacemos especial nfasis en esta situacin.
Tras volver a examinar con ms detalle la descripcin proporcionada se observa que c
uando se produce el alquiler ste puede ser el de un piso (Alquiler Piso) un local
(Alquiler Local) y de edificio (Alquiler de Edificio). Por ello se generan tres
nuevos casos de uso que implican una relacin de extend con el caso de uso de Alq
uilar.
Como hemos observado que la primera vez que se produce una operacin de alquiler s
e debe permitir el alta de los datos del inquilino, se ha creado el caso de uso
Alta Inquilino como una extensin de Alquiler Piso, Alquiler Local y Alquiler Edif
icio.
Finalmente, el ltimo diagrama de caso de uso que se muestra (Figura 3) es aquel e
n el que se encuentra involucrado el actor secretario. Tras una visin general de
las caractersticas del sistema, observamos que las tareas del secretario son:
Obtencin de los distintos tipos de recibos. Obtener los informes econmicos. Genera
cin de los listados.

Como vemos, en aras de reflejar de una forma ms meticulosa las funcionalidades qu


e debe contemplar el sistema, todos los casos de uso genricos, con los cuales est
relacionado, se desglosan en otros casos de uso. Para ello se ha utilizado la re
lacin de extensin en algunos casos de uso.
As pues, el caso de uso de "Generar recibos" est relacionado mediante un extend co
n los casos de uso:
? Recibos idnticos mes anterior.
? Inicializar conceptos.
? Modificar los del mes anterior.
Este desglose se ha realizado para reflejar lo que el enunciado muestra con deta
lle y as poder tener una comprensin mayor de lo que el sistema debe de hacer.
Por otra parte, la Gestin de movimientos bancarios se extiende en los casos de us
o de Ingresos y Gastos de inmuebles, mientras que el de ingresos se extiende en
ingresos de pisos e ingresos de local. De esta forma reflejamos el hecho de que
los ingresos pueden ser de pisos, de locales o ambos, pero slo por esos conceptos
.
Figura 3:Casos de uso relacionados con el actor "Secretario empresa".
Finalmente, el caso de uso de Generacin de listados se extiende en distintos caso
s de uso dependiendo del tipo de listado que se ha comentado en el enunciado. Co
n esto se indica claramente cules son especficamente las operaciones que se deben
poder realizar, obteniendo, por tanto, una mayor comprensin de los requisitos que
debe tener el sistema. La extensin refleja esos comportamientos opcionales que p
uede haber en el sistema y que no tienen por qu ser exclusivos, en el sentido de
que si se realiza uno se pueden realizar los otros, cuando se generan listados.
Los casos de uso que tenemos son: Inquilino por fecha, Pagos inquilino en un int
ervalo de tiempo, Impagos inquilino en un intervalo de tiempo, De todos los inmu
ebles, De todos los pisos y locales de cada edificio, De recibos pendientes.