GUÍA DEL DOCENTE
Experiencia Educativa:
PROGRAMACIÓN
Licenciatura en Sistemas Computacionales Administrativos
Periodo:
Febrero - Julio 2015
Autor:
Mtro. Manuel Suárez Gutiérrez
Índice
Introducción
1
Justificación
2
Adentrándonos a la Programación
3
Definición de Algoritmo
3
Diagramas de Flujo
4
Pseudocódigo
6
Programación Orientada a Objetos
6
Propiedades fundamentales de la Programación Orientada a Objetos
8
Java
9
Introducción
9
Historia de Java
9
Principales Características de Java
9
Como Instalar Java
11
Primer programa en Java
11
Compilación y Ejecución
12
Conceptos básicos
13
Tipos de Clases
14
Uso de Comentarios
14
Palabras Reservadas
15
Espacios en blanco
15
Identificadores
17
Tipos de Valores
17
Separadores
17
Operadores
18
Operadores Aritméticos
18
Operadores Unarios
18
Operadores Relacionales y Condicionales
18
Operadores a nivel de Bits
19
Operadores de Asignación
19
Operador Ternario if - then - else
19
Operadores Constantes
20
Manejo de Arreglos
20
Uso de Clases
22
Declaración de una clase
22
Declaración e inicialización de los atributos de una clase
23
Declaración de los métodos de una clase
24
Declaración, instanciamiento e inicialización de objetos
25
Control de Flujo
29
If / Else
29
Switch
31
Bucle For
31
Bucle While
34
Bucle Do - While
35
Control general de flujo
35
Excepciones
35
Lectura Estándar
36
Java Avanzado
40
Matrices de datos
40
Ordenar arreglos
41
Clases en Java
43
Clase Math
44
Clase String
45
Herencia
47
This
49
Super
49
Manejo de Excepciones
51
Try
51
Catch
52
Finally
52
Throw
52
Anexo I: Diseño de Interfaces
53
JSwing
53
Frames
54
Elementos en el diseño de interfaces
56
Botones
56
Etiquetas
57
Bibliografia
59
Indice de Practicas
60
Índice de Tareas
61
Introducción
El Curso de Programación es impartido en la carrera de Sistemas Computacionales
Administrativos de la Facultad de Contaduría y Administración de la Universidad
Veracruzana, su propósito es dar las bases y fundamentos teóricos y prácticos a los
estudiantes
Los conocimientos adquiridos durante este curso les permitirá a los estudiantes desarrollar
las destrezas requeridas para programar en un paradigma orientado a objetos, así como
también les otorgará las herramientas, así como también la capacidad de
evolucionar ellos mismos a otros lenguajes de programación.
Es por ello que uno de los propósitos de este curso es que los estudiantes
obtengan las habilidades de comprensión del lenguaje de programación
con un enfoque autodidacta, así al momento de necesitar migrar de un
lenguaje a otro la transición sea compatible y simple.
Para poder lograr comprender el contenido de este curso será de suma
importancia que los estudiantes tengan buenas bases adquiridas en la
experiencia educativa de Algorítmica, la cual da un primer acercamiento
y bases fundamentales de la programación.
Dichas bases comprenden lo
que es el manejo del
pseudocódigo, elaboración de
diagramas de flujo, pruebas de
escritorio, así como también el
manejo de variables, tipos de
datos, ciclos, condicionales, y
sobre todo la lógica para
decidir cuando aplicar cada
uno de estos aspectos en la
programación.
1
Justificación
Este documento tiene como finalidad servir de guía durante el curso de Programación, por lo
que está dirigida a todos aquellos estudiantes y catedráticos que se están familiarizando e
introduciendo a los lenguajes de programación, en este caso se aborda el lenguaje de
programación de Java, el cual tiene como una de sus principales cualidades, la simplicidad,
facilidad de aprendizaje, multiplataforma y sobre todo que es orientado a objetos.
Se plantea la necesidad de resolver problemas de la vida cotidiana con una visión
algorítmica basada en el paradigma orientado a objetos. La estructura de los problemas irá
variando en tamaño y complejidad, iniciando con ejercicios sencillos, que permita familiarizar
al estudiante con el lenguaje de programación y así perder el miedo al uso de una interfaz
basada en línea de comandos. El saber teórico por grandes temas abordado en este
documento son los siguientes:
1. Introducción a la Programación
2. Modelado Orientado a Objetos
3. Elementos Básicos de la programación
3.1.Conceptos base
3.2.Palabras reservadas
3.3.Identificadores
3.4.Tipo de Variables
3.5.Operadores
3.6.Uso de Clases
3.7.Uso de Métodos
3.8.Control de Flujo
3.9.Arreglos
4. Programación Avanzada
4.1.Matrices
4.2.Herencia
4.3.Manejo de Excepciones
2
Adentrándonos a la Programación
Definición de Algoritmo
Es un conjunto pre-escrito de instrucciones o reglas bien definidas, ordenadas y finitas que
permite realizar una actividad mediante pasos sucesivos que no generen dudas a quien
deba realizar dicha actividad. En otras palabras un algoritmo consta de tres fases, una
entrada, un proceso y una salida.
!
A estas fases también se les suele conocer como módulos en donde un algoritmo consta de
tres módulos siendo:
Módulo1: representa la operación o acción para ingresar los datos o variables al
problema.
Módulo2: representa a la operación o conjunto de operaciones secuenciales que
permitan solucionar el problema.
Módulo3: representa la operación para comunicar al exterior los resultados alcanzados
!
3
Las propiedades que presenta un algoritmo son:
Finitud: Número finito de pasos.
Definibilidad: Cada paso definido de un modo preciso.
Conjunto de entradas: Datos iniciales del algoritmo.
Conjunto de Salidas: Respuesta que obtenemos del algoritmo.
Efectividad: Las operaciones a realizar deben ser lo más básicas posibles para
que el procesador pueda realizarlas de modo exacto y en tiempo finito.
Por lo tanto llamamos “algoritmo” al conjunto finito y ordenado de acciones con las que
podemos resolver un determinado problema. Llamamos “problema” a una situación que se
nos presenta y que, mediante la aplicación de un algoritmo, pretendemos resolver.
Los algoritmos están presentes en nuestra vida cotidiana y, aún sin saberlo, aplicamos
algoritmos cada vez que se nos presenta un problema sin importar cuál sea su grado de
complejidad. Por ello los aplicamos de manera inadvertida, inconscientemente o
automáticamente. Esto se da generalmente debido a que ese problema lo conocemos y lo
hemos resuelto con anterioridad un gran número de veces.
Por lo tanto podemos resumir con lo siguiente:
Un Algoritmo describe el método para realizar una tarea.
Es una secuencia de instrucciones que, ejecutadas adecuadamente, dan lugar al
resultado deseado.
Ejemplo de algoritmos no pertenecientes al área de programación:
Planos de una casa
Procedimiento de una lavadora
Receta de cocina
Diagramas de Flujo
Es la representación gráfica de los algoritmos, usan símbolos conectados con flechas para
indicar la secuencia de instrucciones y estos símbolos están regidos por la normatividad
ISO(International Organization for Standardization) y la ANSI (American National Standards
Institute).
Los símbolos utilizados para representar estos algoritmos son usados a nivel internacional,
siendo los que se muestran a continuación:
4
!
Las reglas de los diagramas de flujo son:
1. Todo Diagrama de flujo debe tener n inicio y un fin.
2. Las líneas utilizadas para indicar la dirección del flujo del diagrama deben ser
rectas, verticales y horizontales.
3. Todas las líneas utilizadas para indicar la dirección del flujo del diagrama deben
estar conectadas a un símbolo.
4. El diagrama se construye de arriba hacia abajo.
5. La notación utilizada debe ser independiente al lenguaje de programación.
6. Es conveniente poner comentarios que ayuden a comprender lo realizado.
5
7. Si el diagrama es muy extenso, se debe usar conectores para cambiar de pagina y
enumerar las hojas.
8. No puede llegar más de una línea a un símbolo.
Pseudocódigo
Es una descripción de alto nivel de un algoritmo que emplea una mezcla de lenguaje natural
con algunas convenciones sintácticas propias de lenguajes de programación, como
asignaciones, ciclos y condicionales, aunque no está regido por ningún estándar.
!
Int X = 0; Int Y =2; Int Suma = 0; Etiqueta A If (X < 5); Entonces Suma = X + Y; X = X +1; Regresa a Etiqueta A
Programación Orientada a Objetos
Cuando hablamos de Programación Orientada a Objetos (POO), nos referimos al paradigma
de programación más utilizado en el mundo, esto es cuando nos referimos al área del
desarrollo de software. Este paradigma se enfatiza en los datos, esto es en la información
que vamos a procesar.
Un paradigma orientado a objetos tiene la característica de estar estructurado por clases y
objetos. Una clase es una especie de estructura que agrupa datos y funciones. Un objeto es
una variable cuyo tipo de dos es una clase.
Algo que debemos tener claro para poder realizar un correcto diseño de nuestros algoritmos
orientados a objetos es que los programas se organizan a imagen y semejanza de la
organización de objetos del mundo real.
Los objetos poseen:
Propiedades o atributos
Métodos
Un mecanismo importante de la POO, son las clases y los objetos que están contenidos
dentro de ellas, por eso se dice que un objeto es la instancia de una clase.
6
Un programa orientado a objetos se compone únicamente de objetos, siendo que cada uno
de ellos es una entidad que tiene propiedades particulares, atributos y métodos. Por ejemplo,
una página Web es un objeto, tiene color de fondo, anchura, altura, etc. (propiedades y
atributos) y las rutinas que ejecuta el usuario de cerrar, abrir, recorrer, etc. son los métodos.
Objeto
Datos
Método
Método
!
Objeto
Objeto
Datos
Datos
Método
Método
Método
Método
Organización de un programa orientado a objetos
Cuando se ejecuta un programa orientado a objetos, los objetos están recibiendo,
interpretando y respondiendo mensajes de otros objetos y por lo tanto ejecutando métodos
asociados con el objeto.
Los métodos se escriben en una clase de objetos y determinan como tiene que actuar el
objeto cuando recibe el mensaje vinculado con ese método. A su vez, un método puede
enviar mensajes a otros objetos, solicitando una interacción con el método de otro objeto.
Cuando escribimos un algoritmo en un paradigma orientado a objetos lo que hacemos
realmente es diseñar un conjunto de clases, desde las cuales se crearán los objetos
necesarios cuando el programa se ejecute. La estructura más interna de un objeto queda
oculta para los usuarios, como si fuera una caja negra, la cual mantiene la integridad del
7
objeto, esto hace que el usuario solamente mantenga contacto con el programa a través de
mensajes emitidos por el objeto.
Propiedades fundamentales de la Programación Orientada a Objetos
Las principales propiedades del paradigma orientado a objetos son:
Abstracción
Encapsulado de datos
Ocultación de datos
Herencia
Polimorfismo
8
Java
Introducción
Historia de Java
Sun Microsystems creo el lenguaje Java en un intento por resolver simultáneamente todos
los problemas que se planteaban a los desarrolladores de software por la proliferación de
arquitecturas incompatibles, tanto entre las diferentes maquinas como entre los diversos
sistemas operativos y sistemas de ventanas que funcionan sobre una misma máquina,
añadiendo la dificultad de crear aplicaciones distribuidas en una red como Internet.
El lenguaje de programación Java (llamado inicialmente Oak) se originó en 1991 como parte
de un proyecto de investigación para desarrollar un lenguaje capaz de romper el vacío de
comunicación existente entre muchos productos electrónicos de consumo general, como los
hornos de microondas, las televisiones y las videograbadoras. Dado que el concepto original
falló, el equipo de programadores que diseñó este lenguaje (conocido formalmente como el
Green Team) se vio obligado a encontrarle otro uso.
Afortunadamente el world wide web comenzó a ser más popular y el lenguaje Oak probó ser
ideal para desarrollar pequeños componentes que permitieran enriquecer con multimedia el
contenido de las páginas de Internet. Estas pequeñas aplicaciones conocidas hoy en día
como applets, se convirtieron en la punta de lanza de lo que en breve sería el lenguaje de
programación más usado del mundo.
En 1995 Sun Microsystems lanza al mercado la tecnología de programación Java,
promoviéndola como la primera plataforma de software universal bajo el eslogan “Write
Once, Run Anywhere”.
Principales Características de Java
Simple: Se diseño para ser parecido a C++ para facilitar su aprendizaje, añade un reciclador
de memoria dinámica, lo que hace que no sea necesario preocuparse por ello. Reduce en un
50% los errores más comunes de programación con lenguajes como C y C++.
Orientado a Objetos: Trabaja con sus datos como objetos y con interfaces a esos objetos.
Soporta las tres características propias del paradigma de la orientación a objeto:
encapsulación, herencia y polimorfismo. Las plantillas de los objetos son llamadas clases y
sus copias instancias.
9
Distribuido: En si no es distribuido, sino que proporciona las librerías y herramientas para
que los programas puedan ser distribuidos, es decir, que se ejecuten en varias maquinas.
Robusto: Realiza verificaciones en busca de problemas tanto en tiempo de compilación
como en tiempo de ejecución. Obliga a la declaración explícita de métodos, rediciendo así
las posibilidades de error.
Arquitectura neutral: El compilador Java compila su código a un fichero objeto en formato
independiente de la arquitectura de la máquina en que se ejecutará, por lo que cualquier
maquina sin importar su S.O. que tenga el sistema de ejecución (run-time) puede ejecutar
este objeto.
Seguro: El código Java pasa por muchas comprobaciones antes de ejecutarse en una
maquina, así como pasa por un verificador de ByteCode, el cual comprueba el formato de los
fragmentos de código para detectar código ilegal (punteros falsos, violación de derechos de
acceso, intentar cambiar el tipo de clase de un objeto). Además, cuenta con un Cargador de
Clases, el cual separa los archivos locales de los procedentes de la red. En el caso de los
Applets, Java imposibilita el abrir archivos locales.
Portable: Mas allá de ser una arquitectura independiente, implementa otros estándares de
portabilidad para facilitar el desarrollo.
Interpretado: Su intérprete (sistema run-time), puede ejecutar directamente el código objeto,
dado que enlazar un programa consume menos recursos que compilarlo.
Multitarea o Multihilo: Permite realizar muchas actividades simultáneas en un programa, su
beneficio es en tener un mejor rendimiento interactivo y mejor comportamiento en termino
real.
Dinámico: Al usar la programación orientada a objetos, no carga todos los módulos al
momento de ejecución, si no que los carga conforme son requeridos.
Difundido: En la actualidad es el lenguaje más utilizado, lo que hace que sea fácil encontrar
documentación en línea, ejemplos y muchos otros recursos referentes al lenguaje.
Tarea 1: Investigación historia Java.
Elaborar un resumen que contenga los orígenes de Java, principales características, así
como un cuadro donde se muestren los diferentes tipos de variables.
10
Como Instalar Java
1.
2.
3.
4.
5.
6.
7.
8.
Identifica tu Sistema Operativo (S.O.) y su versión (32 o 64 bits)
Ir a la página de Oracle y descargar la última versión de Java JDK Standard Edition, en
este momento la versión es JDK SE 8u25 para el sistema operativo que te corresponda
ya sea Windows, Linux, Mac o Solaris, recuerda que es muy importante conocer si la
versión de tu S.O. es de 32 o 64 bits. http://www.oracle.com/technetwork/java/javase/
downloads/jdk8-downloads-2133151.html?ssSourceSiteId=otnes
!
Antes de poder descargar tu versión de Java recuerda aceptar la licencia de JAVA SE.
Una vez descargado seguir las instrucciones de instalación del JDK.
Configurar las variables de entorno, para esto dar clic derecho en mi PC y en la
pestaña de Propiedades del Sistema dar clic Variables de entorno.
Buscar la variable “Path” y le damos editar y le agregamos la siguiente línea ;C:
\Program Files\Java\jdk1.6.0_21\bin
Buscamos la variable “Classpath”, si no está la creamos y le agregamos la siguiente
línea ;C:\Program Files\Java\jdk1.6.0_25\src.zip
Verificamos que este correctamente instalado entrando a la línea de comandos CMD y
escribimos el comando “java -version” y el comando “javac -version”, si ambos
comandos corren bien y nos muestra la versión de Java instalada, entonces tendremos
nuestra maquina virtual y compilador correctamente instalados.
Primer programa en Java
La primera aplicación sencilla y simple es la de “¡Hola Mundo!”, su código es el siguiente
11
//Ejemplo de aplicación Hola Mundo // public class HolaMundo{ public static void main(String args[]) { System.out.println("¡Hola Mundo!"); } }
!
Las primeras dos líneas son comentarios se distinguen por llevar //, este comentario es de
tipo orientado a línea. La línea de “public class HolaMundo” especifica al archivo fuente que
se utilizara un fichero HolaMundo.class, el cual será generado al compilar y no tener ningún
error en el código.
El “public static void main(String[] args)”, especifica el método que el interprete
Java busca para ejecutar en primer lugar.
El “public” significa que el método main() puede ser llamado por cualquiera.
“Static”, es una palabra clave que le dice al compilador que main() se
refiere a su propia clase HolaMundo y no a ninguna instancia de la clase.
“Void” significa es un método que no devuelve nada.
“main” significa que es el método principal (ojo todo programa de Java debe
tener un método main)
Y por último “args[]” es la declaración de un array de Strings.
Se usa el método println() de la clase out que está ubicada en el paquete
System.
Compilación y Ejecución
El compilador javac se encuentra en el directorio bin, de la carpeta donde se ubique el JDK,
el cual para no tener problemas de compilación debe de estar declarado en la variable de
entorno “path” del sistema operativo.
Una vez creado el archivo fuente, en la línea de comandos se puede compilar con el
comando:
Javac nombrearchivo.java
En el caso del programa de Hola Mundo quedaría así:
12
javac HolaMundo.java
Si no hay errores, el compilador creará un archivo con extensión .class en el mismo
directorio donde se encuentra el archivo fuente. En caso que se muestren errores, el
compilador mostrará en donde se encuentran para poder corregirlos.
Para ejecutar el programa, desde la línea de comandos se escribe el comando:
java nombrearchivo
En el caso del programa de Hola Mundo quedaría así:
java HolaMundo
Actividad de Clase
1.- Verificar que se tenga instalado Java en el equipo que se este utilizando
2.- Si se encuentra instalado anotar la versión de Java instalada
3.- Identificar el Sistema Operativo y versión del S.O.
4.- ¿Cómo ingresas a la línea de comandos en Windows?
5.- ¿Cuál es el comando para compilar un programa en Java?
6.-¿Cuál es el comando para ejecutar un programa en Java?
7.- Si el código no tiene errores, ¿Cuál es la extensión del archivo generado por el
compilador?
8.- Cual es el editor utilizado para crear códigos en Java
9.- ¿Que pasa cuando el compilador te marca un error en tu código, y lo ejecutas?, ¿Qué
mensaje de marca la consola?
10.- Elaborar los siguientes códigos en Java, primero hay que hacerlos en papel y después
pasarlos a la computadora.
Mostrar el mensaje de “Hola Mundo”
Mostrar pantalla la matricula y nombre del alumno.
Mostrar las materias que estas cursando.
Conceptos básicos
Objeto: es una instanciación de una clase y tiene un estado y un funcionamiento. El estado
está contenido en sus variables y está determinado por sus métodos.
13
Clase: Todo en Java forma parte de una Clase, las acciones de los programas se colocan
dentro del bloque de una clase o un Objeto, el cual es una instancia de una clase y todos los
métodos se definen dentro del bloque de la clase.
Método: Son funciones que pueden ser llamadas dentro de la clase o por otras clases.
Consta de dos partes, una declaración y un cuerpo. Si no retorna ningún valor se declara de
tipo Void, pero si retorna algún valor debe declararse de ese tipo de valor y para devolver
ese valor se utiliza la palabra clave “return();”
Subclase: Cuando se pueden crear nuevas clases por herencia de clases ya existentes, las
nuevas clases se llaman subclases, mientras que las clases de donde hereda se llama
superclases. Cualquier objeto de la subclase contiene todas las variables y todos los
métodos de la superclase y sus antecesores.
Constructor: Es un método en especifico que siempre tiene el mismo nombre que la clase y
se utiliza para construir objetos de esa clase. No tiene tipo de dato específico de retorno, ni
siquiera void, esto es, porque un constructor de clase devuelve a su misma clase. Su función
principal es inicializar el nuevo objeto que se instancia de la clase.
Tipos de Clases
Public: son accesibles desde otras clases, ya sea directamente o por herencia, para acceder
a ellas desde otros paquetes, primero se tienen que importar.
Abstract: son aquellas que cuentan con un método abstracto, las cuales no se instancian,
sino que se utiliza como clase base para la herencia.
Final: Cuando se usan herencias, esta clase se utiliza para definir donde termina la cadena
de herencias.
Synchronizable: especifica que todos los métodos definidos en la clase son sincronizados,
es decir, que no se puede acceder al mismo tiempo a ellos desde distintas tareas.
Uso de Comentarios
En java existen tres tipos de comentarios
// comentarios para una sola línea
/* Texto */ comentarios de una o más líneas
14
/** Texto */ comentario de documentación para una o más líneas, usado también
para generar automáticamente la documentación del programa con el comando
“javadoc”
Palabras Reservadas
!
Cabe hacer notar que aunque las palabras const y goto están reservadas, no se utilizan.
Adicionalmente, Java emplea los nombres (los cuales tampoco pueden utilizarse como
propios):
true,
false y
null
Espacios en blanco
En Java, un espacio entre dos palabras, un tabulador o un carácter de nueva línea son
considerados un espacio en blanco. Los espacios en blanco son obligatorios únicamente
para delimitar elementos del código que no están separados de antemano por algún
operador o separador válido.
Así, técnicamente hablando (aunque no es lo más recomendable) podríamos tener todo un
código escrito en una sola línea o dividido en centenares de ellas.
15
if (i > 5) System.out.println(“Y es mayor que 5”); Es exactamente lo mismo que: if(i>5)System.out.println(“Y es mayor que 5”); Y que: if( i> 5) System. out.println (“Y es mayor que 5” ) ;
!
Es inválido sin embargo dividir identificadores, palabras reservadas o cadenas literales con
caracteres de nueva línea; lo siguiente por ejemplo causaría un error de compilación:
System.out.println(“Y es mayor que 5”);
!
Para separar una cadena literal en dos líneas, coloque una diagonal invertida ( \ ) antes del
carácter de nueva línea de la siguiente forma:
System.out.println(“Y es mayor\ que 5”);
!
Practica #1: Primer aplicación en Java
16
Identificadores
Los identificadores nombran variables, funciones, clases, y objetos; cualquier cosa que
queramos identificar o usar. Se caracterizan por comenzar con una letra, guión bajo (_) o un
símbolo de peso ($), de ahí los siguientes caracteres pueden ser letras o dígitos. Se
distinguen mayúsculas y minúsculas y no hay longitud máxima.
Ejemplo: tipo identificador [= valor], [identificador [= valor]]; int variable; char nombre, apellido_paterno; float $cantidad;
!
Tipos de Valores
En Java se utilizan cinco tipos de elementos:
Enteros, almacenan datos numéricos que no contienen punto decimal: byte (8bits),
short (16 bits), int 32( bits),
long (64 bits).
Reales o punto flotante, almacenan datos numéricos que contienen punto decimal:
float (32 bits), doublé (64 bits).
Booleanos o lógicos: True, False.
Caracteres: char
Cadenas: String
Para almacenar más de un carácter se usan las variables de tipo String. Se recomienda
(cuando la longitud del valor lo permita) utilizar el tipo double para números reales o de punto
flotante y el tipo int para los enteros.
Separadores
Los separadores definen la forma y función del código, los admitidos en Java son:
( ) Paréntesis: Para contener listas de parámetros, llamada a métodos, definir
precedencia de expresiones, contener expresiones para el control de flujo.
{ } Llaves: Para contener los valores de matrices inicializadas automáticamente,
definir un bloque de código, clases, métodos y ámbitos locales.
[ ] Corchetes: Para declarar tipos matriz y cuando se hace referencia a valores de
una matriz.
; Punto y coma: Separa sentencias.
17
, Coma: Separa identificadores consecutivos en la declaración de variables, para
encadenar sentencias dentro de un for.
. Punto: Para separar nombres de paquetes, subpaquetes, clases, además de
separar una variable o método de una variable de referencia.
Operadores
Operadores Aritméticos
+ Suma (también utilizado para concatenar cadenas)
- Resta
* Multiplicación
/ División
% Modulo (obtiene el residuo de una división)
Operadores Unarios
+ Valor Positivo
- Valor Negativo
++ Suma 1 al operando
-- Resta 1 al operando
Operadores Relacionales y Condicionales
> El operando izquierdo es mayor que el derecho
>= El operando izquierdo es mayor o igual que el derecho
< El operando izquierdo es menor que el derecho
<= El operando izquierdo es menor o igual que el derecho
== El operando izquierdo es igual que el derecho
!= El operando izquierdo es distinto que el derecho
&& Ambas expresiones son verdaderas, también conocido como AND
|| Alguna de las expresiones es verdadera, también conocido como OR
! La expresión de la derecha es false
18
Operadores a nivel de Bits
Operadores de Asignación
Son operadores compuestos de otros operadores para realizar la operación deseada y luego
asignar el valor obtenido al operando situado a la izquierda del operador de asignación, de
este modo se pueden hacer dos operaciones con un solo operador.
+=
-=
*=
/=
%=
&=
|=
^=
Operador Ternario if - then - else
La forma general de este operador es la siguiente:
Expresión ? sentencia1 : sentencia2
19
En donde Expresión puede ser cualquiera que nos de cómo resultado un valor booleano, en
caso de ser verdadero ejecuta la sentencia1, y en caso de ser falso ejecutará la sentencia2.
class EjemploTernario { public static void main( String args[] ) { int a = 28; int b = 4; int c = 45; int d = 0; int e = (b == 0) ? 0 : (a / b); int f = (d == 0) ? 0 : (c / d); System.out.println( "a = " + a ); System.out.println( "b = " + b ); System.out.println( "c = " + c ); System.out.println( "d = " + d ); System.out.println(); System.out.println( "a / b = " + e ); System.out.println( "c / d = " + f ); } }
!
Operadores Constantes
Java permite el uso de expresiones constantes, las cuales sirven para declarar datos desde
un inicio que son constantes y que no van a variar, la forma de hacerlo es utilizando la
palabra final antes de declarar una variable tal como se muestra:
final float PI = 3.1415926
Manejo de Arreglos
En java se pueden declarar arreglos de cualquier tipo e incluso arreglos de arreglos. Para
declarar un arreglo se debe escribir la siguiente sintaxis:
20
TipoElemento[] = nombreDelArreglo = new TipoElemento[tamañoArreglo] char s[]; int Arreglo[] = new int[50]; int Tabla[][] = new int[4][5]; Crear un arreglo ya con variables String nombres [] = {“Juan”,”Pedro”,”Hugo”,”Luis”}; Lo que es equivalente a: String nombres[]; nombres = new String[4]; nombres[0] = new String (“Juan”); nombres[1] = new String (“Pedro”); nombres[2] = new String (“Hugo”); nombres[4] = new String (“Luis”);
!
No se pueden crear arreglos estáticos en tiempo de compilación:
int lista[50]; //Generará un error en tiempo de compilación
Tampoco se puede rellenar un arreglo sin declarar el tamaño con el operador “new”:
int lista[];
for (int i=o; i<9; i++)
lista[i] = i;
Todos los arreglos en Java cuentan con el atributo “length”, el cual se utiliza para conocer la
longitud del arreglo.
int a[][] = new int[10][3];
a.length; //10
a[0].length; //3
Practica #2: Uso de Variables y Arreglos
21
Tarea 2: Responder a las preguntas y realizar los programas solicitados.
1. ¿En línea de comandos, que comando hace posible cambiarnos de carpeta?
2. ¿En línea de comandos, que comando hace posible ver los archivos y directorios que se encuentran
en la carpeta en donde nos ubicamos?
3. ¿Cómo se compila un programa en Java?
4. ¿Cómo se ejecuta un programa en Java?
5. Crear un programa que muestre en pantalla las preguntas anteriores con sus respectivas respuestas
6. Crear un programa que guarde con un arreglo que imprima 10 números.
7. Crear un programa que imprima en pantalla 15 comandos reservados de Java
8. Crear un programa en el cual realicen las operaciones matemáticas de Suma, Resta, Multiplicación
y División.
9. Crea un programa en donde manejes el operador ternario
Uso de Clases
Declaración de una clase
Es recomendable crear un archivo de texto en donde declararemos una clase por cada
objeto identificado en nuestro problema, aunque es posible declarar varios objetos dentro de
un mismo archivo de texto.
[Tipo Clase] class nombreclase{ } Si declaramos más clases en el mismo documento en donde se encuentra nuestra clase
principal, la sintaxis es la siguiente:
class nombreclase{ }; En donde:
[Tipo Clase] determinan la accesibilidad de otras clases a la clase que se está
declarando, así como el comportamiento de su herencia. Todos son opcionales y
por el momento se empleará public.
La palabra reservada class es obligatoria y le dice al compilador que el bloque de
código siguiente es una declaración de clase.
22
nombreclase será el nombre de la clase según las reglas vistas con anterioridad.
Como se mencionó ya, el nombre de la clase debe coincidir exactamente con el
nombre del archivo .java que la contiene.
Las llaves de apertura y cierre ( { } ) delimitan el cuerpo de nuestra definición de
clase. Todas las variables y métodos de la clase deberán ir encerrados en este
bloque.
Declaración e inicialización de los atributos de una clase
Las variables de clase, conocidas formalmente como atributos, se colocan después de la
llave de apertura de la clase. Como cualquier tipo de variable, los atributos se utilizan para
almacenar y recuperar datos en nuestros programas.
Los atributos deben colocarse de manera obligatoria afuera de cualquier método. También se
les conoce como variables miembro o variables de instancia dado que cuando un objeto es
instanciado, estas variables se encargarán de contener los datos específicos de cada objeto
creado (en otras palabras, habrá una copia de ellas por objeto). Aunque inicialmente todas
las variables miembro de un objeto contendrán el mismo valor, esto podrá cambiar después.
La declaración e inicialización de los atributos de una clase tiene la siguiente sintaxis:
[modificadores] tipo variable [= valor]; En donde:
[modificadores] representan diversas palabras reservadas que definen la forma
en que las variables de la clase son accedidos. Todos son opcionales y por ahora
se empleará el modificador public.
tipo representa el tipo de dato primitivo que la variable contendrá. Así, algunas
variables contendrán números enteros, reales, caracteres o valores booleanos.
variable será el nombre que se le asignará a la variable según las reglas vistas
con anterioridad.
valor será el valor que se desea asignar a la variable y es opcional.
public int shirtID = 0; public char colorCode = „G‟; public float orderTotal; !
23
Es posible de hecho, declarar simultáneamente (e incluso inicializar) varios atributos del
mismo tipo; para ello se emplea el separador coma con la siguiente sintaxis:
[modificadores] tipo identificador[=valor][,identificador2[=valor]…]; public String Nombre, Apellido, Direccion; public int contador=0, total=1; !
Declaración de los métodos de una clase
Los métodos siguen a los atributos de la clase; su sintaxis es la siguiente:
[modificadores] tipoderetorno identificador([argumentos]){ bloque_de_instrucciones } En donde:
[modificadores] representan diversas palabras reservadas que definen la forma
en que los métodos son accedidos. Todos son opcionales y por el momento se
empleará public.
tipoderetorno indica el tipo de valor que el método regresa (en caso de haberlo).
Los valores retornados por un método pueden ser empleados por el método que
los invoca y podrá ser a lo mucho uno. Si el método no retorna nada, la palabra
clave void deberá usarse como tipo de retorno.
identificador será el nombre del método según las reglas vistas con anterioridad.
[argumentos] representa la lista de variables cuyos valores son pasados al
método para que éste trabaje y son opcionales. Los paréntesis de apertura “( “ y
cierre “ ) “ son obligatorios aún cuando el método no requiera ningún argumento.
bloque_de_instrucciones será la lista de sentencias que el método ejecuta. Una
gran variedad de tareas pueden realizarse en el bloque de código o cuerpo de un
método. Así como en otros lenguajes de programación, podrán crearse tantos
bloques de instrucciones internos como se desee o convenga.
Las llaves de apertura y cierre ( { } ) delimitan el cuerpo de nuestro método.
24
public void mensaje(){ String Mensaje = “Hola a todos!”; imprimeMensaje(Mensaje); }//Fin del método mensaje public void imprimeMensaje(String Mensaje){ System.out.println(Mensaje); }// Fin del método imprimeMensaje !
Declaración, instanciamiento e inicialización de objetos
Normalmente todo programa en Java deberá emplear cuando menos un objeto. Para usar
objetos debemos:
1. Definir la clase del objeto en un archivo fuente en donde se detallen sus atributos y
métodos.
2. Definir la clase principal que usará el o los objetos creados.
3. Declarar, instanciar e inicializar los objetos en la clase principal.
4. Invocar sus métodos de las instancias creadas.
Tomemos por ejemplo el siguiente código Java en donde se define a una clase de objeto
llamada Message:
public class Message{ public void mensaje(){ String Mensaje = “Hola a todos!”; imprimeMensaje(Mensaje); }//Fin del método mensaje }
public void imprimeMensaje(String Mensaje){ System.out.println(Mensaje); }// Fin del método imprimeMensaje !
Como podemos notar, esta clase no tiene atributo alguno y únicamente cuenta con dos
método llamados mensaje() e imprimeMensaje(), los cuales no retornan ningún valor, pero
imprimeMensaje(String Mensaje) si recibe un valor.
25
Dado que esta clase no contiene un método main(), será imposible ejecutarla, únicamente
podremos compilarla. Para usarla, deberemos crear una clase principal o de prueba que
llamaremos MessageTest en donde crearemos una instancia del objeto de clase Message e
invocaremos su único método:
!
public class MessageTest{ public static void main(String args[]){ Message myMessage = new Message(); myMessage.printMessage(); } } En el código anterior notamos una sintaxis nueva en la tercera línea; ésta es la declaración,
instanciamiento e inicialización de un objeto de clase Message. La sintaxis genérica es la
siguiente:
nombredeclase identificador = new nombredeclase(); En donde:
nombredeclase representa el nombre de la clase de objeto a instanciar.
identificador será el nombre que se le asignará a la instancia (también llamada
referencia de objeto).
new será la palabra clave encargada de instanciar un objeto empleando como
plantilla a la clase especificada por nombredeclase.
Lo anterior puede realizarse también en dos líneas:
nombredeclase identificador; identificador = new nombredeclase(); Para el caso anterior tendríamos:
Message myMessage; myMessage = new Message(); Por último, analicemos la cuarta línea; aquí invocamos el método del objeto empleando una
sintaxis genérica:
26
identificadordeobjeto.identificadordemétodo(); Dado que la sintaxis completa que se emplea para invocar un método varía
considerablemente según la situación, se verá con detalle en un apartado más adelante.
Java no permite el uso de apuntadores por parte del programador, lo cual podría verse como
una desventaja aunque en realidad es todo lo contrario, gracias a que no puede haber
manipulación de memoria es imposible invadir entornos ajenos al de nuestras aplicaciones y
por lo tanto la seguridad de nuestro sistema estará siempre garantizada.
Ejemplo del Elevador:
Las principales funciones de un elevador son:
Subir
Bajar
Abrir Puerta
Cerrar Puerta
Por lo que estas son métodos forman parte de la clase funciones del elevador, quedando en
código así:
//Ejemplo del Elevador // public class Elevador{ public static void main(String args[]) { //Creamos la instancia a la clase FuncionesElevador FuncionesElevador Funcion = new FuncionesElevador(); //Mandamos a llamar a los métodos de la clase FuncionesElevador Funcion.abrir(); Funcion.cerrar(); Funcion.subir(); Funcion.abrir(); Funcion.cerrar(); Funcion.bajar(); Funcion.abrir(); } } !
27
class FuncionesElevador{ public void subir(){ System.out.println("Elevador subiendo"); } public void bajar(){ System.out.println("Elevador bajando"); } public void abrir(){ System.out.println("Abriendo Puerta"); } public void cerrar(){ System.out.println("Cerrando Puerta"); } }; Practica #3: Uso de Clases y Métodos
Tarea 3: Ejercicio básico en Java e Investigación.
1.- Crear un programa que calcule el año en que nació una persona con proporcionar en una variable
la edad.
2.- Investigar sobre las sentencias de salto (if/else y switch), como se usan y cuando se usan.
28
Control de Flujo
If / Else
En el ciclo “if” el código se ejecutará siempre y cuando la expresión_booleana sea
evaluada como verdadera, en caso de que sea evaluada como falsa, se podrá incluir un
“else”. Cuando se trate de un solo enunciado, se podrá hacer caso omiso de las llaves que
delimitan al bloque. Además, se podrá hacer el uso de anidaciones, esto quiere decir que se
puede poner un if, dentro del código de un if, tal como se muestra:
if (x == y) System.out.println("x es igual a y"); else if (x > y) System.out.println("x es mayor que y"); else System.out.println("x es menor que y"); !
29
//Ejemplo de Menu public class Principal{ public static void main(String args[]) { Menu menuP = new Menu(); menuP.muestraMenu(); menuP.elijeOpcion(4); } } class Menu{ public void muestraMenu(){ System.out.println("Menu de Catalogo de Ropa"); System.out.println("1.-­‐ Agregar Valor"); System.out.println("2.-­‐ Borrar Valor"); System.out.println("3.-­‐ Mostrar Valores"); System.out.println("4.-­‐ Salir"); } public void elijeOpcion(int opcion){ switch(opcion){ case 1: System.out.println("Opcion elegida 1"); break; case 2: System.out.println("Opcion elegida 2"); break; case 3: System.out.println("Opcion elegida 3"); break; case 4: System.out.println("Opcion elegida 4"); break; default: System.out.println("Opcion no valida"); break; } } }; !
30
Switch
Permite que el programa ejecute diferentes bloques de instrucciones basado en una
expresión que puede tener más de dos valores. Su sintaxis es la siguiente:
!
switch (variable){ case Valor_1: bloque_1; break; case Valor _2: bloque_2; break; ... case Valor _n: bloque_n; break; [default: bloque_default;] } En donde la variable podrá ser de cualquier tipo y se compara contra cada case:
En caso de encontrar igualdad, la ejecución es transferida al bloque de enunciados
que se encuentra a continuación del caso correspondiente.
De no encontrar una igualdad, se ejecuta la opción default.
Si no hay igualdad ni sentencia default, la ejecución pasa al primer enunciado
después de la llave de cierre del switch.
El case podrá estar constituido por una constante entera o por valores literales válidos, pero
nunca variables o llamados a métodos. En caso de buscar coincidencia con caracteres,
deberán estar encerrados en comillas simples. Es de suma importancia el agregar un
enunciado break después del último enunciado de cada bloque, ya que de lo contrario todos
los enunciados posteriores pertenecientes a los bloques restantes, se ejecutarán también.
Bucle For
Este bucle es una construcción que ejecuta un bloque de uno o más enunciados una
determinada cantidad de veces. En Java, tiene la siguiente estructura:
for(inicial; expresión_booleana; incremento){ bloque; } 31
En donde:
inicial será por lo general una expresión de asignación que ponga una variable a
un valor determinado de inicio y dicha variable será típicamente la que controle el
ciclo.
expresión_booleana será la expresión a evaluar; el ciclo se ejecutará mientras
sea verdadera y terminará cuando sea falsa.
incremento será la expresión que determine el incremento o decremento de la
variable controladora.
bloque será el o los enunciados a realizar en el ciclo.
for (int count = 1; count <= 20; count++) System.out.println(count); !
La flexibilidad del ciclo for permite que la variable controladora no necesariamente debe ser
inicializada dentro del ciclo, además, el incremento o decremento puede ser hecho en
cualquier otra parte del ciclo:
int count = 1; for ( ; count < 1000; ) System.out.println(count++); !
Al igual que una instrucción condicional, un ciclo for puede ser ejecutado dentro de otro,
logrando así una construcción más compleja y efectiva.
A partir de la versión J2SE 5, el lenguaje Java incorpora otra forma de utilización del bucle
for en la cual no es necesario indicar el índice para recuperar un elemento, haciendo más
claro el código.
for ( parámetro : expresión ) sentencias Esta forma se utiliza principalmente para los arreglos, donde expresión debe ser un array o
una instancia de la interfaz Iterable, que permite el uso de esta nueva forma del bucle for.
Por ejemplo, si se quieren recuperar los valores de un arreglo, se puede hacer de la
siguiente forma clásica:
32
int impares [] = {1,3,5,7,9,11,13}; for (int i =0; i<7; i++) System.out.println(“Numero impar: “ + impares[i]); !
Pero al utilizar la nueva forma introducida por la versión J2SE 5, se puede escribir el mismo
código de la siguiente forma:
int impares [] = {1,3,5,7,9,11,13}; for (int num : impares) System.out.println(“Numero impar: “ + num); !
public class EjemploFor2{ public static void main (String args[]){ Arreglo miArreglo = new Arreglo(); miArreglo.llenaArreglo(); miArreglo.imprimeArreglo(); } } class Arreglo{ int arreglo[] = new int[10]; public void llenaArreglo(){ for(int x = 0; x<10; x++) arreglo[x] = x; } public void imprimeArreglo(){ for(int x : arreglo) System.out.println(arreglo[x]); } }; !
Practica #4: Uso de control de flujo
33
Tarea 4: Ejercicio Elevador.
1.- Retomar el código fuente de “Elevador”, e implementar el uso de if/else el cual envíe instrucciones
para abrir y cerrar puertas, esto es, si la puerta esta abierta, no puedes subir de piso, si la puerta esta
cerrada puedes moverte entre pisos. Además de un switch para indicar a que piso se requiere ir,
también el programa debe indicar si el elevador sube o baja. Guardar el archivo como Elevador2.java.
Compilar el archivo mediante la línea de comandos, en caso que el compilador marque un error,
corregir el código fuente, y compilar nuevamente. Si no hay error en el código fuente, ejecutar el
programa.
2. Crear un programa llamado “Ejemplo_if.java”, en el cual elaboren utilizando clases un método que
compare si un número almacenado en una variable es mayor que otro número almacenado en una
segunda variable (los números los eligen ustedes aleatoriamente desde el block de notas), si el
número es mayor imprimir en pantalla “El número X es mayor que el número Y”, en caso contrario
imprimir “El número Y es mayor que el número X”.
3. Crear un programa llamado “Ejemplo_swich.java”, en el cual inicializamos en una variable X con
un número del 1 al 10, y al entrar al switch, este debe elegir la opción correcta e imprimir en pantalla
el número en forma de texto por ejemplo si X=2, el sistema debe imprimir en pantalla “El número
ingresado es Dos”, en caso que X sea diferente del rango especificado que imprima “Número
invalido”.
Bucle While
Es la sentencia más básica de Java, se ejecuta repetidamente una vez tras otra mientras
una expresión booleana sea verdadera. Se utiliza para crear una condición de entrada, la
cual controla el bucle y se comprueba antes de ejecutar cualquiera de las sentencias que se
encuentran situadas en el interior del bucle, de tal modo que si la comprobación desde un
inicio es false, el código dentro de la sentencia while no se ejecutará.
while (expresión booleana){ sentencias; [iteración] } !
34
Bucle Do - While
Es utilizado cuando se desea que un ciclo while se ejecute al menos una vez, incluso si la
expresión booleana es falsa desde la primera vez, esto quiere decir que se utiliza cuando se
desea evaluar la expresión de terminación al final del bucle en vez de al principio como se
hace en el bucle while.
do{ sentencias; [iteración] } while (expresión booleana) !
Control general de flujo
break: Puede utilizarse en una sentencia switch o en un bucle, cuando se encuentra en una
sentencia switch, hace que el control del flujo del programa pase a la siguiente sentencia que
se encuentra fuera del entorno del switch, pero si se encuentra en un bucle, hace que el flujo
de ejecución del programa deje el ámbito del bucle y pase a la siguiente sentencia.
continue: no se puede utilizar en una sentencia switch, sino solamente en bucles, lo que
hace es que la iteración en que se encuentra finaliza y se inicia la siguiente.
Uno: for(){ Dos: for(){ continue; continue uno; break uno; } } !
Excepciones
Java implementa excepciones para facilitar la construcción de código robusto. Cuanto ocurre
un error en un programa, el código que encuentra el error lanza una excepción, que se
puede capturar y recuperarse de ella. Java provee muchas excepciones predefinidas.
35
try{ sentencias; } catch(Exception) { Sentencias; } !
//Ejemplo de try-­‐catch que introduce un retardo class tryCatch{ public static void main(String[] args) { try{ System.out.print("Esperando"); for(int x=0; x<3; x++){ Thread.currentThread().sleep(1000); System.out.print("."); } } catch (Exception e){ System.out.println(e); } } } !
Lectura Estándar
La lectura estándar, es utilizada para capturar texto desde la línea de comandos en Java,
esto nos sirve para ir almacenando datos en variables y poder ir interactuando mas con los
programas realizados en Java. Existen dos para capturar texto desde la línea de comandos,
la primera de ellas es mediante la clase IO y la segunda mediante la clase Scanner.
En el caso de la primera opción, se debe importar la librería de java.io, en la cual se
encuentran los métodos necesarios para que pueda funcionar nuestro programa. La sintaxis
básica para la lectura estándar es la siguiente:
36
import java.io.*; public class Lectura{ public static void main(String[] args) throws IOException { String cadena; BufferedReader stdin = new BufferedReader (new InputStreamReader(System.in)); System.out.print("Ingresa un texto: "); cadena = stdin.readLine(); System.out.println("Has escrito: " + cadena); } } !
En donde:
import java.io.* es la clase a importar para que funcionen los métodos a utilizar.
throws IOException permite atrapar todas aquellas excepciones que tengamos
en el programa.
BufferedReader stdin = new BufferedReader (new InputStreamReader
(System.in)), se declara una variable que pueda capturar texto de la línea de
comandos.
stdin.readLine() este comando sirve para leer el texto de la línea de comandos y
poder guardarlo en una variable de tipo String
Para la segunda opción de captura de texto desde la línea de comandos, se puede utilizar la
clase Scanner, la cual facilita la tarea de leer y analizar cadenas y tipos básicos de datos en
las aplicaciones, incorporando para ello el uso de expresiones regulares. Un ejemplo básico
donde se utiliza está clase es el siguiente código.
37
import java.util.Scanner; class scanner{ public static void main(String[] args) { String nombre = ""; int edad = 0; Scanner s = new Scanner(System.in); System.out.print("Introduzce tu nombre: "); try{ nombre = s.nextLine(); } catch (Exception e){ System.out.println(e); } System.out.print("Introduzce tu edad: "); try{ edad = s.nextInt(); } catch (Exception e){ System.out.println(e); } System.out.println("Tu nombre es " + nombre + " y tienes " + edad + " anios" ); } } !
En donde:
import java.util.Scanner es la clase a importar para que funcionen los métodos a
utilizar.
Scanner s = new Scanner(System.in) declara una variable que pueda capturar
texto de la línea de comandos.
S.next() Lee una cadena de caracteres de la línea de comandos, pero al encontrar
un espacio termina la cadena.
s.nextLine() Lee una cadena de caracteres de la línea de comandos, toma en
cuenta los espacios.
S.nextInt() Lee números enteros de la línea de comandos.
S.nextDouble() Lee números de punto flotante de la línea de comandos.
Practica #5: Uso de control de flujo, Excepciones y Lectura Estándar
38
Tarea 5: Ejercicio Catalogo.
1.- Retomar el código fuente de “Catalogo”, y utilizar la línea estándar para inicializar los valores a las
variables de las clases creadas de Pantalón, Playera, entre otras. Guardar el archivo como
Catalogo3.java. Compilar el archivo mediante la línea de comandos, en caso que el compilador
marque un error, corregir el código fuente, y compilar nuevamente. Si no hay error en el código
fuente, ejecutar el programa
2. Crear un programa llamado Tarea5, el cual deberá mostrar un menú en pantalla (con al menos 5
opciones) y desde la línea de comandos el usuario podrá elegir la opción deseada. Compilar el
archivo y ejecutarlo
Practica #6: Repaso de los temas vistos
Tarea 6: Manejo de Menus.
Crear un programa llamado Tarea6. el cual deberá mostrar un menú en pantalla (con al menos 5
opciones) y desde la línea de comandos el usuario podrá elegir la opción deseada. Guardar el archivo
en la carpeta de “Practica 6”. Compilar el archivo y ejecutarlo.
Aplicar Examen Parcial
39
Java Avanzado
En los temas anteriores, se vio la estructura de Java, como funciona, así como los comandos
básicos en donde se explicó como se utilizan los arreglos, para este capítulo se explicará
mas a detalle el uso de arreglos unidimensionales y bidimensionales (también llamados
matrices).
Matrices de datos
Una matriz en Java es muy similar a un arreglo, con la diferencia que presenta dos
dimensiones. Para poder declararla se utiliza la siguiente sintaxis:
tipo nombrematriz [x][y] En donde:
tipo, es tipo de elemento a utilizar (int, string, double)
nombrematriz, es el nombre que le asignamos a la matriz
[x] [y], es en donde asignamos el tamaño a la matriz.
!
public class EjemploMatriz{ public static void main (String Args[]){ int matriz[][] = new int [5][4];//declara la matriz int x, y, contador = 1; for(x=0;x<5;x++){ //for para las filas for(y=0; y<4; y++) //for para las columnas matriz[x][y] = contador++; } for(x=0;x<5;x++){ System.out.println(" "); for(y=0; y<4; y++) System.out.print(matriz[x][y] + "\t"); } } } Hay que tener en cuenta que en una matriz se basa en filas y columnas para esto el primer
valor de la matriz referencia al número de filas y el segundo valor al número de columnas, el
siguiente esquema muestra cómo serían los valores en una matriz de tamaño [ 3 ] [ 4 ].
40
Columna 1
Columna 2
Columna 3
Columna 4
Fila 1
[0] [0]
[0] [1]
[0] [2]
[0] [3]
Fila 2
[1] [0]
[1] [1]
[1] [2]
[1] [3]
Fila 3
[2] [0]
[2] [1]
[2] [2]
[2] [3]
Ordenar arreglos
La ordenación de datos se refiere a colocar los datos en un orden particular, puede ser
ascendente o descendente, es una de las aplicaciones más importantes y utilizadas en la
programación. Por ejemplo, un banco clasifica todos los cheques por número de cuenta, de
tal forma que al final de cada mes puede preparar estados de cuenta individuales. Para
facilitar la búsqueda de números telefónicos las listas de cuentas de usuarios son ordenados
por apellido y dentro de ello por nombre.
Uno de los métodos de ordenación de arreglos más conocidos es la ordenación tipo burbuja
u ordenación por hundimiento, porque los valores más pequeños de forma gradual “flotan”
hacia la parte superior del arreglo, como suben las burbujas de aire en el agua, mientras que
los valores más grandes se hunden al fondo del arreglo.
La técnica consiste en llevar a cabo varias pasadas a través del arreglo. En cada pasada, se
comparan pares sucesivos de elementos, si un par está en orden creciente o si son idénticos
en sus valores, dejamos los valores como tal, pero si un par aparece en orden decreciente
sus valores en el arreglo se intercambian de lugar.
41
public class EjemploOrdena{ public static void main (String Args[]){ int arreglo[] = {9,3,4,1,6,8,10,5,2,7};//declara el arreglo int x, tam, pasada, almacena; tam = arreglo.length; //tamaño del arreglo for(pasada=1; pasada<tam ;pasada++){ //pasada for(x=0; x<tam -­‐1; x++){ //una pasada if(arreglo[x]>arreglo[x+1]){ //comparación almacena = arreglo[x]; //un cambio arreglo[x] = arreglo[x+1]; //cambia posición arreglo[x+1] = almacena; //cambia posición} } } //imprime arreglo System.out.println("El arreglo ordenado es: \n"); for(x=0; x<tam; x++) System.out.print(arreglo[x] + "\t"); }//fin main }//fin clase !
Primero el programa compara al arreglo[0] con el arreglo[1], después el arreglo[1] con el
arreglo[2] y así sucesivamente hasta completar la pasada, hay que recalcar que aunque el
arreglo sea de un tamaño X, se debe comparar en un tamaño X-1, por ejemplo si el arreglo
es de tamaño 10, se debe comparar 9 veces, esto es debido a la forma en que se realizan
las comparaciones, dado que si fueran 10 veces las comparaciones nos marcaría un error
por desbordamiento del arreglo.
En la primera pasada, el valor más grande está garantizando que se hundirá hasta el
elemento más inferior del arreglo. En la segunda pasada el segundo valor más grande se
pasara a la posición X-1 y así sucesivamente hasta llegar al valor más pequeño que se
quedará en la posición del arreglo[0].
La ordenación se ejecuta mediante el ciclo for anidado si un intercambio de valores es
necesario, se realizará mediante las tres asignaciones:
almacena = arreglo[x]; //un cambio arreglo[x] = arreglo[x+1]; //se cambia de posición arreglo[x+1] = almacena; //se cambia de posición !
42
En donde la variable almacena, guarda de forma temporal uno de los dos valores en
intercambio, dado que no se puede hacer dicho intercambio con sólo dos asignaciones, ya
que un valor se perdería.
Este ejemplo es el más sencillo de ordenación, hay que decir que es poco eficiente dado que
con arreglos de mayor tamaño es lenta su ejecución.
Practica #7: Uso de matrices
Tarea 7: Elabora los ejercicios e investiga sobre las Clases String y Math.
1.- Crear un programa denominado Tarea7-1, en el cual llenen e impriman en pantalla una matriz de
enteros de tamaño 3,3.
2.- Crear un programa denominado Tarea7-2, en el cual a partir de las variables “X” y “Y”, definan de
manera dinámica el tamaño de la matriz, posteriormente inicializarla con el valor de 1.
3.- Realizar una investigación sobre las funciones que se pueden aplicar a la clase String y Math.
Practica #8: Operaciones con matrices
Clases en Java
Como se ha visto, en un lenguaje orientado a objetos, las clases en Java definen cualquier
objeto que se puede manipular. Java tiene diversas clases predefinidas las cuales nos sirven
para manipular gráficos, sonidos, construcción de applets, entre muchas otras.
Cada una de estas clases proporcionan características especiales, como el acceso a
funciones matemáticas, de carácter, o a las propiedades del sistema operativo. Algunas de
las clases más utilizadas en Java son:
Math
Character
String
Formatter
Scanner
Properties
Runtime
System
Applet
Awt
Beans
IO
Lang
Net
Nio
Security
SQL
Util
43
Algunas de estas clases serán descritas en este documento, sin embargo si se necesita
conocer más a detalle cómo funcionan las clases en Java, se puede consultar el API (http://
download.oracle.com/javase/6/docs/api/index.html ), que es en donde se describen todos los
métodos conocidos para Java
Clase Math
Representa la librería matemática en Java, las funciones que contiene son las de todos los
lenguajes de programación. El constructor de la clase es privado, por lo que no se pueden
crear instancias de la clase, sin embargo la Math es public para que se pueda llamar desde
cualquier sitio y static para que no haya que inicializarla. Las principales funciones
matemáticas soportadas en Java son:
Método
Math.abs ( x)
Math.sin (double a)
Math.cos (double a)
Math.tan (double a)
Math.asin (double r)
Math.acos (double r)
Math.atan (double r)
Math.atan2 (double a, double b)
Math.exp (double x)
Math.log (double x)
Math.sqrt (double x)
Math.ceil (double a)
Math.floor (double a)
Math.pow (double z, double y)
Math.round (x)
Math.random( )
Math.max (a,b)
Math.min (a,b)
Math.E
Math.PI
Descripción
Para convertir a int, long, float y double
Devuelve el seno del ángulo a en radianes
Devuelve el coseno del ángulo a en radianes
Devuelve la tangente del ángulo a en radianes
Devuelve el ángulo cuyo seno es r
Devuelve el ángulo cuyo coseno es r
Devuelve el ángulo cuya tangente es r
Devuelve el ángulo cuya tangente es a/b
Devuelve e elevado a x
Devuelve el logaritmo natural de x
Devuelve la raiz cuadrada de x
Devuelve el número complete más pequeño mayor o igual que a
Devuelve el valor double truncado de a
Devuelve z elevado a x
Redondea en double y float
Devuelve un número aleatorio en double
Devuelve el número mayor de dos valores int, long, float y double
Devuelve el número menor de dos valores int, long, float y doublé
Constante de base exponencial
Constante para PI
44
public class EjemploMath{ public static void main (String Args[]){ //se declaran las variables int x = 2; double seno, coseno, tangente, pi, aleatorio; //se realizan las operaciones matematicas seno = Math.sin(4.3); coseno = Math.cos(4.3); tangente = Math.tan(4.3); pi = Math.PI; x = Math.exp(4); aleatorio = Math.random(); //Se imprimen los resultados de las operaciones System.out.println("Seno = " + seno); System.out.println("Coseno = " + coseno); System.out.println("Tangente = " + tangente); System.out.println("PI = " + pi); System.out.println("Exponencial = " + x); System.out.println("Aleatorio = " + aleatorio); }//fin main }//fin clase !
Clase String
En la clase String, un objeto representa una cadena alfanumérica de un solo valor constante
que no puede ser cambiada después de haber sido creada. Un objeto StringBuffer
representa una cadena cuyo tamaño puede variar, o bien puede ser modificada por
programa. Algunas de los métodos más usados en esta clase son:
Métodos
Descripción
String.compareTo (String, String2) Compara dos Strings lexicográficamente, retorna un entero 0 si los Strings
son iguales
String.concat (String)
Concatena el String especificado al final de la cadena
String.endsWith (String)
Verifica si un String tiene una terminación deseada, retorna Verdadero o
Falso
String.startsWith (String)
Verifica si un String tiene una comienzo deseado, retorna Verdadero o
Falso
String.equals (object)
Compara un String con otro retornando verdadero o falso
String,lenght ( )
Retorna el tamaño del String
String.toLowerCase ( )
Convierte el String a minúsculas
String.toUpperCase ( )
Convierte el String a mayúsculas
String.toString ( )
Convierte un objeto a String
45
Métodos
String.valueOf ( double )
String.valueOf ( float )
String.valueOf ( int )
String.valueOf ( char )
String.valueOf ( boolean )
Descripción
Retorna el valor de doublé a String
Retorna el valor de float a String
Retorna el valor de int a String
Retorna el valor de char a String
Retorna el valor de boolean a String
!
public class EjemploString{ public static void main (String Args[]){ int tam = 0; double precioD = 12.34; String nombre1, nombre2, precio; nombre1 = "Manuel"; nombre2 = "Carlos"; tam = nombre1.length(); nombre1 = nombre1.toUpperCase(); nombre2 = nombre2.toLowerCase(); precio = String.valueOf(precioD); //Se imprimen los resultados de las operaciones System.out.println("Contiene " + tam + " Caracteres"); System.out.println("nombre1 =" + nombre1); System.out.println("nombre2 = " + nombre2); System.out.println("precio en double = " + precio); }//fin main }//fin clase Practica #9: Uso de las Clases Math y String
Tarea 8: Uso del método random.
1.- Llenar un arreglo con 20 números aleatorios a partir del método random localizado en la librería
math. Realizar la suma de los elementos del arreglo y mostrar en pantalla dicho arreglo y su
resultado. El programa se deberá llamar Tarea8.java
46
Herencia
La herencia en Java es el mecanismo por el que se crean nuevos objetos definidos en
términos de objetos ya existentes. Por decir un ejemplo, si tenemos una clase Automóviles,
se puede crear una subclase llamada subcompactos, que es una categoría de automóviles.
!
Import Automoviles; public class Subcompacto extends Automoviles { public void ConsultaDatosAuto(int x){ int numeroCilindros = x; } } En este caso, la palabra clave extends se usa para generar una subclase (especializada o
derivada) de un objeto, por lo que un Subcompacto es una subclase de Automóviles y con
esto todo lo que este definido en Automóviles será copiada a la clase Subcompacto,
además que en esta subclase se pueden definir sus propios métodos y variables de
instancia, por lo que se dice que Subcompacto hereda de Automóviles. Un ejemplo en
donde se podría utilizar herencia es el siguiente:
//Archivo EjemploHerencia.java //Main public class EjemploHerencia{ public static void main(String Args[]){ EjemploHerencia obj = new EjemploHerencia(); obj.Funcion(new Subcompacto()); } void Funcion (Subcompacto objeto){ objeto.Autos(); objeto.Subcompacto(); objeto.RendimientoGas(58); } } !
47
//Archivo Autos.java //SuperClase public class Autos{ int distancia; public void Autos(){ distancia = 0; } public void RendimientoGas(int restante, int consumoGas){ distancia = restante * consumoGas; System.out.println("te quedan por recorrer = " + distancia + " Kilometros"); } } //Archivo Subcompacto.java //SubClase public class Subcompacto extends Autos{ int tanqueTam; double consumoGas; public void Subcompacto(){ consumoGas = 7.5;// km/L tanqueTam = 58; // Litros } } public void RendimientoGas(int restante){ super.RendimientoGas(restante, consumoGas); } !
48
This
La palabra clave this hace referencia a los miembros de la propia clase, esto se hace cuando
en un método deseamos que una variable contenga un valor distinto al de los demás
métodos de una clase. Por ejemplo:
!
public class EjemploThis{ public static void main(String Args[]){ This x = new This(); x.inicializa(); x.inicializa(10); x.imprimeDatos(); } } class This{ int x; public void inicializa(){ x = 5; } public void inicializa(int y){ this.x = y; System.out.println("El valor de x2 = " + this.x); } public void imprimeDatos(){ System.out.println("El valor de x1 = " + x); } }; Super
Utilizado cuando se requiere llamar al método padre dentro de una clase que ha
reemplazado ese método, se podrá hace referencia al método padre con la palabra clave
super.
Super es muy útil cuando se sobrescribió un método de su superclase y se desea eludir la
versión sobrescrita para invocar la versión original del método, del mismo modo, se puede
utilizar para acceder a las variables miembro de la superclase.
Nota: Al utilizar Super es recomendado utilizar archivos separados para la Superclase,
subclases y Main.
49
//Archivo EjemploSuper.java //Main public class EjemploSuper{ public static void main(String Args[]){ EjemploSuper obj = new EjemploSuper(); obj.Funcion(new MiClase2()); } } void Funcion (MiClase2 objeto){ objeto.MiClase(); objeto.MiClase2(); objeto.suma(5); objeto.suma(2); } !
//Archivo MiClase.java //SuperClase public class MiClase{ int x; public void MiClase(){ x = 5; } public void suma(int y){ x = x + y; } } //Archivo MiClase2.java //SubClase public class MiClase2 extends MiClase{ int x; public void MiClase2(){ x = 5; } public void suma(int y){ super.suma(y); x = x + (y*2); System.out.println("x en la SuperClase= " + super.x); System.out.println("x en la SubClase= " + x); } } 50
Manejo de Excepciones
Una excepción es un evento que ocurre durante la ejecución de un programa y detiene el
flujo normal de la secuencia de instrucciones de ese programa; esto quiere decir que una
excepción es una condición anormal que surge en una secuencia de código durante su
ejecución.
En Java, las excepciones son utilizadas para la detección y corrección de errores, esto es si
en una aplicación existe un error, esta no deberá terminar, lo que se hace es lanzar un throw
(una excepción) y deberá capturarse mediante un catch para poder resolver el error. Las
excepciones se clasifican en tres clases:
1. Excepciones de la Maquina Virtual: Son errores fatales, como falta de memoria,
para recuperarse se recomienda reiniciar el sistema.
2. Excepciones de aplicación: Son errores generados por la aplicación o alguna de
las librerías que incluye, es necesario capturarlas mediante un “Try – Catch”.
3. Excepciones del Sistema: Se derivan de un RuntimeException y son lanzadas
por un código defectuoso.
Para poder generar excepciones en Java, es necesario utilizar la clase Throwable, la cual
tiene dos sublcases la Error y Exception. La subclase Error, indica que se ha producido un
fallo del cual no es posible recuperase, por lo tanto, en este caso no hay nada que hacer,
generando el error ThreadDead, que lo que hace es concluir la ejecución de esa tarea.
La subclase Exception, indica una condición anormal de la cual se puede recuperar el
programa, evitando que termine. Para capturar excepciones lanzadas por un método, se
deben capturar en un bloque que sea try-catch o try-finally.
Try
Es un bloque de código donde se prevé que pueda generarse una excepción, es como decir
“intenta esto y verifica si se produce una excepción”. Este método debe ir seguido siempre
por al menos una cláusula catch o finally. Su sintaxis es:
!
try{ //Código donde se prevé la excepción } 51
Catch
Es utilizado después de un try, para especificar que se produjo una excepción, por lo tanto si
existe un error el catch se ejecuta. Su sintaxis es:
catch (VariableTipoThrowable nombreVariable){ // Código a ejecutar si se genera la excepción } !
Finally
Es utilizado después de un try, pero a diferencia del catch, este se ejecuta siempre exista o
no una excepción. Puede ser útil cuando que se desee que se ejecute sin importar lo que
pase en el bloque try.
finally{ // Código a ejecutar si se genera o no la excepción } !
Throw
Es utilizado para lanzar explícitamente una excepción, para esto se debe obtener un
descriptor de un objeto Throwable. Se puede utilizar bien en dentro del código del try como
dentro del código del catch. Su sintaxis es:
throw ObjetoThrowable; !
Practica #10: Paso de Variables
Practica #11: Creando nuestras librerías
52
Anexo I: Diseño de Interfaces
JSwing
El diseño de interfaces en Java consiste en crear un conjunto de formas y métodos, los
cuales, dan posibilidad de interacción del sistema con el usuario, mediante el uso de
imágenes, formas gráficas, botones, menús, iconos, entre otros. Para poder otorgar estas
formas y métodos, Java utiliza la clase Swing, la cual utiliza componentes de interfaz gráfica
Beans y la Delegación de Eventos de Java. Swing, proporciona un conjunto completo de
componentes, todos ellos lightweight, es decir, ya no se usan componentes “peer”
dependientes del sistema operativo, además de estar escrito 100% en Java.
Algunas de las características que ofrece el uso de Swing son:
Navegación con teclado, sin necesidad de usar un mouse.
Etiquetes de información o “tool tips” se pueden crear sin una sola línea de código.
Soporta “pluggabble look and feel”, esto es, que la apariencia de la aplicación se
adapta dinámicamente al Sistema Operativo.
No soporta el modelo de Eventos de Propagación, sino solamente el modelo de
Delegación incluido desde el JDK 1.1
Utiliza el paradigma Modelo-Vista-Controlador, permite reducir el esfuerzo de
programación necesario para la implementación de sistemas múltiples y
sincronizados.
El paso de AWT a Swing es muy sencillo y no se descarta nada de lo realizado en
AWT.
Es una extensión de AWT, por lo que no va encaminado a reemplazarlo.
Un ejemplo básico de Swing es:
53
import javax.swing.*; public class HolaMundoSwing extends JFrame{ public HolaMundoSwing() { super("Hola Mundo"); JLabel hola = new JLabel("Hola Mundo"); getContentPane().add (hola, "Center"); setSize(200, 100); setVisible(true); } }
public static void main(String[] args) { new HolaMundoSwing(); } !
!
Frames
Es el contenedor o ventana principal de una aplicación Swing. Este componente contendrá el
resto de otros componentes que constituyan la interfaz de la aplicación, proporcionando una
ventana principal con los elementos: Titulo de la ventana, botón de minimizar, maximizar y
cerrar.
Los constructores de Frame son:
JFrame(); JFrame(String); //String es el título que aparecerá en la ventana. 54
import javax.swing.*; public class Ventana{ public Ventana(String titulo) { JFrame ventana = new JFrame(titulo); ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ventana.setSize(200,100); ventana.setVisible(true); } !
}
public static void main(String[] args) { Ventana vent = new Ventana("Uso Frame"); } !
Si queremos que nuestra ventana anterior nos muestre en una etiqueta o label un “Hola”,
debemos agregar una etiqueta tal como se ve en el siguiente código:
!
import javax.swing.*; public class Ventana{ public Ventana(String titulo) { JFrame ventana = new JFrame(titulo); JLabel etiqueta = new JLabel("Hola"); ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ventana.getContentPane().add (etiqueta, "Center"); ventana.setSize(200,100); ventana.setVisible(true); } }
public static void main(String[] args) { Ventana vent = new Ventana("Uso Frame"); } 55
!
Elementos en el diseño de interfaces
Botones
Los botones en la clase Swing utilizan la clase JButton, en donde todos los botones tienen la
posibilidad de incorporar imágenes a través del objeto Icon, que se puede asignar a
cualquier tipo de botón. Su sintaxis general es:
JButton boton1 = new JButton("Nombre Boton"); Algunos de los constructores de esta clase son:
JButton(String, Icon) JButton(String) JButton(Icon) JButton() Un ejemplo básico de Button es:
!
import javax.swing.*; public class UsoBoton{ public UsoBoton(String titulo) { JFrame ventana = new JFrame(titulo); JButton boton = new JButton("Aceptar"); ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ventana.add (boton); ventana.setSize(200,100); ventana.setVisible(true); } }
public static void main(String[] args) { UsoBoton boton = new UsoBoton("Uso Boton"); } 56
!
Etiquetas
Las etiquetas junto con los botones y las cajas de selección, son de los componentes más
básicos de toda interfaz de usuario. La función principal de las etiquetas es mostrar textos en
pantalla, para esto Swing introduce la clase JLabel. Su sintaxis general es:
JLabel Etiqueta1 = new JLabel( ); Algunos de los constructores de esta clase son:
setText (" ") setFont ( "TipoLetra", Font.BOLD, TamañoTexto ) Un ejemplo básico de Label es:
import javax.swing.*; import java.awt.Font; public class Ventana{ public Ventana(String titulo) { JFrame ventana = new JFrame(titulo); JLabel etiqueta = new JLabel(); Font font = new Font("Arial", Font.BOLD,12); etiqueta.setText("¿Qué día es hoy?"); etiqueta.setFont(font); ventana.add(etiqueta); ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ventana.setSize(200,100); ventana.setVisible(true); } }
public static void main(String[] args) { Ventana vent = new Ventana("Uso Etiquetas"); } !
57
!
Practica #12: Manejo de Interfaz Gráfica
Tarea 9: Investigación Interfaz Gráfica.
Elaborar un pequeño manual de usuario sobre cuales son los principales elementos que tenemos en
una interfaz gráfica, como se declaran, las funciones que pueden aplicarle a los objetos y un ejemplo.
58
Bibliografia
Cairó, O.. (2013). Metodología de la Programación: Algoritmos, diagramas de flujo y
programas. México: Alfaomega. ISBN: 970-15-1100-X
Froute, A. (2008). JAVA 2: Manual de usuario y tutorial (5th ed.). México: Alfaomega. ISBN
978-970-15-1430-6.
Joyanes, L.. (2008). Fundamentos de Programación: Algoritmos, estructura de datos y
objetos. México: McGrawHill. ISBN: 978-84-481-6111-8
ORACLE. (2011). Java Platform, Standard Edition 6 API Specification. Recuperado el 5 de
Julio de 2013, de Java SE Documentation.: http://docs.oracle.com/javase/6/docs/api/
ORACLE. (2011). Java Platform, Standard Edition 6 API Specification. Recuperado el 5 de
Julio de 2013, de Java SE Documentation.: http://docs.oracle.com/javase/6/docs/api/java/
awt/package-summary.html
ORACLE. (2013). Java Platform, Standard Edition 7 API Specification. Recuperado el 5 de
Julio de 2013, de Java SE Documentation: http://docs.oracle.com/javase/7/docs/api/
Sznajdeleder, P.. (2012). Algoritmos a fondo, con implementaciones en C y Java. Buenos
Aires, Argentina: Alfaomega. ISBN: 978-987-1609-37-6
59
Indice de Practicas
Practica #1: Primer aplicación en Java
16
Practica #2: Uso de Variables y Arreglos
21
Practica #3: Uso de Clases y Métodos
28
Practica #4: Uso de control de flujo
33
Practica #5: Uso de control de flujo, Excepciones y Lectura Estándar
38
Practica #6: Repaso de los temas vistos
39
Practica #7: Uso de matrices
43
Practica #8: Operaciones con matrices
43
Practica #9: Uso de las Clases Math y String
46
Practica #10: Paso de Variables
52
Practica #11: Creando nuestras librerías
52
Practica #12: Manejo de Interfaz Gráfica
58
60
Índice de Tareas
Tarea 1: Investigación historia Java.
10
Tarea 2: Responder a las preguntas y realizar los programas solicitados.
22
Tarea 3: Ejercicio básico en Java e Investigación.
28
Tarea 4: Ejercicio Elevador.
34
Tarea 5: Ejercicio Catalogo.
39
Tarea 6: Manejo de Menus.
39
Tarea 7: Elabora los ejercicios e investiga sobre las Clases String y Math.
43
Tarea 8: Uso del método random.
46
Tarea 9: Investigación Interfaz Gráfica.
58
61