Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Bibliografa
1.
2.
3.
4.
Fechas de Exmenes
Examen
Fecha
1er
Unidades
Ensayo/Producto de
Aprendizaje
24 de Agosto
2.
13 de Octubre
2y3
(Unidad 2) 28 de Septiembre
(Unidad 3) 13 de Octubre
3er
4 de Noviembre
4 de Noviembre
4.
01 de Diciembre
5y6
(Unidad 5) 23 de Noviembre
(Unidad 6) 01 de Diciembre
2 Oportunidad
Calificacin Final
09 de Diciembre
Exmenes 60%
Productos de Aprendizaje 40% (Ensayos, Productos de Aprendizaje, etc.)
Portada
ndice *
Contenido
Conclusiones
Bibliografa*
Notas:
* Puede ir o no, depende del tipo de documento
2. Oportunidad de los Ensayos, Productos de Aprendizaje, etc.
Otras Observaciones:
Hora de entrada
Asistencia a clase
2 Oportunidad
Revisin equitativa
Solicitud de Amistad a la cuenta de Facebook Arturo Lpez Ponce
Solicitar que los agrege al grupo AEB-1054-TC1 Ago-Dic 2016
Foto para el Face.
1. Entorno de desarrollo
Existen diversos IDEs (Integrated Development Environment/Entorno de Desarrollo
Integrado) para Java, entre los que se encuentran:
a)
b)
c)
d)
e)
Eclipse
NetBeans
BlueJ
JBuilder
JCreator
6. Seleccione la opcin
Luego de cargar los componentes necesarios para nuestra aplicacin, vern en la parte
superior izquierda:
Run/
Run
Ctrl + F11
NetBeans
Ejecutar/
F6
Ejecutar Project
BlueJ:
NetBeans
BlueJ:
En la carpeta del proyecto se guardan los archivos fuente (.java) y los compilados
(.class).
1.2.3. Depuracin
La depuracin (debug) permite examinar las aplicaciones para buscar errores, ya que
posibilita observar las lneas que se van ejecutando, as como los valores que van
tomando las variables en cada paso.
Eclipse:
Lo primero que hay que hacer es definir en qu punto o puntos del cdigo queremos que
la ejecucin del programa se detenga. Para ello, definiremos puntos de ruptura
(breakpoints) en las lneas de cdigo donde queramos que la ejecucin se detenga o
pause.
Para definir un punto de ruptura (o para eliminar uno existente), nos situamos en la lnea
que queramos y seleccionamos "Run -> Toggle breakpoint" o Ctrl + Shift + B.
Una vez tenemos definidos los puntos de ruptura que queramos, iniciamos el depurador
seleccionando desde una clase ejecutable "Run -> Debug" o, alternativamente, dando al
botn con el bicho:
Adems, podemos indicar que la ejecucin siga o se detenga a nuestro gusto utilizando
los botones de la vista Debug (o las opciones del men "Run"). A continuacin explicamos
las bsicas.
Resume. Contina la ejecucin del programa hasta el prximo punto de ruptura o
hasta que finaliza la ejecucin.
Terminate. Finaliza la ejecucin del programa.
Step into. Se ejecuta la lnea actual y, en caso de ser una llamada a un mtodo, la
ejecucin contina dentro del mtodo.
Step over. Se ejecuta la lnea actual y se pasa a la lnea siguiente sin entrar en los
mtodos.
Step return. Se sigue ejecutando hasta que se ejecute un return. Es decir, se
ejecuta por completo el mtodo en el que estemos y se pasa a la lnea siguiente a la
invocacin del mtodo.
NetBeans
Al igual que en Eclipse, en NetBeans se tiene que establecer un punto de ruptura
(breakpoints), esto se realiza mediante:
1. Depurar -> Debug Main Project (Ctrl. + F5)
Tambin pulsando con el botn derecho sobre un proyecto en explorador de proyectos y
seleccionar Debug. El programa se ejecuta hasta llegar al primer breakpoint.
Continuar ejecucin (F8) Ejecuta una lnea de cdigo. Si la instruccin es una llamada
a un mtodo, ejecuta el mtodo sin entrar dentro del cdigo del mtodo.
Paso a paso (F7) Ejecuta una lnea de cdigo. Si la instruccin es una llamada a un
mtodo, salta al mtodo y contina la ejecucin por la primera lnea del mtodo.
Entra en el siguiente mtodo (Ctrl + F7) Ejecuta una lnea de cdigo. Si la lnea de
cdigo actual se encuentra dentro de un mtodo, se ejecutarn todas las instrucciones
que queden del mtodo y se vuelve a la instruccin desde la que se llam al mtodo.
Ejecuta hasta el cursor (F4) Se ejecuta el programa hasta la instruccin donde se
encuentra el cursor.
Continuar (F5) La ejecucin del programa contina hasta el siguiente breakpoint. Si
no existe un breakpoint se ejecuta hasta el final.
Finaliza sesin del depurador (Maysculas + F5). Termina la depuracin del
programa.
BlueJ:
El depurador de BlueJ realiza estas tres tareas:
Una vez puesto el punto de ruptura, ejecute el programa y tan pronto como se alcanza el
punto de ruptura, emerge la ventana del editor, mostrando la lnea de cdigo actual y
emerge una ventana de depurador. Esto tiene un aspecto semejante a la siguiente figura:
Producto de aprendizaje 1.
Elaborar un Ensayo donde indique cual IDE es el mejor, resaltando sus ventajas,
desventajas de dada uno.
Qu es un ensayo?
En el ensayo, el autor expone de manera libre sus argumentos que respaldan una
posicin personal ante un determinado tema. Por eso, el ensayo puede incluir o no citas
bibliogrficas, se pueden citar trabajos acadmicos, artculos periodsticos, otros ensayos,
incluir frases o refranes, ofrecer ejemplos, exponer propuestas, contar ancdotas,
experiencias o vivencias, etc.
El gnero de ensayo puede ser tanto de carcter acadmico como as tambin literario,
por lo cual es en esta caracterstica donde radica de manera ms notable su esencia de
gnero libre.
Los ensayos, a diferencias de textos acadmicos como las tesis de investigacin o
monografas, no requieren de seguir un mtodo cientfico de investigacin para ser
realizados, pero s de una gran habilidad de expresin y argumentacin por parte de su
autor.
En general, el ensayo consta de tres partes en su estructura. La primera, es la de
presentacin del tema, contextualizacin y exposicin de una hiptesis (una suposicin
planteada por el autor acerca de determinado tema o problema) o posicin personal
acerca del tema central. En la segunda parte, llamada comnmente desarrollo, el autor
expone argumentos a travs de distintos recursos para sostener su hiptesis o posicin
personal presentada al principio. Estos recursos pueden ser: comparaciones, ejemplos,
datos, estadsticas, citas bibliogrficas, etc.
Por ltimo, en su conclusin, el autor intentar reforzar su hiptesis o posicin emitida al
comienzo del escrito. Como vemos, toda la estructura del ensayo se apoya entonces en la
argumentacin alrededor de una posicin personal sostenida por el autor. La clave est
en la habilidad de exposicin del autor para presentar sus argumentos reforzando as todo
el tiempo o al menos el que dura la lectura- su posicin, sin caer en la redundancia y en
la repeticin.
2. Clases y objetos
Antes de que un programa pueda crear objetos de cualquier clase, sta debe ser definida.
La definicin de una clase significa que se debe dar un nombre, as como tambin un
nombre a los elementos que almacenan sus datos, as como describir los mtodos que
realizarn las acciones o tareas de la clase.
2.1. Definicin de una clase
En el Lenguaje Unificado de Modelado (UML, Unifield Modeling Language), una clase es
representada por un rectngulo que posee tres divisiones:
Nombre de la clase
Atributos
Comportamiento
En donde:
La parte superior:
La intermedia:
La parte Inferior:
Objeto : Clase X
Atributo1 = Expresin
Mtodo ()
Objeto : Clase X
(b) Notacin reducida de un objeto
Porsche911 : Carro
Color = Amarillo
ArrancarMotor ()
Marco : Alumno
(d) Objeto Marco de la clase Alumno
Variables:
Constantes:
Mtodos:
variable dentro del bloque es una variable local y solo tiene alcance dentro del bloque que
se cre, una variable definida fuera de cualquier bloque es una variable global y cualquier
bloque puede acceder a ella y modificarla.
2.5. Especificadores de acceso
Atributos y Mtodos:
Atributos:
Los atributos o caractersticas de una Clase pueden ser de tres tipos, los que definen el
grado de comunicacin y visibilidad de ellos con el entorno, estos son:
public (+,
):
private (-,
):
protected (#,
defecto
):
Mtodos:
Cada mtodo tiene asociado un tipo que se utiliza para controlar el acceso al mtodo.
Entre estos se encuentra:
public (+,
private (-,
protected (#,
defecto
):
Modificador
public
private
protected
por defecto
Clase
Package
Subclase
Todos
S
S
S
S
S
No
S
S
S
No
S
No
S
No
No
No
En la siguiente tabla presentamos los 8 tipos de dato primitivos de Java, el nmero de bits
que ocupan y el rango de valores que pueden tomar.
Tipo
Tamao en bits
Rango de valores
boolean
char
1
16
byte
short
16
int
32
long
64
float
32
double
64
cual regresa la fecha bajo el formato dd/mm/aaaa (para lograr esto utilice la clase
DecimalFormat que se encuentra en el paquete java.text).
La clase principal Ejercicio_1_1 se deben de instanciar dos objetos (fechaInicial y
fechaNacimiento), al crear el objeto fechaInicial invoca al constructor por defecto, mientras
que el objeto fechaNacimiento invoca al constructor alternativo y con los valores 20 a da,
09 al mes y 2016 al ao. Finalmente despliega los datos invocando de forma implcita el
mtodo toString().
Fecha
- int d;
- int m;
- int a;
+ Fecha()
+ Fecha(int vd, int vm, int va)
+ void cambiaDia(int vd)
+ void cambiaMes(int vm)
+ void cambiaAo(int va)
+ int regresaDia()
+ int regresaMes()
+ int regresaAo()
+ String toString()
import java.text.DecimalFormat;
public class Fecha {
private int d;
private int m;
private int a;
private DecimalFormat formato_dym = new DecimalFormat("00");
private DecimalFormat formato_a = new DecimalFormat("0000");
public
d =
m =
a =
}
Fecha() {
1;
1;
1900;
public
d =
m =
a =
}
Clase Principal
Ejercicio 2.2: Elabore una clase llamada rbol, con dos variables miembro, la primera se
llamar Tipo que representa el tipo de rbol (Naranjo, Manzano, Pino, etc.) y Fruto
(Naranja, Manzana, Sin Fruto, etc.). Con dos constructores, el por defecto le pondr los
valores de Sin Tipo a la variable Tipo y Sin Fruto a la variable Fruto, el constructor
alternativo se le mandaran dos parmetros que sern asignados a Tipo y Fruto, adems
deber tener los mtodos Sets y Gets; la clase principal se debe de llamar
Ejemplo_Arbol, instancie dos objetos, el primero con el constructor por defecto, el
segundo con el constructor alternativa, los valores tendrn que ser capturados y
finalmente despliegue contenido en pantalla de cada objeto.
Ejercicio 2.3: Elabore una clase llamada Hora, con tres variables miembro, Horas,
Minutos y Segundos. Contar con cuatro constructores, el constructor por defecto le
pondr los valores cero a las tres variables, el primer constructor alternativo recibir un
valor y se lo asignar a las horas, mientras que a minutos y segundo le asignara cero, el
siguiente constructor alternativo recibir dos parmetros los cuales se asignarn a las
variables hora y minutos; mientras que a segundos le podr cero, al tercer constructor
alternativo recibir tres parmetros los cuales se asignarn a horas, minutos y segundos,
tambin debe de tener los mtodos Sets y Gets. Adems debe sobrecargara el mtodo
toString el cual regresara los valores almacenados bajo el formato HH:MM:SS. La clase
principal se debe de llamar Ejemplo_Hora y deben instanciar cuatro objeto (cada uno
creado con un constructor diferente) y desplegando el contenido de los objetos en
pantalla.
2.7. Clases predefinidas
Estos son los paquetes ms importantes de la API de Java:
Paquete
java.applet
java.awt
java.io
java.lang
java.net
java.util
javax.swing
Descripcin
Clase Math
La Clase Math proporciona una gran variedad de mtodos matemticos al igual que
algunas constantes tiles.
Campos
Descripcin
Constante e: 2.7182818284590452354
Mtodos
Descripcin
System.out.println("exp(1.0) es " +
Math.exp(1.0));
System.out.println("exp(10.0) es " +
Math.exp(10.0));
System.out.println("exp(0.0) es " +
Math.exp(0.0));
System.out.println("log(1.0) es " +
Math.log(1.0));
System.out.println("log(10.0) es " +
Math.log(10.0));
System.out.println("log(Math.E) es " +
Math.log(Math.E));
Mtodos
Descripcin
Funcin
matemtica
abs
atan
sin
cos
tan
exp
log
pow
round
random
max
min
Significado
Valor absoluto
Arcotangente
Seno
Coseno
Tangente
Exponenciacin
neperiana
Logaritmo neperiano
Potencia
Redondeo
Nmero aleatorio
Nmero mximo
Nmero mnimo
Ejemplo de uso
Resultado
double x = Math.abs(-2.3);
double x = Math.atan(1);
double x = Math.sin(0.5);
double x = Math.cos(0.5);
double x = Math.tan(0.5);
double x = Math.exp(1);
x = 2.3;
x = 0.78539816339744;
x = 0.4794255386042;
x = 0.87758256189037;
x = 0.54630248984379;
x = 2.71828182845904;
double x = Math.log(2.7172);
double x = Math.pow(2,3);
double x = Math.round(2.5);
double x = Math.ramdom();
double x = max(12.5, 3.3);
double x = min(12.5, 3.3);
x = 0.99960193833500;
x = 8.0;
x = 3;
x = 0.20614522323378;
x = 12.5;
x = 3.3
Ejercicio 2.4: El siguiente programa genera 10 nmeros aleatorios, adems cada valor
generado lo transforma en un nmero entre 15 y 35 por medio de clculos; y
posteriormente los imprime.
Clase String
Descripcin
String()
String(char ch[])
String(String s)
Mtodos
Descripcin
int length()
Mtodos
Descripcin
String toLowerCase()
String toString()
String toUpperCase()
String trim()
Ejercicio 2.5:
Ejemplo:
Dame tu nombre: Jos Prez
Jos Prez-zerP seJ
Ejercicio 2.6:
Ejercicio 2.7:
Clase contenedora
boolean
char
byte
short
int
long
float
double
Boolean
Character
Byte
Short
Integer
Long
Float
Double
package Escritorio;
package Escritorio;
Ahora para utilizar estas clases debemos tener un programa que las utilice por ejemplo:
package Escritorio;
public class Ejemplo_Escritorio {
public static void main(String[] args) {
Lapiz l = new Lapiz();
Boligrafo b = new Boligrafo();
Goma g = new Goma();
}
}
Eclipse:
NetBeans
BlueJ
Para crear los paquetes seleccionamos el men Edit -> New package, y escribimos el
nombre del package. Nos aparece un icono y haciendo doble click sobre l se nos abre la
ventana del package creado:
Donde el icono tipo carpeta go up nos sirve para subir de nivel en la jerarqua de
packages. Situados en la ventana del package repetiremos la operacin creando el
package usuarios. Ahora desde el package entradas podemos hacer dos cosas: subir de
nivel hacia la raz, o profundizar nivel hacia usuarios.
}
catch (TipoDeExcepcion excepcion) {
// Cdigo que maneja el error
Ejercicio 2.8: El siguiente programa captura dos valores tipo entero mediante la clase
JOptionPane, posteriormente se cual calcula la divisin del numerador entre el
denominador y finalmente se despliega en pantalla los valores del numerador,
denominador y el resultado.
Tambin puede ocurrir un error al convertir el dato a entero por medio del mtodo parseInt
de la clase envoltorio Integer.
}
catch (NumberFormatException errorDeFormatoNumerico) {
JOptionPane.showMessageDialog(null, "Teclee un dato tipo entero.\nIntente
nuevo");
}
catch (ArithmeticException errorAritmetico) {
JOptionPane.showMessageDialog(null, "Divisin por cero.\nIntente de nuevo");
}
} while (Continua);
}
}
de
Adems utiliza un ciclo en caso de que ocurra una excepcin regrese a solicitar los datos
hasta que la variable Continuar = false.
Clases de excepciones, excepciones predefinidas por el lenguaje.
En la siguiente figura se muestra una extraccin de la jerarqua de herencia de la clase
Throwable:
Throwable
Exception
RuntimeException
Error
IOException
AWTError
ArithmeticException
EOFException
ThreadDeath
ArrayStoreException
FileNotFoundException
OutOfMemoryError
ClassCastException
MalformedURLException
La clase Error est relacionada con errores de la mquina virtual de Java y no el cdigo,
generalmente estos errores no dependen del programador por lo que no debe
preocuparse por tratarlos.
2.
3.
ArrayStoreException:
NullPointerException:
SecurityException:
NumberFormatException:
Clausula finally
try{
// Cdigo protegido que puede provocar excepciones
}
catch (TipoDeExcepcion excepcion) {
// Cdigo que maneja el error
}
finally{
// Cdigo que se ejecuta siempre al final
Si dentro de try hay alguna sentencia return, se ejecuta final y antes de devolver
el valor
Todas las excepciones tienen como clase base la clase Throwable, que est incluida en el
paquete java.lang, y sus mtodos son:
}
Todos los mtodos Java utilizan la sentencia throw para lanzar una excepcin. Esta
sentencia requiere un slo argumento, un objeto Throwable. En el sistema Java, los
objetos lanzables son ejemplares de la clase Throwable definida en el paquete java.lang,
como por ejemplo:
throw new EmptyStackException();
Cuando se crea una nueva excepcin, derivando de una clase Exception ya existente, se
puede cambiar el mensaje que lleva asociado. La cadena de texto puede ser recuperada
a travs de un mtodo.
Normalmente, el texto del mensaje proporcionar informacin para resolver el problema o
sugerir una accin alternativa.
En el siguiente ejemplo se declara una clase llamada EdadFueradeRango que se
extiende de la clase Exception. Contiene dos constructores, el primero es el de por
defecto el cual invoca al sper constructor sin argumentos, el segundo (constructor
alternativo) recibe como parmetro un String el cual es invocado al sper constructor.
class EdadFueradeRango extends Exception {
public EdadFueradeRango() {
super();
}
public EdadFueradeRango( String s ) {
super( s );
}
}
Elabore una clase llamada Persona, con los siguientes variables miembro:
Nombre (String)
Edad (int)
Altura (double)
Peso (double)
Sexo (String)
EstadoCivil (String)
No de Control
Nombre
Carrera
Semestre
Promedio
Metodos:
3.
Placas
Marca
Modelo
Nombre del dueo
Tipo de falla:
1.
2.
3.
4.
5.
6.
7.
8.
Sistema elctrico
Motor
Ruedas, direccin, suspensin y frenos
Transmisin
Sistema de inyeccin y carburacin
Sistema de escape
Encendido
Sevicio de mantenimiento
Implemente este programa mediante clases, intancia cinco objetos tipo vehculo con
diferentes datos, al final imprima la siguiente informacin:
4.
Modifique el ejercicio 1, para que valide el estado civil por medio de excepciones,
el cual solo puede ser Soltero, Casado, Viudo o Unin Libre.
5.
3. Mtodos
3.1. Definicin de un mtodo.
Un mtodo es un conjunto de instrucciones a las que se les da un determinado nombre de
tal manera que sea posible ejecutarlas en cualquier momento sin tenerlas que reescribir
sino usando slo su nombre. A estas instrucciones se les denomina cuerpo del mtodo, y
a su ejecucin a travs de su nombre se le denomina llamada al mtodo.
La ejecucin de las instrucciones de un mtodo puede producir como resultado un objeto
de cualquier tipo. A este objeto se le llama valor de retorno del mtodo y es
completamente opcional, pudindose escribir mtodos que no devuelvan ninguno.
La ejecucin de las instrucciones de un mtodo puede depender del valor de unas
variables especiales denominadas parmetros del mtodo, de manera que en funcin del
valor que se d a estas variables en cada llamada la ejecucin del mtodo se pueda
realizar de una u otra forma y podr producir uno u otro valor de retorno.
Al conjunto formado por el nombre de un mtodo y el nmero y tipo de sus parmetros se
le conoce como firma del mtodo. La firma de un mtodo es lo que verdaderamente lo
identifica, de modo que es posible definir en un mismo tipo varios mtodos con idntico
nombre siempre y cuando tengan distintos parmetros. Cuando esto ocurre se dice que el
mtodo est sobrecargado.
3.2. Estructura de un mtodo.
La sintaxis es:
Dnde:
acceso
Cada mtodo tiene asociado un tipo que se utiliza para controlar el acceso al
mtodo. Entre estos se encuentran:
public
private
Este mtodo privado solo puede ser llamado desde otros mtodos
dentro de la clase en que se defini el mtodo privado.
defecto
static
Declara el mtodo como mtodo de la clase y no como mtodo del objeto (no
hereda el mtodo).
Nota:
Un mtodo declarado como static solo puede ser llamado por otro mtodo
static y hacer referencia a variables static.
tipo
NombreDelMtodo
Lista de Argumentos
Para acceder a las variables o mtodos de clase se utiliza el operador punto (.). Primero
se pone el nombre de la clase, un punto (.) y posteriormente el nombre de la variable de
clase o nombre del mtodo de clase.
nombreClase.nombreVarClase;
nombreClase.nombreMetodoClase();
3.4.2. De Instancia
Mtodos de instancia
Un mtodo de instancia es el que se invoca siempre sobre una instancia (objeto) de una
clase. Para declarar un mtodo de instancia se declara sin la palabra reservada static:
acceso tipo nombreMetodoInstancia (Lista de Argumentos) {
Declaracin de variables del mtodo
Sentencias del mtodo
[return tipo;]
Para acceder a las variables o mtodos de instancia se utiliza el operador punto (.).
Primero se pone el nombre del objeto, un punto (.) y posteriormente el nombre de la
variable de instancia (solo para cuando se declara como public o tipo de acceso amigable)
o nombre del mtodo de instancia.
Objeto.nombreVarInstancia;
Objeto.nombreMetodoInstancia();
Ejercicio 3.1: Implemente la clase Punto; posteriormente instancie dos objetos tipo Punto,
el primero con los valores del constructor por defecto y el segundo con los valores de 5
para x y 10 para y, finalmente despliegue los valores de x y y por medio del mtodo
regresaXY().
Punto
- int x;
- int y;
+ Punto()
+ Punto(int valorX, int Valory)
+ int regresaX()
+ int regresaY()
+ void asignaX(int valorX)
+ void asignaY(int valorY)
+ String regresaXY()
Que pasara se deseamos saber cuntos objetos tipo Punto se han creado, para ello se
debe de implementar una variable de clase e incrementarla cada vez que se instancia un
objeto tipo Punto.
Ejercicio 3.2: Se modificar el Ejercicio 3.1, al cual se agregarn una variable de clase
llamada NoObjetosPunto, en cuanto a la clase principal se instanciaran dos objetos tipo
Punto, el primero con los valores del constructor por defecto y el segundo con valores
capturados desde teclado, finalmente despliegue los valores de x y y por medio del
mtodo toString() y se indicarn cuantos objetos tipo Punto se han creado.
Punto
- int x;
- int y;
- static int NoObjetosPunto;
+ Punto()
+ Punto(int valorX, int Valory)
+ int regresaX()
+ int regresaY()
+ void asignaX(int valorX)
+ void asignaY(int valorY)
+ String toString()
+ int regresaNoObjetosPunto()
Ejercicio 3.3: El siguiente programa lee un valor en grados Celsius y por medio de un
mtodo llamado (esttico) convierteAFahrenheit convierte los grados Celsius a grados
Fahrenheit.
9
Fahrenheit = C + 32
5
Ejercicio 3.2: Elabore un programa que leean del teclado un dato numrico que
representan los mentros y por medio de los mtodos conversionAPies y
converionApulgadas cambia el valor en metros a pies y a pulgadas (donde 1 metro =
39.37 pulgadas y 1 pie = 12 pulgadas)
Ejercicio 3.3: Una tonelada mtrica equivale a 35,273.92 onzas. Elabore un programa
que lea desde teclado, el peso que le cabe a una caja en onzas y mediante el mtodo
calculaCajas determine cuantas cajas se pueden llenar con una tonelada mtrica de
cereal.
3.5. mbito y tiempo de vida de variables.
El mbito de una variable define su alcance de uso, o lo que es lo mismo, en que
secciones de cdigo una variable estar disponible. Fuera de este mbito, una variable no
podr ser accedida (no existe).
Tipos de mbito
En Java tenemos tres tipos de mbito que pueden aplicar a una variable:
Local
Global
Esttico
Veamos un fragmento de cdigo donde aparecen los tres tipos, antes de pasar a explicar
con un mnimo de detalle cada uno de ellos:
public class Punto {
private int x;
private int y;
private static int NoObjetosPunto;
public Punto() {
x=0;
y=0;
}
Por valor:
En el paso por valor se realiza una copia de los valores que se
pasan, trabajando dentro del mtodo con la copia. Es por ello que cualquier
cambio que sufran dentro, no repercute fuera del mtodo.
Por referencia:
En el paso por referencia no se realiza dicha copia, por lo que
las modificaciones de dentro de los mtodos afectan a los parmetros y esos
cambios permanecen al final del mtodo.
En Java el paso por parmetro es por valor, aunque los efectos son de paso por
referencia cuando los argumentos son objetos. Cmo sucede eso? Pues es muy fcil, si
un mtodo tiene como argumento un tipo primitivo (int, float, etc...), en Java se realiza una
copia para la funcin y cualquier cambio a dicho argumento no afecta a la variable
original. Este paso de parmetros en Java est orientado a utilizar el valor de la variable
para otros clculos.
En el caso de los objetos es distinto. En realidad lo que sucede es que en Java siempre
tenemos referencias a los objetos. Por eso al pasar a un mtodo como argumento un
objeto, pasamos la referencia al mismo, es decir, aunque se hace una copia para el paso
por valor, como lo que se copia es una referencia, los cambios al objeto referenciado s
son visibles y afectan fuera de mtodo.
La nica excepcin es la clase String, cuyos objetos no son mutables. Cualquier
modificacin de un objeto String lleva aparejada la creacin de una nueva instancia del
objeto. Si deseamos el mismo comportamiento para el paso de parmetros del resto de
objetos, tenemos que recurrir al objeto StringBuffer.
Ejercicio 3.4: En el siguiente programa se declaran 2 variables, la primera es un arreglo
de caracteres (char) y el segundo es un dato tipo int, dentro del mtodo main se
despliegan los datos antes de enviar las variables como parmetros al mtodo Cambia.
En el mtodo Cambia, se modifica el arreglo en el subndice 2 por el carcter @ y se
multiplica el valor de la variable int por 4. Cuando termina de ejecutar el mtodo Cambia
se vuelven a desplegar las variables y se puede observar que el arreglo cambi en el
subndice 2 debido a que fue enviado como por referencia, sin embargo la variable tipo int
no sufri cambios, debido a que se mando por valor.
class Punto {
private int x;
private int y;
...
Punto (int x, int y) {
this.x = x;
this.y = y;
}
class Triangulo {
private double base;
private doble altura;
public void datosTriangulo (double base, double altura) {
this.base = base;
this.altura = altura;
}
class Circulo {
Punto centro;
int radio;
. . .
public Circulo elMayor(Circulo c) {
if (radio > c.radio)
return this;
else
return c;
}
}
3.8. Sobrecarga de mtodos.
En programacin orientada a objetos la sobrecarga se refiere a la posibilidad de tener dos
o ms mtodos con el mismo nombre pero funcionalidad diferente. Es decir, dos o ms
mtodos con el mismo nombre realizan acciones diferentes. El compilador usar una u
otra dependiendo de los parmetros usados. A esto se llama tambin sobrecarga de
mtodos.
La firma de un mtodo es la combinacin del tipo de dato que regresa, su nombre y su
lista de argumentos.
La sobrecarga de mtodos es la creacin de varios mtodos con el mismo nombre pero
con diferentes firmas y definiciones. Java utiliza el nmero y tipo de argumentos para
seleccionar cul definicin de mtodo ejecutar.
Java diferencia los mtodos sobrecargados con base en el nmero y tipo de argumentos
que tiene el mtodo y no por el tipo que devuelve.
En Java es posible definir dos o ms mtodos dentro de una misma clase que compartan
el mismo nombre y que las declaraciones de sus argumentos sean diferentes. En este
caso se dice que los mtodos estn sobrecargados y el fenmeno se conoce como
sobrecarga de mtodos. La sobrecarga es uno de los procedimientos mediante el cual se
implementa el polimorfismo.
En la llamada a los mtodos sobrecargados, el compilador determina cual es el mtodo
involucrado basndose en el nmero o tipo de argumentos. Por consiguiente los mtodos
sobrecargados deben diferenciarse en el nmero o tipos de argumentos. Cuando Java
encuentra una llamada a un mtodo sobrecargado, ejecuta la versin del mtodo cuyos
argumentos (nmero y tipo) coincidan con los argumentos utilizados en la llamada.
Nota:
Ejercicio 3.5: El siguiente programa declara una clase llamada Sobrecarga con cuatro
mtodos llamados despliega que se encuentran sobrecargados. El primer mtodo no
recibe parmetros, el segundo recibo solo un parmetro tipo int, el tercero recibo dos
parmetros tipo int y por ltimo el cuarto mtodo recibe dos parmetros tipo float. El
funcionamiento de cada mtodo depende de los parmetros que reciba, desplegando en
pantalla el nmero de argumentos recibidos, los tipos y valores (con excepcin del
mtodo sin parmetros, el cual solo despliega en pantalla un mensaje).
Ejercicio 3.6: El siguiente programa declara una clase principal llamada Ejercicio_3_6,
con cuatro mtodos llamados Area que se encuentran sobrecargados. El primer y
segundo mtodo calcula el rea de un cuadrado y reciben un argumento cada uno, el
primer de ellos recibe un tipo int y el segundo lo recibe tipo float. El tercer y cuarto mtodo
calcula en rea de un rectngulo, reciben dos argumentos, los parmetros del tercer
mtodo son de tipo int y el cuarto mtodo sus parmetros son de tipo float. Regresan un
valor tipo long (primer y tercer mtodo) y un valor tipo double (el segundo y cuarto
mtodo). Adems se utiliza la clase DecimalFormat para formatear los datos de salida.
Ejercicio_3_6
+ Area (int L): long
+ Area (float l): double
+ Area (int b, int a): long
+ Area (float b, float a): double
Ejercicio 3.7: Elabore una clase principal que tenga 6 mtodos sobrecargados llamado
areaTriangulo, que realizaran el clculo del rea de un triangulo en base a lo siguiente:
3 2
4
Donde a, b y c son los valores de las longitudes de los lados del triangulo y
p se calcula as:
=
( + + )
2
Los primeros 3 mtodos sobrecargados recibirn datos tipo int y los restantes 3,
datos tipo double. El valor de retorno de todos los mtodos ser double.
Mande a imprimir a pantalla los resultados de todos los mtodos.
3.9. Constructores y destructores
Un constructor es un mtodo miembro de propsito especfico que se ejecuta
automticamente cuando se crea un objeto de una clase. Un constructor sirve para
inicializar los miembros de datos o variables de clase.
Los constructores tienen el mismo nombre que la clase, adems no tienen valor de
retorno (ni void) y estn clasificados en constructores por defecto y
alternativos/sobrecargados.
Constructores
Los constructores tienen el mismo nombre que la clase, adems no tienen valor de
retorno (ni incluso void) y estn clasificados en constructores por defecto y
alternativos/sobrecargados.
Constructor por defecto
Un constructor que no tiene parmetros se le llama constructor por defecto. Un
constructor por defecto normalmente inicializa las variables con un valor por defecto, por
ejemplo: En el siguiente cdigo se declara la clase Punto, con dos variables miembro tipo
int, el constructor por defecto inicializa las variable x y y con cero, esto ocurrir cuando se
instancie un objeto tipo Punto.
public class Punto {
private int x;
private int y;
// Coordenada x
// Coordenada y
public Punto() {
x=0;
y=0;
}
// Coordinador alternativo
// Get de x
// Get de Y
// Set de x
// Set de y
Regla:
Constructor alternativo/sobrecargado
A un constructor con parmetros se le denomina constructor alternativo y su funcin es
modificar las variables de la clase, con los valores que recibe como parmetros:
// Coordenada x
// Coordenada y
public Punto() {
x=0;
y=0;
}
// Coordinador alternativo
Precaucin:
Ejemplo:
// Coordenada x
// Coordenada y
// Coordinador alternativo
Al instanciar un objeto tipo Punto, marcara un error debido a que se est invocando al
constructor por defecto, sin embargo esta clase no lo tiene.
Punto primerPunto = new Punto();
//
Area
p( p a)( p b)( p c)
donde
abc
2
Donde
y
son las diagonales y es el ngulo que lo conforma (Ver
figura).
+
2
Siendo:
ngulo comprendido entre los lados .
ngulo comprendido entre los lados
Los primeros 3 mtodos sobrecargados recibirn datos tipo long y los restantes 3,
datos tipo double. El valor de retorno de todos los mtodos ser double.
Mande a imprimir a pantalla los resultados de todos los mtodos.
4. Herencia y polimorfismo
4.1. Concepto de herencia y polimorfismo.
La idea de la herencia es permitir la creacin de nuevas clases basadas en clases
existentes. Cuando heredamos de una clase existente, reusamos (o heredamos) mtodos
y campos, y agregamos nuevos campos y mtodos para cumplir con la situacin nueva.
4.2. Definicin de una clase base.
Al crear una clase, en vez de declarar miembros (variables y mtodos) completamente
nuevos, el programador puede designar que la nueva clase herede los miembros de una
clase existente. Esta clase existente se conoce como superclase, y la nueva clase se
conoce como subclase.
4.3. Definicin de una clase derivada.
En otros lenguajes de programacin, como C++ se refieren a la superclase como clase
base y a la subclase como clase derivada. Una vez creada, cada subclase se puede
convertir en superclase de futuras subclases. Una subclase generalmente agrega sus
propias variables y mtodos, por lo tanto, una subclase es ms especfica que una
superclase y representa un grupo ms concreto de objetos.
Superclase
Prstamo
Hipotecario
Personal
Prendario
Subclases
A veces es difcil decidir cul es la relacin de herencia ms ptima entre el diseo de
clases. Consideremos por ejemplo el caso de empleados de una empresa, existen
diferentes tipos de clasificacin segn sea el criterio de discriminacin, por ejemplo por
tipo de empleado:
Empleado
Directivo
Administrativo
Obrero
Empleado
Confianza
Comisin
Asalariado
Empleado
Discontinuo
TiempoFijo
Horas
Empleado
Base
Anual
Mensual
}
Herencia-Redefinicin.- Es cuando un mtodo de una sper clase se redefine en las
subclases. En el siguiente ejemplo se asume que todos los animales duermen (sper
clase Animal), pero al heredar a una clase Len el mtodo (dormir) se redefine indicando
que el Len duerme sombre el vientre, mientras que en el Oso duerme sobre la espalda y
el tigre duerme sobre un rbol, a esto se le conoce como redefinicin de mtodos.
Animal
dormir()
dormir (){
System.out.println(Zzzzz);
}
Len
Oso
Tigre
dormir()
dormir()
dormir()
dormir (){
System.out.println(Sobre el vientre);
}
dormir (){
System.out.println(Sobre la espalda);
}
dormir (){
System.out.println(En un rbol);
}
Ejercicio 4.1: En el siguiente ejemplo tenemos la sper clase Prstamo, que contiene las
variables miembro Monto e Inters que son del tipo float con tipo de acceso privado (-),
adems cuenta con los siguientes mtodos los cuales todos son pblicos (+):
Muestra() que regresa un String con el Monto: 99999 un salto de lnea y el Interes:
99999
Prestamo
- float Monto
- float Interes
+ Presamo()
+ Prestamo (float M, float I)
+ float calculaIntereses()
+ void actualizaMonto(float M)
+ void actualizaInteres(float I)
+ String muestra()
Hipotecario
Personal
Prendario
-String Inmueble
-int AniosHipo
-String TipoDocumento
-String FechaVen
-String Prenda
- float ValorPrenda
+ Hipotecario()
+ Hipotecario(float M,
float I, String In, int A)
+ String muestra()
+ Personal()
+ Personal(float M, float I,
String D, String F)
+ String muestra()
+ Prendario()
+ Prendario(float M,
float I, String P, float V)
+ String muestra()
Figura
Bidimensional
Circulo
Cuadrado
Tridimensional
Triangulo
Esfera
Cubo
Tetraedro
}
Los mtodos abstractos no proporcionan implementaciones. Una clase que contiene
mtodos abstractos debe declararse como clase abstracta. Cada subclase concreta de
una clase abstracta debe proporcionar implementaciones concretas de los mtodos
abstractos de la superclase. Los constructores no se heredan, por los que no pueden
declararse como abstractos.
Aunque no podemos crear instancias de objetos de superclases abstractas, podemos
utilizar superclases abstractas para crear variables que puedan guardar referencias de
subclases concretas derivadas de la superclases.
Redefinicin
Considere la siguiente jerarqua de clases:
Figura
Punto
Circulo
Cilindro
Comenzaremos con la superclase abstracta Figura, la cual declara la interfaz para la
jerarquas (es decir, el conjunto de mtodos que puede invocar un programa en todos los
objetos Figura), observe tambin que en el diagrama de clases, el nombre de la clase
abstracta Figura aparece en cursivas.
Mtodos
regresaArea
regresaVolumen
regresaNombre
Figura
0.0
0.0
abstract
Punto
Circulo
0.0
r2
0.0
0.0
Punto
Circulo
Cilindro
2 r h + 2 r2
r2 h
Cilindro
toString
Predeterminado
de Object
[x,y]
[x,y]; Radio = r
[x,y]; Radio = r;
Altura = h
La clase Punto se extiende de Figura heredando todo los mtodos pblicos. Dentro de la
clase Punto se declaran dos variables miembro tipo int llamada x y y, las cuales tienen
tipo de acceso es privado, contiene dos constructores (uno por defecto y otro alternativo),
adems tiene los mtodos regresaX(), regresaY() que regresan el valor de su
correspondiente variable, cambiaX() y cambiaY() que cambian los valores de sus
correspondientes variables, tambin se redefine el mtodo abstracto regresaNombre(), el
cual regresa el nombre de la figura Punto, con esto deja de ser abstracta y se vuelve
concreta. Finalmente se redefina el mtodo toString().
La clase Crculo se extiende de Punto heredando todo los mtodos pblicos. Dentro de la
clase Crculo se declara la variable miembro radio del tipo double donde el tipo de acceso
es privado. Contiene dos constructores, uno por defecto y otro alternativo, los cuales al
utilizar el mtodo sper() el cual invocan al sper constructor de la sper clase Punto,
adems tiene los mtodos regresaRadio() y cambiaRadio() que regresan y cambian el
valor del radio, en este ltimo mtodo se utiliza la seleccin simple lineal (?), en donde si
la condicin es verdadera regresa el primer valor despus del signo de interrogacin, en
caso de ser falso regresa el valor que se encuentra despus de los dos puntos, esto se
realiza para asegurarse que no existan radios negativos. El mtodo regresaDiametro()
La clase Cilindro se extiende de Crculo heredando todo los mtodos pblicos. Dentro de
la clase Cilindro se declara la variable miembro altura del tipo doubl, donde el tipo de
acceso es privado. Contiene dos constructores, uno por defecto y otro alternativo, los
cuales tambin utilizan el mtodo sper() invocan al sper constructor de la sper clase
Crculo, adems tiene los mtodos regresaAltura() y cambiaAltura() que regresan y
cambian el valor de la altura. Y se redefine los mtodos regresaNombre(), regresaArea(),
regresaVolumen() y toString().
4.5. Interfaces.
4.5.1. Definicin
El concepto de Interface lleva un paso ms adelante la idea de las clases abstractas. En
Java una interface es una clase abstracta pura, es decir una clase donde todos los
mtodos son abstractos (no se implementa ninguno). Permite al diseador de clases
establecer la forma de una clase (nombres de mtodos, listas de argumentos y tipos de
retorno, pero no bloques de cdigo). Una interface puede tambin contener datos
miembro, pero estos son siempre static y final. Una interface sirve para establecer un
'protocolo' entre clases.
Para crear una interface, se utiliza la palabra clave interface en lugar de class. La
interface puede definirse public o sin modificador de acceso, y tiene el mismo significado
que para las clases. Todos los mtodos que declara una interface son siempre public.
Para indicar que una clase implementa los mtodos de una interface se utiliza la palabra
clave implements. El compilador se encargar de verificar que la clase efectivamente
declare e implemente todos los mtodos de la interface. Una clase puede implementar
ms de una interface.
4.5.2. Implementacin.
Una interface se declara:
interface nombre_interface {
tipo_retorno nombre_metodo ( lista_argumentos ) ;
...
}
Por ejemplo:
interface InstrumentoMusical {
void tocar();
void afinar();
String tipoInstrumento();
}
Y una clase que implementa la interface:
class InstrumentoViento extends Object implements InstrumentoMusical {
void tocar() { . . . };
void afinar() { . . .};
String tipoInstrumento() {}
}
class Guitarra extends InstrumentoViento {
String tipoInstrumento() {
return "Guitarra";
}
}
}
Agrupaciones de constantes
Dado que, por definicin, todos los datos miembros que se definen en una interface son
static y final, y dado que las interfaces no pueden instanciarse resulta una buena
herramienta para implantar grupos de constantes. Por ejemplo:
public interface Meses {
int ENERO = 1 , FEBRERO = 2 . . . ;
String [ ] NOMBRES_MESES = { " " , "Enero" , "Febrero" , . . . };
}
Esto puede usarse simplemente:
System.out.println(Meses.NOMBRES_MESES[ENERO]);
Ejercicio 4.3: Implemente la interfaz de Meses e imprime el mes de Enero como lo indica
la instruccin.
El ejemplo que se muestra a continuacin es una simplificacin de cmo funciona
realmente la gestin de eventos en el sistema grfico de usuario soportado por el API de
Java (AWT o swing). Se han cambiado los nombres y se ha simplificado para mostrar un
caso real en que el uso de interfaces resuelve un problema concreto.
Supongamos que tenemos una clase que representa un botn de accin en un entorno
grfico de usuario (el tpico botn de confirmacin de una accin o de cancelacin). Esta
clase pertenecer a una amplia jerarqua de clases y tendr mecanismos complejos de
definicin y uso que no son objeto del ejemplo. Sin embargo podramos pensar que la
clase Boton tiene miembros como los siguientes.
class Boton extends . . . {
protected int x , y, ancho, alto; // posicion del boton
protected String texto; // texto del boton
Boton(. . .) {
...
}
void dibujar() { . . .}
public void asignarTexto(String t) { . . .}
public String obtenerTexto() { . . .)
...
}
Lo que aqu nos interesa es ver lo que sucede cuando el usuario, utilizando el ratn pulsa
sobre el botn. Supongamos que la clase Boton tiene un mtodo, de nombre por ejemplo
click(), que es invocado por el gestor de ventanas cuando ha detectado que el usuario ha
pulsado el botn del ratn sobre l. El botn deber realizar alguna accin como dibujarse
en posicin 'pulsado' (si tiene efectos de tres dimensiones) y adems, probablemente,
querr informar a alguien de que se ha producido la accin del usuario. Es en este
mecanismo de 'notificacin' donde entra el concepto de interface. Para ello definimos una
interface Oyente de la siguiente forma:
interface Oyente {
void botonPulsado(Boton b);
}
La interface define un nico mtodo botonPulsado. La idea es que este mtodo sea
invocado por la clase Boton cuando el usuario pulse el botn. Para que esto sea posible
en algn momento hay que notificar al Boton quien es el Oyente que debe ser notificado.
La clase Boton quedara:
class Boton extends . . . {
...
private Oyente oyente;
void registrarOyente(Oyente o) {
oyente = o;
}
void click() {
...
oyente.botonPulsado(this);
}
}
El mtodo registrarOyente sirve para que alguien pueda 'apuntarse' como receptor de las
acciones del usuario. Obsrvese que existe una referencia de tipo Oyente. A Boton no le
importa que clase va a recibir su notificacin. Simplemente le importa que implante la
interface Oyente para poder invocar el mtodo botonPulsado. En el mtodo click se
invoca este mtodo. En el ejemplo se le pasa como parmetro una referencia al propio
Analizando el diseo, tendremos que, por cada elemento se emplearn los siguientes
componentes de Java:
Titulo de la ventana
JTextField
JLabel
JButton
4.5.3. Variable polimrficas
En Java, las variables que contienen objetos son variables polimrficas. El trmino
polimrfico (literalmente: muchas formas) se refiere al hecho de que una misma variable
puede contener objetos de diferentes tipos (del tipo declarado o de cualquier subtipo del
tipo declarado). El polimorfismo aparece en los lenguajes orientados a objetos en
numerosos contextos, las variables polimrficas constituyen justamente un primer
ejemplo.
public class CD {
private String titulo;
private String artista;
private String comentario;
public CD() {
titulo = "Sin Titulo";
artista = "Sin Artista";
comentario = "";
}
public CD(String titulo, String artista, String comentario) {
this.titulo = titulo;
this.artista = artista;
this.comentario = comentario;
}
public String regresaTitulo() {
return titulo;
}
public void asignaTitulo(String titulo) {
this.titulo = titulo;
}
DVD ObjetoDVD =
new DVD("The Revenant", "Alejandro Gonzlez Irritu", "Excelente");
Object ObjetoX;
ObjetoX = ObjetoCD;
System.out.println(ObjetoX);
ObjetoX = ObjetoDVD;
System.out.println(ObjetoX);
}
}
package org.ruta.del.paquete;
Producto de Aprendizaje 4:
5. Arreglos
Los arreglos se pueden definir como objetos en los que podemos guardar ms de un
valor, es decir, al tener una estructura organizada en un arreglo se puede guardar
mltiples valores de acuerdo a su tamao o capacidad, es importante recordar que los
valores a guardar deben ser del mismo tipo, por ejemplo: Si tenemos un arreglo de tipo
Numrico que puede almacenar 10 valores, solo podr almacenar 10 nmeros diferentes,
no otros tipos de valores como podran ser datos tipo String, char, boolean, etc.
5.1. Unidimensional
Los arreglos de una unidimensionales (tambin llamados vector o tablas), son estructuras
de datos de una sola dimensin (de ah viene su nombre). Un arreglo unidimensional est
constituido por una secuencia de objetos del mismo tipo. A los objetos se les llama
elementos del arreglo y se enumeran del 0 al n-1.
En la siguiente figura se muestra un arreglo llamado Numero, que contiene 5 elementos
(longitud igual a 5), enumerados del 0 a 4.
Numero
0
1
2
3
4
10
15
25
50
21
Operaciones.
Las operaciones bsicas sobre un arreglo unidimensional son:
Tipo [ ]
identificador
identificador [ ]
Tipo
,
Donde el Tipo, corresponde al tipo de dato del arreglo, el cual pude ser cualquiera de los
8 bsicos de Java o de alguna clase.
Los corchetes pueden colocarse de dos formas:
o
o
Los corchetes colocados despus del tipo de dato, esto indica que todos los
identificadores son arreglos.
Los corchetes colocados despus del identificador, indica que solo el
identificador que tenga los corchetes es un arreglo.
Ejercicio 5.3: Elabore un programa que lea de teclado 10 calificaciones numricas entre
0 a 100, posteriormente imprima cada calificacin con su correspondiente Nota en base a
la siguiente tabla:
Lmite
Inferior Superior
93
100
90
92
87
89
83
86
80
82
77
79
73
76
70
72
0
69
Nota
A+
AB+
BC+
CD+
DF
Ejercicio 5.4: Elabore un programa que genere declare y cargue de forma aleatoria un
arreglos de 100 elementos y posteriormente calcule e imprima el rango (valor mayor
menos valor menor).
Inicializacin de de los elementos del arreglo
Otra forma de introducir datos en un arreglos es inicializndolo desde la declaracin.
Numero
0
1
2
3
4
10
15
25
50
21
Ejercicio 5.6: Como se ha venido diciendo los arreglos son referencias, y podemos tener
dos variables apuntando a un mismo arreglo.
Dnde:
El smbolo <-> Significa intercambio, es decir el valor que se encuentra en Arreglo[I] se
intercambia a Arreglo[I+1] y el valor que est en Arreglo[I+1] se intercambia e la posicin
Arreglo[I].
Ejemplo: Se tiene el siguiente arreglo cargado con los datos:
Ejercicio 5.8: Elabore un programa en Java que genere 10 nmeros aleatorios (entre 100
y 999), ordnelos en forma ascendente mediante el mtodo de la burbuja y presente los
datos como se muestra en la siguiente figura.
Ejercicio 5.9: Elabore un programa en Java que genere 10 nmeros aleatorios (entre 100
y 999), ordnelos en forma ascendente mediante el mtodo seleccin y presente los datos
como se muestra en la siguiente figura.
5.2. Multidimensionales
Los arreglos vistos anteriormente se conocen como arreglos unidimensionales y se
caracterizan por tener un solo subndice. Los arreglos multidimensionales son aquellos
que tienen ms de una dimensin y, en consecuencia, ms de un ndice (o subndice).
Los arreglos ms usuales son los de dos dimensiones, conocidos como matrices.
Un arreglo de dos dimensiones equivale a una tabla con filas y columnas:
n
0
1
2
3
4
m
Operaciones.
Las operaciones bsicas sobre un arreglo bidimensional son:
identificador
Tipo [ ] [ ]
,
Tipo
identificador [ ] [ ]
,
Ejemplo:
int puestos[ ][ ], x, y;
cal1,
cal2,
cal3
bidimensionales.
prom
son
arreglos
int tabla2[ ][ ] = {
{ 1, 2, 3, 4},
{ 5, 6, 7, 8},
{ 9, 10, 11, 12}
};
51
24
33
32
23
45
10
11
12
tabla2[ ][ ]
Java trata los arreglos de dos o ms dimensiones como un arreglo de arreglos, por tanto
puede crear arreglos no proporcionales.
Por ejemplo:
a)
b)
int [ ] a = { 1, 3, 5 }, b = { 2, 4, 6, 8, 10 };
int z[ ][ ] = { a, b };
Columna 1
a[0][1]
a[1][1]
a[2][1]
Columna 2
a[0][2]
a[1][2]
a[2][2]
Columna 3
a[0][3]
a[1][3]
a[2][3]
ndice de la columna
ndice de la fila
Nombre del arreglo
Para almacenar datos en una matriz basta con poner el nombre del arreglo, el subndice
de las filas y el subndice de las columnas, el smbolo igual y la expresin que se quiere
almacenar y finalmente despus punto y coma. Por ejemplo:
a[1][3] = Expresin;
Ejercicio 5.11: El siguiente programa lee una matriz de enteros de n renglones y m
columnas y calcule la suma de los elementos de cada rengln.
Ejercicio 5.12: Elabore un programa que declare y cargue en forma aleatoria una matriz
de 5 por 5 y obetenga la suma los elementos de la diagonal principal e imprime el
resultado.
x
x
x
x
x
Ejercicio 5.13: Elabore un programa que declare y carga en forma aleatoria una matriz de
6 por 6 y obtienga el producto de la diagonal invertida e imprime el resultado
O
O
O
O
O
O
Ejercicio 5.14: Elabore un programa que lea una matriz de n X m y la escriba poniendo
las columnas como renglones y los renglones como columnas.
Por ejemplo, si la matriz que da el usuario es:
4
2
3
7
0
1
1
6
2
3
9
6
5
7
4
2
0
6
9
7
3
1
2
6
4
Multidimensionales.
Java proporciona la probabilidad de almacenar varias dimensiones, aunque raramente los
problemas del mundo real se manejan ms tres dimensiones, esto porque para los seres
humanos es difcil representar grficamente arreglos con ms de tres dimensiones. Para
representar un arreglo de tres dimensiones lo haremos por medio de un cubo.
int cubo [ ][ ][ ] = new int [4][5][3];
z
x
5
Operaciones.
Las operaciones bsicas sobre un arreglo bidimensional son:
Tipo [ ] [ ] [ ]
identificador
Tipo
identificador [ ] [ ] [ ]
,
Ejemplo:
int cubo[ ][ ];
Edificio1
y
Edificio2
son
multidimensionales de 3 dimensiones.
arreglos
Descripcin
Mtodos
Descripcin
Producto de Aprendizaje 5:
1.
Elabore un programa en Java que declare y cargue una arreglos con 1000
elementos enteros de forma aleatoria (los valores deben de estar entre 100 y 999),
ordnelo ascendentemente mediante el mtodo de la burbuja y seleccin,
contabilizando el nmero de movimientos por cada mtodo y presente los resultados
y determine que mtodo es mejor en base al menor nmero de movimientos.
Mtodo de la Burbuja: 99999 movimientos
Mtodo Seleccin: 99999 movimientos
El mejor mtodo de ordenacin fue XXXXXX debido a que tuvo menor nmero de
movimientos.
2.
Elabore un programa que lea los nombres y tres calificaciones de los alumnos de la
materia Programacin Orientada a Objetos (20 Alumnos). Para cada alumno calcule
el promedio, el promedio general de la materia e imprima en pantalla el nombre,
calificaciones, promedio de todos los alumnos y al final despliegue cuantos
aprobaron, reprobaron y el promedio general.
Nombre
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
Aprobados: 99
Reprobados: 99
Promedio general: 99
Cal 1
99
99
99
99
99
Cal 2
99
99
99
99
99
Cal 3
99
99
99
99
99
Promedio
99
66
77
88
55
3.
El cuadro mgico.
Un cuadrado mgico es una matriz cuadrada con un nmero impar de renglones y
columnas. En dicha matriz, los nmeros de cada rengln, de cada columna y de
cada una de las diagonales, suman el mismo valor. Por ejemplo:
6
7
2
1
5
9
8
3
4
Note que los nmeros de todos los renglones, columnas y diagonales suman 15.
Una tcnica a travs de la cual se puede generar un cuadrado mgico es la
siguiente:
a) Se comienza asignando un valor de 1 al elemento central de la primera fila.
b) A continuacin se escriben los valores sucesivos (2,3, etc.) desplazndose
desde la posicin actual una fila hacia arriba y una columna hacia la
izquierda. Estos cambios se realizan tratando a la matriz como si fuera
circular, de forma que moverse una posicin hacia arriba desde la fila
superior lleva a la inferior, y moverse una posicin hacia la izquierda desde
la primera columna conduce a la ltima.
c) Si la nueva posicin ya est ocupada, en lugar de desplazarse hacia arriba
y a la izquierda, se mover slo una posicin hacia abajo.
Escriba un programa que muestre un cuadro mgico de dimensin n, donde n
puede estar entre los valores 3, 5, 7 y 9.
4.
Elabore un programa para controlar los asientos de un teatro el cual consta de tres
niveles, cada nivel tiene 50 filas y cada fila tiene 35 butacas. Debe de controlar si la
butaca est ocupada o disponible.
6. Archivos
El almacenar datos en variables o arreglos es temporal; los datos se pierden cuando una
variable local queda fuera de alance o cuando el programa termina su ejecucin. Los
archivos son utilizados para la retencin a largo plazo de grandes cantidades de datos.
Los datos almacenados en archivo existen ms all de la duracin de un programa. Los
archivos se almacenan en memoria secundaria (discos magnticos, discos pticos, USB,
etc.).
Un flujo (stream) es una abstraccin que se refiere a un flujo o corriente de datos que
fluye entre un origen o fuente hacia un destino. Entre el origen y el destino debe de existir
una conexin o canal por donde circulen los datos. Al abrir un archivo se crean
automticamente tres objetos flujo o canales. Estos objetos estn definidos en la clase
System y son:
System.in
System.out
System.err
InputStream
FileInputStream
ByteArrayInputStream
PipeInputStream
SequenceInputStream
StringBufferInputStream
FilterInputStream
OutputStream
FileOutputStream
ByteArrayOutputStream
PipeOutputStream
FilterOutputStream
bits. As como los caracteres estn formados por bits, los campos estn formados por un
conjunto de caracteres y por lo general un conjunto de campos forman un registro.
Julia
Julia
Sandra
Ruz
Roma # 100
Tomas
Prez
Sol # 120
Julia
Ramos
Nayarit # 320
Ramiro
Esparza
Pera # 240
Ramos
Archivo
Campo
1 Bit
Descripcin
FileOutputStream(FileDescriptor nombre)
throws IOException
Cierra el archivo.
import java.io.*;
import javax.swing.JOptionPane;
public class Ejercicio_6_1 {
public static void main( String args[] ) {
String nombreArchivo, linea;
nombreArchivo = JOptionPane.showInputDialog(
"Dame el nombre del archivo:" );
try {
FileOutputStream archivoLogico = archivoLogico =
new FileOutputStream(nombreArchivo);
linea = JOptionPane.showInputDialog(
"Tecleea una Linea o \"fin\" para salir" );
while (!linea.equals("fin")) {
archivoLogico.write(linea.getBytes());
archivoLogico.write( (byte) '\n');
linea = JOptionPane.showInputDialog(
"Tecleea una Linea o \"fin\" para salir"
);
}
archivoLogico.close();
}
catch (IOException e) {
JOptionPane.showMessageDialog( null,"Error en el flujo" +
e );
}
System.exit( 0 );
}
}
Abrir.
La clase FileInputStream se utiliza para leer bytes desde un archivo. Proporciona
operaciones bsicas para leer una byte o una secuencia de bytes.
Mtodos
FileInputStream(String nombre) throws
FileNotFoundException
Mtodos
Descripcin
Crea un Objeto FileInputStream que lee el
archivo con el nombre especificado.
Descripcin
FileInputStream(FileDescriptor nombre)
throws FileNotFoundException
Cierra el archivo.
import java.io.*;
import javax.swing.JOptionPane;
public class Ejercicio_6_2 {
public static void main( String args[]) {
int c;
String nombreArchivo, salida = "";
nombreArchivo = JOptionPane.showInputDialog(
"Dame el nombre del archivo:");
try {
FileInputStream archivoLogico =
new FileInputStream(nombreArchivo);
while ((c = archivoLogico.read()) != -1)
salida += (char) c;
JOptionPane.showMessageDialog( null, salida,
"Contenido del archivo:" +
nombreArchivo, JOptionPane.PLAIN_MESSAGE);
archivoLogico.close();
}
catch (IOException e) {
JOptionPane.showMessageDialog( null,"Error en el flujo"
+ e );
}
System.exit( 0 );
}
}
Cerrar.
Cada vez que habr un archivo tendr que cerrarlo por medio del mtodo close() de la
siguiente forma:
nombreDeArchivo.close();
Lectura y escritura.
Ejercicio 6.3: Ahora modificaremos el Ejercicio 8.1 para que aada texto al final del
archivo y muestre su contenido.
import java.io.*;
import javax.swing.JOptionPane;
public class Ejercicio_6_3 {
public static void main( String args[]) {
String nombreArchivo, linea, salida = "";
int c;
nombreArchivo = JOptionPane.showInputDialog(
"Dame el nombre del archivo:");
try {
FileOutputStream archivoSalida =
new FileOutputStream(nombreArchivo, true);
linea = JOptionPane.showInputDialog(
"Tecleea una Linea o \"fin\" para salir");
while (!linea.equals("fin")) {
linea += "\n";
archivoSalida.write(linea.getBytes());
linea = JOptionPane.showInputDialog(
"Tecleea una Linea o \"fin\" para salir");
}
archivoSalida.close();
FileInputStream archivoEntrada =
new FileInputStream(nombreArchivo);
while ((c = archivoEntrada.read()) != -1)
salida += (char) c;
JOptionPane.showMessageDialog( null, salida,
"Contenido del archivo:" + nombreArchivo,
JOptionPane.PLAIN_MESSAGE);
archivoEntrada.close();
}
catch (IOException e) {
JOptionPane.showMessageDialog( null,"Error en el flujo"
+ e );
}
System.exit( 0 );
}
}
JOptionPane.DEFAULT_OPTION,
JOptionPane.QUESTION_MESSAGE,
null, options, options[0]);
}
archivo.close();
}
catch (IOException e) {
JOptionPane.showMessageDialog( null,"Error en el flujo" +
e );
}
System.exit( 0 );
}
static void leerDatos(Registro r) {
r.nControl
=
JOptionPane.showInputDialog("No.
de
control:");
r.nombre = JOptionPane.showInputDialog("Nombre:");
r.cal1
=
Byte.parseByte(JOptionPane.showInputDialog("Calificacin 1:"));
r.cal2
=
Byte.parseByte(JOptionPane.showInputDialog("Calificacin 2:"));
r.cal3
=
Byte.parseByte(JOptionPane.showInputDialog("Calificacin 3:"));
r.promedio = (byte) ((r.cal1 + r.cal2 + r.cal3)/3);
}
static void escribirDatos(DataOutputStream f, Registro r) {
try {
f.writeUTF(r.nControl);
f.writeUTF(r.nombre);
f.writeByte(r.cal1);
f.writeByte(r.cal2);
f.writeByte(r.cal3);
f.writeByte(r.promedio);
}
catch (IOException io) {
JOptionPane.showMessageDialog(
null,"Error
escritura" + io );
}
}
}
de
Recorrer.
Al recorrer un archivo tipo texto, la salida se establece cuando se lee un dato -1. En el
caso de los archivos binarios se establece por medio de una excepcin, al ocurrir la
excepcin se establece un falso para dejar de realizar el recorrido, como se muestra en el
siguiente ejercicio.
Ejercicio 6.5: El siguiente programa muestra el contenido del archivo binario creado por
medio del Ejercicio 6.4. Dado que el archivo es binario, se tiene que declarar la estructura
del Registro. En la clase principal solicita el nombre del archivo, instanciando una variable
tipo FileInputStream y posteriormente instancia un objeto tipo DataInputStream para crear
un flujo de entrada de datos.
import java.io.*;
import javax.swing.JOptionPane;
class Registro {
public String
public String
public byte
public byte
public byte
public byte
}
nControl;
nombre;
cal1;
cal2;
cal3;
promedio;
catch (IOException e) {
JOptionPane.showMessageDialog(
archivo: "
null,"Error
al
abrir
el
+ nombreArchivo );
}
System.exit( 0 );
}
}
Aplicaciones
Encriptacin/Cifrado.- Una manera de codificar la informacin de un Archivo.
El cifrado es un mtodo que permite aumentar la seguridad de un mensaje o de un
archivo mediante la codificacin del contenido, de manera que slo pueda leerlo la
persona que cuente con la clave de cifrado adecuada para descodificarlo.
Mtodos y Tcnicas de Cifrado.
Cifrado de sustitucin
El cifrado de sustitucin consiste en reemplazar una o ms entidades (generalmente
letras) de un mensaje por una o ms entidades diferentes.
Por ejemplo: Existe un juego llamado encriptacin del murcilago. La palabra murcilago
es una palabra que contiene las 5 vocales y la tcnica de encriptacin consiste en
enumerar las vocales de esta palabra por lo que la vocal u le corresponde el nmero 1,
la vocal i el 2, la vocal e el 3, la letra a el 4 y la vocal o el 5. Para encriptar el texto o
archivo se sustituye cada vocal por el valor numrico que le corresponde:
Ejemplo de encriptacin del murcilago.
3j3mpl5 d3 3ncr2pt4c25n d3l m1rc23l4g5.
Otra tcnica de encriptacin se llama Sucesor, la cual consiste en cambiar cada letra del
texto o archivo por la letra que le sucede, es decir si se tiene la letra a se cambiar por la
letra b que es la que le sigue, as sucesivamente hasta que se termine el texto: