1. Excelencia Académica
5
PROGRAMACIÓN GENERAL
UNIDAD TEMÁTICA Nº 1
Representación de datos en el computador
Estructura de un computador
Hardware
Software y lenguajes de programación
Autoaprendizaje 8 horas
UNIDAD TEMÁTICA Nº 2
Fundamentos de la Programación Orientada a Objetos
El lenguaje de Programación Java
Modelamiento de Problemas
Actividad 2.1
Componentes de una solución
Actividad 2.2
Modelaje
Características de los datos
Especificación
Actividad 2.3
Refinamiento a pasos
Pasos para el refinamiento a pasos
Actividad 2.4
Autoaprendizaje 8 horas
UNIDAD TEMÁTICA Nº 3
Estructura de un programa orientado a objetos
Gramática en Java
Comentarios
Identificadores
Palabras reservadas
Importación de clases
Declaración de clases y métodos
El IDE de Java
Tipos de datos en Java
Declaración de datos
Instrucciones en Java
Operadores aritméticos
Instrucciones de salida de datos en Java
Instrucciones de entrada de datos en Java
Traducción del modelaje y especificación a un programa Java
Autoaprendizaje 8 horas
UNIDAD TEMÁTICA Nº 4
Taller de programación 1
La clase math
Funciones matemáticas
La clase carácter
2. Excelencia Académica
6
Declaraciones
Comprobaciones boleanas
Traslación de caracteres
Métodos de la clase carácter
La clase float
La clase double
La clase integer
La clase long
La clase bolean
La clase String
Autoaprendizaje 8 horas
UNIDAD TEMÁTICA Nº 5
Estructuras de Control
Estructura condicional if y switch
La sentencia switch
Actividad 5.1
Ciclos repetitivos
Bucle while
Bucle do-while
Bucle for
Sentencias de salto: break, continue y return
Sentencia break
Sentencia continue
Sentencia return
Actividad 5.2
Autoaprendizaje 8 horas
UNIDAD TEMÁTICA Nº 6
Métodos, características y propiedades
Clases y métodos abstractos
Modificadores de visibilidad
Otros modificadores
Conceptos básicos de arreglos
Declaración de arreglos
Creación de objetos de arreglos
Arreglos multidimensionales
Autoaprendizaje 8 horas
UNIDAD TEMÁTICA Nº 7
Paquetes
Autoaprendizaje 8 horas
UNIDAD TEMÁTICA Nº 8
Gráficos
Autoaprendizaje 8 horas
3. Excelencia Académica
7
TABLA DE CONTENIDO
UNIDAD TEMÁTICA I
Representación de datos en el computador 9
Estructura de un computador 11
Hardware 11
Software y lenguajes de programación 13
UNIDAD TEMÁTICA II
Fundamentos de la Programación Orientada a Objetos 17
El lenguaje de Programación Java 19
Modelamiento de Problemas 20
Componentes de una solución 21
Modelaje 22
Características de los datos 22
Especificación 22
Refinamiento a pasos 23
Pasos para el refinamiento a pasos 24
UNIDAD TEMÁTICA III
Estructura de un programa orientado a objetos 29
Gramática en Java 29
Comentarios 29
Identificadores 30
Palabras reservadas 31
Importación de clases 31
Declaración de clases y métodos 32
El IDE de Java 32
Tipos de datos en Java 35
Declaración de datos 37
Instrucciones en Java 37
Operadores aritméticos 38
Instrucciones de salida e datos en Java 40
Instrucciones de entrada de datos en Java 41
Traducción del modelaje y especificación a un programa Java 41
UNIDAD TEMÁTICA IV
Taller de programación I 47
La clase math 49
Funciones matemáticas 50
La clase carácter 53
Declaraciones 53
Comprobaciones boleanas 53
Traslación de caracteres 53
Métodos de la clase carácter 53
La clase float 54
La clase double 54
4. Excelencia Académica
8
La clase integer 55
La clase long 56
La clase bolean 57
La clase String 58
UNIDAD TEMÁTICA V
Estructuras de Control 65
Estructura condicional if y switch 65
La sentencia switch 66
Ciclos repetitivos 69
Bucle while 70
Bucle do-while 70
Bucle for 71
Sentencias de salto: break, continue y return 71
Sentencia break 71
Sentencia continue 72
Sentencia return 73
UNIDAD TEMÁTICA VI
Métodos, características y propiedades 77
Clases y métodos abstractos 78
Modificadores de visibilidad 80
Otros modificadores 81
Conceptos básicos de arreglos 82
Declaración de arreglos 82
Creación de objetos de arreglos 83
Arreglos multidimensionales 85
UNIDAD TEMÁTICA VII
Conceptos básicos de la programación orientada a objetos 89
Atributos 89
Comportamiento 89
El proyecto 90
La clase 90
Los constructores 93
La vida de un objeto 97
Composición 100
Los paquetes 104
Classpath 105
Los paquetes estándar 107
Interfaces 107
UNIDAD TEMÁTICA VIII
Fundamentos para el dibujo con Java 115
Las funciones Saint, repaint y update 115
Visualización de las imágenes 118
Dibujos 123
Apéndices 129
5. Excelencia Académica
9
REPRESENTACIÓN DE DATOS DE UN
COMPUTADOR
Los computadores manejan los datos usando solamente los dígitos binarios 0 y 1 a los que
se les denomina bit. Con este sistema los números se calculan usando potencias de 2 en el
sistema de numeración binario.
Los números binarios se pueden representar fácilmente en otras potencias cuya base es
múltiplo de 2, como la base 8 u octal y la base 16 o hexadecimal.
Una forma fácil de pasar de binario a octal es agrupar los bits de 3 en 3 y representar su
número octal:
Binario Octal
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
De forma similar, se pueden representar los datos en base hexadecimal (base 16), basta
con agrupar los bits en grupos de 4 y representar sus números equivalentes en
hexadecimal:
Binario Hexadecimal Decimal Binario Hexadecimal Decimal
0000 0 0 1000 8 8
0001 1 1 1001 9 9
0010 2 2 1010 A 10
0011 3 3 1011 B 11
0100 4 4 1100 C 12
0101 5 5 1101 D 13
0110 6 6 1110 E 14
0111 7 7 1111 F 15
6. Excelencia Académica
10
Los Números con Signo
De acuerdo al sistema de numeración que se use se reserva por lo general el bit de más a
la izquierda para el signo. Para evitar las ambigüedades del cero cuando se usan la
representación con signo casi universalmente se ha adoptado el sistema de representación
en complemento a 2. La conversión es un poco más difícil de entender inicialmente, pero la
representación en complemento a 2 con números de 8 bits seria:
Binario Decimal
0011 3
0010 2
0001 1
0000 0
1101 -1
1110 -2
1111 -3
En cualquier caso, con 8 bits se pueden representar números sin signo desde 0 hasta 255
mientras que los números con signo serán desde -128 hasta 127.
Los números se representan según algoritmos o métodos de conversión que dependen del
tipo de dato que se quiere representar como enteros sin signo, enteros con signo, números
reales o de punto flotante, números reales de doble precisión, etc.
En cambio el otro tipo de datos que se maneja son los caracteres que van a formar los
textos, estos caracteres se representan mediante un código numérico equivalente, es decir
a cada símbolo de texto o carácter se se asigna un número equivalente llamado código,
siendo el más común el código ASCII que sirve para representar hasta 256 caracteres
diferentes con valores equivalentes desde 0 a 255.
Como la cantidad de caracteres necesarios para realizar comunicaciones es mayor a 256
símbolos, como el caso del español que maneja la ñ y las tildes, o en otros lenguajes que
manejan símbolos especiales, se ha tenido que ampliar la cantidad de símbolos codificados
por lo que actualmente se maneja el UNICODE que dispone de una mayor cantidad de
códigos ya que maneja 16 bits que equivale a 65,536 códigos diferentes.
Así, la letra A se representa con el código 65, el espacio en blanco tiene el código 32, la
letra a se representa con el código 97, el carácter de tabulación tiene el código 9, etc.
Se denomina byte al grupo de 8 bits y es la unidad básica de almacenamiento de datos que
se usa. Esta unidad tiene algunos múltiplos conocidos que son los siguietes:
Kilobyte o Kbyte o Kbequivale a 210
bytes o 1,024 bytes aprox. 103
bytes
Megabyte o Mbyte o Mb equivale a 220
bytes o 1’048,576 bytes aprox. 106
bytes
Gigabyte o Gbyte o Gb equivale a 230
bytes o 1,073’741,824 bytes aprox. 103
bytes
7. Excelencia Académica
11
Estructura de un Computador
Todos los computadores para su funcionamiento requieren dos componentes
fundamentales que son el Hardware y el Software.
Hardware
Son todos los componentes físicos que forman parte de la computadora, es todo lo que se
puede ver y tocar.
Todos los computadores personales tienen una estructura similar que esta formada por
cuatro componentes básicos que son : La CPU (Unidad Central de Procesamiento), La
Memoria, Unidades de entrada/salida y los dispositivos de almacenamiento.
La Unidad Central de Procesamiento (CPU o microprocesador) es el componente principal
y es el lugar en donde se realizan las operaciones lógicas y matemáticas siendo sus
elementos principales los siguientes:
- La Unidad de Control : es la responsable de ejecutar las instrucciones y controlar el
computador.
- Unidad Aritmético Lógica (ALU) donde se realizan las operaciones aritméticas y
lógicas.
- Registros, son pequeñas memorias de alta velocidad donde se almacenan datos e
instrucciones que se están ejecutando.
La evolución respecto a la velocidad de estos procesadores ha sido vertiginosa ya
actualmente los Pentium IV tienen velocidades de 2.4 y 3.0 MHz.
La memoria
La memoria de un computador es el lugar donde se almacenan los datos que el
computador usa como son las instrucciones, los valores de las variables, los valores de las
constantes, el código de programa, el código de las funciones y/o métodos, etc.
En forma básica las memorias pueden ser de dos tipos, memoria RAM y memoria ROM.
Existen otros tipos de memoria derivados de estos dos tipos fundamentales, pero para
nuestro estudio solamente trataremos estos dos tipos de memoria.
El tamaño de una memoria se mide o especifica en bytes con sus múltiplos Kilobyte,
Megabyte o Gigabyte que equivalen aproximadamente a mil bytes, un millón de bytes y mil
millones de bytes respectivamente como se ha visto en un tema anterior.
La memoria RAM
La Memoria de Acceso Aleatorio (RAM) es el lugar en donde se almacenan
los datos e instrucciones del programa así como los datos generados durante la ejecución
del programa. Esta memoria es volátil ya que los datos que almacena se pierden si se
interrumpe la fuente de energía eléctrica. Como su nombre lo indica es una memoria de
acceso aleatorio, es decir el programador tiene acceso total a esta memoria para poner
8. Excelencia Académica
12
datos, modificar sus valores, borrar datos o instrucciones, etc. Por lo que en esta memoria
se pueden leer y escribir datos.
El tamaño actual más difundido de memoria RAM es de 256 Mb.
La memoria ROM
La memoria ROM (Read Only Memory), es la memoria solamente de lectura. En esta
memoria se almacenan datos y programas que solamente pueden ser leídos para su uso
posterior. Esta memoria, como su nombre lo indica, es una memoria solamente de lectura y
los datos que almacena no pueden ser modificados. Esta memoria es permanente o no
volátil, es decir que los datos guardados no desaparecen cuando se interrumpe la fuente
de energía eléctrica como ocurre con las memorias RAM.
Un ejemplo de este tipo de memoria es la BIOS (Basic Input Output System) de la
computadora, que tiene almacenado el programa de arranque inicial de la computadora
que se ejecuta cada vez que prendemos la computadora y nunca puede ser modificado.
Dispositivos de entrada de datos
Los dispositivos de entrada de datos son la base de la comunicación entre el hombre y el
computador, son dispositivos que sirven para convertir las señales analógicas, usadas por
el hombre, en señales digitales entendibles por la computadora.
Los dispositivos de entrada más comunes son el teclado, mouse, lectora óptica, lápiz
óptico, scanner, etc.
Dispositivos de salida de datos
Los dispositivos de salida de datos son las interfases máquina-hombre, son aquellos que
se encargan de convertir las señales digitales en señales analógicas que el ser humano
puede entender.
Los dispositivos de salida más comunes son el monitor de video, las impresoras, ploter,
etc.
Dispositivos y medios de almacenamiento
Los medios de almacenamiento proporcionan almacenamiento permanente de datos, son
más lentos que la memoria RAM pero permiten almacenar gran cantidad de datos
almacenando programas y datos. Estos dispositivos son los diskettes, discos duros, CD
Rom, DVD, etc. Siendo el más común el disco duro de 80 Gb.
Los dispositivos de almacenamiento son los equipos que manejan los medios de
almacenamiento como las lectoras de CD Rom, los disketeras o floppy, etc.
9. Excelencia Académica
13
Software y lenguaje de programación
El hardware solo no puede ejecutar ni hacer nada por lo que es necesario que todo
computador tenga también su software. El software es el llamado programa, es un conjunto
de instrucciones u ordenes con una secuencia definida que el computador ejecuta. Estas
instrucciones se escriben en un lenguaje que el computador entienda.
A medida que la estructura y la programación de los computadores se fue complicando y
creciendo, los fabricantes empezaron a proporcionar utilidades para hacer más fácil la
administración y programación del computador implementando sistemas operativos,
compiladores y programas de usuario.
De acuerdo a este cuadro hay dos capas fundamentales:
Software de sistema o software base, es decir aquel que proporciona los mecanismos de
gestión del hardware como el sistema operativo y las utilidades para desarrollar el software
de aplicación (compiladote, editores, bibliotecas, etc.). Sirven como base para el desarrollo
y la ejecución de otros programas y permite que el software de aplicación pueda acceder al
hardware subyacente. Los sistemas operativos para computadoras personales más
comunes actualmente son Windows y Linux. Además de su software propio incluyen
muchas bibliotecas y utilidades externas al sistema operativo, pero que también se
consideran software del sistema.
Software de aplicación, es decir aplicaciones que facilitan el acceso a los servicios del
computador. A veces como en el caso de Windows son estas aplicaciones las que
caracterizan al sistema de computación como su interfaz grafica, su explorador y sus
herramientas ofimáticas que son software de aplicaron muy útiles para los usuarios.
Además del sistema operativo y sus bibliotecas, el software de sistema incluye editores
para introducir textos y programas en el computador, como compiladores, intérpretes, etc.
Los compiladores permiten traducir un programa escrito en un lenguaje de alto nivel a un
formato intermedio denominado código objeto y este código se traduce a lenguaje de
máquina mediante un enlazador (linker). Cada lenguaje necesita su propio compilador,
pero el enlazador es el mismo para cada arquitectura y tipo de archivo ejecutable.
Hay muchos lenguajes de programación, al igual que hay muchas lenguas en el mundo.
Sin embargo, se pueden clasificar en base a su complejidad en:
- Lenguajes de máquina, cada CPU o procesador entiende su propio lenguaje
denominado lenguaje de máquina. Las instrucciones de este lenguaje están
codificadas en binario y son de muy bajo nivel, siendo muy tedioso y difícil escribir
programas directamente en lenguaje de máquina.
Programas de Usuario, Aplicaciones
Compiladores Editores Bibliotecas …
Sistema Operativo
Hardware
10. Excelencia Académica
14
- Lenguaje Ensamblador, permite una programación simbólica con instrucciones
lógicas, que posteriormente se traducen a lenguaje de máquina por medio de un
compilador. Escribir programas en lenguaje ensamblador es mucho más rápido,
pero no lo suficiente como para escribir programas complejos.
- Lenguajes de Alto Nivel, permiten a los programadores expresar estructuras de
datos y de control de forma más sencilla y más parecida a la lógica de aplicaciones
que a las necesidades de arquitectura del computador. El primer lenguaje de este
tipo fue FORTRAN, luego COBOL y le siguieron muchos lenguajes entre ellos
Pascal, C y Turbo C, Java y otros.
Toda computadora tiene dos componentes que son el hardware y el software siendo el
hardware la parte física y el hardware la parte lógica o de los programas.
Los datos se representan por medio de bits donde los números son representados
mediante algoritmos que de acuerdo al tipo de número lo convierten a una representación
de bits.
Los caracteres de texto se representan mediante números equivalentes llamados códigos
siendo el más común los Códigos ASCII aunque actualmente por la cantidad de símbolos
que se manejan se ha difundido el UNICODE.
El harware básico de la computadora está formado por las unidades de entrada, unidades
de salida, la unidad central de procesamiento o CPU y la memoria teniendo además
componentes adicionales llamados periféricos que se conectan a la CPU como son las
unidades de almacenamiento y otros.
Fco. Javier Ceballos Curso de Programación Java 2
Alfaomega-Rama, España 2,003 Segunda Edición
Luis Joyanes Aguilar Programación en Java
Prentice Hall, España
José Pérez Mayor Programación en Java Paso a Paso
Thomson, España 2,003
Deitel y Deitel Curso de Programación en Java
Prentice Hall, España, 1,995
11. Excelencia Académica
15
Habiendo estudiado la representación de datos y los componentes hardware y software de
la computadora, en el siguiente UNIDAD TEMÁTICA se estudiará los fundamentos de la
programación orientada a objetos y la construcción de programas usando el lenguaje Java.
Se debe tener en cuenta que las computadoras solo manejan números, y más
específicamente números binarios por lo que todos los datos que manejan deben ser
representados como números binarios. La programación usando números binarios o
lenguaje de máquina es muy complicada por lo que se usan lenguajes de alto nivel como
Java para escribir los programas de aplicación.
- Investigar como se realiza la representación de números reales con signo.
- Buscar y copiar el código ASCII y verificar el código de las letras, números y signos de
puntuación.
- En una computadora identificar sus componentes de hardware y sus respectivas
características como la velocidad y capacidad de memoria.
Identifica y describe los componentes de hardware y software de la computadora.
Explica en forma clara cómo se representan los datos en la computadora y lo que son los
lenguajes de programación.
12. Excelencia Académica
16
Nº 1
Nombre__________________________________________________________________
Apellidos_______________________________________Fecha _____________________
Ciudad ______________________________Semestre_____________________________
1.- Describir las partes de un computador referido al hardware del equipo.
2.- Describir la clasificación de los lenguajes de programación de acuerdo a su
complejidad.
3.- Describir los tipos de memoria, sus características, su uso, sus unidades y sus
aplicaciones.
4.- Con ejemplos, explicar lo que son los lenguajes de programación.
5.- Explicar los niveles del software, referido a su construcción y orientación.
13. Excelencia Académica
17
FUNDAMENTOS DE LA PROGRAMACIÓN
ORIENTADA A OBJETOS
Los avances en el hardware de las computadoras no a correspondido a los avances
equivalentes en el desarrollo de programas o software. Un hardware sin software no
funciona y por lo tanto es importante la implementación de programas de aplicación para
los usuarios.
La producción de aplicaciones más potentes suele significar la presencia de una
complejidad cada vez mayor. Los sistemas orientados a objetos tienen características
adecuadas para expresar la complejidad de un sistema, algunas de las cuales son:
- Adaptabilidad, es decir, facilidad de transporte de unos sistemas a otros. Java se
ejecuta sobre una máquina virtual que es su estándar, por tanto, una aplicación se
puede adaptar y transportar a cualquier sistema que tenga una máquina virtual.
- Reusabilidad, total o parcial, para reducir costos y reutilizar componentes software
cuya fiabilidad esta comprobada.
- Mantenibilidad, los programas son construidos por muchas personas agrupadas en
equipos de trabajo. Con el tiempo estas personas cambian, pero la aplicación
permanece e incluso necesita modificaciones. Por ello es importante que los
programas sean fáciles de comprender y mantener. En caso contrario sería
necesario descartar la aplicación y hacer una nueva. En el caso de Java se tiene un
lenguaje especial para la documentación llamado Javadoc que permite documentar
los programas desarrollados.
Para conseguir estos objetivos se debe aplicar criterios de diseño claros y bien definidos
que permitan hacer frente a la complejidad de las aplicaciones, para lo cual se usan
técnicas de diseño orientado a objetos. El diseño orientado a objetos consiste en averiguar
cuales son los objetos de un sistema, las clases en que se pueden agrupar y las relaciones
entre objetos.
Los conceptos de clase y objeto son los más importantes de la programación orientada a
objetos. Un objeto es cualquier cosa tangible o intangible que se pueda imaginar, definida
frente al exterior mediante unos atributos y las operaciones que permiten modificar dichos
atributos. Por ejemplo una cuenta bancaria, un motor, una carpeta, un alumno son
ejemplos de objetos, pero también lo es una estructura de datos tipo pila, lista, etc. Cada
objeto particular se obtiene como una especificación de una entidad más general
denominada clase.
14. Excelencia Académica
18
Una clase es una plantilla que permite definir un conjunto de objetos. Por ejemplo alumno
es una clase de objetos caracterizado por tener apellidos, nombres, fecha de nacimiento,
sexo, nacionalidad, facultad, etc. Por ejemplo el alumno Juan Ramos de Ingeniería de
Sistemas, peruano se obtiene instanciando la clase alumno para ese caso particular. La
creación de un objeto a partir de una clase se denomina instanciación. Además, en la
programación orientada a objetos se usa un mecanismo denominado herencia para diseñar
dos o más entidades que son distintas pero comparten muchas características. En
cualquier caso es necesario definir una clase antes de poder crear una instancia
(objeto) de la clase.
En el diseño orientado a objetos, se definen los atributos externos de un objeto y los
métodos que exporta. El resto de la información queda oculta. Además, se pueden
especificar relaciones de herencia y de polimorfismo. El diseño orientado a objetos esta
directamente ligado, aunque no es obligatorio, con los lenguajes de programación
orientado a objetos. La técnica de diseño orientada a objetos más popular es UML (Unified
Modelling Language). Usando estas técnicas se puede conseguir crear clases que tengan
características fundamentales como:
- La modularidad, proceso de dividir un objeto en piezas más pequeñas, o módulos,
para que algún objetivo sea más fácil de conseguir. Los módulos se suelen asociar
a estructuras de datos y las operaciones sobre ellas. Si estos módulos tienen
significado semántico se relacionan con objetos.
- La abstracción, que permite extraer las propiedades más importantes de un objeto,
dejando detalles para el diseño detallado. Estas propiedades varían en función de lo
que un usuario espera de un objeto.
- La encapsulación, que permite ofrecer a los usuarios una visión de caja negra, de
forma que solo se exporte la interfaz de usuario. Esta aproximación, estrechamente
ligada con la ocultación de la información, permite empaquetar la funcionalidad de
un objeto, de forma que se pueda cambiar la funcionalidad interna si afectar a la
visión externa de un componente de un sistema.
- La ocultación de la información, un principio que consiste en no mostrar al
exterior los datos o las funciones que no sean necesarias. Un módulo bien
encapsulado que solo exporta la información necesaria se puede rediseñar
completamente sin afectar a su visión anterior.
Cuando se escriben los programas orientados a objetos es necesario definir primero las
clases. Mientras el programa esta en ejecución, se crean los objetos de estas clases
que van a llevar a cabo las tareas. Una tarea puede ser insertar un elemento en una
pila u ordenar los datos de los alumnos. En general una clase se define como una
estructura de datos y las operaciones que permiten operar con esa estructura de datos
(denominada método). Un método definido para una clase se denomina método de
clase, y un método definido para un objeto se denomina método de instancia. Los
métodos pueden recibir argumentos cuando se les llama. No se puede enviar un
15. Excelencia Académica
19
mensaje a una clase de objeto a menos que tenga un método para manejarlo. Enviar
un mensaje a una clase objeto es la forma de ejecutar el método correspondiente y si
no hay ningún método conforme, no ocurre nada (o mejor dicho, ocurrirá un error de
compilación).
El Lenguaje de Programación JAVA
El lenguaje de Programación Java surgió en los años 90 como un lenguaje orientado a
objetos sencillo, fácil de usar y muy bien adaptado para la programación de aplicaciones en
red. El lenguaje Java fue presentado oficialmente en Mayo de 1995.
Java permite crear o desarrollar programas de aplicación o aplicaciones que se ejecutan en
cualquier computadora que tenga la máquina virtual Java, y también permite crear applets
que son aplicaciones que se ejecutan en un navegador para aplicaciones en Internet.
Pasos para crear un programa en Java
- Aplicaciones
Escribir el programa fuente en cualquier editor y guardarlo con extensión .java
Compilar el fichero fuente mediante: javac miPrograma.java .Esto genera el fichero
.class
Ejecutarlo (interpretar los byte-code) : java miPrograma
- Applets
Escribir el programa fuente en cualquier editor y guardarlo con extensión .java
Compilar el fichero fuente mediante: javac miProgramaApplet.java
Escribir la pagina web que contendrá al applet y guardar el código con extensión
.html
El código mínimo será:
<HTML>
<BODY>
<APPLET code="miProgramaApplet.class" width=400 height=400>
</APPLET>
</BODY>
</HTML>
Se tiene 2 posibilidades para ejecutar el applet:
- Lanzar un navegador y cargar la página html, o bien
- Usar el programa provisto por Sun para ver applets: appletviewer
miProgramaApplet.html
16. Excelencia Académica
20
Lo que no tiene Java a diferencia de C y C++ es:
a) No hay #define.
b) No hay definición de clases como estructuras.
c) No hay herencia múltiple.
d) No hay goto.
e) No hay apuntadores o punteros.
f ) No hay funciones. Java permite una programación orientada a objetos sin estilo
funcional o procedural. Lo que hace una función en C++ se hace en Java al definir una
clase y creando los métodos para dicha clase.
Debido a estas características, algunas personas definen a Java así:
Java = (C++) - C
Modelamiento de Problemas
Modelar un problema es encontrar las partes importantes del problema identificando la
salida o el resultado de la solución del problema.
Para modelar un problema, primero tiene que identificarse y/o definirse bien el problema.
Se dice que un problema esta bien definido cuando se ha identificado la situación inicial del
problema o el punto de partida inicial y la salida a la que se quiere llegar o solución del
problema. La situación a la que se quiere llegar es la respuesta que se debe obtener como
solución del problema y se define como SALIDA, mientras que la situación inicial que son
los datos necesarios para resolver el problema son los datos iniciales que van a llevarnos a
la solución y se define como ENTRADA.
Ejemplo
Se quiere construir una carpeta.
Este es el problema que se quiere resolver, para modelarlo preguntamos sobre la salida o
resultado:
Que se debe obtener como resultado?
Obviamente se necesita UNA CARPETA
Evaluamos los datos necesarios o ENTRADA para este problema preguntando:
Que necesitamos para construir la carpeta?
Se necesita madera, fierros, herramientas, pintura. Con todos estos elementos podemos
transformar esta entrada en la salida requerida que es la carpeta.
17. Excelencia Académica
21
2.1
Encuentra la Entrada y Salida de cada uno de los siguientes problemas. Determinar si esta
bien definido o no.
1.- Cual es la edad de Mario en años, meses y días.
Entrada Salida Bien Definido
Si No
2.- Encontrar el promedio de dos números.
Entrada Salida Bien Definido
Si No
3.- Encontrar el grado de alegría de una persona.
Entrada Salida Bien Definido
Si No
4.- Encontrar la velocidad con que camina una persona.
Entrada Salida Bien Definido
Si No
Componentes de una Solución
Una solución a un problema es la salida que se obtiene al modelar un problema, por lo
tanto a partir de los datos de Entrada se debe llegar a la Salida. Un programa escrito en
cualquier lenguaje de programación permite, a partir de los datos de entrada, llegar a la
solución generando los datos de salida.
Los pasos ordenados y sucesivos para llegar desde los datos de entrada a la solución o
datos de salida se llama algoritmo.
2.2
Determina la solución para los siguientes problemas:
1.- Llegar a la universidad desde la casa.
Entrada Salida Algoritmo
2.- Obtener el promedio de dos números
Entrada Salida Algoritmo
3.- Pintar mi habitación
Entrada Salida Algoritmo
18. Excelencia Académica
22
4.- Lavar el automóvil
Entrada Salida Algoritmo
Modelaje
Para modelar un problema se debe determinar la Salida requerida y a partir de ello
determinar los datos necesarios para llegar a esa solución (Entrada). Después se debe
traducir la entrada y salida a un modelo computacional.
Un modelo computacional consiste en identificar y detallar cada dato de tal manera que se
diferencie de los demás.
Características de los Datos
Los datos tienen cuatro características que identifican y diferencian de los demás. Estas
características son:
Valor : es la situación actual del dato que se almacena. Esta situación puede ser
cambiante durante la ejecución de programa o puede no cambiar nunca.
Clase : Existen dos clases de datos de acuerdo a su uso, las constantes y las variables.
Las constantes son las que no cambian de valor mientras que las variables pueden ir
cambiando de valor al ejecutar el programa.
Identificador : es el nombre que se le pone al dato. Debe ser único para no confundirlo
con otro dato. Cada lenguaje de programación define la forma que tienen sus
identificadores.
Tipo : Es la definición de los valores que puede representar el dato. Los tipos básicos más
comunes son entero, real, caracteres y otros.
Ejemplo:
Calcular el área de un cuadrado.
Solución:
La salida requerida es el área del cuadrado.
Identificador Tipo
Área real
La entrada necesaria es la medida del lado del cuadrado.
Identificador Tipo
Lado real
El algoritmo es multiplicar lado x lado y con ello obtenemos el área.
Especificación
Después de haber definido los datos necesarios para resolver un problema y a los cuales
hay que llegar, se deben determinar las restricciones para estos datos que son las
19. Excelencia Académica
23
limitaciones que se deben tener en cuenta para que no haya errores al momento de
ejecutar el programa, esta es la especificación del problema.
Ejemplo:
Dada las notas de un estudiante definir cuantas asignaturas desaprobó.
Se sabe que se desaprueba un curso cuando se obtiene un promedio final menor a once.
La especificación del dato de entrada que son las notas es que estas notas son datos
enteros cuyo valor mínimo es cero y el valor máximo que pueden tener es de veinte,
además al calcular los promedios se puede tener que la fracción de 0.5 o mayor se
redondea al entero superior.
2.3
Realiza el modelaje para determinar si un número es primo o no.
Refinamiento a Pasos
Para resolver un problema se debe determinar las condiciones de entradas y las
restricciones que tenemos para estas {PRE}, al igual que las condiciones de salida o el
resultado al que se debe llegar {POST}.
El algoritmo es una sucesión de pasos que permite llegar desde la entrada hasta la salida.
Entrada
Paso 1
Paso 2
Paso 3
. ALGORITMO
.
.
Paso n
Salida
Refinamiento a pasos es dejar claramente explicado el algoritmo tal que partiendo de la
situación inicial y siguiéndolo paso a paso se llegue a la salida. No siempre el refinamiento
a pasos o algoritmo de un problemas es la solución única.
El algoritmo que se logra, es uno de tal manera que cada paso no se pueda subdividir en
otros pasos más pequeños, si todavía algún paso puede sub dividirse, quiere decir que el
refinamiento a pasos no ha terminado.
Ejemplo:
Describir el algoritmo para PAGAR LA PENSION DE ENSEÑANZA
Solución:
Entrada {PRE} : Se esta en casa y se dispone del dinero para realizar el pago
1. Dirigirse a Caja de la universidad
20. Excelencia Académica
24
2. Reservar y esperar turno de pago
3. Llegado el turno realizar el pago
4. Recoger el recibo
5. Retornar a casa
Este algoritmo a pesar de solucionar el problema, todavía puede sub dividirse en otros
pasos más específicos, por ejemplo Como dirigirse a la universidad?, Como retornar a
casa?, Como realizar el pago?, Se recibe vuelto o no?, por lo tanto se puede refinar más
este algoritmo para dejarlo más entendible y se puede tener el siguiente algoritmo:
1. Salir de casa
2. Tomar el transporte que nos lleve a la universidad
3. Cuando llegamos a la universidad, bajar del carro
4. Si hay cola en Caja, ponerse a la cola y esperar
5. Al llegar a Caja entregar el código de alumno y el dinero
6. Recoger el recibo de pago y el vuelto si es que corresponde
7. Salir de la universidad
8. Dirigirse a tomar el transporte que nos lleve de regreso
9. Cuando llegamos, bajar del carro
10. Entrar a la casa
Si revisamos este algoritmo podemos, si se desea, refinarlo nuevamente.
2.4
En una hoja aparte, realiza el refinamiento a pasos para los siguientes problemas:
1) Lavar la ropa con una lavadora
2) Vestirse para ir al colegio
3) Pagar el recibo de teléfono.
4) Ver una película en DVD.
Pasos para el Refinamiento de Pasos
Para realizar el refinamiento a pasos se puede seguir lo siguiente:
1. Entender correctamente el problema: de donde se inicia y a donde se quiere llegar
2. Encontrar una posible serie de pasos para resolver el problema, dividiéndolo en
problemas más pequeños.
3. Verificar cada paso: para ver si se puede volver a dividir para hacerlo más simple o
explicarlo mejor. Si esto ocurre, incluir los nuevos pasos en donde corresponda en
forma ordenada.
4. Confirmar que al recorrer todos los pasos se llega de la entrada a la salida.
21. Excelencia Académica
25
Para que el refinamiento a pasos sea de manera formal, es necesario que a cada uno de
los pasos se le determine su Entrada y su Salida. Se notara que para pasos sucesivos, la
salida del paso previo será el entrada del paso siguiente.
- Los sistemas orientados a objetos tienen características adecuadas para expresar
la complejidad de un sistema, algunas de las cuales son: Adaptabilidad,
Reusabilidad y Mantenibilidad.
- El diseño orientado a objetos consiste en averiguar cuales son los objetos de un
sistema, las clases en que se pueden agrupar y las relaciones entre objetos.
- Un objeto es cualquier cosa tangible o intangible que se pueda imaginar, definida
frente al exterior mediante unos atributos y las operaciones que permiten modificar
dichos atributos. Cada objeto particular se obtiene como una especificación de una
entidad más general denominada clase.
- Java permite crear aplicaciones y applets.
- El modelaje consiste en encontrar los limites de un problema, es decir que
esperamos encontrar y que necesitamos para ello.
- Los problemas que podemos resolver son aquellos que se encuentran bien
definidos.
- Un problema bien definido es aquel que se le puede identificar claramente la
Entrada y la Salida.
- La solución a un problema bien definido esta conformada por la Entrada, el
Algoritmo y la Salida.
- El Algoritmo es la sucesión ordenada de pasos que parten de la Entrada y si se
siguen uno a uno, conducen a la salida.
Fco. Javier Ceballos Curso de Programación Java 2
Alfaomega-Rama, España 2,003 Segunda Edición
Luis Joyanes Aguilar Programación en Java
Prentice Hall, España
José Pérez Mayor Programación en Java Paso a Paso
Thomson, España 2,003
Deitel y Deitel Curso de Programación en Java
Prentice Hall, España, 1,995
22. Excelencia Académica
26
Habiendo descrito los principios de la programación orientada a objetos, en los siguientes
UNIDAD TEMÁTICAs estudiaremos la programación en Java.
Para modelar un problema, primero tiene que identificarse y/o definirse bien el problema.
Se dice que un problema esta bien definido cuando se ha identificado la situación inicial del
problema o el punto de partida inicial y la salida a la que se quiere llegar o solución del
problema.
La especificación es la definición de las restricciones para los datos que son las
limitaciones que se deben tener en cuenta para que no haya errores al momento de
ejecutar el programa.
El algoritmo es la sucesión ordenada de pasos que se tienen que seguir para llegar a partir
de los datos de entrada hasta los datos de salida requeridos.
Identifica en forma clara las entradas, salidas y algoritmo para un problema realizando en
forma correcta su modelo computacional.
Define en forma clara las características de la programación orientada a objetos.
Define las características del lenguaje Java.
23. Excelencia Académica
27
Nº 2
Nombre__________________________________________________________________
Apellidos_______________________________________Fecha _____________________
Ciudad ______________________________Semestre_____________________________
1.- Defina los siguientes enunciados :
a) Algoritmo
b) Modelaje
c) Problema bien definido
2.- Definir las entradas y salidas para los siguientes problemas :
a) Determinar el mayor de dos números
Entrada Salida Algoritmo
b) Calcular el promedio de los n primeros números
Entrada Salida Algoritmo
c) Escoger los números pares de una lista de números enteros
Entrada Salida Algoritmo
3.- Describir las características de la programación orientada a objetos.
4.- Describir las ventajas de UML.
5.- Describir con ejemplos las características de los datos.
25. Excelencia Académica
29
ESTRUCTURA DE UN PROGRAMA
ORIENTADO A OBJETOS
En lenguaje Java, como en los otros lenguajes de programación, los programas tienen una
estructura definida que siempre debe respetarse.
Un programa simple en Java que solamente muestre en pantalla un saludo al programador
sería el siguiente:
/** Este es primer programa en Java
* Imprime la palabra HOLA AMIGOS por la pantalla
**/
import java.*;
/* La clase principal se denomina ProgramaUno */
public class ProgramaUno
{ public static void main(String args[])
{ // Parte que se ejecuta del programa para mostrar el mensaje
System.out.println(“HOLA AMIGO”);
La primera parte del ProgramaUno se compone de tres elementos: comentarios, sentencia
import y declaración de clases. Estos tres componentes se incluyen siempre en todos los
programas de Java.
Se puede escribir un programa Java que incluya una única declaración de clase, pero eso
no es normal. Vamos a explicar los tres componentes y sus sub componentes.
Gramática de Java
Comentarios
Los comentarios son textos que se ponen en el programa para documentar las
instrucciones con la finalidad de hacer más entendible el programa. Los comentarios solo
se tienen en el código fuente y no son tomados en cuenta al momento de realizar la
compilación del programa.
En Java hay tres tipos de comentarios:
26. Excelencia Académica
30
Los dos primeros tipos de comentarios son los que todo programador conoce y se utilizan
del mismo modo. Los comentarios de documentación, colocados inmediatamente antes de
una declaración (de variable o función), indican que ese comentario ha de ser colocado en
la documentación que se genera automáticamente cuando se utiliza la herramienta de
Java, javadoc. Dichos comentarios sirven como descripción del elemento declarado
permitiendo generar una documentación de nuestras clases escrita al mismo tiempo que se
genera el código.
Identificadores
Los identificadores nombran variables, funciones, clases y objetos; cualquier cosa que el
programador necesite identificar o usar.
En Java, un identificador comienza con una letra, un subrayado (_) o un símbolo de dólar
($). Los siguientes caracteres pueden ser letras o dígitos. Se distinguen las mayúsculas de
las minúsculas y no hay longitud máxima.
Ejemplos de identificadores válidos:
Identificador
nombre_usuario
Nombre_Usuario
_variable_de_sistema
$transaccion
y su uso sería, por ejemplo:
int contador_principal;
char _lista_de_ficheros;
float cantidad_en_Ptas;
// comentarios para una sola línea
/* comentarios de una o
más líneas
*/
/** comentario de documentación, de una o más líneas
*/
27. Excelencia Académica
31
Palabras Reservadas
Las siguientes son las palabras clave que están definidas en Java y que no se pueden
utilizar como identificadores, estas palabras sirven para realizar o construir instrucciones y
son las siguientes:
abstact Boolean break byte case
catch char class continue default
do double else extends false
final Finally float for if
implements import instanceof int interface
long native new null package
private protected public return short
static super switch syncroniced this
throw throws transient try void
volatile while
Importación de Clases
Los programas orientados a objetos se desarrollan mediante el uso de clases predefinidas
siempre que sea posible. Únicamente se deben incluir clases propias cuando no hayan
clases predefinidas adecuadas. En Java las clases se agrupan en clases. Un paquete
puede incluir sub paquetes, definiendo una jerarquía de paquetes. Para usar los elementos
de un paquete dentro de un programa se puede escribir su nombre completo., pero el
problema es que se debe usar un punto para separar los nombres de los paquetes lo que
puede resultar muy engorroso. Por ejemplo se escribe:
java.InputStream.read
Con una sentencia import al principio del programa elimina la necesidad de usar los
nombres completos, por lo que si se pone en el principio del programa:
import java.InputStream;
Para referirse al método se puede usar simplemente:
read;
El principal problema que genera el uso de la sentencia import es la ambigüedad que se
origina cuando dos métodos tienen el mismo nombre pero pertenecen a clases distintas por
lo que el entorno de programación no sabrá a cual método llamar y llamara a cualquiera de
ellos, esto se evita usando los nombres completos.
28. Excelencia Académica
32
Declaración de Clases y Métodos
Todo programa Java debe tener al menos una clase: la clase principal. En el ejemplo la
clase principal es ProgramaUno. Si se designa una clase como clase principal, entonces se
debe definir un método denominado main, porque, cuando se ejecuta el programa Java, se
ejecuta primero el método main de la clase principal.
La declaración de una clase se realiza usando la palabra reservada class mediante la
sentencia:
public class ProgramaUno
la palabra reservada public indica que esa clase se exporta al exterior. ProgramaUno es el
nombre de la clase principal y por extensión de la aplicación por lo que cuando se guarda
este programa debe guardarse con el nombre ProgramaUno.java
La sintaxis para la declaración de un método es:
<modificadores><tipo devuelto><nombre del método> (<parámetros>)
{
<cuerpo del método>
}
Donde <modificadores> es una secuencia de términos para designar diferentes tipos de
métodos; <tipo devuelto> es el tipo de valor de datos que devuelve el método; <nombre del
método> es el nombre del método; <parámetros> es una secuencia de valores que se
pasan al método, y <cuerpo del método> es una secuencia de instrucciones. La
declaración del método main cumple con este formato:
public static void main (String[] args)
{
…
}
El método main llama a otro método que es el que escribe en la pantalla el mensaje, este
método es:
System.out.println(“HOLA AMIGOS”);
El IDE de JAVA
EL IDE (Entorno Integrado de Desarrollo) es una herramienta que permite elaborar los
programas, compilarlos y ejecutarlos mediante el uso de comandos sencillos. Tiene
incorporado un procesador de textos para escribir los programas para después compilar y
ejecutar. Existen varios IDE que se pueden usar con Java entre ellos tenemos el Jcreator,
Eclipse y otros. Vamos a describir en forma rápida los comandos más importantes del
JCreator. Para ingresar se hace doble click en el icono del JCreator y se obtendrá la
siguiente pantalla:
29. Excelencia Académica
33
Para escribir un programa se debe crear un archivo nuevo, para ello se ejecuta los
comandos File, New, File y se mostrara la siguiente pantalla:
Se selecciona el tipo de programa que se va a construir, en nuestro caso se debe
seleccionar Java File y hacer clic en Next y se mostrara la ventana para escribir el nombre
del programa y después se selecciona el directorio en donde se guardara el archivo (para
realizar esta selección se hace clic en los tres puntos del lado derecho y se busca el
directorio deseado que en nuestro caso será el directorio ejemplo)
Para terminar se hace clic en el botón Finish y se abrirá la ventana de texto al lado derecho
en donde se puede escribir el programa.
30. Excelencia Académica
34
Se escribe el programa y se compila con los comandos Build, Compile File. Si es la primera
vez se tendrá que definir el directorio donde se encuentra el compilador de Java que por lo
general estará en la raíz del disco C: en el directorio j2sdk1.4.2_03
Si existen errores, estos se mostraran en la ventana de la parte inferior con la indicación de
la línea en donde existe el error y cuando todos los errores se hayan corregido se realizará
la compilación mostrando el mensaje Process Completed en la venta inferior
Después de haber compilado el programa, debemos ejecutarlo, lo que se hace con los
comandos Build, Execute File y aparecerá una ventana con la ejecución del programa para
realizar el ingreso de datos y la salida de los resultados como se muestra
31. Excelencia Académica
35
Si el programa se ha compilado y ejecutado, también se habrá guardado en el disco. Para
guardar el programa en un archivo con otro nombre se selecciona los comandos File, Save
As y se presentará una ventana para poner el nombre y guardar y se termina de guardar
haciendo clic en el botón Save.
Para recuperar un programa guardado en el disco se selecciona los comandos File, Open y
de la ventana que aparece se selecciona el nombre del archivo deseado y se termina
haciendo clic en el botón Open
Para cerrar la ventana de edición en donde se encuentra un programa se ejecuta los
comandos File, Close.
Tipos de Datos en Java
Todo lenguaje de programación maneja tipos de datos respecto a lo que representa, por lo
general se tienen datos numéricos, datos tipo carácter y datos tipo cadena.
Los datos numéricos representan cantidades y con ellos se pueden realizar operaciones
matemáticas. Son todos los números, por ejemplo 345, 65.38, -78, -8.37
32. Excelencia Académica
36
Los datos tipo carácter sirven para representar un solo símbolos (letras, dígitos, signos de
puntuación, etc.) y van entre apóstrofos o comillas simples, como por ejemplo ‘a’, ‘F’, ‘5’, ‘.’,
etc. Los apóstrofos no son parte del carácter. Para poder escribir caracteres especiales se
antepone el como por ejemplo ‘”’ para tener las comillas, las secuencias de caracteres
especiales son las siguientes:
Secuencia Significado
n Nueva línea
t Tabulador horizontal
b Retroceso
r Retorno de carro
f Alimentación de forma
Diagonal inversa
' Comilla sencilla
" Comillas dobles
ddd Valor en Octal
xdd Valor en Hexadecimal
udddd Únicode
Las cadenas de texto son una secuencia de caracteres que van limitados por comillas, pero
las comillas solo son delimitadores y no forman parte de la cadena. Son cadenas de texto,
por ejemplo:
“Hola amigos” “Ingrese un número entero”
“La suma de los números es:” “352.564”
“Vamos a sumar 5 con 43”
Los tipos de datos disponibles en Java son :
Tipo bytes Tipo Datos Rango (positivo) Literal
byte 1 Entero 127 14
short 2 Entero 32767 14
int 4 Entero 2.147.483.647 14
33. Excelencia Académica
37
long 8 Entero 9.233e15 14
float 4 Coma flotante 1.4e-45 a 3.4e38 36,6
double 8 Coma flotante 4.9e-324 a 1.7e308 3,14e2
char 2 Caracter Únicode 'a' o 064
boolean 1 Booleano true o false true o false
El tipo String es un tipo especial de Java que permite el ingreso y manejo de cadenas de
texto.
Declaración de Datos
Para manejar estos datos se usan variables las cuales deben ser declaradas al inicio del
programa. Las variables serán representadas por medio de identificadores y la declaración
de variables se realiza de la siguiente forma:
tipo_de_dato identificador;
Se pueden declarar varias variables y asignarles un valor inicial de la siguiente forma:
tipo_de_dato identificador1, identificador 2,…;
tipo_de_dato identificador = valor;
Por ejemplo son declaraciones validas las siguientes:
int a: int x,y,z;
int E=45; flotat X=4.56, M=0.45;
char V, R==’D’; bolean T;
String CAD=”Este es un mensaje de texto” ;
Instrucciones en JAVA
Las instrucciones son las órdenes que se la da a la computadora para que realicen alguna
acción. En Java las instrucciones siempre finalizan con un punto y coma.
Instrucción ;
Se pueden tener instrucciones compuestas o bloques de instrucciones que se deben
manejar como una única instrucción, en este caso el bloque de instrucciones comienza con
una { y termina con otra }.
{ instruccion1;
34. Excelencia Académica
38
Instrucción 2;
.
.
Instrucción n;
}
Operadores Aritméticos
Los operadores aritméticos permiten realizar operaciones aritméticas entre dos datos que
pueden ser literales o pueden estar representados por variables. Existen operadores
monarios que son aquellos que se aplican a un solo dato, pero también existen operadores
llamados binarios porque se aplican a dos datos.
Los operadores de comparación se utilizan para comparar dos valores y generan un
resultado de tipo lógico que puede ser VERDADERO o FALSO y se utilizan para formar las
condiciones o controlar la ejecución de ciclos repetitivos.
Los operadores en Java son los siguientes:
Operadores Unarios:
Operador
Descripción (prefija) Operador Descripción (pre o
posfija)
+ Convierte el dato a int ++ Incrementa el dato en 1
-
Negacion aritmética
oper.
-- Decrementa el dato en 1
Operadores aritméticos (binarios):
Operador Uso Atajo Descripción
+ op1 + op2 op1 += op2 Suma op1 y op2
- op1 - op2 op1 -= op2 Resta op2 de op1
* op1 * op2
op1 *= op2 Multiplica op1 por
op2
/ op1 / op2 op1 /= op2 Divide op1 por op2
% op1 % op2 op1 %= op2 Resto de op1 / op2
El atajo es una operación que asigna el resultado de la operación al mismo operador1.
35. Excelencia Académica
39
Por ejemplo si se tienen las variables A que tiene un valor de 15 y una variable B que tiene
el valor de 3 se tiene lo siguiente:
A + B será 18, los valores de A y B no
cambian
A * B será 45, los valores de A y B no
cambian
A += B hará que A valga 18 A * B hará que A valga 45
Operadores de comparación (binarios):
Operador Uso Devuelve verdadero si
> op1 > op2 op1 es mayor que op2
>= op1 >= op2 op1 es mayor o igual que op2
< op1 < op2 op1 es menor que op2
<= op1 <= op2 op1 es menor o igual que op2
== op1 == op2 op1 y op2 son iguales
!= op1 != op2 op1 y op2 son distintos
&& op1 && op2 AND, condicionalmente evalúa op2
& op1 & op2 AND, siempre evalúa op1 y op2
|| op1 || op2 OR, condicionalmente evalúa op2
| op1 | op2 OR, siempre evalúa op1 y op2
! ! op op es falso
A > B será VERDADERO A < B será FALSO
Operadores de bit (binarios):
Operador Uso Operación
>> op1 >> op2 Desplaza los bits de op1 a la derecha op2 veces
<< op1 << op2 Desplaza los bits de op1 a la izquierda op2 veces
>>> op1 >>> op2
Desplaza los bits de op1 a la derecha op2 veces
(sin signo)
& op1 & op2 AND
| op1 | op2 OR
^ op1 ^ op2 "XOR"
~ ~op2 Complemento
36. Excelencia Académica
40
Operador terciario:
expresion ? sentencia_si : sentencia_si_no
Precedencia de operadores:
Tipo de operadores Operadores de este tipo
Operadores posfijos [ ] . (parametros) expr++ expr--
Operadores unarios ++expr --expr +expr -expr ~ !
Creación o conversión new (tipo) expr
Multiplicación * / %
Suma + -
Desplazamiento <<
Comparación <<= = instanceof
Igualdad == !=
AND a nivel de bit &
OR a nivel de bit ^
XOR a nivel de bit |
AND lógico &&
OR lógico ||
Condiciónal ? :
Asignación = += -= *= /= %= &= ^= |= <<= = =
Instrucciones de Salida de Datos en JAVA
Las instrucciones de salida de datos sirven para mostrar datos por los dispositivos de
salida de datos. En esta parte trataremos solamente la salida de datos a través del monitor
de video.
Java trata a todos los datos para la salida como si fueran cadenas que pueden
concatenarse por medio del signo + que nos va a permitir combinar en la salida datos
numéricos, caracteres y cadenas de texto.
El método para la salida de datos es:
System.out.print(datos_de_salida);
Por ejemplo para mostrar el valor del número representado por la variable A se pone:
37. Excelencia Académica
41
System.out.print(“El valor de la variables A es “ + A );
El método println es similar a print solamente que después de imprimir el dato hace un
cambio a la linea siguiente:
System.out.println(“El valor de la variable A es “ + A) ;
Instrucciones de Entrada de Datos en JAVA
La entrada de datos en Java se maneja como el ingreso de un flujo de datos desde una
fuente, en este caso la fuente del flujo de datos será el teclado, aunque puede ser cualquier
otro archivo.
Normalmente Java permite el ingreso de un flujo de caracteres, que seria una cadena de
texto, la que debe ser convertida para representar el dato numérico requerido.
El flujo de datos de entrada se declara de la siguiente forma:
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader e=new BufferedReader(isr);
Donde e es la variable que va a representar el flujo de datos de entrada, otra forma más
corta en una sola instrucción es:
BufferedReader e=new BufferedReader (new InputStreamReader(System.in));
Cuando el programa va a realizar ingreso de datos se debe preveer que no se produzcan
errors durante este ingreso, esto se realice a través del manejo de excepciones que se
tratara posteriormente. Para manejar las
excepciones se debe poner al final de la declaración main las palabras: throws IOException
siendo la declaración completa de la siguiente forma:
public static void main(String[] args) throws IOException
Los métodos para el ingreso de datos, considerando las declaraciones anteriores que usan
la variable e para el flujo de entrada, son los siguientes:
var=System.in.read(); // para el ingreso de números enteros
var_byte=Byte.parseByte(e.readLine()); para el ingreso de datosbyte
var_short=Short.parseShort(e.readLine()); para el ingreso de datos short
var_int=Integer.parseInt(e.readLine()); para el ingrso de datos int
var_long=Long.parseLong(e.readLine()); para el ingreso de datos long
var_float=Float.parseFloat(e.readLine()); para el ingreso de datos float
var_double=Double.parseDouble(e.readLine()); para ingreso de datos double
var_String=e.readLine(); para el ingreso de cadenas de texto
Traducción del Modelaje y Especificación a un Programa JAVA
38. Excelencia Académica
42
Consiste en realizar todo el modelaje y especificación de datos para llegar desde la entrada
hasta la salida y llevar este algoritmo a código Java para ejecutar el programa.
EJEMPLO 1
Por ejemplo se requiere tener un programa para sumar dos números enteros que se
ingresen por teclado y mostrar la suma. Se tendrá lo siguiente:
Datos de Salida : La asuma los dos números ingresados, representado por la
variable S.
Datos de Entrada : Dos números enteros representados por dos variables de tipo int
(variables A y B) cuyo valor se ingresara desde el teclado al
momento de ejecutar el programa
Algoritmo de Solución:
- Ingresar número A
- Ingresar número B
- Sumar ambos números : S= A + B
- Mostrar el valor de S, que es la suma, por la pantalla
El código del programa será el siguiente:
// Ingreso de dos números y mostrar la suma
import java.io.*;
public class suma {
public static void main(String[] args) throws IOException
{ // se declara el flujo de entrada de caracteres para la variable e
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader e=new BufferedReader(isr);
int A,B,S; //se declaran las variables
// Ingreso de los dos números
System.out.print("Ingresar un número entero ");
A=Integer.parseInt(e.readLine());
System.out.print("Ingresar otro número entero ");
B=Integer.parseInt(e.readLine());
// Se calcula la suma de los números
S = A + B ;
39. Excelencia Académica
43
// Se muestra la suma por pantalla
System.out.println("La suma de los dos números es : "+S);
EJEMPLO 2
Escribir un programa y su modelo para ingresar los diferentes tipos de datos de Java y
después mostrarlos por pantalla, también mostrar la suma de todos los números
ingresados.
Vamos a dejar como tarea para el estudiante el modelaje de este problema y se muestra a
continuación el código del programa.
//Ejemplo de ingreso de números, cadenas
import java.io.*;
public class números {
public static void main(String[] args) throws IOException
{
// se declara el flujo de entrada de caracteres para la variable e
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader e=new BufferedReader(isr);
// esta es otra forma de declarar el flujo de entrada de caracteres
// BufferedReader e=new BufferedReader (new InputStreamReader(System.in));
byte b;
short s;
int i;
long l;
float f;
double d,suma; //la suma debe ser tipo double
String ca;
System.out.print("Ingresar un entero byte ");
b=Byte.parseByte(e.readLine());
System.out.print("Ingresar un entero short ");
s=Short.parseShort(e.readLine());
System.out.print("Ingresar un entero int ");
i=Integer.parseInt(e.readLine());
System.out.print("Ingresar un entero long ");
l=Long.parseLong(e.readLine());
40. Excelencia Académica
44
System.out.print("Ingresar un real float ");
f=Float.parseFloat(e.readLine());
System.out.print("Ingresar un real double ");
d=Double.parseDouble(e.readLine());
System.out.print("Ingresar una cadena de texto ");
ca=e.readLine();
System.out.println("El entero byte es "+b);
System.out.println("El entero short es "+s);
System.out.println("El entero int es "+i);
System.out.println("El entero long es "+l);
System.out.println("El float es "+f);
System.out.println("El double es "+d);
System.out.println("La cadena es "+ca);
suma=b+s+i+l+f+d;
System.out.println("La suma de todos es "+suma);
}
En lenguaje Java, como en los otros lenguajes de programación, los programas tienen una
estructura definida que siempre debe respetarse.
La gramática de Java está formada por comentarios, identificadores, palabras reservadas,
importación de clases, declaración de clases y métodos.
Todo programa Java debe tener al menos una clase: la clase principal. Si se designa una
clase como clase principal, entonces se debe definir un método denominado main, porque,
cuando se ejecuta el programa Java, se ejecuta primero el método main de la clase
principal.
EL IDE (Entorno Integrado de Desarrollo) es una herramienta que permite elaborar los
programas, compilarlos y ejecutarlos mediante el uso de comandos sencillos. Tiene
incorporado un procesador de textos para escribir los programas para después compilar y
ejecutar. Las características de su instalación se describen en el apéndice I y II.
Los datos numéricos representan cantidades y con ellos se pueden realizar operaciones
matemáticas. Son todos los números, por ejemplo 345, 65.38, -78, -8.37
Los datos tipo carácter sirven para representar un solo símbolo (letras, dígitos, signos de
puntuación, etc.) y van entre apóstrofos o comillas simples, como por ejemplo ‘a’, ‘F’, ‘5’, ‘.’,
etc. Los apóstrofos no son parte del carácter. Para poder escribir caracteres especiales se
antepone el como por ejemplo ‘”’ para tener las comillas.
41. Excelencia Académica
45
Las cadenas de texto son una secuencia de caracter
es que van limitados por comillas, pero las comillas solo son delimitadores y no forman
parte de la cadena.
Todo dato, representado por una variable, que se utilice en un programa debe ser
declarado indicando el tipo de dato que representa y el identificador que lo representará.
Java, como los otros lenguajes, trata a las unidades de entrada y salida como elementos
que generan flujo de datos o caracteres y a quienes también se les entrega un flujo de
caracteres.
Fco. Javier Ceballos Curso de Programación Java 2
Alfaomega-Rama, España 2,003 Segunda Edición
Luis Joyanes Aguilar Programación en Java
Prentice Hall, España
José Pérez Mayor Programación en Java Paso a Paso
Thomson, España 2,003
Deitel y Deitel Curso de Programación en Java
Prentice Hall, España, 1,995
Habiendo estudiado la estructura de un programa en Java, sus instrucciones y sus
operadores en los siguientes UNIDAD TEMÁTICAS se tratará sobre la utilización de estas
instrucciones en el taller de programación.
Todo dato que se utilice en un programa Java y que se represente con una variable, debe
ser declarado indicando su tipo de dato y el identificador que lo representará.
Todo programa Java debe tener la declaración de una clase principal que debe llevar el
mismo nombre que tiene el archivo que guarda el programa con extensión .java y después
debe tener una clase de nombre main que es la primera clase que se va a ejecutar.
42. Excelencia Académica
46
Escribir programas con entrada y salida de datos en forma correcta.
Utilizar los operadores aritméticos para construir programas que requieran realizar estas
operaciones.
Nº 3
Nombre__________________________________________________________________
Apellidos_______________________________________Fecha _____________________
Ciudad ______________________________Semestre_____________________________
1.- Escribir un programa, identificando su salida, entrada (con sus restricciones) y algoritmo
para calcular:
a) el área y perímetro de un rectángulo.
b) el área lateral y volumen de un cilindro.
c) el área lateral y volumen de una esfera.
d) el costo de una factura donde se ingresa el precio unitario del producto, su nombre y
la cantidad comprada considerando el sub total, el IGV (19%= y el total que es la
suma del sub total y del IGV.
43. Excelencia Académica
47
TALLER DE PROGRAMACIÓN I
(Entrada, Salida, Operadores)
En esta parte del curso vamos a desarrollar programas de entrada y salida de datos y
vamos a plantear otros para el desarrollo por parte del estudiante. Tenemos los siguientes
ejemplos:
EJEMPLO1
Escribir un programa que solicite un texto que se ingrese por teclado y que después
muestre por pantalla el texto ingresado.
* Created on 05/04/2005
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
/**
* @author Administrador
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
import avail.*;
public class Entrada1
{
public static void main(String[] args) throws IOException
{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader flujoE = new BufferedReader(isr);
PrintStream flujoS = System.out;
String sdato;
try
{
44. Excelencia Académica
48
flujoS.print("Introduzca un texto: ");
sdato = flujoE.readLine();
System.out.print("El texto ingresado es : ");
flujoS.println(sdato);
}
catch (IOException ignorada){}
}
}
Al compilar y ejecutar el programa se debe ingresar un texto terminando presionando la
tecla Enter y se vera que el programa escribe en pantalla el texto ingresado.
EJEMPLO 2
Escribir un programa para ingresar un dato y leer el dato usando el método
System.in.read();
import java.io.*;
public class Entrada2 {
public static void main(String[] args) throws IOException {
int n,m;
byte b;
float x,y=4;
char ca;
System.out.println("Ingrese un dato");
n=System.in.read();
System.out.println("el valor de ingresado es "+(char)n+"ningrese otro dato");
m=System.in.read();
System.out.println("el otro dato ingresado es "+m);
System.out.println("Ingrese un caracter");
ca=(char)System.in.read();
System.out.println("El caracter ingresado es "+ca);
}
}
Al ejecutar el programa si se ingresa el texto CAMINAR y se termina presionando Enter, se
tiene la siguiente salida:
45. Excelencia Académica
49
Como se nota aparece la C después el 65 y al final la letra M
EXPLICACION
El método System.in.read() permite el ingreso de un carácter y almacena en la variable
asociada a este método sin necesidad de presionar Enter para concluir el ingreso. El valor
que se almacena es un número que corresponde al código ASCII del carácter ingresado.
Los demás caracteres que se hayan ingresado permanecen en la memoria intermedia del
teclado y cuando se encuentra otro método de lectura de carácter se asigna el código del
siguiente carácter a la variable asociada al método y así sucesivamente por lo que el
código de la letra C se asigna al primer System.in.read() el código de la letra A al segundo
y el código de la letra M al tercero, los demás caracteres se pierden incluyendo el Enter
(carácter 13) final.
Se debe notar que el método System.in.read() permite el ingreso de un dato numérico que
es el código ASCII del carácter ingresado y si este dato numérico se debe mostrar como
carácter como en la primera salida de datos, se debe convertir con una operación cast que
consiste en anteponer el tipo deseado entre paréntesis antes del dato a convertir, en este
caso se puso (char)n para convertir el entero n a carácter.
Lo mismo se hace si se desea ingresar caracteres usando este método, como en el tercer
ingreso de datos, se lee un número pero con el operador cast este número leído se
convierte en carácter y es asignado a una variable de carácter como en la instrucción:
ca=(char)System.in.read();
La Clase Math
La clase Math representa la librería matemática de Java. Las funciones que contiene son
las que todos los lenguajes tienen, por eso se encapsulan en Math, y lo mismo sucede con
las demás clases que corresponden a objetos que tienen un tipo equivalente (Character,
Float, etc.). El constructor de la clase es privado, por los que no se pueden crear instancias
de la clase. Sin embargo, Math es public para que se pueda llamar desde cualquier sitio y
static para que no haya que inicializarla.
46. Excelencia Académica
50
Funciones Matemáticas
Si se importa la clase, se tiene acceso al conjunto de funciones matemáticas estándar que
son los siguientes:
Math.abs( x ) para int, long, float y double, devuelve el
valor absolute
Math.sin( double a ) devuelve el seno del ángulo a en
radianes
Math.cos( double a ) devuelve el coseno del ángulo a en
radianes
Math.tan( double a ) devuelve la tangente del ángulo a en
radianes
Math.asin( double r ) devuelve el ángulo cuyo seno es r
Math.acos( double r ) devuelve el ángulo cuyo coseno es r
Math.atan( double r ) devuelve el ángulo cuya tangente es r
Math.atan2(double a,double b) devuelve el ángulo cuya tangente es a/b
Math.exp( double x ) devuelve e elevado a x
Math.log( double x ) devuelve el logaritmo natural de x
Math.sqrt( double x ) devuelve la raíz cuadrada de x
Math.ceil( double a ) devuelve el número completo más
pequeño mayor o igual que a
Math.floor( double a ) devuelve el número completo más grande
menor o igual que a
Math.rint( double a ) devuelve el valor double truncado de a
Math.pow( double x,double y ) devuelve y elevado a x
Math.round( x ) para double y float
Math.random() devuelve un double
Math.max( a,b ) para int, long, float y double
Math.min( a,b ) para int, long, float y double
Math.E para la base exponencial,
aproximadamente 2.72
Math.PI para PI, aproximadamente 3.14
A continuación se muestran algunos ejemplos de utilización de estas funciones:
int i = 7;
int j = -9;
double x = 72.3543;
double y = 0.3498;
47. Excelencia Académica
51
System.out.println("i es " + i);
System.out.println("j es " + j);
System.out.println("x es " + x);
System.out.println("y es " + y);
// Valor absoluto de un número
System.out.println("|" + i + "| es " + Math.abs(i));
System.out.println("|" + j + "| es " + Math.abs(j));
System.out.println("|" + x + "| es " + Math.abs(x));
System.out.println("|" + y + "| es " + Math.abs(y));
// aproximación decimal
//empleando (round)
System.out.println(x + " es " + Math.round(x));
System.out.println(y + " es " + Math.round(y));
System.out.println(x + " es aprox." + (double)Math.round(x*100)/100);
System.out.println(y + " es aprox." + (double)Math.round(y*100)/100);
//empleando floor
System.out.println("The floor of " + x + " es " + (100*Math.floor(x))/100);
System.out.println("The floor of " + y + " es " + (100*Math.floor(y))/100);
// para hallar el menor de dos número
System.out.println("min(" + i + "," + j + ") es " + Math.min(i,j));
System.out.println("min(" + x + "," + y + ") es " + Math.min(x,y));
// Para hallar el mayor de dos números
System.out.println("max(" + i + "," + j + ") es " + Math.max(i,j));
System.out.println("max(" + x + "," + y + ") es " + Math.max(x,y));
// las constantes PI y E
System.out.println("Pi es " + Math.PI);
System.out.println("e es " + Math.E);
//funciones trigonométricas
double angulo = 45.0 * Math.PI/180.0;
System.out.println("cos(" + angulo + ") es " + Math.cos(angulo));
System.out.println("sin(" + angulo + ") es " + Math.sin(angulo));
System.out.println("tan(" + angulo + ") es " + Math.tan(angulo));
48. Excelencia Académica
52
// Funciones trigonomértricas inversas
double valor = 0.707;
System.out.println("acos(" + valor + ") es " + Math.acos(valor));
System.out.println("asin(" + valor + ") es " + Math.asin(valor));
System.out.println("atan(" + valor + ") es " + Math.atan(valor));
y=6.2; //ordenada
x=-5.4; //abscisa
System.out.println("atan2(" + y+" , "+x + ") es " + Math.atan2(y, x));
//Funciones exponencial y logarítmica
System.out.println("exp(1.0) es " + Math.exp(1.0));
System.out.println("exp(10.0) es " + Math.exp(10.0));
System.out.println("exp(0.0) es " + Math.exp(0.0));
System.out.println("log(1.0) es " + Math.log(1.0));
System.out.println("log(10.0) es " + Math.log(10.0));
System.out.println("log(Math.E) es " + Math.log(Math.E));
// pow(x,y) devuelve x elevado a y.
System.out.println("pow(2.0, 2.0) es " + Math.pow(2.0,2.0));
System.out.println("pow(10.0, 3.5) es " + Math.pow(10.0,3.5));
System.out.println("pow(8, -1) es " + Math.pow(8,-1));
// sqrt(x) devuelve la raíz cuadrada de x.
System.out.println("La raíz cuadrada de " + y + " es " + Math.sqrt(y));
// Devuelve un número pseudo-aleatorio comprendido entre 0.0 y 1.0
System.out.println("Número aleatorio: " + Math.random());
System.out.println("Otro número aleatorio: " + Math.random());
El ejemplo javamath.java, muestra la utilización de algunas de las funciones de la clase
Math:
class javamath {
public static void main( String args[] ) {
int x;
double rand,y,z;
float max;
rand = Math.random();
x = Math.abs( -123 );
y = Math.round( 123.567 );
z = Math.pow( 2,4 );
max = Math.max( (float)1e10,(float)3e9 );
49. Excelencia Académica
53
System.out.println( rand );
System.out.println( x );
System.out.println( y );
System.out.println( z );
System.out.println( max );
}
La Clase Carácter
Al trabajar con caracteres se necesitan muchas funciones de comprobación y traslación.
Estas funciones están en la clase Character. De esta clase sí que se pueden crear
instancias, al contrario que sucede con la clase Math.
Declaraciones
La primera sentencia creará una variable carácter y la segunda un objeto Character:
char c;
Character C;
Comprobaciones booleanas
Character.isLowerCase( char ) devuelve true si el carácter es una letra
minúscula
Character.isUpperCase( char ) devuelve true si el carácter es una letra
mayúscula
Character.isDigit( char ) devuelve true para caracteres numéricos
Character.isSpace( char ) devuelve true para espacios en blanco
En este caso, si tuviésemos un objeto Character C , no se podría hacer C.isLowerCase(),
porque no se ha hecho un new de Character. Estas funciones son estáticas y no conocen
al objeto, por eso hay que crearlo antes.
Traslaciones de Caracteres
Character.toLowerCase( char ) convierte entre mayúscula y minúscula
Character.toUpperCase( char ) convierte entre minúscula y mayúscula
Traslaciones de carácter/dígito
int i = Character.digit( c,base );
char c = Character.forDigit( i,base );
Métodos de la clase Character
C = new Character( 'J' );
char c = C.charValue();
String s = C.toString();
50. Excelencia Académica
54
La Clase Float
Cada tipo numérico tiene su propia clase de objetos. Así el tipo float tiene el objeto Float.
De la misma forma que con la clase Character, se han codificado muchas funciones útiles
dentro de los métodos de la clase Float.
Declaraciones
La primera sentencia creará una variable float y la segunda un objeto Float:
float f;
Float F;
Valores de Float
Float.POSITIVE_INFINITY
Float.NEGATIVE_INFINITY
Float.NaN
Float.MAX_VALUE
Float.MIN_VALUE
Conversiones de Clase/Cadena
String s = Float.toString( f );
f = Float.valueOf( "3.14" );
Comprobaciones
boolean b = Float.isNaN( f );
boolean b = Float.isInfinite( f );
Conversiones de Objetos
Float F = new Float( Float.PI );
String s = F.toString();
int i = F.intValue();
long l = F.longValue();
float F = F.floatValue();
double d = F.doubleValue();
La Clase Double
Cada tipo numérico tiene su propia clase de objetos. Así el tipo double tiene el objeto
Double. De la misma forma que con la clase Character, se han codificado muchas
funciones útiles dentro de los métodos de la clase Double. La clase Double tiene un
constructor para inicializarla con un valor double o, lo que es muy práctico, con una
representación tipo String del valor. El programa javaDouble.java, demuestra la creación de
una clase Double pasando un valor double y también pasando una cadena que se puede
interpretar como double.
class javaDouble {
public static void main( String args[] ) {
Double d1 = new Double( 3.14159 );
51. Excelencia Académica
55
Double d2 = new Double( "314159E-5" );
System.out.println( d1 + " = " + d2 + " -> " +
d1.equals( d2 ) );
}
}
Si se ejecuta y observa la salida, se comprueba que ambos constructores han creado
instancias de Double idénticas, como lo demuestra el hecho de que el método equals()
devuelva true.
Declaraciones
La primera sentencia creará una variable double y la segunda un objeto Double:
double d;
Double D;
Valores de Double
Double.POSITIVE_INFINITY
Double.NEGATIVE_INFINITY
Double.NaN
Double.MAX_VALUE
Double.MIN_VALUE
Métodos de Double
D.isNaN();
Double.isNaN( d );
D.isInfinite();
Double.isInfinite( d );
boolean D.equals();
String D.toString();
int D.intValue();
long D.longValue();
float D.floatValue();
double D.doubleValue();
int i = D.hashCode();
Double V.valueOf( String s );
long l = Double.doubleToLongBits( d );
double d = Double.longBitsToDouble( l );
La Clase Integer
El tipo int tiene el objeto Integer. De la misma forma que con la clase Character, se han
codificado muchas funciones útiles dentro de los métodos de la clase Integer.
52. Excelencia Académica
56
Declaraciones
La primera sentencia creará una variable int y la segunda un objeto Integer:
int i;
Integer I;
Valores de Integer
Integer.MIN_VALUE;
Integer.MAX_VALUE;
MétodosdeInteger
String Integer.toString( int i ) Convierte el int que se
pasa al método en su
representación como
cadena
String Integer.toString(int i,int base)
int I.parseInt( String s ) Convierte la variable String
en el valor int que
representa
int I.parseInt( String s,int base ) Igual que el anterior, a
excepción de que se indica
una base distinta a la
decimal
Integer Integer.valueOf( String s )
Integer Integer.valueOf(String s,int base)
int I.intValue()
float I.floatValue()
String I.toString()
boolean I.equals( Object obj )
long I.longValue()
double I.doubleValue()
int I.hashCode()
En los métodos toString(), parseInt() y valueOf() que no se especifica la base sobre la que
se trabaja, se asume que es base 10.
La Clase Long
El tipo long tiene el objeto Long. De la misma forma que con la clase Character, se han
codificado muchas funciones útiles dentro de los métodos de la clase Long.
Declaraciones
La primera sentencia creará una variable long y la segunda un objeto Long:
long l;
Long L;
53. Excelencia Académica
57
Valores de Long
Long.MIN_VALUE;
Long.MAX_VALUE;
Métodos de Long
String Long.toString( long l,int base );
String Long.toString( long l );
long L.parseLong( String s,int base );
long L.parseLong( String s );
Long Long.valueOf( String s,int base );
Long Long.valueOf( String s );
int L.intValue();
long L.longValue();
float L.floatValue();
double L.doubleValue();
String L.toString();
int L.hashCode();
boolean L.equals( Object obj );
En los métodos toString(), parseInt() y valueOf() que no se especifica la base sobre la que
se trabaja, se asume que es base 10.
La Clase Boolean
Los valores boolean también tienen su tipo asociado Boolean, aunque en este caso hay
menos métodos implementados que para el resto de las clases numéricas.
Declaraciones
La primera sentencia creará una variable boolean y la segunda un objeto Boolean:
boolean b;
Boolean B;
Valores de Boolean
Boolean.TRUE;
Boolean.FALSE;
Métodos de Boolean
boolean B.booleanValue();
String B.toString();
boolean B.equals( Object obj );
54. Excelencia Académica
58
La Clase String
Dentro de un objeto de la clases String o StringBuffer, Java crea un array de caracteres de
una forma similar a como lo hace el lenguaje C++. A este array se accede a través de las
funciones miembro de la clase.
Los strings u objetos de la clase String se pueden crear explícitamente o implícitamente.
Para crear un string implícitamente basta poner una cadena de caracteres entre comillas
dobles. Por ejemplo, cuando se escribe
System.out.println("El primer programa");
Java crea un objeto de la clase String automáticamente.
Para crear un string explícitamente escribimos
String str=new String("El primer programa");
También se puede escribir, alternativamente
String str="El primer programa";
Para crear un string nulo se puede hacer de estas dos formas
String str="";
String str=new String();
Un string nulo es aquél que no contiene caracteres, pero es un objeto de la clase String.
Sin embargo,
String str;
está declarando un objeto str de la clase String, pero aún no se ha creado ningún objeto de
esta clase.
Cómo se obtiene información acerca del string
Una vez creado un objeto de la clase String podemos obtener información relevante acerca
del objeto a través de las funciones miembro.
Para obtener la longitud, número de caracteres que guarda un string se llama a la función
miembro length.
String str="El primer programa";
int longitud=str.length();
Podemos conocer si un string comienza con un determinado prefijo, llamando al método
startsWith, que devuelve true o false, según que el string comience o no por dicho prefijo
String str="El primer programa";
boolean resultado=str.startsWith("El");
En este ejemplo la variable resultado tomará el valor true.
De modo similar, podemos saber si un string finaliza con un conjunto dado de caracteres,
mediante la función miembro endsWith.
String str="El primer programa";
boolean resultado=str.endsWith("programa");
55. Excelencia Académica
59
Si se quiere obtener la posición de la primera ocurrencia de la letra p, se usa la función
indexOf.
String str="El primer programa";
int pos=str.indexOf('p');
Para obtener las sucesivas posiciones de la letra p, se llama a otra versión de la misma
función
pos=str.indexOf('p', pos+1);
El segundo argumento le dice a la función indexOf que empiece a buscar la primera
ocurrencia de la letra p a partir de la posición pos+1.
Otra versión de indexOf busca la primera ocurrencia de un substring dentro del string.
String str="El primer programa";
int pos=str.indexOf("pro");
Vemos que una clase puede definir varias funciones miembro con el mismo nombre pero
que tienen distinto número de parámetros o de distinto tipo.
Comparacióndestrings
La comparación de strings nos da la oportunidad de distinguir entre el operador lógico == y
la función miembro equals de la clase String. En el siguiente código
String str1="El lenguaje Java";
String str2=new String("El lenguaje Java");
if(str1==str2){
System.out.println("Los mismos objetos");
}else{
System.out.println("Distintos objetos");
}
if(str1.equals(str2)){
System.out.println("El mismo contenido");
}else{
System.out.println("Distinto contenido");
}
Esta porción de código devolverá que str1 y str2 son distintos objetos pero con el mismo
contenido. str1 y str2 ocupan posiciones distintas en memoria pero guardan los mismos
datos.
Cambiemos la segunda sentencia y escribamos
String str1="El lenguaje Java";
String str2=str1;
System.out.prinln("Son el mimso objeto "+(str1==str2);
Los objetos str1 y str2 guardan la misma referencia al objeto de la clase String creado. La
expresión (str1==str2) devolverá true.
56. Excelencia Académica
60
Así pues, el método equals compara un string con un objeto cualquiera que puede ser otro
string, y devuelve true cuando dos strings son iguales o false si son distintos.
String str="El lenguaje Java";
boolean resultado=str.equals("El lenguaje Java");
La variable resultado tomará el valor true.
La función miembro comapareTo devuelve un entero menor que cero si el objeto string es
menor (en orden alfabético) que el string dado, cero si son iguales, y mayor que cero si el
objeto string es mayor que el string dado.
String str="Tomás";
int resultado=str.compareTo("Alberto");
La variable entera resultado tomará un valor mayor que cero, ya que Tomás está después
de Alberto en orden alfabético.
String str="Alberto";
int resultado=str.compareTo("Tomás");
La variable entera resultado tomará un valor menor que cero, ya que Alberto está antes
que Tomás en orden alfabético.
Extraerunsubstringdeunstring
En muchas ocasiones es necesario extraer una porción o substring de un string dado. Para
este propósito hay una función miembro de la clase String denominada substring.
Para extraer un substring desde una posición determinada hasta el final del string
escribimos
String str="El lenguaje Java";
String subStr=str.substring(12);
Se obtendrá el substring "Java".
Una segunda versión de la función miembro substring, nos permite extraer un substring
especificando la posición de comienzo y la el final.
String str="El lenguaje Java";
String subStr=str.substring(3, 11);
Se obtendrá el substring "lenguaje". Recuérdese, que las posiciones se empiezan a contar
desde cero.
Convertirunnúmero a string
Para convertir un número en string se emplea la función miembro estáticavalueOf (más
adelante explicaremos este tipo de funciones).
int valor=10;
String str=String.valueOf(valor);
La clase String proporciona versiones de valueOf para convertir los datos primitivos: int,
long, float, double.
57. Excelencia Académica
61
Esta función se emplea mucho cuando programamos applets, por ejemplo, cuando
queremos mostrar el resultado de un cálculo en el área de trabajo de la ventana o en un
control de edición.
Convertir un string en número
Cuando introducimos caracteres en un control de edición a veces es inevitable que
aparezcan espacios ya sea al comienzo o al final. Para eliminar estos espacios tenemos la
función miembro trim
String str=" 12 ";
String str1=str.trim();
Para convertir un string en número entero, primero quitamos los espacios en blanco al
principio y al final y luego, llamamos a la función miembro estática parseInt de la clase
Integer (clase envolvente que describe los números enteros)
String str=" 12 ";
int numero=Integer.parseInt(str.trim());
Para convertir un string en número decimal (double) se requieren dos pasos: convertir el
string en un objeto de la clase envolvente Double, mediante la función miembro estática
valueOf, y a continuación convertir el objeto de la clase Double en un tipo primitivo double
mediante la función doubleValue
String str="12.35 ";
double numero=Double.valueOf(str).doubleValue();
Se puede hacer el mismo procedimiento para convertir un string a número entero
String str="12";
int numero=Integer.valueOf(str).intValue();
El siguiente programa muestra el uso de la clase String.
public class Test
{
public static void main(String[] args)
{
String str1 = "La provincia de Santander es muy bonita";
String str2 = "La provincia de SANTANDER es muy bonita";
String strtemp;
int resultado;
resultado = str1.compareToIgnoreCase(str2);
if( resultado > 0 )
strtemp = "mayor que ";
else if( resultado < 0 )
strtemp = "menor que ";
else
58. Excelencia Académica
62
strtemp = "igual a ";
System.out.println( str1 + " es " + strtemp + str2 );
}
}
Para escribir una aplicación se escribe primero con el editor de textos el programa y
después se compila. Si no existen errores se ejecuta el programa el que se guarda
automáticamente en el disco con el nombre de la clase principal.
La clase math contiene métodos que permite la manipulación de números incluyendo
funciones para convertir y manejar funciones matemáticas con datos numéricos.
Existen clases para realizar el tratamiento de caracteres y cadenas de textos con las cuales
se realiza las conversiones de datos String y otros.
Fco. Javier Ceballos Curso de Programación Java 2
Alfaomega-Rama, España 2,003 Segunda Edición
Luis Joyanes Aguilar Programación en Java
Prentice Hall, España
José Pérez Mayor Programación en Java Paso a Paso
Thomson, España 2,003
Deitel y Deitel Curso de Programación en Java
Prentice Hall, España, 1,995
En el siguiente UNIDAD TEMÁTICA se estudiarán las estructuras de control que nos
permitirán escribir programas más complejos y completos
59. Excelencia Académica
63
Se debe tener presente que cuando se quiere utilizar los métodos de una clase se deben
importar la clase respectiva al programa que se está construyendo.
Existen métodos que sirven para realizar conversiones de datos y también existen métodos
que sirven para realizar comparaciones y generan un resultado lógico o boleano.
Escribir un programa que permita el ingreso de un número entero tipo byte, un número
entero tipo int, un número entero tipo long, un número real tipo float y un número real tipo
double y que se conviertan a cadenas de texto y se muestre por pantalla una cadena con
todos los número ingresados.
Manejar en forma adecuada las clases math,
Carácter, String, Integer, Flota y sus respectivos métodos.
60. Excelencia Académica
64
Nº 4
Nombre__________________________________________________________________
Apellidos_______________________________________Fecha _____________________
Ciudad ______________________________Semestre_____________________________
1.- Escribir un programa que solicite un número y que después muestre el número con su
parte decimal redondeado a tres dígitos.
2.- Escribir un programa que solicite un número, que solicite la cantidad de dígitos de la
parte real válidos y que muestre el número con la cantidad de dígitos de la parte real
indicado y redondeado.
3.- Escribir un programa que soliste una cadena de texto y que después solicite otra
cadena de texto y que después por pantalla nos diga en que posición de la primera
cadena se encuentra la segunda cadena.
4.- Escribir un programa que solicite un número entero de hasta tres dígitos y que después
muestre por pantalla cada uno de los dígitos que tiene el número.
61. Excelencia Académica
65
ESTRUCTURAS DE CONTROL
Durante un programa existen acciones que se van a ejecutar bajo ciertas condiciones de
control o que se van a repetir un número determinado de veces. Por ejemplo, leer 3
caracteres de un flujo de entrada in se codificaría o leer 20 números enteros, etc.
Estructuras de Control
El lenguaje Java soporta las siguientes estructuras de control:
Estructura Sentencia
Toma de decision if-else, switch-case
Bucle for, while, do-while
Otras break, continue, label:, return, goto
Aunque goto es una palabra reservada, actualmente el lenguaje Java no soporta la
sentencia goto. Se puede utilizar las sentencias de bifurcación en su lugar.
Estructura Condicional If y Swicht
La sentencia if-else de Java permite que los programas puedan ejecutar distintos conjuntos
de sentencias según algún criterio o condición.
La sintaxis de la sentencia if-else es:
if ( condición )
Bloque de código a ejecutar si la condición es verdadera
else
Bloque de código a ejecutar si la condición es falsa
La parte del else es opcional, y un bloque de código puede ser simplemente la sentencia
vacía ; para representar que en ese caso no se ha de ejecutar nada. Si se tiene una
sentencia if sin su respectiva parte else, se dice que se tiene una estructura condicional
simple, mientras que si se usa la sentencia else se dice que se tiene una estructura
condicional múltiple.
Supongamos que un programa debe realizar diferentes acciones dependiendo de si el
usuario oprime el botón aceptar o el botón cancelar en una ventana de dialogo. Nuestro
programa puede realizar esto usando la sentencia if - else:
// La respuesta es Aceptar o Cancelar
62. Excelencia Académica
66
if (respuesta == Aceptar) {
// código para realizar la acción Aceptar
System.out.println( "Su peticion esta siendo atendida" );
}
else {
// código para realizar la acción Cancelar
System.out.println( "Cancelando accion" );
}
Se pueden anidar expresiones if-else, para poder implementar aquellos casos con múltiples
acciones. Esto es lo que se suele denominar como sentencias else if.
Por ejemplo, supongamos que se desea escribir un programa que clasifique según el
contenido de una variable valor, asigne una letra a una variable clasificacion: A para un
valor de 100 a 91, B de 90 a 81, C para 80 a 71 y F si no es ninguno de los anteriores:
int valor;
char clasificacion;
if (valor > 90)
{clasificacion='A';}
else if (valor > 80)
{clasificacion='B';}
else if (valor > 70)
{clasificacion='C';}
else
{clasificacion='F';}
Se pueden escribir los if en las mismas líneas que los else, pero desde se recomienda
utilizar la forma indentada (como se ha podido ver en el ejemplo), pues es más clara para
el lector.
Este sistema de programación (else if) no es demasiado recomendable, y por ello el
lenguaje Java incluye la sentencia switch, que veremos a continuación, para dirigir el flujo
de control de variables con múltiples valores.
Sentencia Switch
Mediante la sentencia switch se puede seleccionar entre varias sentencias según el valor
de cierta expresión.
La forma general de switch es la siguiente:
switch ( expresionMultivalor ) {
case valor1 : conjuntoDeSentencias1; break;
case valor2 : conjuntoDeSentencias2; break;
case valor3: conjuntoDeSentencias3; break;
63. Excelencia Académica
67
.
.
.
case valorn: conjuntoDeSentenciasn; break;
default: conjuntoDeSentenciasdef; break;
} // fin de la sentencia switch
La sentencia switch evalúa la expresiónMultivalor y ejecuta el conjuntoDeSentenciasX que
aparece junto a la cláusula case cuyo valor corresponda con el de la expresiónMultivalor.
Cada sentencia case debe ser única y el valor que evalúa debe ser del mismo tipo que el
devuelto por la expresiónMultivalor de la sentencia switch.
Las sentencias break que aparecen tras cada conjuntoDeSentencias provocan que el
control salga del switch y continúe con la siguiente instrucción al switch. Las sentencias
break son necesarias porque sin ellas se ejecutarían secuencialmente las sentencias case
siguientes. Existen ciertas situaciones en las que se desea ejecutar secuencialmente
algunas o todas las sentencias case, para lo que habrá que eliminar algúnos break.
Finalmente, se puede usar la sentencia default para manejar los valores que no son
explícitamente contemplados por alguna de las sentencias case. Su uso es altamente
recomendado.
Por ejemplo, supongamos un programa con una variable entera meses cuyo valor indica el
mes actual, y se desea imprimir el nombre del mes en que estemos. Se puede utilizar la
sentencia switch para realizar esta operación:
int meses;
switch ( meses ){
case 1: System.out.println( "Enero" ); break;
case 2: System.out.println( "Febrero" ); break;
case 3: System.out.println( "Marzo" ); break;
//Demás meses
// . . .
case 12: System.out.println( "Diciembre" ); break;
default: System.out.println( "Mes no valido" ); break;
}
Por supuesto, se puede implementar esta estructura como una sentencia if else if:
int meses;
if ( meses == 1 ) {
System.out.println( "Enero" );
}
else
if ( meses == 2 ) {
64. Excelencia Académica
68
System.out.println( "Febrero" );
}
// Y así para los demás meses
El decidir si usar la sentencia if o switch depende del criterio de cada caso. Se puede
decidir cuál usar basándonos en la legibilidad, aunque se recomienda utilizar switch para
sentencias con más de tres o cuatro posibilidades.
EJEMPLO 1
Escribir un programa que solicite un número entero y muestre por pantalla un mensaje
indicando si el número que se ha ingresado es par, impar o es cero.
import java.io.*;
public class ParImpar
{
public static void main(String[] args) throws IOException
{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader flujoE = new BufferedReader(isr);
int N;
System.out.print("Ingrese un número entero : ");
N=Integer.parseInt(flujoE.readLine());
//verificacion si es par o impar
if (N==0) System.out.println("El número es cero");
else if (N%2==0) System.out.println("El número es par");
else System.out.println("El número es impar");
}
}
EJEMPLO 2
Escribir un programa que solicite un carácter y que muestre el carácter ingresad, su código
ASCII y si este código es par o impar.
import java.io.*;
public class Caracter
{
65. Excelencia Académica
69
public static void main(String[] args) throws IOException
{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader flujoE = new BufferedReader(isr);
int N;
System.out.print("Ingrese un caracter y presione Enter : ");
N=System.in.read();
System.out.print("EL caracter es "+(char)N+" su código ASCII es "+N);
//verificacion si el código es par o impar
if (N%2==0) System.out.println(" y es par");
else System.out.println(" y es impar");
}
}
5.1
1.- Ingresar un número cualquiera e informar si es o no es mayor de 100.
2.- Ingresar un número entero cualquiera e informar si es o no es múltiplo de 4 ( recordar
el operador modulo o residuo (%), analizado en el tema de operadores aritméticos).
3.- Ingresar los cinco datos más importantes de un Empleado, incluyendo el sueldo diario
y los días trabajados desplegarle su cheque semanal solo si ganó más de $500.00 en
la semana, en caso contrario desplegarle un bono de despensa semanal de $150.00.
4.- Ingresar los datos más importantes de un estudiante incluyendo tres calificaciones
construir una boleta de calificaciones si el estudiante es de la carrera de medicina, en
caso contrario construir una pantalla más bonita todavía que despliega un oficio
citando a los padres del estudiante a una platica amistosa con los maestros de la
universidad.
5.- Ingresar los datos más importantes de un producto cualquiera, incluyendo cantidad,
precio, etc. desplegar una orden de compra, solo si el producto es de origen nacional,
en caso contrario no hacer nada.
Ciclos Repetitivos
66. Excelencia Académica
70
Los ciclos repetitivos, llamados también ciclos, anillos o lazos se utilizan como una
estructura que repite una instrucción o grupo de instrucciones bajo una condición.
a) Bucle while
El bucle while sirve para realizar una acción sucesivamente mientras se cumpla una
determinada condición.
La forma general del bucle while es la siguiente:
while ( condición ) {
sentencias que se repiten;
};
Las sentencias se ejecutan mientras la condición tenga un valor verdadero, cuando la
condición es falsa se termina el ciclo repetitivo y se pasa a la siguiente sentencia.
Se utiliza, por ejemplo para estar en un bucle del que no hay que salir hasta que no se
cumpla una determinada condición. Por ejemplo, multiplicar un número por 2 hasta que sea
mayor que 100:
int i = 1;
while ( i <= 100 ) {
i = i * 2;
}
Con él se podrían eliminar los bucles do-while y for por ser extensioones de éste, pero que
se incluyen en el lenguaje para facilitar la programación.
b) Bucle do-while
El bucle do-while es similar al bucle while, pero en el bucle while la expresión se evalúa al
principio del bucle y en el bucle do-while la evaluación se realiza al final.
La forma general del bucle do-while es la siguiente:
do {
sentencias que se repiten;
} while ( condición );
La sentencia do-while es el constructor de bucles menos utilizado en la programación, pero
tiene sus usos, cuando el bucle deba ser ejecutado por lo menos una vez. En esta
estructura el bucle se repite si la condición es verdadera y se termina cuando la condición
es falsa.
Por ejemplo, cuando se lee información de un archivo, se sabe que siempre se debe leer
por lo menos un carácter: