Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
La orientacin a objetos puede percibirse desde dos puntos de vista, como una metodologa de
diseo de software o como un paradigma de programacin que define los programas en trminos
de "clases de objetos", objetos que son entidades que combinan su estado (es decir, datos) y su
comportamiento (esto es, procedimientos o mtodos). La programacin orientada a objetos
(POO) expresa un programa como un conjunto de stos elementos, que se comunican entre ellos
para realizar tareas. Esto difiere de los lenguajes procedurales tradicionales, en los que los datos y
los procedimientos estn separados y sin relacin. La POO est pensada para hacer programas
ms fciles de organizar, mantener y reutilizar, ya que anima al programador a pensar los
programas en trminos de tipos de datos, y en segundo lugar en las operaciones especficas para
esos tipos de datos.
Con Simula I (1961 al 65) y Simula 67, Nygaard y Dahl introducan los conceptos bajo los cuales
ms tarde todos los lenguajes de programacin orientada a objetos serian construidos: objetos,
clases, herencia, cuantificador virtual y ejecucin de programas multi-hilo.
El trmino Orientado a Objetos fue acuado por Alan Kay (Figura 3) en la dcada de los 1970s,
as mismo, l es considerado tambin como uno de los creadores del modelo orientado a objetos.
Alan Kay desarrollo mejoras sustnciales al modelo de programacin, generando un lenguaje
llamado Smalltalk que era un sistema completamente dinmico en el cual las clases pueden ser
creadas y modificadas dinmicamente.
1
Figura 3: Alan Kay Figura 4: Niklaus Wirth
1.1.1 Conceptos
bsicos
El paradigma orientado a objetos se enfoca a las caractersticas de comportamiento y estructura de
las entidades como unidades completas, lo que nos permite disear software de manera modular y
con un alto manejo de estructuras de datos complejas. El paradigma orientado a objetos se apoya
en los siguientes conceptos:
Es la capacidad de crear tipos de datos definidos por el usuario extrayendo las propiedades
esenciales de un concepto, sin preocuparse de los detalles exactos de la implementacin.
Algunos simplemente lo definen como la capacidad de enfocarse en lo esencial.
La Herencia Es la capacidad de definir una nueva clase a partir de otra clase. De esta forma,
la reutilizacin del cdigo esta garantizada. Las clases estn clasificadas en una jerarqua
estricta, donde la clase padre es conocida como superclase y la clase hijo como clase
derivada. Esto significa que la clase derivada dispone de todos los atributos y mtodos de su
superclase.
Este concepto inicial fallo despus de varios intentos, pues las compaas diseadoras de
dispositivos fueron incapaces de vislumbrar los beneficios y el nicho de mercado que se
presentaba, por lo que el Green team fue forzado a encontrar otro mercado para su nuevo
lenguaje de programacin.
Afortunadamente, en ese lapso de tiempo Internet comenz a ser mas popular y accesible (1994) y
el Green team pudo estar consciente que el lenguaje Oak era perfecto para el desarrollo Web de
componentes multimedia para la construccin de paginas Web. Estas pequeas aplicaciones,
llamadas applets, llegaron a ser el primer contacto del lenguaje para los programadores de
Internet.
De esta manera Java se convirti rpidamente en un lenguaje poderoso y verstil, ya que inclua
una variedad de cualidades que lo hacia idneo para el desarrollo Web, debido principalmente a
que contaba con una plataforma de desarrollo y un esquema de ejecucin que permita la
portabilidad del sistema en casi cualquier arquitectura computacional. Adems de una interfaz
grafica muy eficiente. En la actualidad el l lenguaje cuenta con las siguientes caractersticas:
Orientacin a objetos
Esquema distribuido
Esquema de programacin paralelo (multithreads)
Esquema de seguridad en ejecucin y transacciones
Plataforma independiente (JVM)
class Nombre_Clase {}
En Java se elimina el uso de apuntadores que pueden afectar la estabilidad del cdigo, en tal caso
existe nicamente un conjunto de datos nativos y un sin nmero de objetos, a los que
llamaremos datos referenciados o simplemente referencias (objetos). Adems del modelo
orientado a objetos Java soporta el modelo de programacin distribuida que nos permite utilizar
dos o mas computadoras (coleccin de computadoras heterogneas) que se comunican a lo largo
de una red para ejecutar una tarea en comn.
Java VM: La maquina virtual de java (JVM) provee una especificacin de plataforma la cual le
permite ejecutar cualquier programa compilado en java (bytecode). De esta forma el
compilador de java toma cualquier cdigo hecho en java y genera un archivo precompilado
llamado bytecode que es un conjunto de instrucciones que puede ser interpretado por
cualquier maquina virtual de java.
Ejecucin
Compilacin
java clase Loader
Ejemplo.java
Se lee el verificador
programa Bytecode
de disco,
javac red u otro
medio
Interprete
generador
de cdigo
JIT
Ejemplo.class Ejecucin
Hardware
Ahora si se trata de un lenguaje dinmico que crea y destruye objetos en tiempo de ejecucin,
qu mecanismo se encarga de liberar las instancias construidas en memoria de los diversos
objetos?
Muchos lenguajes de programacin permiten alojar memoria de manera dinmica en tiempo de
ejecucin. El proceso para alojar memoria vara de acuerdo a las caractersticas del lenguaje y en
ciertas ocasiones los bloques de memoria reservados nunca son liberados, principalmente porque
esta tarea se deja a cargo del programador (como en C/C++).
Es un paquete que contiene todo el software necesario para correr una aplicacin desarrollada en
Java, dentro del paquete esta contenida la librera de clases, que son programas generados en
java (bytecode) y que estn expresamente construidos para servir de apoyo para la construccin
de aplicaciones por parte del usuario, adems se cuenta con:
Es el conjunto de herramientas para el desarrollo de aplicaciones en Java, esta compuesto por las
siguientes herramientas de programacin:
javac Compilador de java que se encarga de convertir cdigo fuente a bytecode de java.
jar Programa que se encarga de manipular libreras de clases ya compiladas y
empaquetadas.
javadoc Programa que se encarga de extraer documentacin automticamente partiendo de
los comentarios en el cdigo fuente.
jdb Depurador de programas.
Adems de las herramientas adicionales para desarrolladores, se agrega el paquete JRE que
contiene todas las libreras de clase y la maquina virtual en la que se producirn y ejecutaran las
aplicaciones.
Los ambientes de desarrollo son aplicaciones que nos permiten escribir en un lenguaje de
programacin de manera sencilla, ya que se puede verificar gradualmente el producto que estemos
desarrollando. De esta forma el ambiente de desarrollo se encuentra totalmente independiente de
la plataforma de Java que se emplee, es decir que se puede emplear cualquier versin del kit de
desarrollo de software (JSDK) de Sun.
Existen varios ambientes de desarrollo en el mercado, los hay desde los libres que no tienen algn
costo, hasta las herramientas mas sofisticadas y caras del mercado. El lenguaje Java (plataforma
Java) y el ambiente de desarrollo integral no son una sola aplicacin, en tal caso debern ser
instaladas de manera independiente.
o NetBeans: una herramienta creada por una filial de Sun Microsystems, es una buena
herramienta de diseo aunque algo lenta si se cuenta con poca memoria principal. Permite
el diseo RAID (diseo rpido de interfase).
o Eclipse: una herramienta de distribucin libre bastante flexible en uso de recursos y fcil
de emplear debido a su poca complejidad, permite la opcin de auto-completar texto.
o Notepad++: es una herramienta amigable y fcil de emplear, cuenta con una versin libre
bastante austera y simple de integrar para los lenguajes ms comunes adems de Java.
Tambin se encuentra disponible una plataforma de diseo integral para Java, conocida como
Eclipse, desarrollada por IBM. Eclipse es algo mas que un simple ambiente de desarrollo integral
(JDT), ya que cuenta con su propio kit de desarrollo para compilacin (ECJ). Desde un principio se
considero a Eclipse como una distribucin libre para Java, por lo que su popularidad no se ha
disminuido ante su ms claro competidor Sun Microsystems. Desafortunadamente por cuestiones
de licencias Eclipse requiere la instalacin de JRE para mantener la portabilidad.
Es importante recordar que los nombres de los identificadores en Java son sensibles a las letras
maysculas y minsculas. Para facilitar la lectura y mantenimiento de nuestros programas
aplicaremos las siguientes normas:
Cuando un nombre consta de varias palabras, se escribir una a continuacin de otra,
poniendo con mayscula la primera letra de cada palabra que sigue a otra (ejemplos:
elMayor(), RectanguloGrafico).
Los nombres de los parmetros de los mtodos empezarn por la letra p (ejemplos:
pValor1, pResultado)
Las literales true, false y null se escriben en minsculas, estrictamente hablando no son
palabras claves.
No existe el operador sizeof que nos permita acceder a la memoria, pero se cuanta con otro
operador mas potente que nos permite manipular objetos propiamente.
Comentarios
Los comentarios de documentacin se colocan inmediatamente antes de una declaracin (de
variables, mtodos o clases) indicando que los comentarios deben ser incluidos en alguna
documentacin que es generada de manera automtica (por ejemplo, los archivos HTML
generados por el comando javadoc) para servir como descripcin de los elementos declarados.
Existe el comentario en una sola lnea tipo C: // comentario. Y existe la documentacin en
bloque, que abarca un mayor numero de lneas, que comprende desde el inicio de bloque (/*)
hasta el final del mismo (*/).
/* Inicio de comentario
y el final del comentario */
Bloques de cdigo
En el lenguaje de programacin java un estatuto es una o ms lneas de cdigo que terminan con
punto y coma (;), por ejemplo:
total = a + b +c + d; tambin
total = a + b
+ c + d;
Un bloque, algunas veces llamado estatuto compuesto, es un grupo de estatutos encerrados entre
llaves de apertura y cierre ({}). Un bloque es til cuando se requiere agrupar estatutos.
{ // un bloque de estatutos
x = y +1;
y = x +1;
}
class NombreClase {
public static void main( String [] args )
{
System.out.println(" Hola mundo !!! ");
}
}
Los tipos primitivos son valores simples, no son objetos, de manera que se trata del tipo de dato
mas simple el cual puede ser claramente identificado y existe en un lugar especfico de la memoria.
Los tipos referenciados u objetos de una clase son tipos de datos compuestos.
Tipos de Datos
Primitivos
El lenguaje Java define ocho tipos primitivos, los cuales pueden ser considerados en cuatro
categoras:
o Lgicos boolean
o Texto char
o Enteros byte, short, int y
o Punto long
float y double
flotante
Lgicos
Los valores lgicos son representados usando los tipos bolanos, los cuales toman uno de dos
posibles valores literales: true (verdadero) false (falso). A continuacin se muestra un cdigo de
ejemplo que declara e inicializa una variable de tipo boolean.
No existe ajuste (cast) entre valores de tipo entero y bolanos, como ocurre en otros lenguajes de
programacin como C/C++. Solo pueden usarse cualquiera de las dos literales definidas.
Texto
Los caracteres simples son representados usando el tipo char. Un char representa un carcter de
16- bits en UNICODE. Los caracteres deben ser indicados como literales encerrados
en comilla simple ( ), por ejemplo:
La letra a
a
una tabulacin
\t
\u???? Un carcter especifico UNICODE, las interrogaciones (????) son reemplazadas con
exactamente cuatro dgitos hexadecimales. Por ejemplo \u03A6 es (phi)
Ahora mostramos un ejemplo de declaracin e inicializacin de una variable tipo carcter.
char ch = A;
Enteros
Existen cuatro tipos enteros en Java. Cada tipo es declarado usando una de sus palabras claves,
byte, short, int long. Se pueden crear literales de tipos enteros usando la forma decimal, octal
hexadecimal.
Todas las literales enteras son de tipo int a no ser que se especifique lo contrario, es decir se
puede agregar al final de la literal numrica la letra L, que indica que el valor ser entero largo.
A continuacin se presenta una tabla con el tamao y rango que representan los nmeros:
7 7
8 bits byte de -2 a 2 -1
15 15
16 bits short de -2 a 2 -1
31 31
32 bits int de -2 a 2 -1
63 63
64 bits long de -2 a 2 -1
Punto flotante
Los tipos flotantes pueden declararse como float o double. A continuacin veremos algunos
ejemplos de numero flotantes. Las literales flotantes pueden incluir el punto decimal o el termino
exponente (E), adems de las letras F para float y D para double. Los nmeros flotantes en Java
ocupan 32 bits, mientras que los valores dobles ocupan 64 bits.
Las asignaciones siempre deben de corresponder al tipo de datos que se est manejando, existen
errores comunes de asignacin, como son:
int y = 3.1415926;
double w = 175,000;
boolean sw = 1;
float z = 3.14156;
Los identificadores comienzan con letra, guin bajo signo de dlar, y el resto de los caracteres
pueden ser dgitos. Recuerde que los identificadores son casos sensitivos.
En los casos donde la informacin se pueda perder en la asignacin, el compilador requiere que se
le confirme la asignacin a travs del operador cast.
Por ejemplo:
Es necesario que el tipo de dato destino sea encerrado entre parntesis y usado de manera prefija
indicando que la expresin debe ser modificada.
Las variables pueden ser promocionadas automticamente a tipos ms grandes (como de int a
long)
Cuando se realizan operaciones como la suma y los dos operndoos son de tipo de dato primitivo,
el tipo de dato resultante es determinado por el operando de tipo ms grande, por lo que en
algunos casos podra ser un problema de sobre flujo, por ejemplo:
short a, b, c;
a = 1; b = 2;
c = a + b;
Causa un error debido a que los tipos short involucrados en la operacin elevan las funciones al
tipo int por lo que se vuelve indispensable un ajuste, a no ser que la variable c sea declarada como
int, para subsanar este problema se sugiere realizar un cast en la operacin que permita el ajuste.
c = (short) (a + b);
Constantes
Java emplea la palabra clave final para indicarle al compilador de que las variables declaradas bajo
esta etiqueta debern comportarse como si fueran constantes. Esto indica que su valor no puede
ser modificado una vez que se haya declarado e inicializado. Las constantes se declaran de la
siguiente manera:
Si se intenta cambiar el valor de las variables tipo final desde una aplicacin, se genera un error de
compilacin. Es importante recordar, como medida de diseo, que los nombres de las constantes
deben escribirse con letras maysculas para facilitar su ubicacin dentro del cdigo.
Tambin los las funciones miembro (mtodos) pueden ser de tipo final, en cuyo caso no podrn ser
sobrecargados.
Los arreglos unidimensionales, son aquellos arreglos que cuentan nicamente con una fila y con
una serie de columnas que determinan la dimensin del arreglo. En Java es posible crear arreglos
de cualquier tipo, ya sea datos primitivos o definido por el usuario (objetos).
<tipo> [ ] <nombre-arreglo>;
Cuando queremos que una variable sea un arreglo nicamente anteponemos los corchetes, esto le
indica al compilador que la variable de la derecha ser una referencia de arreglo.
En el lenguaje Java un arreglo es un objeto an cuando el arreglo sea de tipos de datos primitivos,
adems como el resto de los objetos, la declaracin no crea el objeto por si mismo. En su lugar la
declaracin de un arreglo crea una referencia que puede ser empleada para un arreglo. El espacio
en memoria usado para los elementos del arreglo, es dinmico, por lo que es necesario emplear el
operador new para crear el espacio para los elementos del arreglo.
Creacin de referencias para arreglos
Se deben crear arreglos como objetos, empleando el operador new, por ejemplo, suponga la
creacin de un arreglo de caracteres (primitivo).
char[] s;
s = new char[26];
for ( int i=0; i<26; i++ ) {
s[i] = (char) ('A' + i);
}
El operador new crea un arreglo con 26 caracteres que sern inicializados cada uno de sus
elementos a carcter vaci (\u0000). De esta forma el arreglo esta listo para ser manipulado.
Recuerde que el lmite de los arreglos va de 0 a N-1.
Debe tomar en cuenta que todo objeto referenciado en java es por defecto un objeto de la clase
Object, la clase Object es la clase ms alta en la jerarqua de objetos referenciados y ms
adelante veremos que tiene varios mtodos y propiedades asociadas a l y que son transferidas al
resto de los objetos referenciados por medio de un esquema de herencia.
Inicializacin de arreglos
Cuando se crea un arreglo, cada elemento es inicializado. Para el caso del arreglo de caracteres
vimos que cada carcter es inicializado por defecto a (\u0000) lo que indica que an no ha sido
ingresado ningn dato dentro de la casilla.
char [] vocales;
vocales = new char [ 5 ];
vocales [0] = 'a';
vocales [1] = 'e';
Arreglos
multidimensionales
Java provee un mecanismo muy eficiente y sencillo para la construccin de arreglos
multidimensionales, solo es necesario indicar el numero de dimensiones con las que se desea
trabajar, es decir, as como con los vectores, solo es necesario agregar una dimensin usando los
corchetes.
El objeto que es creado en la primera llamada con new es un arreglo que contiene dos elementos.
Cada elemento es una referencia nula (null) a un elemento de tipo array of int, y debe ser
inicializada cada elemento de manera separada, de manera que cada elemento apunta a su
arreglo. Debido a esto es posible crear matrices no-rectangulares.
En algunos casos esta inicializacin podra parecer tediosa, pues es ms comn emplear matrices
rectangulares, a continuacin vemos como sera la declaracin e inicializacin de una matriz de
enteros:
Veamos ahora un ejemplo de una matriz de valores dobles a la que se le asignan valores de
manera aleatoria empleando una funcin esttica llamado random() perteneciente a la clase Math,
veremos ms adelante que al igual que System.out, Math no requiere construir una instancia de la
misma para ser usada:
Re-dimensin de arreglos
Despus de que ha sido creado un arreglo, no puede ser redimensionado su tamao. Sin embargo
puede ser empleada la misma referencia a la variable para declarar una nueva referencia del
arreglos por completo.
En este caso, el primer arreglo pierde la referencia a todos sus componentes, a no ser que sean
almacenados en algn lugar previo a la nueva redefinicin del nuevo bloque de memoria dinmico.
La clase String es una de tantas clases incluidas en la librera de clases de Java (API). La clase
String provee la habilidad de almacenar secuencias de caracteres y manipularlas de forma sencilla
para almacenar literales. Los objetos String pueden ser declarados de dos maneras:
La clase String es la nica que permite construir objetos de ese tipo sin emplear el operador new,
que es el empleado para crear cualquier objeto en Java.
Como hemos visto las referencias u objetos adquieren propiedades directas de una clase superior
llamada Object, para el caso de los datos referenciados como el String se tiene la propiedad length
que nos indica el numero de caracteres contenidos en un String. Pero es importante recordar que
dicha clase define muchas mas funciones que pueden resultar muy til para el manejo de cadenas.
A continuacin se comentan algunas de ellas, pero es importante recordar que se cuentan con
muchas ms. A continuacin asuma que s1 y s2 son objetos de tipo String:
s1 = s1.toUpperCase();
s2 = s1.concat(s2);
String s3 = s2 + "bizarro".toUpperCase();
System.out.println(s3);
}
}
o s1.equals(s2), regresa verdadero (true) en caso de que los caracteres de s2 correspondan
exactamente con los de s1.
o s1.toUppercase(), regresa un objeto de tipo String con exactamente cada carcter de s1
en mayscula.
o s1.charAt(n), regresa como valor el n-simo carcter en un
String
Recuerde tambin que los objetos de tipo String pueden ser fcilmente concatenados empleando
el operador de +, por ejemplo:
String s1 = "Hola";
String s2 = "mundo";
String s3 = s1 + " " + s2;
Inclusive el objeto esttico System.out.print() puede concatenar una serie de valores sin importar el
tipo, por ejemplo:
En realidad el objeto String es el nico objeto en java que cuenta con las caractersticas de
concatenacin empleando el operador de + (suma) y asignacin directa empleando el operador =.
Desafortunadamente son los nicos operadores en java que tienen ese comportamiento, adems
es importante recordar que la sobrecarga de operadores no se encuentra disponible en el lenguaje
como tal, por lo que no es posible implementarla, como es el caso de C++ o C#.
Para el programador dedicado a la construccin de aplicaciones finales que tiene una gran
necesidad de manejar nombres e incluso cambios de valores entre tipos reconocer en este
lenguaje muchos beneficios que no son tan palpables en otros lenguajes de programacin.
Tambin es posible construir arreglos de tipo String, solo debe de recordar que para este caso
existen 2 mecanismos para obtener la longitud, una la del arreglo length (propiedad) y otro la
longitud total de caracteres por cada elemento length():
o Clases Envoltorio
(Wrappers)
Las clases envoltorio (Wrappers) son clases que proveen un mecanismo para interactuar con
algn otro tipo de dato abstracto. Para el caso de los tipos de datos primitivos, las clases envoltorio
son un mecanismo ms refinado de programacin para representar valores primitivos cuando un
Objeto es requerido.
Java provee ocho tipos de clases envueltas para datos primitivos:
Las clases Wrapper de primitivas numricas se derivan de la clase Number que deriva de Object.
Cada una de estas clases contiene un valor primitivo del tipo relacionado, por ejemplo un objeto
Integer contiene un valor int como atributo.
De manera que estas clases envoltorio (Wrappers) no son ms que clases que modelan los tipos
de datos primitivos tales como enteros flotantes, precisamente estos tipos primitivos son los
nicos elementos en Java que no son clases. Estos Wrappers nos permiten introducir algunos
conceptos interesantes de programacin, autoboxing que consiste en convertir un tipo de dato
primitivo a un tipo compuesto, mientras que por otro lado, automatic unboxing trata de convertir
un objeto compuesto a un valor primitivo. Este tipo de conversin es generalmente transparente al
usuario:
Integer i, j; // objetos
i = 5; // al objeto i se le asigna un valor nativo
j = 4;
unboxing, los valores son desempacados automticamente del tipo Integer a un tipo nativo
para ser procesados y finalmente se vuelve a empacar en un Integer.
Integer r = i + j;
Existe una diferencia significativa entre los tipos primitivos y sus wrapper; ya que los tipos
primitivos pasan como argumento por valor a los mtodos, mientras que los objetos pasan por
referencia. Esto implica una ventaja en cuanto a eficiencia, pues es posible modificar el valor de
una referencia tipo wrapper.
Por otro lado los wrappers ofrecen funcionalidad como clase estatica de manera que es posible
usar mtodos de alguna clase sin necesidad de crear un objeto. Por ejemplo la clase Integer
cuenta con un mtodo denominado parseInt que permite convertir una cadena de caracteres
alfanumrica a un valor de una base en particular:
String s = "0001101";
int x = Integer.parseInt(s,2); // x conserva el valor 13
Casi todos estos mtodos pueden utilizarse en forma esttica, de manera que, no siempre sea
necesario crear una instancia para manipularlos. Por ejemplo:
int i;
i = Float.valueOf(12.45).intValue();
Como se habr observado no existe una librera del tipo ctype de ANSI/C que nos permita
manipular caracteres de manera independiente, para ello se emplea la clase Character que cuenta
con varios mtodos que permite manipular caracteres simples.
Por ejemplo:
Tambin es posible crear arreglos de objetos Wrapper, de manera que cada elemento del arreglo
corresponder a un objeto particular:
Operadores Lgicos los operadores lgicos evalan expresiones para obtener un resultado
boolean, que puede ser cierto (true) o falso (false). Los operadores bolanos soportados son !,
&, ^ y | para las operaciones algebraicas de NOT, AND, XOR y OR, respectivamente. Cada
una de estas regresa un resultado booleano. Los operadores && y || son equivalentes a los
operadores & y |.
Operadores Relacionales tambin existen los operadores ==, !=, >, >=, <, <= para las
operaciones de igualdad, diferente, mayor, mayor igual, menor, menor igual, respectivamente.
Operadores Aritmticos Java emplea exactamente los mismos operadores aritmticos que el
lenguaje C/C++, como +, -, * / y % para las operaciones de suma, resta, multiplicacin,
divisin y modulo, respectivamente. Adems existen los operadores combinados como el
incremento y decremento unitario ++ y --. Y combinaciones de asignacin con operacin
aritmtica, como *=,
+=, /=, %=, y que nos permiten realizar operaciones sintetizadas como X = X + Y en X +=
Y.
<expresin_boolean>?<expresion1>:<expresion2>
Por ejemplo, si el valor lgico de una comparacin es cierta la primera expresin ser almacenada,
en caso contrario la expresin 2 ser asignada:
int x = (5 == 3) ? 1 : 0;
Precedencia de operadores
A continuacin se presenta una lista de los operadores descritos con anterioridad, en el listado se
presentan dichos operadores ordenados de mayor precedencia a menor precedencia:
Operacin Smbolo
operadores unarios ++, --, !, - +, type-cast
multiplicacin y divisin: *, /, %
suma y resta: +, -
operadores relacionales: <, >, <=, >=
igualdad y desigualdad: ==, !=
conjuncin: &&
disyuncin: ||
operador condicional: ?:
operadores de asignacin: =, +=, -=, *=, /=, %=
Los operadores aritmticos siguen las mismas reglas de precedencia que el resto de los lenguajes
que son: la multiplicacin y divisin, modulo, suma y resta. Para los operadores relacionales y
lgicos la interpretacin de evaluacin es de izquierda a derecha.
1.4 Clase
Math
Las funciones matemticas siempre son necesarias para construir ciertas operaciones que de otra
forma resultaran muy complicadas, Java cuenta con una clase llamada Math que tiene asociada
un nmero determinado de funciones, como hemos visto en el ejemplo anterior la funcin random
es capaz de generar un valor aleatorio de tipo double que es asignado a una variable de ese tipo.
A continuacin se mencionan algunas de las funciones estaticas de Math ms comunes, aunque
es importante recordar que se cuentan con muchas ms:
La mayora de las aplicaciones deben interactuar con el usurario. Dichas interacciones estn
algunas veces acompaadas con datos de entrada y de salida a la consola (usando el teclado
como entrada estndar y la ventana de Terminal como salida).
Java soporta la entrada y salida de datos desde consola empleando 3 tipos de variables, que estn
contenidas en la librera de clases de java (System). Referenciada como java.lang.System:
20
El manejo de entrada y salida de datos en java no es uno de los ms eficientes entre los lenguajes
de programacin actuales, de hecho resulta bastante frustrante al inicio, pero gradualmente se
21
llega a entender el mecanismo empleado principalmente empleado en la entrada de datos
estndar.
La salida de datos se realiza a travs de la funcin print y println del objeto System.out, esto indica
que la salida de datos ser directa. Los mtodos imprimen objetos Strings por defecto por lo que
no es necesario indicar la tipificacin en una plantilla. El mtodo print imprimir strings (elementos
concatenados) directamente en la salida y el cursos permanecer en el punto siguiente a la
impresin, por el otro lado println imprimir un salto de lnea despus de su ejecucin.
Entrada de flujo de bytes es uno de los esquemas mas empleado en las primeras versiones de
java, empleamos la llamada al mtodo read() del objeto System.in. Desafortunadamente es
indispensable emplear el bloque trycatch, pues la capturan filas de bytes provoca errores.
Debido a esta deficiencia en el funcionamiento, es necesario depositar los bytes en un arreglo de
caracteres, y as posteriormente ser transformados a tipos nativos como texto (string), entero o
real. Para esto emplearemos un objeto de la clase StringBuffer que permita manipular un String
como pila de caracteres, depositando cada uno de los caracteres capturados desde teclado.
import java.io.*;
Entrada de flujo de caracteres la captura de bytes siempre resulta muy complicada por lo que
resulta mas sencillo capturar caracteres Unicode, para esto se desarrollaron dos objetos que
podran facilitar esta tarea. InputStreamReader es una clase que nos permite direccionar el flujo de
entrada a algn dispositivo especifico, en este caso System.in. Una vez que esta indico el flujo de
entrada, es necesario almacenar los caracteres entrantes en un objeto que nos permita manipular
cadenas de caracteres (string), para ello emplearemos un objeto BufferedReader el cual nos
permitir almacenar la entrada de datos.
import java.io.*;
{
public static void main(String [] arg) {
String s;
// crea un lector de buffer para leer cada linea de teclado
InputStreamReader lector = new InputStreamReader(System.in);
// crea un buffer para almacenar la entrada de lector
BufferedReader in = new BufferedReader(lector);
System.out.print("captura de texto ");
try {
// captura los datos de teclado
s = in.readLine();
System.out.println("texto :" + s);
} catch(IOException e) {}
System.out.print("captura de valor ");
try {
// captura los datos de teclado
s = in.readLine();
// transforma el texto en numero
int valor = Integer.parseInt(s);
System.out.println("valor :" + valor);
in.close(); // cerramos el flujo de entrada
} catch(IOException e) {}
}
}
import java.io.*;
import java.util.Scanner;
public class Captura3
{
public static void main(String [] arg)
{
Scanner s = new Scanner(System.in);
// objeto Scanner con entrada a teclado
System.out.println("ingresa el texto ");
// el metodo next captura Strings y desplaza la entrada
String str = s.next();
System.out.println("la cadena es "+ str);
System.out.println("ingresa el numero ");
// el metodo nextFloat captura reales y desplaza la entrada
float valor = s.nextFloat();
System.out.println("el numero es "+ valor);
// es indispensable cerrar el flujo de entrada
s.close();
}
}
Glosario de trminos
Java Applets: Pequeos programas automatizados que pueden ser incrustados en paginas
Web.
Objetos: son cajas negras que mantienen ocultas propiedades estructurales llamadas atributos,
y propiedades de comportamiento llamadas operaciones o mtodos.
Package los paquetes son colecciones de clases distribuidas (organizadas) en directorios y por lo
general se encuentran relacionadas entre si. El nombre de los paquetes se escriben en
minsculas.
package proyecto.objetos
Clases los nombres de las clases deben ser sustantivos (desde un punto de vista meramente
didctico se le define como el tipo de palabra que significa persona, animal o cosa concreta o
abstracta), en algunos casos mezclados, con la primera letra de cada palabra en mayscula.
class EjemploUno
Mtodo los nombres de los mtodos deben ser verbos, con palabras mezcladas, con la primera
letra en minscula. En caso de emplear mas palabras se le recomienda hacer la primera letra
mayscula.
calculaPromedio()
Variables todas las variables pueden ser mezclas de palabras procurando emplear la letra
minscula para la primera y empleando las letras maysculas para separar al resto de las palabras.
apellidoPaterno
Procure limitar el empleo de variables simples (a, b, , x) para el manejo de bucles de control.
Constantes se recomienda el uso de las constantes con letras maysculas, separando las
palabras con guin inferior.
TOPE_MAXIMO
Bibliografa
Nell Dale, Chip Weems, Mark Headington, Programming and Problem Solving whith Java, Jones &
Bartlett, 2005, ISBN: 0-7637-3069-6.
Luis Joyanes Aguilar y Matilde, Java 2 Manual de programacin, Osborne-Mc Graw Hill.