Escolar Documentos
Profissional Documentos
Cultura Documentos
Competencias previas
Esta asignatura aporta al perfil del egresado habilidades para analizar, modelar
desarrollar e implementar sistemas de información para la gestión de procesos y apoyo en
la toma de decisiones que aumenten la productividad y competitividad de las
organizaciones utilizando metodologías basadas en estándares internacionales.
Temario:
1. Entorno de desarrollo
1.1. Estructura de un proyecto
1.2. Proceso de desarrollo de aplicaciones
1.2.1. Compilación
1.2.2. Archivos que crea el entorno de desarrollo
1.2.3. Depuración
2. Clases y objetos
2.1. Definición de una clase
2.2. Declaración de clases
2.3. Miembros de una clase
2.4. Ámbito referente a una clase
2.5. Especificadores de acceso
2.6. Creación de objetos
2.7. Clases predefinidas
2.8. Definición, creación y reutilización de paquetes/librerías
2.9. Manejo de excepciones
3. Métodos
3.1. Definición de un método.
3.2. Estructura de un método.
3.3. Valor de retorno.
3.4. Declaración de un método.
3.4.1. De clase
3.4.2. De Instancia
3.5. Ámbito y tiempo de vida de variables.
3.6. Argumentos y paso de parámetros
3.7. Puntero this.
3.8. Sobrecarga de métodos.
3.9. Constructores y destructores
4. Herencia y polimorfismo
4.1. Concepto de herencia y polimorfismo.
4.2. Definición de una clase base.
4.3. Definición de una clase derivada.
4.4. Clases abstractas.
4.5. Interfaces.
4.5.1. Definición
4.5.2. Implementación.
4.5.3. Variable polimórficas
4.6. Reutilización de la definición de paquetes/librerías
5. Arreglos
5.1. Unidimensional
5.2. Multidimensionales
6. Archivos
6.1. Definición de Archivos de texto y archivos binarios.
6.2. Operaciones básicas en archivos texto y binario.
6.3. Manejo de excepciones en archivos.
Bibliografía
Ensayo/Producto de
Examen Fecha Unidades
Aprendizaje
1er 1 24 de Agosto
(Unidad 2) 28 de Septiembre
2º. 13 de Octubre 2y3 (Unidad 3) 13 de Octubre
3er 4 de Noviembre 4 4 de Noviembre
(Unidad 5) 23 de Noviembre
4º. 01 de Diciembre 5y6 (Unidad 6) 01 de Diciembre
2ª Oportunidad 07 de Diciembre de 09:00 a 13:00
Exámenes 60%
Productos de Aprendizaje 40% (Ensayos, Productos de Aprendizaje, etc.)
Portada
Índice *
Contenido
Conclusiones
Bibliografía*
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
Revisión equitativa
Solicitud de Amistad a la cuenta de Facebook Arturo López Ponce
Solicitar que los agrege al grupo AEB-1054-TC1 Ago-Dic 2016
Foto para el Face.
1. Entorno de desarrollo
a) Eclipse
b) NetBeans
c) BlueJ
d) JBuilder
e) JCreator
https://www.eclipse.org/downloads/download.php?file=/oomph/epp/neon/R/eclipse-inst-
win64.exe&mirror_id=272
https://netbeans.org/downloads/index.html
http://www.bluej.org/
Eclipse:
Run/ Run
Ctrl + F11
NetBeans
Ejecutar/ Ejecutar Project
F6
BlueJ:
Eclipse:
BlueJ:
En la carpeta del proyecto se guardan los archivos fuente (.java) y los compilados
(.class).
1.2.3. Depuración
La depuración (debug) permite examinar las aplicaciones para buscar errores, ya que
posibilita observar las líneas 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 código queremos que
la ejecución del programa se detenga. Para ello, definiremos puntos de ruptura
(breakpoints) en las líneas de código donde queramos que la ejecución se detenga o
pause.
Para definir un punto de ruptura (o para eliminar uno existente), nos situamos en la línea
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
botón con el bicho:
Lo primero que vemos es que el Eclipse cambia de la perspectiva Java, a la Perspectiva
Debug. En esta perspectiva, además de el código fuente, el esquema o la consola,
podemos ver la información de las variables y una ventana donde se muestran los hilos
de ejecución.
Además, podemos indicar que la ejecución siga o se detenga a nuestro gusto utilizando
los botones de la vista Debug (o las opciones del menú "Run"). A continuación explicamos
las básicas.
Step into. Se ejecuta la línea actual y, en caso de ser una llamada a un método, la
ejecución continúa dentro del método.
Step over. Se ejecuta la línea actual y se pasa a la línea siguiente sin entrar en los
métodos.
Continuar ejecución (F8) Ejecuta una línea de código. Si la instrucción es una llamada
a un método, ejecuta el método sin entrar dentro del código del método.
Paso a paso (F7) Ejecuta una línea de código. Si la instrucción es una llamada a un
método, salta al método y continúa la ejecución por la primera línea del método.
Entra en el siguiente método (Ctrl + F7) Ejecuta una línea de código. Si la línea de
código actual se encuentra dentro de un método, se ejecutarán todas las instrucciones
que queden del método y se vuelve a la instrucción desde la que se llamó al método.
Para poner un punto de ruptura: Pulsar en el área de puntos de ruptura que está a la
izquierda del texto en el editor.
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 línea de código 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
posición personal ante un determinado tema. Por eso, el ensayo puede incluir o no citas
bibliográficas, se pueden citar trabajos académicos, artículos periodísticos, otros ensayos,
incluir frases o refranes, ofrecer ejemplos, exponer propuestas, contar anécdotas,
experiencias o vivencias, etc.
El género de ensayo puede ser tanto de carácter académico como así también literario,
por lo cual es en esta característica donde radica de manera más notable su esencia de
“género libre”.
Antes de que un programa pueda crear objetos de cualquier clase, ésta debe ser definida.
La definición de una clase significa que se debe dar un nombre, así como también un
nombre a los elementos que almacenan sus datos, así como describir los métodos que
realizarán las acciones o tareas de la clase.
Nombre de la clase
Atributos
Comportamiento
En donde:
Objeto : Clase X
Atributo1 = Expresión
… Objeto : Clase X
Color = “Amarillo”
… Marco : Alumno
class NombreClase {
Declaración de variables miembro
Constructores
Get’s
Set’s
Otros métodos
}
El ámbito determina en qué partes del programa una entidad puede ser usada y es
aplicable principalmente a las variables declaradas en las clase.
Atributos y Métodos:
Atributos:
Los atributos o características de una Clase pueden ser de tres tipos, los que definen el
grado de comunicación y visibilidad de ellos con el entorno, estos son:
public (+, ): Indica que el atributo será visible tanto dentro como fuera de
la clase, es decir, es accesible desde todos lados.
private (-, ): Indica que el atributo sólo será accesible desde dentro de la
clase (sólo sus métodos lo pueden accesar).
Métodos:
Cada método tiene asociado un tipo que se utiliza para controlar el acceso al método.
Entre estos se encuentra:
public (+, ): Indica que el método será visible tanto dentro como fuera de
la clase, es decir, es accesible desde todos lados.
private (-, ): Indica que el método sólo será accesible desde dentro de la
clase (sólo otros métodos de la clase lo pueden accesar).
public Sí Sí Sí Sí
private Sí No No No
protected Sí Sí Sí No
por defecto Sí Sí No No
En la siguiente tabla presentamos los 8 tipos de dato primitivos de Java, el número de bits
que ocupan y el rango de valores que pueden tomar.
boolean 1 true o false Nota: El No. de bits puede variar según la plataforma
char 16 ‘\u0000’ hasta ‘\uFFFF' Conjunto Unicode de ISO
–128 a +127
byte 8
27 a 27 – 1
–32,768 a +32,767
short 16
215 a 215 – 1
–2,147,483,648 a +2,147,483,647
int 32
231 a 231 – 1
–9,223,372,036,854,775,808 a
long 64 +9,223,372,036,854,775,807
263 a 263 – 1
±3.4028234663852886E+38 hasta
float 32
±1.40129846432481707E-45
±1.797693134862157E+308 hasta
double 64
±4.94065645841246544E-324
NombreDeClase identificadorObjeto;
Ejercicio 2.1: Elabore una clase llamada Fecha, con tres variables miembro tipo int, que
representan el día, (d), el mes (m) y el año (a), el constructor por defecto inicializa la
variables con 1 para el día, 1 para el mes y 1900 para el año, el constructor alternativo
contara con tres parámetros, Set’s y Get’s, además se sobre carga el método toString el
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).
import java.text.DecimalFormat;
public Fecha() {
d = 1;
m = 1;
a = 1900;
}
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 parámetros que serán asignados a Tipo y Fruto, además
deberá tener los métodos Set’s y Get’s; 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 tendrán 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 parámetros los cuales se asignarán a las
variables hora y minutos; mientras que a segundos le podrá cero, al tercer constructor
alternativo recibirá tres parámetros los cuales se asignarán a horas, minutos y segundos,
también debe de tener los métodos Set’s y Get’s. Además debe sobrecargara el método
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.
Paquete Descripción
Clase Math
La Clase Math proporciona una gran variedad de métodos matemáticos al igual que
algunas constantes útiles.
Campos Descripción
static double max(double d1, double d2) Regresa el valor más grande. Ejemplo:
static float max(float f1, float f2)
static long max(long l1, long l2)
Math.max(2.3,12.7) 12.7
static int max(int i1, int i2) Math.max(-2.3,-12.7) -2.3
static double min(double d1, double d2) Regresa el valor más pequeño. Ejemplo:
static float min(float f1, float f2)
static long min(long l1, long l2)
Math.min(2.3,12.7) 2.3
static int min(int i1, int i2) Math.min(-2.3,-12.7) -12.7
Función
Significado Ejemplo de uso Resultado
matemática
abs Valor absoluto double x = Math.abs(-2.3); x = 2.3;
atan Arcotangente double x = Math.atan(1); x = 0.78539816339744;
sin Seno double x = Math.sin(0.5); x = 0.4794255386042;
cos Coseno double x = Math.cos(0.5); x = 0.87758256189037;
tan Tangente double x = Math.tan(0.5); x = 0.54630248984379;
exp Exponenciación double x = Math.exp(1); x = 2.71828182845904;
neperiana
log Logaritmo neperiano double x = Math.log(2.7172); x = 0.99960193833500;
pow Potencia double x = Math.pow(2,3); x = 8.0;
round Redondeo double x = Math.round(2.5); x = 3;
random Número aleatorio double x = Math.ramdom(); x = 0.20614522323378;
max Número máximo double x = max(12.5, 3.3); x = 12.5;
min Número mínimo double x = min(12.5, 3.3); x = 3.3
Ejercicio 2.4: El siguiente programa genera 10 números aleatorios, además cada valor
generado lo transforma en un número entre 15 y 35 por medio de cálculos; y
posteriormente los imprime.
Clase String La Clase String proporciona los mecanismos para el manejo de cadenas.
Ya que no se puede cambiar el valor de un String una vez que se ha
creado, esta clase se usa principalmente para analizar, manipular y
obtener los valores de las cadenas. Aunque hay métodos que permiten
modificar y añadir al valor de la cadena, estos métodos no modifican el
String en sí, sino que regresan un nuevo String con los valores deseado.
Métodos Descripción
Ejercicio 2.5: Elabore un programa que lea su nombre, lo imprima Normal y en forma
de espejo.
Ejemplo:
Dame tu nombre: José Pérez
José Pérez-zeréP éseJ
Ejercicio 2.6: Elabore un programa que lea su nombre y lo despliegue por palabra.
Ejercicio 2.7: Elabore un programa que lea su nombre y despliegue cuantas vocales,
literales y espacios tiene.
Clases contenedoras o wrappers
En Java existen una serie de clases predefinidas equivalentes a los tipos primitivos
denominadas wrappers, clases contenedoras o envoltorios. El identificador de cada una
de estas clases es el mismo que el del tipo primitivo correspondiente pero con la letra
inicial en mayúsculas (salvo int - Integer y char - Character). Cada una de estas clases
declaran un conjunto de métodos de gran utilidad.
boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double
Cuando necesitamos librerías de java, estamos llamando a una clase específica o a todo
un paquete. Por ejemplo, cuando ponemos esto:
import System.io.*;
Por medio de la sentencia package se pueden establecer paquetes. Para poder hacer
esto, se tiene que poner dentro de los programas .java esta sentencia y el nombre del
paquete que pertenece la clase.
Por ejemplo, supongamos que las clases Lapiz.java, Boligrafo.java y Goma.java, se van a
organizar para formar el paquete Escritorio, las clases quedarían de la siguiente forma:
package Escritorio;
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 jerarquía de
packages. Situados en la ventana del package repetiremos la operación creando el
package usuarios. Ahora desde el package entradas podemos hacer dos cosas: subir de
nivel hacia la raíz, o profundizar nivel hacia usuarios.
Definición: Una excepción es un evento que ocurre durante la ejecución del programa
que interrumpe el flujo normal de las sentencias.
Las excepciones permiten definir un bloque de código que se “tratará” de ejecutar, y un
segundo bloque alternativo que se ejecuta si dentro del bloque anterior se “dispara” una
excepción.
Estos bloques se conocen como bloques try y catch. Las excepciones se manejan
mediante un bloque try-catch de la siguiente forma:
try {
// Código que puede generar una excepción
…
…
}
Ejercicio 2.8: El siguiente programa captura dos valores tipo entero mediante la clase
JOptionPane, posteriormente se cual calcula la división del numerador entre el
denominador y finalmente se despliega en pantalla los valores del numerador,
denominador y el resultado.
Al ejecutar el programa tenemos:
También puede ocurrir un error al convertir el dato a entero por medio del método parseInt
de la clase envoltorio Integer.
Ocurre un error de Formato de número.
do {
try {
int numerador = Integer.parseInt(
JOptionPane.showInputDialog("Introduzca un numerador entero:"));
int denominador = Integer.parseInt(
JOptionPane.showInputDialog("Introduzca un denominador entero: "));
Además utiliza un ciclo en caso de que ocurra una excepción regrese a solicitar los datos
hasta que la variable Continuar = false.
Throwable
Exception Error …
ClassCastException MalformedURLException …
… …
La clase Error está relacionada con errores de la máquina virtual de Java y no el código,
generalmente estos errores no dependen del programador por lo que no debe
preocuparse por tratarlos.
En la clase Exception se encuentran las excepciones RuntimeException, producidas por
errores de programación. El compilador de Java obliga a corregirlas.
Propagación:
main()⇒primero()⇒segundo()
try{
// Código protegido que puede provocar excepciones
…
}
catch (TipoDeExcepcion excepcion) {
// Código que maneja el error
…
}
finally{
// Código que se ejecuta siempre al final
…
}
Si dentro de try hay alguna sentencia return, se ejecuta final y antes de devolver
el valor
try {
abrirGrifo();
regarCesped();
}
catch (MangueraRotaException e) {
darAlarma();
avisarFontanero();
}
finally{
cerrarGrifo();
}
Ejercicio 2.10: Elabore un programa que solicite su nombre y posteriormente solicite por
teclado un valor numérico, a continuación imprima el carácter que este en esa posición,
en caso de que no exista ese carácter cachar la excepción
StringIndexOutOfBoundsException y mandar un mensaje de error.
Si desea que los usuarios puedan distinguir, mediante programación, ciertas condiciones
de error de otras, puede crear sus propias excepciones, a esto se le llama excepciones
definidas por el usuario. Para lograr esto a una clase derivada extiéndala de la clase base
Exception. Cada una de estas clases define una excepción específica, por lo que en
muchos casos sólo hay que detectar la excepción.
Todas las excepciones tienen como clase base la clase Throwable, que está incluida en el
paquete java.lang, y sus métodos son:
Cuando se crea una nueva excepción, derivando de una clase Exception ya existente, se
puede cambiar el mensaje que lleva asociado. La cadena de texto puede ser recuperada
a través de un método.
public EdadFueradeRango() {
super();
}
public EdadFueradeRango( String s ) {
super( s );
}
}
Manejo de una excepción definida por el usuario.
class Persona {
int Edad;
public Persona() {
Edad = 0;
}
public Persona(int e) {
try {
cambiaEdad(e);
}
catch (EdadFueradeRango EdadErronea) {
System.out.println(EdadErronea);
}
}
El método cambiaEdad valida si la edad está entre 0 y 120 año si es así se la asigna a la
variable Edad, en caso contrario lanza una excepción de EdadFueradeRango.
1. Elabore una clase llamada Persona, con los siguientes variables miembro:
Nombre (String)
Edad (int)
Altura (double)
Peso (double)
Sexo (String)
EstadoCivil (String)
Además tendrá los métodos Set’s y Get’s. Por último tendrá un método Despliega
que regresara un Cadena bajo el siguiente formato:
No de Control
Nombre
Carrera
Semestre
Promedio
Metodos:
3. Elabore un programa que controle las fallas de los vehículos que llegan al Taller
Mecánico “Tubos y Mofles Galgo”. Los datos que se quieren manejar son:
Placas
Marca
Modelo
Nombre del dueño
Tipo de falla:
1. Sistema eléctrico
2. Motor
3. Ruedas, dirección, suspensión y frenos
4. Transmisión
5. Sistema de inyección y carburación
6. Sistema de escape
7. Encendido
8. Sevicio de mantenimiento
Implemente este programa mediante clases, intancia cinco objetos tipo vehículo con
diferentes datos, al final imprima la siguiente información:
Porcentaje de tipo de fallas
Resumen de pagos y costos estimados (Placa, Dueño, Costo estimado y Pagos
realizados)
Resumen de vehículos en reparación (Placa, Dueño, Tipo de falla y Porcentaje de
avance)
4. Modifique el ejercicio 1, para que valide el estado civil por medio de excepciones,
el cual solo puede ser Soltero, Casado, Viudo o Unión Libre.
La sintaxis es:
Dónde:
acceso Cada método tiene asociado un tipo que se utiliza para controlar el acceso al
método. Entre estos se encuentran:
private Este método privado solo puede ser llamado desde otros métodos
dentro de la clase en que se definió el método privado.
static Declara el método como método de la clase y no como método del objeto (no
hereda el método).
Nota: Un método declarado como static solo puede ser llamado por otro método
static y hacer referencia a variables static.
tipo Es el tipo de datos que regresara el método. Si se estipula un tipo de dato void
indica el método no regresa ningún valor (void indica ausencia de valor).
Dentro del método para retornar el valor se utiliza la palabra reservada return y
posteriormente el valor, si el tipo de dato del método se declara void no es
necesario utilizar la sentencia return.
Los métodos pueden devolver una variable u objeto, bien sea por valor (se devuelve una
copia), por puntero o por referencia. Java no soporta punteros, así que no puede devolver
nada por puntero. Todos los tipos primitivos en Java se devuelven por valor y todos los
objetos se devuelven por referencia. El retorno de la referencia a un objeto en Java es
similar a devolver un puntero a un objeto situado en memoria dinámica en C++, excepto
que la sintaxis es mucho más simple en Java, en donde el item que se devuelve es la
dirección de la posición en memoria dinámica donde se encuentra almacenado el objeto.
Para devolver un valor se utiliza la palabra clave return. La palabra clave return va
seguida de una expresión que será evaluada para saber el valor de retorno. Esta
expresión puede ser compleja o puede ser simplemente el nombre de un objeto, una
variable de tipo primitivo o una constante.
public static long suma2Numeros( long a, long b ) {
return (a + b);
}
3.4.1. De clase
Métodos de clase
Un método de clase es aquel que puede ser invocado sin existir una instancia. Para
declarar un método como “Método de la clase” se utiliza la palabra reservada static:
Para acceder a las variables o métodos 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 método de clase.
nombreClase.nombreVarClase;
nombreClase.nombreMetodoClase();
3.4.2. De Instancia
Métodos de instancia
Un método de instancia es el que se invoca siempre sobre una instancia (objeto) de una
clase. Para declarar un método de instancia se declara sin la palabra reservada static:
Para acceder a las variables o métodos 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 método 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 método
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 pasaría se deseamos saber cuántos 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 agregarán 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
método toString() y se indicarán 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
método llamado (estático) 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 numérico que
representan los mentros y por medio de los métodos 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 métrica 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 método
calculaCajas determine cuantas cajas se pueden llenar con una tonelada métrica de
cereal.
Tipos de ámbito
En Java tenemos tres tipos de ámbito que pueden aplicar a una variable:
Local
Global
Estático
Veamos un fragmento de código donde aparecen los tres tipos, antes de pasar a explicar
con un mínimo de detalle cada uno de ellos:
public Punto() {
x=0;
y=0;
}
public Punto(int vx, int vy) {
x= vx;
y= vy;
}
Variables de ámbito local.- Las variables de ámbito local, o de bloque, son aquellas que
sólo pueden ser accedidas desde el bloque de código en el que han sido declaradas (que
no inicializadas).
Variables de ámbito global.- Las variables de ámbito global, o de instancia, son aquellas
que pertenecen a cada instancia concreta de la clase donde han sido declaradas, y
dependiendo del modificador de visibilidad usado (más tarde hablaremos sobre ésto)
podrían ser sólo accedidas desde la propia instancia a la que pertenecen:
Variables estáticas.- Las variables estáticas, o de clase, son aquellas que pertenecen a
la propia clase donde han sido declaradas, y dependiendo del modificador de visibilidad
usado podrían ser sólo accedidas desde la propia clase en la que han sido declaradas:
Los argumentos son los valores que se pasan al método para que realice un proceso o
tarea y el método recibe estos argumentos en los parámetros designados (variables).
En el paso de parámetros a funciones hay dos aproximaciones clásicas: el paso por valor
y paso por referencia.
Por valor: En el paso por valor se realiza una copia de los valores que se
pasan, trabajando dentro del método con la copia. Es por ello que cualquier
cambio que sufran dentro, no repercute fuera del método.
Por referencia: En el paso por referencia no se realiza dicha copia, por lo que
las modificaciones de dentro de los métodos afectan a los parámetros y esos
cambios permanecen al final del método.
En Java el paso por parámetro es por valor, aunque los efectos son de paso por
referencia cuando los argumentos son objetos. ¿Cómo sucede eso? Pues es muy fácil, si
un método tiene como argumento un tipo primitivo (int, float, etc...), en Java se realiza una
copia para la función y cualquier cambio a dicho argumento no afecta a la variable
original. Este paso de parámetros en Java está orientado a utilizar el valor de la variable
para otros cálculos.
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 método 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 método.
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;
Qué un método devuelva el mismo objeto que le llamó. De esta manera se puede
hacer llamadas en cascada a métodos de la misma clase.
class Circulo {
Punto centro;
int radio;
. . .
public Circulo elMayor(Circulo c) {
if (radio > c.radio)
return this;
else
return c;
}
}
Java diferencia los métodos sobrecargados con base en el número y tipo de argumentos
que tiene el método y no por el tipo que devuelve.
En Java es posible definir dos o más métodos 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 métodos están sobrecargados y el fenómeno se conoce como
sobrecarga de métodos. La sobrecarga es uno de los procedimientos mediante el cual se
implementa el polimorfismo.
Ejercicio 3.5: El siguiente programa declara una clase llamada Sobrecarga con cuatro
métodos llamados “despliega” que se encuentran sobrecargados. El primer método no
recibe parámetros, el segundo recibo solo un parámetro tipo int, el tercero recibo dos
parámetros tipo int y por último el cuarto método recibe dos parámetros tipo float. El
funcionamiento de cada método depende de los parámetros que reciba, desplegando en
pantalla el número de argumentos recibidos, los tipos y valores (con excepción del
método sin parámetros, el cual solo despliega en pantalla un mensaje).
Ejercicio_3_6
√3 ∙ 𝑎2
Á𝑟𝑒𝑎 =
4
𝑏∙𝑎
Á𝑟𝑒𝑎 =
2
Á𝑟𝑒𝑎 = √𝑝 ∙ (𝑝 − 𝑎) ∙ (𝑝 − 𝑏) ∙ (𝑝 − 𝑐)
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 métodos sobrecargados recibirán datos tipo int y los restantes 3,
datos tipo double. El valor de retorno de todos los métodos será double.
Los constructores tienen el mismo nombre que la clase, además no tienen valor de
retorno (ni void) y están clasificados en constructores por defecto y
alternativos/sobrecargados.
Constructores
Los constructores tienen el mismo nombre que la clase, además no tienen valor de
retorno (ni incluso void) y están clasificados en constructores por defecto y
alternativos/sobrecargados.
Regla: Java crea automáticamente un constructor por defecto cuando no existe otro
constructor. Tal constructor inicializa las variables tipo int, float, double, long con
cero, las booleanas con false y las referencias con null.
Constructor alternativo/sobrecargado
Precaución: Tenga cuidado con la declaración de una clase que sólo tenga un
constructor con argumentos. En ese caso si se omite un constructor sin
parámetros no será posible utilizar el constructor por defecto.
Ejemplo: El código que se muestra a continuación declara una clase llamada Punto
con dos variables miembro tipo int (x y y), además tiene un constructor
alternativo (debido a que tiene parámetros), el cual asigna los valores que
se le envían como parámetros a las variables x y y, dado que no tiene un
constructor por defecto (sin argumentos), al querer instanciar un objeto
del tipo punto (que en este ejemplo lo llamamos primerPunto) marcará
error, debido a que dicho método constructor no existe.
…
public Punto(int valorX, int valorY) { // Coordinador alternativo
x= valorX;
y= valorY;
}
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.
3. Escriba un programa que lea dos enteros positivos n y b que llame a un método
cambiarBase para calcular y visualizar la representación del número n en la base
b.
4. Escriba un programa que mediante un método que tome como argumentos las
longitudes de los tres lados de un triangulo (a, b y c), devuelva el área del
triangulo.
abc
donde p
2
5. Elabore una clase principal que tenga 6 métodos sobrecargados llamado
areaCuadrilatero, que realizaran el cálculo del área de un cuadrilátero en base a lo
siguiente:
Á𝑟𝑒𝑎 = 𝑏 ∙ 𝑎
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 métodos sobrecargados recibirán datos tipo long y los restantes 3,
datos tipo double. El valor de retorno de todos los métodos será double.
Superclase
Préstamo
Subclases
A veces es difícil decidir cuál es la relación de herencia más óptima entre el diseño de
clases. Consideremos por ejemplo el caso de empleados de una empresa, existen
diferentes tipos de clasificación según sea el criterio de discriminación, por ejemplo por
tipo de empleado:
Empleado
Empleado
Empleado
Empleado
Declaración.
Una clase derivada (o subclase) es una clase que hereda los atributos y comportamiento
de una clase base (o superclase). Sintaxis:
Ejercicio 4.1: En el siguiente ejemplo tenemos la súper clase Préstamo, que contiene las
variables miembro Monto e Interés que son del tipo float con tipo de acceso privado (-),
además cuenta con los siguientes métodos los cuales todos son públicos (+):
Prestamo
- float Monto
- float Interes
+ Presamo()
+ Prestamo (float M, float I)
+ float calculaIntereses()
+ void actualizaMonto(float M)
+ void actualizaInteres(float I)
+ String muestra()
Elabore las clases Prestamo, Hipotecario, Personal y Prendarios, así como también
elabore la clas principal Ejemplo_Prestamo para que obtenga el siguiente resultado:
4.4. Clases abstractas.
Cuando pensamos en un tipo de clase, suponemos que los programas crearán objetos de
ese tipo, sin embargo, existen casos en los que es conveniente declarar clases para las
cuales el programador no pretende instanciar objetos. Dichas clases se denominan clases
abstractas, debido a que estas solo se utilizan como superclases en la jerarquía de
herencias, nos referiremos a ellas como superclases abstractas. Estas clases no pueden
utilizarse para instanciar objetos, porque las clases abstractas se declaran incompletas,
las subclases deben declarar las partes faltantes.
Figura
Bidimensional Tridimensional
Definición
Para que una clase sea abstracta se debe declarar con la palabra reservada abstract.
Una clase abstracta por lo general tiene uno o más métodos abstractos (los métodos
static no pueden ser abstractos). Un método abstracto es un método con la palabra
reservada abstract en su declaración.
Figura
Punto
Circulo
Cilindro
Métodos
La clase Círculo se extiende de Punto heredando todo los métodos públicos. Dentro de la
clase Círculo 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 método súper() el cual invocan al súper constructor de la súper clase Punto,
además tiene los métodos regresaRadio() y cambiaRadio() que regresan y cambian el
valor del radio, en este último método se utiliza la selección simple lineal (?), en donde si
la condición es verdadera regresa el primer valor después del signo de interrogación, en
caso de ser falso regresa el valor que se encuentra después de los dos puntos, esto se
realiza para asegurarse que no existan radios negativos. El método regresaDiametro()
devuelve el doble del radio. Y Finalmente se redefine el método regresaNombre(), el cual
regresa el nombre de la figura “Círculo”, se redefine el método regresaArea() y toString().
La clase Cilindro se extiende de Círculo heredando todo los métodos públicos. 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 también utilizan el método súper() invocan al súper constructor de la súper clase
Círculo, además tiene los métodos regresaAltura() y cambiaAltura() que regresan y
cambian el valor de la altura. Y se redefine los métodos regresaNombre(), regresaArea(),
regresaVolumen() y toString().
En la clase principal PruebaHerenciaAbstracta se instancias tres objetos, uno tipo Punto,
otro tipo Circulo y un tercero tipo Cilindro asignando los valores a las variables miembro
por medio de la invocación a los constructores alternativos. Se declara una variable tipo
String llamada salida en la cual se acumulan los datos que se mostrarán como resultados,
además se declara un arreglo de tipo Figuras que es ahí donde se realiza el polimorfismo,
debido a que soporta los métodos de cada uno de los objetos mostrando la ejecución de
cada método toString, regresaArea() y regresaVolumne().
4.5. Interfaces.
4.5.1. Definición
El concepto de Interface lleva un paso más adelante la idea de las clases abstractas. En
Java una interface es una clase abstracta pura, es decir una clase donde todos los
métodos son abstractos (no se implementa ninguno). Permite al diseñador de clases
establecer la forma de una clase (nombres de métodos, listas de argumentos y tipos de
retorno, pero no bloques de código). Una interface puede también 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 métodos que declara una interface son siempre public.
Para indicar que una clase implementa los métodos de una interface se utiliza la palabra
clave implements. El compilador se encargará de verificar que la clase efectivamente
declare e implemente todos los métodos de la interface. Una clase puede implementar
más de una interface.
4.5.2. Implementación.
interface nombre_interface {
tipo_retorno nombre_metodo ( lista_argumentos ) ;
...
}
Por ejemplo:
interface InstrumentoMusical {
void tocar();
void afinar();
String tipoInstrumento();
}
Es posible crear referencias a interfaces, pero las interfaces no pueden ser instanciadas.
Una referencia a una interface puede ser asignada a cualquier objeto que implemente la
interface. Por ejemplo:
Extensión de interfaces
Las interfaces pueden extender otras interfaces y, a diferencia de las clases, una interface
puede extender más de una interface. La sintaxis es:
Agrupaciones de constantes
Dado que, por definición, 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:
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 instrucción.
Supongamos que tenemos una clase que representa un botón de acción en un entorno
gráfico de usuario (el típico botón de confirmación de una acción o de cancelación). Esta
clase pertenecerá a una amplia jerarquía de clases y tendrá mecanismos complejos de
definición y uso que no son objeto del ejemplo. Sin embargo podríamos pensar que la
clase Boton tiene miembros como los siguientes.
Lo que aquí nos interesa es ver lo que sucede cuando el usuario, utilizando el ratón pulsa
sobre el botón. Supongamos que la clase Boton tiene un método, de nombre por ejemplo
click(), que es invocado por el gestor de ventanas cuando ha detectado que el usuario ha
pulsado el botón del ratón sobre él. El botón deberá realizar alguna acción como dibujarse
en posición 'pulsado' (si tiene efectos de tres dimensiones) y además, probablemente,
querrá informar a alguien de que se ha producido la acción del usuario. Es en este
mecanismo de 'notificación' 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 método botonPulsado. La idea es que este método sea
invocado por la clase Boton cuando el usuario pulse el botón. Para que esto sea posible
en algún momento hay que notificar al Boton quien es el Oyente que debe ser notificado.
La clase Boton quedaría:
void click() {
...
oyente.botonPulsado(this);
}
}
El método registrarOyente sirve para que alguien pueda 'apuntarse' como receptor de las
acciones del usuario. Obsérvese que existe una referencia de tipo Oyente. A Boton no le
importa que clase va a recibir su notificación. Simplemente le importa que implante la
interface Oyente para poder invocar el método botonPulsado. En el método click se
invoca este método. En el ejemplo se le pasa como parámetro una referencia al propio
objeto Boton. En la realidad lo que se pasa es un objeto 'Evento' con información
detallada de lo que ha ocurrido.
Con todo esto la clase que utiliza este mecanismo podría tener el siguiente aspecto:
...
void botonPulsado(Boton x) {
// procesar click
...
}
}
Ejercicio 4.4: Empleando intefaces implemente una calculadora que realice las
operaciones básicas de suma (+), resta (-), multiplicación (*) y división (/) de dos números
que se capturaren desde teclado y que tenga el siguiente diseño:
Analizando el diseño, tendremos que, por cada elemento se emplearán los siguientes
componentes de Java:
Titulo de la ventana JTextField
JLabel
JButton
4.5.3. Variable polimórficas
En Java, las variables que contienen objetos son variables polimórficas. El término
polimórfico (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 polimórficas 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 DVD() {
titulo = "Sin Titulo";
director = "Sin Director";
comentario = "";
}
Object ObjetoX;
ObjetoX = ObjetoCD;
System.out.println(ObjetoX);
ObjetoX = ObjetoDVD;
System.out.println(ObjetoX);
import System.io.*;
Estamos importando todas las clases del paquete System.io. Ahora, si hacemos esto:
import javax.swing.JOptionPane;
Para definir un paquete solo tenemos que incluir antes que los paquetes a importar, la
definición del paquete al que pertenece la clase, de la forma siguiente:
package org.ruta.del.paquete;
Producto de Aprendizaje 4:
Los arreglos se pueden definir como objetos en los que podemos guardar más de un
valor, es decir, al tener una estructura organizada en un arreglo se puede guardar
múltiples valores de acuerdo a su tamaño o capacidad, es importante recordar que los
valores a guardar deben ser del mismo tipo, por ejemplo: Si tenemos un arreglo de tipo
Numérico que puede almacenar 10 valores, solo podrá almacenar 10 números diferentes,
no otros tipos de valores como podrían ser datos tipo String, char, boolean, etc.
5.1. Unidimensional
Los arreglos de una unidimensionales (también llamados vector o tablas), son estructuras
de datos de una sola dimensión (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.
Numero
0 10
1 15
2 25
3 50
4 21
Operaciones.
Tipo identificador [ ] ;
Donde el Tipo, corresponde al tipo de dato del arreglo, el cual pude ser cualquiera de los
8 básicos de Java o de alguna clase.
o Los corchetes colocados después del tipo de dato, esto indica que todos los
identificadores son arreglos.
o Los corchetes colocados después del identificador, indica que solo el
identificador que tenga los corchetes es un arreglo.
Ejemplo:
char [ ] letra1, letra2[ ], letra3; letra1 y letra3 son arreglos de una dimensión del
tipo char y mientras que letra2 es una arreglo de
arreglos de tipo char (es decir una matriz).
Esto solo está declarando el nombre del arreglo y el tipo de datos que se van a almacenar
(a esto se le llama también referencia), para declarar el número de elementos del arreglo,
se realiza por medio del operador new.
Ejemplo:
float [ ] CalificacionFinal;
CalificacionFinal = new float [45];
La primera sentencia declara un arreglo unidimensional llamado CalificacionFinal que
manejara tipos de datos float. La segunda sentencia declara que tendrá 45 elementos
(enumerado del 0 al 44). Otra forma de hacer la declaración del arreglo, así como de sus
elementos es:
Para almacenar datos en un arreglo basta con poner el nombre del arreglo, el subíndice
(encerredo entre corchetes), el símbolo igual, la expresión que se quiere almacenar y
finalmente punto y coma.
CalificacionFinal[5] = 70;
System.out.println(“La Calificación Final 6 es: “ + CalificacionFinal[5]);
Ejercicio 5.3: Elabore un programa que lea de teclado 10 calificaciones numéricas entre
0 a 100, posteriormente imprima cada calificación con su correspondiente Nota en base a
la siguiente tabla:
Límite
Nota
Inferior Superior
93 100 A+
90 92 A-
87 89 B+
83 86 B-
80 82 C+
77 79 C-
73 76 D+
70 72 D-
0 69 F
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).
Java considera cada arreglo un objeto, debido a ello se pude conocer el número de
elementos de un arreglo por medio del campo length.
En los ejemplos anteriores demostramos cómo las instrucciones for controladas por un
contador intera a través de los elementos del arreglo. Ahora veremos la instrucción for
mejorada, la cual itera a través de los elementos de un arreglo o colección sin utilizar un
contador.
for(parámetro: nombreArreglo)
Instrucción;
Donde parámetro tiene dos partes: un tipo y un identificador (por ejemplo int valor), y
nombreArreglo es el arreglo a través del cual se iterará. El tipo del parámetro debe
concordar con el tipo de los elementos en el arreglo.
Ejercicio 5.7: Muestra el contenido el arreglo numero utilizando el for mejorado.
Algoritmo:
Realiza
Movimientos = 0
Para I=0 hasta Arreglo.longitud – 1
Si Arreglo[I+1] < Arreglo[I]
Arreglo[I] <-> Arreglo[I+1] // Intercambiar
Movimiento++
Fin_Si
Fin_para
Mientras (Movimiento != 0)
Dónde:
Ejercicio 5.8: Elabore un programa en Java que genere 10 números aleatorios (entre 100
y 999), ordénelos en forma ascendente mediante el método de la burbuja y presente los
datos como se muestra en la siguiente figura.
Algoritmo:
5.2. Multidimensionales
Operaciones.
Tipo [ ] [ ] identificador ;
Tipo identificador [ ] [ ] ;
,
Ejemplo:
float [ ][ ] cal1, cal2, cal3, prom; cal1, cal2, cal3 y prom son arreglos
bidimensionales.
float [ ][ ] Calificaciones;
Calificaciones = new float [45][4];
La primera sentencia declara un arreglo Calificaciones que manejara tipos de datos float.
La segunda sentencia crea el arreglo e indica que manejara 45 filas (del 0 al 44) y 4
columnas (del 0 al 3). Otra forma de hacer la declaración y creación del arreglo es:
tabla1[ ][ ]
int tabla1[ ][ ] = { 0 1 2
{51, 24, 33},
{32, 23, 45} 0 51 24 33
};
1 32 23 45
Java trata los arreglos de dos o más dimensiones como un arreglo de arreglos, por tanto
puede crear arreglos no proporcionales.
Por ejemplo:
Se ha creado un arreglo con dos filas, la 1ª con dos columnas y la 2ª. con 3.
b) int [ ] a = { 1, 3, 5 }, b = { 2, 4, 6, 8, 10 };
int z[ ][ ] = { a, b };
Ejercicio 5.10: Para el siguiente ejemplo se declara una matriz f no proporcional, donde
el primer subíndice tiene 4 elementos, el segundo 2 y el último 6.
Acceso a los elementos del arreglo bidimensional
a
Columna 0 Columna 1 Columna 2 Columna 3
Fila 0 a[0][0] a[0][1] a[0][2] a[0][3]
Fila 1 a[1][0] a[1][1] a[1][2] a[1][3]
Fila 2 a[2][0] a[2][1] a[2][2] 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 subíndice
de las filas y el subíndice de las columnas, el símbolo igual y la expresión que se quiere
almacenar y finalmente después punto y coma. Por ejemplo:
a[1][3] = Expresión;
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.
4 7 1 3 5
2 0 6 9 7
3 1 2 6 4
4 2 3
7 0 1
1 6 2
3 9 6
5 7 4
Multidimensionales.
y
4
z
x
5
Operaciones.
Tipo [ ] [ ] [ ] identificador ;
Tipo identificador [ ] [ ] [ ] ;
Ejemplo:
int cubo[ ][ ][ ];
cubo = new int [5][4][3];
La primera sentencia declara un arreglo de tres dimensiones llamado cubo que manejara
tipos de datos int. La segunda sentencia crea el arreglo e indica que manejara 5 filas, con
4 columnas y 3 de profundidad. Otra forma de hacer la declaración y creación del arreglo
es:
Al igual que en los anteriores arreglos, se deben poner los subíndices al cual se quiere
acceder y posteriormente la expresión a asignar.
cubo[2][3][1] = 15;
La clase Arrays proporciona métodos estáticos para manipular arreglos. Esta clase
maneja arreglos a alto nivel, como los métodos: sort para ordenar arreglos, binarySearch
para buscar en un arreglo ordenado, equals para comparar arreglos y fill guardar valores
en todos los elementos de un arreglo.
Métodos Descripción
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),
ordénelo ascendentemente mediante el método de la burbuja y selección,
contabilizando el número de movimientos por cada método y presente los resultados
y determine que método es mejor en base al menor número de movimientos.
2. Elabore un programa que lea los nombres y tres calificaciones de los alumnos de la
materia Programación 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.
Aprobados: 99
Reprobados: 99
Promedio general: 99
3. El “cuadro mágico”.
6 1 8
7 5 3
2 9 4
Note que los números de todos los renglones, columnas y diagonales suman 15.
Una técnica a través de la cual se puede generar un cuadrado mágico es la
siguiente:
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 ejecución. Los
archivos son utilizados para la retención a largo plazo de grandes cantidades de datos.
Los datos almacenados en archivo existen más allá de la duración de un programa. Los
archivos se almacenan en memoria secundaria (discos magnéticos, discos ópticos, USB,
etc.).
Un flujo (stream) es una abstracción 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 conexión o canal por donde circulen los datos. Al abrir un archivo se crean
automáticamente tres objetos flujo o canales. Estos objetos están definidos en la clase
System y son:
InputStream OutputStream
FileInputStream FileOutputStream
ByteArrayInputStream ByteArrayOutputStream
PipeInputStream PipeOutputStream
SequenceInputStream FilterOutputStream
StringBufferInputStream
FilterInputStream
Julia Campo
1 Bit
Métodos Descripción
void write() throws IOException Escribe un solo byte en el flujo del archivo.
}
Abrir.
Métodos Descripción
Métodos Descripción
Cerrar.
Cada vez que habrá un archivo tendrá que cerrarlo por medio del método close() de la
siguiente forma:
nombreDeArchivo.close();
Lectura y escritura.
Ejercicio 6.3: Ahora modificaremos el Ejercicio 8.1 para que añada texto al final del
archivo y muestre su contenido.
import java.io.*;
import javax.swing.JOptionPane;
Archivo binario
import java.io.*;
import javax.swing.JOptionPane;
class Registro {
public String nControl;
public String nombre;
public byte cal1;
public byte cal2;
public byte cal3;
public byte promedio;
}
public class Ejercicio_6_4 {
try {
FileOutputStream archivo =
new FileOutputStream(nombreArchivo);
DataOutputStream salida = new DataOutputStream(archivo);
while (opcion == 0) {
leerDatos(reg);
escribirDatos(salida, reg);
opcion = JOptionPane.showOptionDialog(null,
"Dar de alta otro Alumno", "Otra alta",
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("Calificación 1:"));
r.cal2 =
Byte.parseByte(JOptionPane.showInputDialog("Calificación 2:"));
r.cal3 =
Byte.parseByte(JOptionPane.showInputDialog("Calificación 3:"));
r.promedio = (byte) ((r.cal1 + r.cal2 + r.cal3)/3);
}
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 excepción, al ocurrir la
excepción 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 nControl;
public String nombre;
public byte cal1;
public byte cal2;
public byte cal3;
public byte promedio;
}
}
}
Aplicaciones
Cifrado de sustitución
Por ejemplo: Existe un juego llamado encriptación del murciélago. La palabra murciélago
es una palabra que contiene las 5 vocales y la técnica de encriptación consiste en
enumerar las vocales de esta palabra por lo que la vocal “u” le corresponde el número 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 numérico que le corresponde:
Otra técnica de encriptación 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:
Este es un ejemplo de encriptación en base a sucesor.
Ftuf!ft!vo!fkfnqmp!ef!fodsjqubdjôo!fo!cbtf!b!tvdftps/
De estas dos últimas técnicas se puede hacer una combinación, la cual es llamada
sucesor/predecesor, la cual consiste en cambiar la primer letra en base a suceror y la
siguiente cambiarle por su predecesor, así sucesivamente hasta que se termine el texto:
Producto de Aprendizaje 6:
4. Del programa del Ejercicio 6.4, elabore un programa en java que solicite el No de
Control y busque el registro en el archivo indicado y si lo encuentra despliegue la
información en caso contrario mostrar “Registro no localizado”.