Uploaded by Yogger

U1 JAVA

advertisement
UNIDAD I
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETO Y DESARROLLO DEL SOFTWARE E
INICIO EN JAVA INCLUYENDO DATOS NUMÉRICOS
JAVA INTRODUCCIÓN
Módulo I
Introducción a la programación orientada a
objeto y desarrollo del software e inicio en
Java incluyendo datos numéricos
Contenido
Introducción: ................................................................................................................. 3
Desarrollo ..................................................................................................................... 4
1.
Programa Orientado a Objeto (POO) .............................................................. 4
Dentro de JAVA, la POO resalta algunos conceptos fundamentales para
su utilización: ........................................................................................................ 6
2.
Clases e instancias de valores de datos ......................................................... 7
3.
Ingeniería de software y ciclo de vida del software ......................................... 8
Hay cinco fases principales en el ciclo de vida de un software: ............... 9
4.
Componentes del programa ......................................................................... 10
Comentarios .......................................................................................... 10
Sentencia import (de importación) ......................................................... 11
Declaración de clase ............................................................................. 12
5.
Ciclo editar – Compilar - Ejecutar ................................................................. 13
Algunas clases estándar en Java ............................................................................... 17
Ejemplo de desarrollo ................................................................................................. 20
Pasos del desarrollo ................................................................................................... 21
Variables..................................................................................................................... 25
Expresiones aritméticas .............................................................................................. 27
Constantes ................................................................................................................. 28
La clase Math ............................................................................................................. 30
Generación de números aleatorios ............................................................................. 31
La clase gregoriancalendar ......................................................................................... 32
Representación numérica ........................................................................................... 34
Bibliografía .................................................................................................................. 36
Optativa I – Java Introducción
Prof. Adan Morel
2
Introducción a la programación orientada a
objeto y desarrollo del software e inicio en
Java incluyendo datos numéricos
Aspectos Motivacionales:
Fuente: www.desmotivaciones.es
Introducción:
Como describe la imagen anterior, la programación es un estilo de vida, estamos
ligados a ella de manera constante. En nuestra existencia diaria, muchas veces
sin darnos cuenta, realizamos rutinas como levantarnos, desayunar, ir al trabajo,
etc. Siempre siguiendo la misma secuencia. Ahora, imaginémonos que todo lo
Optativa I – Java Introducción
Prof. Adan Morel
3
que realizamos pueda quedar plasmado en un programa, donde cada actividad
que realicemos sea independiente pero igual de importante que el resto.
Con esta idea fue que a mediados de los ’90 nace JAVA como lenguaje orientado
a objetos, multiplataforma y de fácil utilización. Prácticamente, la mayoría de las
empresas utilizan algún módulo o plataforma desarrollada en este lenguaje por
su independencia para ser ejecutados en cualquier plataforma, sin mencionar las
retribuciones económicas ofrecidas a los desarrolladores.
Estas características convierten a JAVA en una pieza indispensable en la hoja
de vida (curriculum vitae) de todo programador.
En las siguientes páginas, tendremos una vista detallada de este potente
lenguaje que hoy en día es la más utilizada, presente desde los aspectos más
simples a los más complejos de nuestra vida.
Desarrollo
1. Programa Orientado a Objeto (POO)
Antes de comenzar a programar, debemos de conocer algunos detalles que
hacen este conglomerado práctico expresado en lenguaje.
Actualmente, en el mercado, existen innumerables programas que utilizan el
paradigma de POO pero JAVA es considerado la punta de la pirámide del
mercado por sus características mencionadas anteriormente.
La Programación Orientada a Objeto nace como la idea de representar un
sistema en bloques independientes que interactúan entre si teniendo un
resultado común. Expresando lo anterior de manera sencilla, es utilizar la célebre
frase “divide y vencerás” para programar. La representación de este paradigma
es encapsular los datos y métodos en un objeto, así tenemos diferentes objetos
Optativa I – Java Introducción
Prof. Adan Morel
4
con cierta autonomía, cada uno con métodos y datos internos (privados) y bien
diferenciados del entorno en el que se encuentran.
Utilicemos nuestra imaginación. Quien no
ha
sido
reprochado
por
su
madre
(generalmente) por algún desorden en
nuestros cuartos. Nosotros pertenecemos a
un gran sistema llamado CASA, cada uno
de nosotros dependemos de nuestros
Imagen proveída por el docente
PADRES
durante
la
adolescencia
y
tenemos un lugar asignado dentro de la CASA denominado CUARTO.
Dentro
del
CUARTO
tenemos
distintos
OBJETOS que utilizamos para nuestra vida
diaria (vestimentas, camas, calzados, etc.).
Cuando estos no se encuentran en el lugar
correspondiente se genera un caos en el
momento
que
necesitamos
utilizar
algún
Imagen proveída por el docente
recurso. Si bien sabemos que, por ejemplo,un
zapato que necesitamos está en el CUARTO, pero no podemos ubicarlo debido
al desorden.
Es así que, al ver el desorden, los PADRES comienzan a actuar arreglando el
CUARTO y disponiendo cada OBJETO en su lugar teniendo como resultado un
ambiente ordenado. Es así como funciona la POO, disponiendo de cada
OBJETO en un lugar de fácil acceso y manejo para el usuario común.
Volviendo al tecnicismo de la POO, cada objeto debe de interactuar con los
elementos del sistema utilizando una interfaz definida a través de métodos
públicos, pudiendo ser estos invocados desde afuera. Esto nos ayuda a
gestionar sistemas de gran complejidad y desglosarlos en pequeñas unidades
funcionales.
Optativa I – Java Introducción
Prof. Adan Morel
5
Dentro de JAVA, la POO resalta algunos conceptos
fundamentales para su utilización:
1.1.1. Clases y objetos
► Clases: Elemento fundamental en la POO. Cuenta con una serie de
métodos y propiedades que definen el comportamiento y la forma que
posee un objeto. Define las especificaciones formales que identificaran
unas clases de otras. Existen varios tipos de clases, las públicas (public)
que son accesibles desde otras clases, referenciadas en forma directa o
por herencia fuera del paquete donde fueron declaradas.
Así mismo, tenemos las clases abstractas (abstract) que, sin falta, poseen
al menos un método abstracto (está definido el método pero no está
implementado). Se define la arquitectura pero no la acción, por decirlo de
una forma. Este tipo de clases no son instanciadas.
► Objeto: Es la instanciación de una Clase. Se debe definir una clase antes
de crear una instancia (objeto) de la clase. Un programa escrito en un
estilo orientado a objetos consistirá en objetos que interactúan entre sí.
Un objeto consta de datos y de las operaciones que manipulan esos
datos.
1.1.2. Mensajes y métodos
► Mensaje: Para ordenar a una clase o a un objeto que realice una tarea,
se le envía un mensaje. Para que una clase u objeto procese el mensaje,
debe ser programado en forma adecuada. No se puede simplemente
mandar un mensaje a cualquier clase u objeto. Solo se puede mandar un
mensaje a las clases y objetos que entienden el mensaje que se les envía.
Optativa I – Java Introducción
Prof. Adan Morel
6
► Método: Para que una clase u objeto procese el mensaje que recibe,
debe poseer un método compatible, que es una secuencia de
instrucciones que una clase u objeto sigue para realizar una tarea.
Un método definido para una clase se llama método de clase y un método
definido para un objeto es un método de instancia.
Un ejemplo de método de instancia seria, suponer que se define un método
llamado “caminar” para un objeto “Robot”, al cual se le ordena que camine una
distancia designada. Con este método definido, se puede enviar el mensaje
caminar a un objeto Robot, junto con la distancia que debe avanzar.
Un valor que pasamos a un objeto se llama “Argumento” de un mensaje. El
nombre del mensaje que se envía a un objeto o a una clase debe ser el mismo
que el nombre del método.
2. Clases e instancias de valores de datos
Supongamos que el método depósito de un objeto “Cuenta” ordena al objeto que
agregue una cantidad determinada al saldo actual. ¿Dónde mantiene el objeto el
saldo actual? Recuerde que un objeto está compuesto de valores de datos y
métodos. De manera parecida a como se definen los métodos de clase e
instancia, se pueden definir los valores de datos de clase instancia. Por ejemplo,
se define un Valor de datos de instancia saldo actual para objetos Cuenta al
registrar el saldo actual.
Juan: cuenta
María: cuenta
Pedro: cuenta
Saldo actual
908.55
Saldo actual
1304.9
Saldo actual
354.00
Optativa I – Java Introducción
Prof. Adan Morel
7
En esta figura muestra 3 objetos Cuenta con sus valores de datos saldo actual.
Observe que todos tienen los mismos valores de datos saldo actual. Todas las
instancias de la misma clase tendrán el mismo conjunto de valores de datos. Las
cantidades reales de dólares para el saldo actual, como ilustra el diagrama, son
diferentes entre una instancia y otra. Los temas como saldo de apertura y número
de cuenta son otros valores de datos de instancia posibles para los objetos
Cuenta.
Un Valor de datos de clase se usa para representar la información compartida
por todas las instancias o para representar la información colectiva acerca de las
instancias, por ejemplo si cada cuenta debe mantener un saldo mínimo de,
digamos, $100, se puede definir un valor de datos de clase llamado saldo
mínimo. Una instancia puede tener acceso a los valores de datos de clase del
tipo al que pertenece, de tal forma que cada objeto Cuenta puede tener acceso
al valor de datos de clase saldo mínimo.
3. Ingeniería de software y ciclo de vida del
software
Cuando decimos programación computacional, nos referimos no solo a escribir
comandos de Java, sino también a todo un proceso de desarrollo de un software.
Conocer solo un lenguaje de programación no es suficiente para llegar a ser un
creador competente software. Debe saber cómo diseñar un programa.
Una casa se construye en etapas bien definidas y se aplican principios de
ingeniería en todas las etapas. De forma similar, un programa se construye en
etapas y se aplica metodología disciplinada en todas las etapas del desarrollo
del mismo.
► Ciclo de vida del software: es la secuencia de etapas desde la
concepción hasta la operación de un programa.
Optativa I – Java Introducción
Prof. Adan Morel
8
► Ingeniería de software: es la aplicación de un método sistemático y
disciplinado al desarrollo, prueba y mantenimiento de un programa.
Hay cinco fases principales en el ciclo de vida de un
software:
► ANÁLISIS: en esta fase se realiza un estudio de factibilidad. Se analiza
el problema y se determina si es posible una solución. Suponiendo que
sea posible una solución, el resultado de esta fase es una especificación
de requisitos que describe las características de un programa, las cuales
deben ser descritas de tal forma que sean probables.
► DISEÑO: en esta fase se pasa una especificación de requisitos a un
diseño detallado del programa. Para un diseño orientado a objetos, el
resultado de esta fase será un conjunto de clases que cumplan con los
requisitos.
► CODIFICACIÓN: en esta fase se implementa un diseño en un programa
real. Una vez que tenemos un diseño bien construido, implementarlo en
un código real no es tan difícil.
► PRUEBA: en esta fase se ejecuta el programa usando diferentes grupos
de datos para verificar que el programa se ejecuta de acuerdo con la
especificación.
Existen dos tipos de prueba:
o Pruebas de unidad: verifican las clases de forma individual.
o Pruebas de Integración: demuestra que las clases funcionen juntas
de manera correcta.
 Depuración: es la actividad que se realiza para eliminar los errores
de programación. Un error podría ser el resultado de fallar en la
implementación o el diseño. Cuando hay un error, se tiene que
retroceder a las fases anteriores para eliminarlo.
Optativa I – Java Introducción
Prof. Adan Morel
9
► OPERACIÓN: en esta fase el programa estará listo para usarse. La
actividad más importante y que ocupa más tiempo durante esta fase es el
“Mantenimiento del software”, que significa hacer cambios al software. Se
calcula que el 70% del costo del software se relaciona con el
mantenimiento del mismo. Por lo tanto, es natural que cuando
desarrollamos un software, nos propongamos uno que sea fácil de
mantener.
4. Componentes del programa
Un programa en Java, se compone de:
Comentarios
Un comentario es cualquier secuencia de texto que comienza con el marcador /*
y termina con otro marcador */.
Los Marcadores del comentario inicial y final coinciden en pares. Cada
marcador de inicio debe tener un marcador final que coincida. Cualquier
marcador inicial que aparezca entre el marcador inicial y final correspondiente
se trata como parte del comentario. En otras palabras, no se puede poner un
comentario dentro de otro comentario.
/*
Este es un comentario
Con tres líneas
De texto
*/
Un Marcador del comentario de una sola línea. Cualquier texto entre el
marcador de doble diagonal y el final de la línea es un comentario.
//Este eso un comentario
Optativa I – Java Introducción
Prof. Adan Morel
10
//Este es otro comentario
//Este es un tercer comentario
El tercer tipo de comentario se llama Comentario javadoc. Es un comentario
especializado que puede aparecer antes de la declaración de clase y de otros
elementos del programa.
Sentencia import (de importación)
Se desarrollan programas orientados a objetos al usar clases predefinidas,
definidas tanto por el sistema como por el programador, siempre que sea posible
y al definir nuestras propias clases cuando no haya clases predefinidas
adecuadas disponibles.
En Java las clases se agrupan en paquetes y el sistema Java viene con
numerosos paquetes. También se pueden agrupar en forma lógica las propias
clases del programador en un paquete de tal manera que puedan reutilizarse
convenientemente en otros programas.
Para usar una clase a partir de un paquete, nos referimos a la clase de nuestro
programa usando el siguiente formato:
<nombre del paquete>.<nombre de la clase>Esta notación se llama notación
de punto.
Un paquete puede incluir subpaquetes que formen una jerarquía de paquetes.
Al referirnos a una clase de un paquete profundamente anidado, usamos
múltiples puntos, por ejemplo:
javax.swing.JFrame
Optativa I – Java Introducción
Prof. Adan Morel
11
Para referirnos a la clase JFrame del paquete javax.swing; esto es, el paquete
swing esta dentro del paquete javax. La notación punto con los nombres de todos
los paquetes a los que pertenece una clase se llama nombre completamente
calificado de la clase. Usar el nombre completamente calificado de una clase
es con frecuencia muy engorroso, en especial cuando debemos referirnos a la
misma clase muchas veces en un programa. Podemos usar la sentencia import
para evitar este problema.
La sentencia import permite que el programa se refiera a clases definidas en el
paquete designado sin usar el nombre de la clase completamente calificado.
Si necesitamos importar más de una clase de un mismo paquete, entonces en
vez de usar una sentencia import para cada clase podemos importarlos todos al
usar una notación de asterisco:
Import javax.swing.*
Declaración de clase
Un programa se compone de una o más clases; algunas son clases predefinidas,
mientras que otras las definimos nosotros. Para definir una nueva clase,
debemos declararla en el programa o hacer una declaración de clase.
class <nombre de la clase> {
<declaración de miembros de la clase>}
► Clase principal: una de las clases de un programa debe designarse como
la clase principal.
Si designamos una clase como la clase principal, entonces debemos
definir un método llamado main (principal) porque cuando se ejecuta un
Optativa I – Java Introducción
Prof. Adan Morel
12
programa de java, se ejecuta primero el método main de una clase principal.
Para definir un método debemos declararlo en una clase.
► Declaración de método:
La sintaxis para la declaración de método es
<modificadores><tipo de retorno> <nombre del método>
(<parámetros> {
<cuerpo del método>
}
En donde <modificadores> es una secuencia de términos que designan
diferentes clases de métodos, <tipo de retorno> es el tipo de valor de datos que
regresa el método, <nombre del método> es el nombre del método,<parámetro>
es una secuencia de los valores que se pasan al método y <cuerpo del método>
es una secuencia de instrucciones.
5. Ciclo editar – Compilar - Ejecutar
PASO 1
Escriba el programa en el editor y guárdelo en un archivo. Use el nombre de la
clase principal y el sufijo .java para el nombre del archivo. Este archivo, en el que
el programa está en una forma legible para las personas, se llama archivo
fuente.
Import javax.swing.*;
class ejemplo {
Optativa I – Java Introducción
Prof. Adan Morel
13
public static void main(String [] args ) {
JFrame miventana;
miventana = new JFrame ();
miventana.setSize(300,200);
miventana.setTitle(“Mi primer programa Java”);
miventana.setVisible(true);
}}
PASO 2
Compile el archivo fuente. Muchos compiladores requieren que se cree un
archivo de proyecto y después que se coloque el archivo fuente en dicho
archivo del proyecto con la finalidad de compilar el archivo fuente.
Cuando la compilación es exitosa se crea la versión compilada del archivo
fuente. Esta versión compilada se llama bytecode (código byte) y el archivo
que contiene el código byte se llama archivo en bytecode.
El nombre del archivo en bytecode generado por el compilador tendrá el sufijo
.class, mientras que su prefijo es el mismo que el del archivo fuente.
Optativa I – Java Introducción
Prof. Adan Morel
14
15
Imagen proveída por el docente
Cuando ocurre cualquier error en un programa, se desplegara un mensaje de
error. Si el programa no contiene errores en la sintaxis, entonces en lugar de un
mensaje de error, no aparecerá nada o lo hará un mensaje que dirá algo como
“Compiled successfully” (“Compilación exitosa”).
Para ver qué tipo de mensajes de error se despliegan, intente compilar el
siguiente programa. Se introdujeron tres errores a propósito; ¿Los puede
encontrar?
Import javax.swing.*;
class ejemplo {
public static void main(String [] args ) {
miventana = new JFrame ();
miventana.setSize();
miventana.setTitle(“Mi primer programa Java”);
Optativa I – Java Introducción
Prof. Adan Morel
miventana.setVisible(true)
}
}
► Errores de compilación: son los errores detectados por el compilador,
los cuales son de hecho los tipos de error más fáciles de corregir. La
mayoría de los errores de compilación se deben a la violación de las
reglas de sintaxis.
PASO 3
Ejecute el archivo en bytecode. Un intérprete java ira a través del archivo en
bytecode y ejecutara las instrucciones en él. Si su programa está libre de errores,
aparecerá una ventana en la pantalla.
Imagen proveída por el docente
► Errores de ejecución: son errores detectados por el intérprete. Si ocurre
un error en la ejecución del programa, el intérprete lo atrapara y detendrá
la ejecución.
Optativa I – Java Introducción
Prof. Adan Morel
16
Algunas clases estándar en Java
Antes de llegar a ser un experto en definir sus propias clases, debe aprender
cómo usar las existentes.
1. SALIDA ESTANDAR
Cuando un programa calcula un resultado, se necesita una forma de que muestre
este resultado al usuario del programa. Una de las formas más comunes de
hacerlo en java es usar la ventana de consola, la cual también se llama ventana
de salida estándar.
Producimos datos que son los resultados del cálculo o mensajes a la ventada de
consola a través de System.out. La clase System incluye una cantidad de
valores útiles de datos de clases. Uno es una instancia de la clase PrinStream
llamado out. Puesto que este es un valor de datos de clase, nos referimos a él a
través del nombre de clase como System.out y este objeto PrintStream se vincula
con la ventana de la consola (existe exactamente una ventana de consola por
programa).
Cada elemento de dato que enviamos a System.out aparecerá en esta ventana
de consola. A la técnica de producir datos usando System.out la llamamos salida
estándar.
System.out.print (“HOLA MUNDO”);
2. CLASE STRING
Los valores textuales que pasamos al método print o el constructor de la clase
JFrame son instancias de la clase String (cadena). Una secuencia de caracteres
encerrados por doble entrecomillado es constantes String. Como String es una
clase, podemos crear una instancia y darle un nombre.
Optativa I – Java Introducción
Prof. Adan Morel
17
String Nombre;
18
Nombre= new String (“Juan Lopez”);
A diferencia de otras clases, el uso explícito de new para crear una instancia es
opcional para la clase String. Se puede crear un nuevo objeto String de esta
forma:
String Nombre;
Nombre= “Juan Lopez”;
Existen cerca de 50 métodos definidos en la clase String. Estos son 3 de ellos:
► Substring: extrae una subcadena dada al especificar las posiciones de
inicio y fin.
String texto;
press
texto = “Espresso”;
System.out.print (texto.substring(2,7));
► Length: devuelve el número de caracteres en un objeto String. Usando el
ejemplo anterior:
8
texto.length ();
► indexOf: localiza la posición de una subcadena dentro de otra cadena.
Por ejemplo, si el identificador texto se refiere a la cadena “Hola mundo”.
texto.indexOf(“mundo”)
5
Regresara el valor 5, que es la posición del primer carácter de la cadena
designada mundo. Si la cadena buscada no se localiza en la cadena, entonces
regresa -1.
Optativa I – Java Introducción
Prof. Adan Morel
3. DATE Y SIMPLEDATEFORMAT
19
La clase Date (fecha) se usa para representar una instancia de tiempo con la
precisión de un milisegundo (una milésima de segundo). Esta clase está en el
paquete java.util. Cuando se crea un nuevo objeto Date, se establece en la hora
en el que se crea (la hora actual se determina por la lectura de la hora que
mantiene el sistema operativo en su máquina).
La clase Date incluye el método toString que convierte su formato interno en una
representación de cadena, que se puede usar para desplegar la hora. Por
ejemplo:
Date hoy;
Wed Jan 28 15:05:18 PDT 2006
hoy = new Date()
System.out.println (hoy.toString ());
4. ENTRADA ESTANDAR
Análogo a la salida System.out tenemos System.in para la entrada. Llamamos a
la técnica para introducir datos usando System.in entrada estándar. System.in
acepta entradas desde el teclado. También usamos el término console input
(entrada de consola) para referirnos a las entradas estándar. Usar System.in
para las entradas es un poco más complicado que usar System.out para las
salidas. System.in es una instancia de la clase InputStream que proporciona solo
la facultad de introducir un byte a la vez con su método read (leer). Sin embargo,
se requieren múltiples bytes para representar tipos comunes de datos, así como
las cadenas.
La clase Scanner del paquete java.util proporciona una facilidad de entrada
necesaria para acomodar varias rutinas de entrada.
Optativa I – Java Introducción
Prof. Adan Morel
Import java.util.*;
20
…
Scanner escáner;
escaner = new Scanner (System.in);
Ejemplo de desarrollo
Ahora que adquirimos un conocimiento básico de los programas de aplicaciones
de Java, escribamos una nueva aplicación. Ya que el programa que crearemos
aquí es muy sencillo, podemos escribirlo sin pasar por las fases de diseño,
codificación y prueba del ciclo de vida del software. Sin embargo, es muy
importante que usted se introduzca en el hábito desarrollar un programa
siguiendo las etapas del ciclo de vida del software.
Generaremos este programa mediante una técnica de desarrollo incremental,
que elaborara el programa en pequeños pasos graduales. Comenzamos con un
programa muy limitado y en forma gradual desarrollaremos el programa al
agregarle más y más códigos. En cada caso incremental diseñamos, codificamos
y probamos el programa antes de movernos al siguiente paso. Este desarrollo
metódico de un programa nos permite enfocar nuestra atención en una sola tarea
en cada paso y esto reduce la oportunidad de introducir errores en el programa.
► Enunciado del problema
Escriba una aplicación que requiera el nombre y apellido del usuario y que
conteste con las iniciales del usuario.
► Plan global
Tareas del programa:
Optativa I – Java Introducción
Prof. Adan Morel
1. Obtener el nombre y apellidos del usuario
21
2. Extraer las iniciales para formular un monograma
3. Presentar el monograma
Documento de diseño: Monograma
Clase
Propósito
Monograma
La clase principal del programa.
Scanner
El método next se usa para obtener el nombre completo.
String
La clase se usa para manipulación de cadenas y para
extraer iniciales
Del nombre y de los apellidos.
(PrintStream)
La ventana de salida estándar se usa para desplegar el
System.out
monograma resultante.
Pasos del desarrollo
1. Comience con la planilla del programa y añada el código para obtener
entrada.
2. Añada el código para calcular y mostrar el monograma.
Desarrollo del PASO 1: obtener entrada.
El problema dice que el programa tiene como entrada el nombre del usuario y
mostrara sus iniciales. No específica como, así que en la etapa de diseño
decidiremos como hacer esto. Ya que en este punto conocemos solo una forma
de ingresar datos, que es usar la clase Scanner, la usaremos aquí. Pero ¿de qué
Optativa I – Java Introducción
Prof. Adan Morel
forma debemos introducir estos tres datos? Hay dos alternativas de diseño
posibles.
► Diseño alternativo 1
En el primer diseño, las introduciremos en forma separada.
String Nombre, apellidoP, apellidoM;
Scanner escáner = new Scanner(System.in);
System.out.print(“Nombre: ”);
Nombre = escaner.next ( );
System.out.print(“Apellido paterno: ”);
apellidoP= escáner.next( );
System.out.print(“Apellido Materno: ”);
apellidoM= escaner.next( );
► Diseño alternativo 2
String nombreCompleto;
Scanner escaner = new Scanner(System.in);
escaner.useDelimiter(System.getProperty(“line.separator”));
System.out.print(“Nombre Completo: ”);
nombreCompleto = escaner.next( );
¿Qué diseño es mejor? Nunca hay ”una respuesta correcta” a los problemas de
diseño. Debemos seleccionar una de las alternativas posibles que satisfagan los
diferentes criterios de la forma más efectiva en una situación dada.
Optativa I – Java Introducción
Prof. Adan Morel
22
Los criterios pueden incluir las necesidades y preferencias del usuario, el
desempeño más rápido, los costos de desarrollo, las restricciones de tiempo y
otros factores.
En el este caso escogemos el segundo enfoque porque el usuario introduce los
datos más rápidamente a través de un solo diálogo.
► Prueba del paso 1
Después de escribir el programa, lo probamos para verificar que se ejecuta como
se desea. La ejecución exitosa de este programa verifica que la configuración
del programa está bien, que se importan los paquetes necesarios y que los
objetos se declaran en forma correcta.
Desarrollo del PASO 2: calcular y mostrar el monograma
La siguiente tarea es extraer las iniciales de la cadena de entrada. Primero,
debido a nuestro conocimiento limitado de programación en este punto,
supondremos que la entrada es correcta. Esto es, la cadena de entrada contiene
nombre y dos apellidos y están separados solo por un espacio en blanco.
Segundo hay muchas soluciones posibles, pero resolveremos este problema
usando solo los métodos que ya hemos tratado. Sabemos que una secuencia de
métodos de indexOf y substring puede dividir una cadena (nombre completo) en
dos subcadenas (nombre y apellido).
Una vez que dividimos el nombre de entrada en nombre y dos apellidos, extraer
las iniciales es una aplicación bastante sencilla del método indexOf. Podemos
extraer la primera letra de una cadena:
Cadena.substring (0,1)
Y el monograma se puede formular al concatenar las tres iniciales como
nombre.substring (0,1)
+apellidoP.substring (0,1)
Optativa I – Java Introducción
Prof. Adan Morel
23
+apellidoM.substring (0,1)
24
► Idea General
String nombre;
nombre= “Jon Jay Java”;
Jon Jay Java
Jon
Jay Java
Jay
Java
Este es nuestro código:
Import java.util.*
class Monograma {
public static void main(String[] args) {
String nombreCompleto;
Scanner escaner = new Scanner(System.in);
escaner.useDelimiter(System.getProperty(“line.separator”));
System.out.print(“Nombre Completo: ”);
nombreCompleto = escaner.next( );
System.out.println(“Nombre ingresado: “+ nombreCompleto);
}
}
Optativa I – Java Introducción
Prof. Adan Morel
► Prueba del paso 2
25
Para verificar que el cómputo está funcionando en forma correcta, ejecutamos el
programa varias veces e introducimos diferentes nombres.
Recuerde que
suponemos que no hay error en la entrada; esto es, el nombre y los dos apellidos
están separados por un espacio en blanco.
Variables
Se denominan variables a las localidades de memoria a los que se asocian los
valores determinados, cualquier identificador valido puede ser usado como un
nombre de variable.
Una variable tiene 3 propiedades: una localidad de memoria para almacenar el
calor, el tipo de datos almacenados en la localidad de memoria y el nombre
usado para referirse a la localidad de memoria.
La sintaxis general para declarar las variables es <tipo de dato> <variables>, en
donde <variables> es una secuencia de identificadores separados por comas.
Cada variable que usemos en un programa debe declararse. Podemos tener
tantas declaraciones como queremos. Sin embargo, no podemos declarar la
misma variable más de una vez, por lo tanto una segunda declaración de una
misma variable no es válida.
Supongamos que queremos calcular la suma y la resta de dos números.
Llamemos a los dos números X e Y. en matemáticas, decimos
X+Y
ó
X-Y
Para calcular la suma y la resta de estos en un programa, primero debemos
declarar que tipo de datos les asignaremos. Después de asignarles valores,
podemos calcular su suma y su resta.
Digamos que X e Y son números enteros. Para declarar que el tipo de datos
asignado a ellos es un número entero escribimos
Optativa I – Java Introducción
Prof. Adan Morel
int
x, y;
26
Después de hacer la declaración podemos asignar solo números enteros a estas
variables, no podemos asignarles números reales.
TIPO DE
VALOR
CONTENIDO
DATOS
VALOR MINIMO
VALOR MAXIMO
PREDETERMINADO
byte
Entero
0
-128
127
short
Entero
0
-32768
32767
int
Entero
0
-2147483648
2147483647
long
Entero
0
-9223372036854775808
9223372036854775807
float
Real
0.0
-3.40282347E+38
3.40282347E38
double
Real
0.0
-1.7976931346231570E+308
1.79769313486231570E+308
Existen 6 tipos de datos en Java: byte, short, int, long, float, y double. La
diferencia entre estos tipos de datos está en el rango de valores que puedan
representar, como se muestra en la tabla que veremos a continuación.
La única diferencia entre una variable para números y una variable para objetos
es el contenido en las localidades de memoria. Para los números, una variable
contiene el valor numérico en sí mismo y para los objetos, una variable contiene
una dirección en donde se almacena el objeto. Los nombres de los objetos son
sinónimos de las variables cuyos contenidos son referencias a objetos (es decir,
direcciones de memoria).
Optativa I – Java Introducción
Prof. Adan Morel
Expresiones aritméticas
Una expresión que involucra valores numéricos como 23 + 45 se llama expresión
aritmética porque consiste en operadores y operandos aritméticos. Un operador
aritmético, como + en el ejemplo designa un cálculo numérico.
► Un operando en expresiones aritméticas puede ser una constante, una
variable, una llamada a método u otra expresión aritmética, posiblemente
colocada entre paréntesis.
► Un operador binario es aquel el cual opera con dos operandos. Ejemplo:
x + 4. Todos los demás operadores aritméticos excepto el menos también
son operadores binarios. Los operadores menos y más pueden ser tanto
binarios como unitarios.
Reglas para la promoción aritmética.
Operador unitario.
► Si el operando es del tipo byte o short, entonces se convierte en int.
► De otra forma, el operando permanece del mismo tipo.
Operador binario.
► Si cualquiera de los operandos es del tipo doublé entonces el otro
operando se convierte a double.
► De otra manera, si cualquiera de los operandos es del tipo float, entonces,
el otro operando se convierte en float.
► De otra forma, si cualquiera de los operandos es del tipo long, entonces
el otro se convierte a long.
► De otra manera, ambos operandos se convierten a int.
Si deseamos asignar un mismo valor a múltiples variables, podemos escalonar
las operaciones de asignación como:
X=Y=1;
Optativa I – Java Introducción
Prof. Adan Morel
27
Lo que es equivalente a decir:
X=1;
Y=1;
El símbolo de asignación = es de hecho un operador y su orden de precedencia
es más bajo que el de los demás operadores. Los operadores de asignación se
evalúan de derecha a izquierda.
Constantes
Mientras se ejecuta un programa, se pueden asignar valores distintos a una
variable en diferentes tiempos (de ahí el nombre variable, puesto que los valores
que contienen pueden variar), pero en algunos casos no queremos que esto
suceda. En otras palabras queremos bloquear el valor asignado de manera que
no pueda ocurrir cambio alguno. Una constante se declara de forma similar a la
variable pero con la palabra reservada adicional final.
Una variable debe asignársele un valor en el momento de su declaración. Aquí
hay un ejemplo de declaración de cuatro constantes:
final double PI = 3.14159;
final short CONSTANTE_FARADAY = 23060 //unidad: cal/volt
final double CM_POR_PULGADA = 2.54;
final int MESES_EN_EL_ANIO = 12;
Despliegue de valores numéricos.
Así cómo podemos desplegar los valores cadena para la ventana de la consola
usando System.out. también podemos desplegar con facilidad valores numéricos
en la ventana de la consola. Usaremos los mismos métodos print y println para
Optativa I – Java Introducción
Prof. Adan Morel
28
desplegar valores numéricos. Aquí hay un ejemplo sencillo que despliega los
valores de una constante y una variable:
Int num = 15;
System.out.print (num); //escribe una variable
System.out.print (“ “);//escribe un espacio en blanco
System.out.print(10);//escribe una constante
Al ejecutar el código dará por resultado la siguiente ventana de consola:
15 10
Podemos usar el método println para saltarnos una línea después de imprimir el
valor. Al ejecutar
Int num= 15;
System.out.println (num);
System.out.println (10);
Que dará por resultado:
15
10
Al usar el método de concatenación, es posible producir valores múltiples con un
solo método print o println. Por ejemplo:
System.out.print (30 + “ “ + 40);
Es equivalente a
System.out.print (30);
System.out.print (“ “);
Optativa I – Java Introducción
Prof. Adan Morel
29
System.out.print (40);
30
Observe que la expresión 30 + “ “ + 40 mezcla valores numéricos y una cadena.
El símbolo “+ (mas)” se usa para concatenar cadenas, pero además de poder
hacer esto con las cadenas también se puede usar para poder añadir valores
numéricos. El símbolo “+ (mas)” por lo tanto, podría significar dos cosas
diferentes: concatenación de cadenas o suma algebraica.
La clase Math
Usar solo operadores aritméticos para expresar cálculos numéricos es muy
limitante. Muchos cálculos requieren el uso de funciones matemáticas. Por
ejemplo el uso de expresiones que requieran hacer cálculos de funciones
trigonométricas o de la raíz cuadrada, etc.
La clase Math del paquete java.lang contiene los métodos de la clase para las
funciones matemáticas usadas comúnmente. Además también esta clase
contiene dos constantes que son el PI ( ) y e para el numero natural e,
respetivamente.
Imagen proveída por el docente
Optativa I – Java Introducción
Prof. Adan Morel
Generación de números aleatorios
En muchas aplicaciones de computadoras, en especial de simulación y juegos,
hay que generar números aleatorios. Por ejemplo, para simular un lanzamiento
de dados, podemos generar un número entre 1 y 6. Para dicho efecto
utilizaremos el método random de la clase Math.
El generador de números seudoaleatorios o como se lo conoce random devuelve
un numero de tipo double. El número generado se llama número seudoaleatorio
porque el número no es verdaderamente aleatorio. Cuando llamamos a este
método en forma repetida, al final los números se repetirán a sí mismos. Por lo
tanto, de manera teórica, los números generados no son aleatorios, pero para
propósitos prácticos, son lo suficientemente aleatorios.
Los números aleatorios que queremos generar para la mayoría de los propósitos
y de las aplicaciones son números enteros.
Escribamos un programa corto que seleccione un ganador entre los asistentes a
una fiesta del baile anual de primavera de la fraternidad. Los asistentes recibirán
los números M+1, M+2, M+3, etc., conforme entren en la casa. El valor inicial M
lo selecciona el presidente del comité de la fiesta. El ultimo numero asignado es
M + N si es que hay N número de asistentes. Al final de la fiesta, ejecutamos el
programa que de manera aleatoria seleccionara el numero ganador en un rango
de M+1 y M+N.
Import java.util.*;
class SeleccionaGanador{
public static void main (String[] args){
int numInicial;
//número inicial
int contador;
//número de asistentes a la fiesta
Optativa I – Java Introducción
Prof. Adan Morel
31
int numGanador;
//el ganador
int min, max;
//el rango de números aleatorios a
32
generar
Scanner escan= new Scanner(System.in);
//Obtiene dos valores de entrada
System.out.print(“Ingresa numero inicial M:
”);
numInicial=escan.nextIn();
System.out.print (“Ingresa numero de asistentes:
“);
Contador= escan.nextIn();
//selecciona al ganador
min = numInicial + 1;
max = numInicial + contador;
numGanador = (int) (Math.floor(Math.random() * (max – min + 1))
System.out.println(“\nEl numero ganador es “ + numGanador);
}
}
La clase gregoriancalendar
Esta es otra clase muy útil en la manipulación de la información de calendario
como año, mes y día llamada java.util.GregorianCalendar. Podemos crear un
nuevo objeto que represente hoy como:
GregorianCalendar hoy= new GregorianCalendar ( );
Optativa I – Java Introducción
Prof. Adan Morel
O un día en específico, digamos, 3 de junio de 1994, al pasar año, mes y dia
como los parámetros:
GregorianCalendar día= new GregorianCalendar(1994, 5, 3);
El valor 5 representa al mes de Junio, el primer mes del año, enero, se representa
con el 0, el segundo mes con el 1 y así sucesivamente. Para evitar confusión,
podemos usar constantes definidas para los meses en la superclase Calendar
(GregorianCalendar es una subclase de Calendar). En lugar de recordar que el
valor 5 representa al mes de junio, podemos usar la constante Calendar.JUNE
como GregorianCalendar día= new GregorianCalendar(1994, Calendar.JUNE,
4);
► Constantes definidas en la clase Calendar para diferentes piezas
recuperadas de la información calendario/hora.
Constante
Descripción
AÑO
La parte del año de la fecha del calendario
MES
La parte del mes de la fecha del calendario
FECHA
El día del mes
DIA_DEL_MES
Igual que FECHA
DIA_DEL_AÑO
El número del día dentro del año
DIA_DEL_MES
El número del día dentro del mes
DIA_DE_LAS_SEMANA El día de la semana (Sun-1, Mon-2,etc.)
SEMANA_DEL_AÑO
El número de la semana dentro del año
SEMANA_DEL_MES
El número de la semana dentro del mes
AM_PM
El indicador para AM o PM (AM- 0 y PM -1)
Optativa I – Java Introducción
Prof. Adan Morel
33
HORA
La hora en una notación de 12 horas
HORA_DEL_DIA
La hora en una notación de 24 horas
MINUTO
El minuto dentro de la hora
Representación numérica
Los fabricantes de computadoras han usado varios formatos para almacenar los
valores numéricos, el criterio actual es usar el formato complemento a dos para
almacenar números enteros y el formato de punto flotante para números reales.
► Bit de signo: con 8 bits, podemos representar números positivos de 0 a
255. El posible rango de números negativos y positivos que podemos
representar, usando 8 bits. Podemos designar el bit que este en el
extremo izquierdo como un bit de signo: 0 significa positivo y 1 negativo.
Con esta combinación podemos representar números enteros de -127 a
+127 como se muestran en la siguiente tabla.
Numero binario de 8bits (con un bit de
Equivalente
signo)
decimal
0 0000000
+0
0 0000001
+1
0 0000010
+2
…
…
Optativa I – Java Introducción
Prof. Adan Morel
34
0 1111111
+127
1 0000000
-0
…
…
1 1111110
-126
1 1111111
-127
► Punto flotante: aquí solo presentamos las ideas básicas para almacenar
números reales en la memoria de la computadora. Omitimos los detalles
precisos del Criterio 754 del Institute of Electronics and Electrical Engineer
(IEEE) que es el que usa Java para almacenar números reales.
Los números reales se representan en la computadora al usar notación
científica. En la notación científica con base 10, un número real se expresa
como
A x 10N
En donde A es un número real y N es un exponente integral. Por ejemplo,
la masa atómica del hidrogeno (en gramos) se expresa en notación
científica decimal como 1.67339
x 10-24,
lo
que es igual a
0.000000000000000000000000167339.
Usamos una notación científica con base 2 para almacenar números
reales en la memoria de la computadora. La notación científica con base
2 representa un número real como sigue:
A x 2N
Optativa I – Java Introducción
Prof. Adan Morel
35
Bibliografía
► Deitel, H., & Deitel, P. (2004). Como Programar Java. Mexico: Prentice
Hall.
► Holzner, S. (2000). LA BIBLIA DE JAVA 2. MADRID: ANAYA
MULTIMEDIA.
► Wu, C. T. (2001). Programación en Java. Madrid: MCGRAW-HILL.
Optativa I – Java Introducción
Prof. Adan Morel
36
Download