Está en la página 1de 33

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA

FASE1 - RECONOCIMIENTO
PROGRAMACION ORIENTADA A OBJETOS

GRUPO: 301403_71

Presentado por:
RODRIGO DELGADO TORRES
Cdigo: 80403075

TUTOR
CESAR JIMENEZ

Acacias Meta
Agosto de 2016

INTRODUCCIN

Actualmente en las fases de diseo y desarrollo de software la programacin Orientada a


Objetos es una de las tcnicas ms utilizadas por su portabilidad y por la capacidad de
reutilizar el cdigo. Esta es la primera fase del curso de Programacin Orientada a Objetos, en
esta actividad vamos a reconocer las temticas del curso Enfocndonos en el lenguaje de
programacin Java. La programacin Bsica y Avanzada, las aplicaciones y applets, unidades
e interfaces de Usuarios. Todo esto desde el punto de vista terico en esta fase.

DESARROLLO DE LA ACTIVIDAD.

Fase 1 introduccin a la Programacin Orientada a Objetos. Terico:


Introduccin a Java
Plataforma de software desarrollada por Sun Microsystems. Esta plataforma ha sido
desarrollada de tal manera que los programas desarrollados para ella puedan ejecutarse de la
misma forma en diferentes tipos de arquitecturas y dispositivos computacionales.
La plataforma Java se divide en 3 partes:
Lenguaje de programacin.
Mquina Virtual Java
API Java
Es un lenguaje de programacin orientada a objetos puro diseado para su uso en Internet. Se
parece mucho a C++, pero adopta algunas ideas de Smalltalk. Los programas se ejecutan por
medio de un intrprete que ha sido incorporado a los navegadores de Internet ms usuales.
A finales del siglo XX, Java lleg a ser el lenguaje de mayor acogida para programas de
servidor. Utilizando una tecnologa llamada JSP (basada en ASP de Microsoft), se hizo muy
fcil escribir pginas dinmicas para sitios de Internet. Sumado a esto, la tecnologa de
JavaBeans, al incorporarse con JSP, permita utilizar el patrn MVC (Modelo-Vista-Controlador)
que ya tanto se haba aplicado a interfaces grficas.
Java lleg a ser extremadamente popular cuando Sun Microsystems introdujo el J2EE (Java 2
Enterprise Edition) en la que inclua la tecnologa de Enterprise Java Beans (EJB) que es una
tecnologa de objetos distribuidos, logrando por fin el sueo de muchas empresas como
Microsoft e IBM de crear una plataforma de objetos distribuidos con un monitor de
transacciones. Con este nuevo estndar, empresas como BEA, IBM, Sun Microsystems, Oracle
y otros crearon nuevos "servidores de aplicaciones" que tuvieron gran acogida en el mercado.
Adems de programas del servidor, Java permite escribir programas de interfaz grfica o
textual. Adems se pueden correr programas de manera incorporada a los navegadores de
Internet, aunque esto nunca lleg a popularizarse como se esperaba.
Programas en Java generalmente son compilados y luego interpretados por una mquina
virtual. Esta ltima sirve como una plataforma de abstraccin entre la mquina y el lenguaje
permitiendo que se pueda "escribir el programa una vez, y correrlo en cualquier lado". Tambin
existen compiladores nativos de Java, tanto comercial como libre. El compilador GCC de GNU
compila Java con algunas limitaciones (ao 2002).
Caractersticas de Java
Microsystems, lder en servidores para Internet, uno de cuyos lemas desde hace mucho tiempo
es "the network is the computer" (lo que quiere dar a entender que el verdadero ordenador es la
red en su conjunto y no cada mquina individual).
Es quien ha desarrollado el lenguaje Java, en un intento de resolver simultneamente todos los
problemas que se le plantean a los desarrolladores de software por la proliferacin de
arquitecturas incompatibles, tanto entre las diferentes mquinas como entre los diversos

sistemas operativos y sistemas de ventanas que funcionaban sobre una misma mquina,
aadiendo la dificultad de crear aplicaciones distribuidas en una red como Internet.
Hace algunos aos, Sun Microsystems decidi intentar introducirse en el mercado de la
electrnica de consumo y desarrollar programas para pequeos dispositivos electrnicos. Tras
unos comienzos dudosos, Se decidi crear una filial, denominada FirstPerson Inc, para dar una
margen de maniobra al equipo responsable del proyecto.
El mercado inicialmente previsto para los programas de FirstPerson eran los equipos
domsticos: microondas, tostadoras y, fundamentalmente, televisin interactiva. Este mercado,
dada la falta de pericia de los usuarios para el manejo de estos dispositivos, requera unas
interfaces mucho ms cmodos e intuitivos que los sistemas de ventanas que proliferaban en el
momento.
Otros requisitos importantes a tener en cuenta eran la fiabilidad del cdigo y la facilidad de
desarrollo. James Gosling, el miembro del equipo con ms experiencia en lenguajes de
programacin, decidi que las ventajas aportadas por la eficiencia de C++ no compensaban el
gran coste de pruebas y depuracin. Gosling haba estado trabajando en su tiempo libre en un
lenguaje de programacin que l haba llamado Oak, el cual, aun partiendo de la sintaxis de C+
+, intentaba remediar las deficiencias que iba observando.
Los lenguajes al uso, como C o C++, deben ser compilados para un chip, y si se cambia el
chip, todo el software debe compilarse de nuevo. Esto encarece mucho los desarrollos y el
problema es especialmente acusado en el campo de la electrnica de consumo. La aparicin
de un chip ms barato y, generalmente, ms eficiente, conduce inmediatamente a los
fabricantes a incluirlo en las nuevas series de sus cadenas de produccin, por pequea que
sea la diferencia en precio ya que, multiplicada por la tirada masiva de los aparatos, supone un
ahorro considerable. Por tanto, Gosling decidi mejorar las caractersticas de Oak y utilizarlo.
El primer proyecto en que se aplic este lenguaje recibi el nombre de proyecto Green y
consista en un sistema de control completo de los aparatos electrnicos y el entorno de un
hogar. Para ello se construy un ordenador experimental denominado 7 (Star Seven). El
sistema presentaba una interfaz basada en la representacin de la casa de forma animada y el
control se llevaba a cabo mediante una pantalla sensible al tacto. En el sistema apareca Duke,
la actual mascota de Java.
Posteriormente se aplic a otro proyecto denominado VOD (Video On Demand) en el que se
empleaba como interfaz para la televisin interactiva. Ninguno de estos proyectos se convirti
nunca en un sistema comercial, pero fueron desarrollados enteramente en un Java primitivo y
fueron como su bautismo de fuego.
Una vez que en Sun se dieron cuenta de que a corto plazo la televisin interactiva no iba a ser
un gran xito, urgieron a FirstPerson a desarrollar con rapidez nuevas estrategias que
produjeran beneficios. No lo consiguieron y FirstPerson cerr en la primavera de 1994.
Lo mejor ser hacer caso omiso de las historias que pretenden dar carta de naturaleza a la
clarividencia industrial de sus protagonistas; porque la cuestin es si independientemente de su
origen y entorno comercial, Java ofrece soluciones a nuestras expectativas. Porque tampoco
vamos a desechar la penicilina aunque haya sido su origen fruto de la casualidad.
Se puede decir que Java es:

Simple: Basado en el lenguaje C++ pero donde se eliminan muchas de las caractersticas POO
que se utilizan espordicamente y que creaban frecuentes problemas a los programadores.
Esta eliminacin de causas de error y problemas de mantenimiento facilita y reduce el costo del
desarrollo de software.

Java no da soporte a struct, union y pointer


Java no ofrece typedef ni #define
No permite la sobrecarga de operadores.
No ofrece herencia mltiple.
Maneja los comandos en lnea de diferente manera que C++
Java tienen una clase String, que permite un mejor manejo que los arrays de
terminacin nula del C y C++.
Java tiene un sistema automtico de asignacin y liberacin de memoria (recolector de
basura) que mejora mucho los sistemas del C++.

Orientado al objeto: Java da buen soporte a las tcnicas de desarrollo POO y en resumen a la
reutilizacin de componentes de software.
Distribuido: Java se ha diseado para trabajar en ambiente de redes y contienen una gran
biblioteca de clases para la utilizacin del protocolo TCP/IP, incluyendo HTTP y FTP. El cdigo
Java se puede manipular a travs de recursos URL con la misma facilidad que C y C++ utilizan
recursos locales (archivos).
Interpretado: El compilador Java traduce cada fichero fuente de clases a cdigo de bytes
(Bytecode), que puede ser interpretado por todas las mquinas que den soporte a un
visualizador de que funcione con Java. Este Bytecode no es especfico de una mquina
determinada, por lo que no se compila y enlaza como en el ciclo clsico, sino que se interpreta.
Slido: El cdigo Java no se quiebra fcilmente ante errores de programacin. As el relaje que
existe en la declaracin y manejo de tipos en C y C++ se torna en restricciones en Java, donde
no es posible la conversin forzada (cast) de enteros en punteros y no ofrece soporte a los
punteros que permitan saltarse reglas de manejo de tipos. As en Java no es posible escribir en
reas arbitrarias de memoria ni realizar operaciones que corrompan el cdigo. En resumen se
eliminan muchas de las posibilidades de "trucos" que ofrecan el C y C++.
Seguro: Como Java suele funcionar en ambiente de redes el tema de seguridad debe interesar
en sobremanera. Las mismas caractersticas antes descritas que evitan la corrupcin de cdigo
evitan su manipulacin. Actualmente se est trabajando en encriptar el cdigo.
Arquitectura Neutral: El compilador crea cdigos de byte (Bytecode) que se enva al
visualizador solicitado y se interpreta en la mquina que posee un intrprete de Java o dispone
de un visualizador que funciona con Java.
Portable: Al ser de arquitectura neutral es altamente portable, pero esta caracterstica puede
verse de otra manera: Los tipos estndares (int., float...) estn igualmente implementados en
todas las mquinas por lo que las operaciones aritmticas funcionaran igual en todas las
mquinas.

Alto desempeo: Al ser cdigo interpretado, la ejecucin no es tan rpida como el cdigo
compilado para una plataforma particular. El compilador Java suele ofrecer la posibilidad de
compilar Bytecode en cdigo mquina de determinadas plataformas, y segn Sun este cdigo
resultar de una eficacia similar a compilaciones de C y C++.
Multihilos: Java puede aplicarse a la realizacin de aplicaciones en las que ocurra ms de una
cosa a la vez. Java, apoyndose en un sistema de gestin de eventos basado en el paradigma
de condicin y monitores C.A.R. permite apoyar la conducta en tiempo real e interactivo en
programas.
Dinmico: Al contrario que C++ que exige se compile de nuevo la aplicacin al cambiar una
clase madre Java utiliza un sistema de interfaces que permite aligerar esta dependencia. Como
resultado, los programas Java pueden permitir nuevos mtodos y variables en un objeto de
biblioteca sin afectar a los objetos dependientes.
PROGRAMACION BASICA
Comentarios
El primer aspecto que debe conocerse en cualquier lenguaje es como distinguir entre cdigo y
comentarios. En Java existen tres tipos distintos para la especificacin de comentarios, como
se muestra en la Tabla.
Notacin

Descripcin

// lnea comentada

Las dos diagonales indican el comienzo de un comentario que tiene


efecto hasta el final de la lnea.

/* prrafo comentado */

La diagonal seguida por el asterisco indica el inicio de un prrafo


comentado. Para terminarse el comentario debe aadirse un asterisco
seguido de otra diagonal. Estos comentarios no pueden anidarse uno
dentro del otro.

/** prrafo comentado */

La diagonal seguida por dos asteriscos indica el inicio de un prrafo


comentado. Para terminarse el comentario debe aadirse un asterisco
seguido de otra diagonal. A diferencia del comentario anterior, este es
un comentario documentable que puede ser extrado mediante el
comando javadoc para producir un documento de documentacin
sencillo a partir del cdigo fuente de Java. Estos comentarios no
pueden anidarse uno dentro del otro.

Caracteres

La especificacin de caracteres en Java es distinta a la mayora de los dems lenguajes. Java


utiliza 16 bits en lugar de los ms comunes 8 bits correspondientes al cdigo ASCII para
especificar caracteres. Este cdigo de 16 bits es conocido en Java como Unicode, el cual
mantiene compatibilidad con ASCII.
Palabras reservadas
Todo lenguaje de programacin cuenta con un nmero de palabras reservadas que tienen un
significado especial y predefinido para Java. Tales palabras incluyen if, else, etc. En Java son
48 las palabras reservadas, las cuales el usuario no puede utilizar para sus propios usos.
Identificadores
Dentro de las palabras que el usuario puede definir se encuentran los identificadores.
Los identificadores sirven para relacionarse con estructuras del programa. Por ejemplo, para
poder
definir
una
clase
o accesar
un
objeto,
se requiere definir
un
identificador. Identificadores que guardan o se refieren a valores de algn tipo son tambin
conocidos como variables. Los nombres de los identificadores son cualquier palabra, con
excepcin de las reservadas por Java, que inician con cualquier letra del alfabeto o que
comienzan con los siguientes smbolos: $ o _. Estos identificadores pueden ser de cualquier
tamao. Por ejemplo, identificadores aceptables son: ID, nombre, _temp, $dolar, etc.
Oraciones
Toda oracin en Java correspondiente a una lnea de ejecucin tiene como caracter final el ;.
Una notacin relacionada el bloque que utiliza de llaves { y } para especificar el inicio y fin de
un grupo de oraciones.
Paquetes
Como mencionamos anteriormente, Java organiza sus bibliotecas alrededor del concepto
de paquetes (packages). Dado el amplio nmero de paquetes que existen en el sistema de
Java, adems de aquellos que son generados por los propios desarrolladores, es necesario
tener un manejo modular de manera que clases dentro de un paquete no tengan conflictos con
clases en otros paquetes, inclusive con clases que pudieran tener el mismo nombre. Por tal
motivo, Java utiliza la expresin package que debe aparecer como primera instruccin en un
archivo de cdigo fuente en Java. Por ejemplo, un paquete con el nombre ej se incluira como
primera instruccin de todos los archivos que contengan clases de este paquete
package ej;
Importar
Muy relacionada al concepto de paquetes es la instruccin import, la cual permite utilizar clases
definidas en otros paquetes bajo nombres abreviados. Aunque siempre es posible utilizar otras
clases por medio de sus nombres calificados completos, import, que no lee la clase ni la
incluye, permite ahorrar escritura haciendo al cdigo ms legible. En otras palabras, sin la
expresin de import, se puede utilizar la clase PixelGrabber siempre y cuando al utilizarla se le
llame por su nombre calificado completo java.awt.image.PixelGrabber. Existen tres formatos
para import:

import package; que permite que el paquete especificado sea conocido por el nombre
de su ltimo componente. Por ejemplo, la siguiente expresin
import java.awt.image;
Permite que la clase java.awt.image.PixelGrabber se le llame de la siguiente manera

image.PixelGrabber

import package.class; que permite que la clase especificada en el paquete sea


conocida por su nombre de clase directamente. Por lo tanto, la expresin

import java.awt.image.PixelGrabber;
Permite que la clase java.awt.image.PixelGrabber se le llame de la siguiente manera
PixelGrabber

import package.*; que permite que todas las clases en un paquete sean accesibles
por medio del nombre de su clase directamente. Por ejemplo, la expresin

import java.awt.image.*;
Permite que la clase java.awt.image.PixelGrabber y cualquier otras dentro de ese mismo
paquete se le llame mediante su nombre directo, como
PixelGrabber
Se pueden incluir cualquier nmero de expresiones import, aunque todas deben aparecer
despus de la expresin inicial de package y antes de cualquier definicin de clases o cdigo
en general. Si dos paquetes importados mediante esta forma contiene clases con el mismo
nombre, es un error usar sus nombres ambiguos sin usar el nombre calificado completo.
Estructuras Bsicas.
Una vez mencionados los aspectos bsicos del lenguaje de Java, proseguimos con la
definicin de las estructuras o tipos de datos que se pueden definir dentro de Java.
Comenzamos con los tipos de datos primitivos.
Tipos Primitivos
En Java existen un nmero de tipos primitivos o predefinidos como parte del lenguaje. Estos
tipos se muestran en la Tabla.

Tipo

Descripcin

Valor Omisin

Byte

Es un estructura de 8 bits.

Char

Es una estructura en base a Unicode de 16 bits (sin


\u0000
signo).

Short

Es una estructura numrica de tipo entero de 16 bits. 0

Int

Es una estructura numrica de tipo entero de 32 bits. 0

Long

Es una estructura numrica de tipo entero de 64 bits. 0

Float

Es una estructura numrica de tipo real de 32 bits.

0.0

Doubl

Es una estructura numrica de tipo real de 64 bits.

0.0

Boolean

Es una estructura de 1 bits, con valores true o false.

false

Los tipos primitivos son estructuras que guardan un valor primitivo y que son manipulados a
travs de variables, declaradas de manera correspondiente, como veremos ms adelante. Los
valores asignados por omisin a variables de estos tipos se muestran en la ltima columna. Los
nombres correspondientes a tipos primitivos comienzan con una letra minscula. Existe un sintipo, llamado void.
Los primeros cinco tipos en la tabla byte, char, short, int y long, son conocidos como tipos
integrales.
Tipos No-Primitivos
Los tipos no-primitivos corresponden a clases los cuales son instanciadas en objetos. Los
objetos son referenciados a travs de variables que guardan referencias de estos. A diferencia
de las variables correspondientes a tipos primitivos que guardan un valor, las variables
correspondientes a tipos no-primitivos guardan una referencia al objeto instanciado. En Java
no existe un nmero predeterminado de tipos no-primitivos, aunque si existen algunos
predefinidos a travs de las bibliotecas del lenguaje. Existe una clase muy particular que vale la
pena mencionar. Esta clase es Object, que tiene como particularidad servir como
la superclase a todas las dems clases del sistema, clases definidas en una biblioteca de Java
o clases definidas directamente por el programador. Por ejemplo, una de estas clases ya
definidas en Java es String. Esta clase es esencial en el manejo de cadenas.
Variables
Para poder utilizar uno de estos tipos de datos primitivos es necesario primero definir alguna
variable que guarde el valor del tipo correspondiente. Las variables se representan por medio
de un nombre seleccionado dentro de los posibles identificadores. Por ejemplo, dos nombres
de variables vlidos seran, x y y. Habiendo definido el nombre de la variable se prosigue
adeclararla de acuerdo a algn tipo de dato. Como nota importante, todas las variables existen
dentro de las clases y no pueden existir sueltas en un archivo como ocurre en C++.
Declaraciones
Una declaracin consiste en relacionar una variable con el tipo de dato que va a guardar. Por
ejemplo si consideramos las dos variables, x y y, donde se desea que cada una de ellas
guarde un valor entero, tendramos que hacer la siguiente declaracin:

int x,y;
Estas variables guardan inicialmente el valor de 0, hasta que se les haga una asignacin con
un nuevo valor, algo que veremos ms adelante.
Por ejemplo, una variable valor de tipo boolean se declarara de la siguiente forma:
boolean valor;
Las variables que hacen referencias a objetos de alguna clase se declaran de la misma forma.
Si obj representa una variable de tipo ClaseX, su declaracin ser la siguiente:
ClassX obj;
A diferencia de las variables de tipos primitivos que guardan valores, las variables de clases
guardan nicamente referencias a los objetos instanciados de estas clases. Esto se hace por la
sencilla razn de que los objetos son estructuras ms complejas que los tipos primitivos por lo
cual estos se guardan en memoria y las variables se refieren a esta ubicacin. De tal manera,
una variable de clase guarda por omisin una referencia vaca o nula que corresponde a null en
Java. Vale la pena resaltar que esta referencia nula no equivale al 0 como ocurre en C.
En particular, null es una palabra reservada que significa ausencia de referencia.
Constantes
Como parte de las declaraciones de variables, Java permite agregar distintos tipos de
modificadores, que afectan diversos aspectos de las variables. Existen por ejemplo
modificadores para la visibilidad, correspondiente al manejo del encapsulamiento, que sern
mostrados ms adelante cuando se describan objetos y clase. Sin embargo, vale la pena
mencionar un modificador particular que hace que una variable se vuelva una constante. Esto
se hace a travs del modificador final como se muestra a continuacin.
Por ejemplo, la siguiente declaracin hara que la variable c no pueda cambiar de valor.
final int c = 5;
Dado que la variable no puede cambiar de valor, es necesaria inicializarla con algn valor en el
momento de su declaracin. Sera un error tratar de cambiar luego este valor.
Arreglos
El arreglo es una estructura presente en la gran mayora de los lenguajes por lo cual tampoco
falta en Java. Aunque se utiliza una notacin similar a los dems lenguajes, su manejo es un
poco diferente. Esto ltimo se debe a que los arreglos se manipulan por referencia, al igual que
los objetos. La declaracin bsica de un arreglo es de la siguiente forma:
int numeros[];

Esta declaracin especifica que la variable nmeros har referencia a un arreglo de nmeros
enteros. Estos nmeros sern luego accesados mediante la siguiente notacin, donde i
representa el elemento del arreglo:
numeros[i];
Cadenas
Como en la mayora de los lenguajes, se pueden definir cadenas como arreglos de caracteres.
En otras palabras se puede definir una cadena de la siguiente manera:
char s[] = Prueba;
La problemtica con esta manera de definir cadenas es que su manipulacin se vuelve
complicada, por ejemplo comparar o concatenar cadenas. Para lograr un mejor manejo, Java
define la cadena como una clase con todos los beneficios que esto significa. Aunque el tema de
clases y objetos ser tratado ms adelante, vale la pena mencionar algunos aspectos del
manejo de las cadenas en Java.
Los objetos tipo cadenas son instancias de la clase java.lang.String. Por ejemplo, una cadena
se puede instanciar cadenas de la siguiente forma:
String s = Prueba;
Un aspecto que resalta en Java en relacin al manejo de cadenas es el operador + que
corresponde a una concatenacin.
Por ejemplo, la siguiente expresin es vlida y resultara en las dos cadenas concatenadas:
String s1 = Hola;
String s2 = Mundo;
String s3 = s1 + s2;
Esta operacin tiene efectos profundos para el compilador. Por ejemplo, la siguiente funcin de
impresin en C es muy problemtica para el compilador ya que involucra un nmero de
argumentos variables (al igual que muchas otros funciones similares):
printf(%s%s,s1,s2);
Esto se resuelve en Java mediante el operador de concatenacin:
print(s1 + s2);
(En realidad la funcin print requiere del prefijo System.out para accesarse correctamente. Este
prefijo ser explicado ms adelante.) Este es slo un ejemplo de las facilidades para el manejo
de cadenas en Java (al igual que de muchos otros aspectos). La nica restriccin importante en
los objetos de tipo String es que estos son inmutables, no pueden cambiarse una vez

asignados. Por ejemplo, para poder manejar cadenas modificables se debe instanciar objetos
de la clase StringBuffer a partir de un objeto String, algo que va ms all del alcance
introductorio de este captulo.
Existen ciertas funciones que se pueden aplicar a las cadenas para manipularlas, como
son: length(), charAt(), equals(), compareTo(), indexOf(), lastIndexOf(), substring(). Estas tipo
de funciones hacen de Java un lenguaje muy poderoso.
Expresiones Bsicas
Una vez que se haya declarado variables y posiblemente asignado un valor inicial, estas
variables pueden ser manipuladas mediante diversos tipos de expresiones. En esta seccin
describiremos las expresiones ms importantes que pueden ser aplicadas a variables de tipos
primitivos. Ms adelante describiremos las expresiones que se pueden aplicar a objetos.
Asignacin
Las variables de tipos primitivos son utilizadas para guardar valores de sus respectivos tipos.
Por lo tanto, la expresin ms importante que hay es la de asignacin de valores. Por ejemplo,
para asignarle un valor a una variable x de tipo entero se hara lo siguiente:
x = 10;
Operadores
Java apoya todos los operadores estndares de C, con la misma precedencia. La Tabla
muestra todos los operadores que se pueden aplicar a tipos primitivos (incluyendo aritmticos,
integrales y booleanos) en orden de precedencia.
Operador

Tipo de Operando(s)

++, -+, !
(tipo)

aritmtico
aritmtico
integral
booleano
cualquiera

*, /, %

aritmtico

+, +

<<
>>
>>>

aritmtico
cadena

integral
integral
integral

Descripcin de la Operacin
incremento, decremento (unario) (pre o post)
ms, menos (unario)
complemento de bit (unario)
complemento lgico (unario)
cast
multiplicacin, divisin, resto
suma, resta
concatenacin de cadenas
desplazamiento hacia la izquierda
desplazamiento hacia la derecha con signo
desplazamiento hacia la derecha con extensin de
cero

<, <=
>, >=

aritmtico aritmtico

menor que, menor o igual que


mayor que, mayor o igual que

==
!=

primitivo primitivo

igual (tienen valores idnticos)


no igual (tienen valores diferentes)

&
&

integral
booleano

AND para bits


AND booleano

integral
booleano

XOR para bits


XOR booleano

|
|

integral
booleano

&&
||

booleano
booleano

?:

boolean,
cualquiera

variable, cualquiera

OR para bits
OR booleano
AND condicional
OR condicional
cualquiera,

*=, /=, %=,


+=, -=, <<=, variable, cualquiera
>>=, >>>=,
&=, ^=, | =

operador condicional (ternario)

Asignacin

asignacin con operacin

Control
Aparte de los operadores, existen un nmero de expresiones de control que son utilizadas por
los lenguajes para controlar el flujo de la lgica del programa. Estas expresiones son bastante
estandarizadas en los lenguajes modernos aunque varan en ciertos detalles. La tabla muestra
las expresiones de control.
Expresin

Descripcin de la Expresin

if (condicin-1) bloque-1

Si condicin-1 es verdadera se ejecuta el bloque-1. De lo


contrario se prosigue con condicin-i de manera similar para
ejecutar el bloque-i. Puede haber un nmero infinito de estas
condiciones. Si ninguna condicin es verdadera se ejecuta el

else if (condicin-i) bloque-i

else bloque-n

bloque-n.

while (condicin) bloque

Mientras condicin sea verdadera se ejecuta el bloque.

do bloque while (condicin)

Mientras la condicin sea verdadera se ejecuta el bloque. A


diferencia de la expresin anterior, primero se ejecuta el
bloque y luego se revisa la condicin para la siguiente
ejecucin.

switch (variable)
case valor-i: bloque-i
default: bloque-n

for (expr-1;
bloque

condicin-2;

Se verifica el valor de la variable (tipo integral). Se compara a


los valores especificados para los diversos casos, valor-i,
hasta encontrar uno igual. En ese momento se ejecuta
bloque-i. Si no se encuentra ninguno igual, se ejecuta bloquen.

Se ejecuta expr-1 al inicio de esta expresin. Si condicin- 2


es verdadera se ejecuta el bloque. A continuacin se ejecuta
expr-3)
expr-3 y se prueba condicin-2. Si esta es verdadera
nuevamente se ejecuta el bloque. Se sigue ejecutando el
bloque, precedido de la ejecucin de expr-3, mientras
condicin-2 sea verdadera.

break label;

Esta expresin permite interrumpir el flujo de una estructura


de control con la opcin de saltar fuera de la seccin etiqueta
por label:, o en su ausencia, saltar fuera de la estructura de
control actual.

continue label;

Esta expresin permite interrumpir el ciclo actual de una


estructura de control con la opcin de saltar a la ltima lnea
de la seccin etiquetada por label:, o en su ausencia, saltar
a la ltima lnea de la estructura de control actual.

label: expr

Etiqueta asignada a una expresin, utilizada en conjuncin


con break y continue.

return expr;

Esta expresin devuelve el valor generado por expr.

Si los bloques en la tabla involucran ms de una oracin, estos deben incluir llaves para
especificar el inicio y fin del bloque. Todas las condiciones deben ser expresiones que
devuelvan un valor booleano.
Programacin avanzada
ARCHIVOS
En java es relativamente sencillo tener acceso a archivos,
cdigo en java:

como lo ilustra el siguiente

File file= new File(dir,archivo);


BufferedReader is= new BufferedReader(new FileReader(file));
String s = is.readline();

is.close();
Se instancia un archivo fil e de tipo File, especificando su ubicacin en el sistema, di r, y
su nombre, archivo. A continuacin se instancia un objeto de tipo FileReader, el cual se
conecta al archivo file y, luego, en la misma lnea, se instancia el objeto is de tipo
BufferedReader que permite conectarse a travs de un bfer de lectura. La llamada is.
readli ne () hace una lectura de una lnea completa y la guarda en una variable s de tipo
String. Luego de ter minar de leer la informacin deseada del archivo, ste se cierra
mediante la llamada is.close().
La escritura es anloga a la lectura, como se muestra a continuacin:
BufferedWriter os= new BufferedWriter(new FileWriter(file));
os.write(s);

os.close();
Se instancia un archivo file, como se mostr anteriormente. A continuacin se instancia
un objeto de tipo FileWriter, el cual se conecta al archivo fil e y, luego, en la misma
lnea, se instancia el objeto os de tipo BufferedWriter, que permite conectarse a travs de
un bfer de escritura. La llamada os.write(s) hace una escritura de una cadena referida
por la variable s de tipo String. Despus de terminar de escribir la informacin deseada
en el archivo, ste se cierra mediante la llamada os.close().
BASES DE DATOS
Accesar una base de datos tambin es relativamente sencillo en java. Inicialmente se
verifica que exista el paquete o biblioteca de java que permite administrar la conexin a
las bases de datos, como se presenta a continuacin:

Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
La propia conexin a la base de datos se hace a travs de una llamada similar a la
siguiente:
Connection con=DriverManager.getConnection ("jdbc: odbc nombre", 7 ogi n, password);

Esto genera una conexin a una base de datos llamada nombre, que puede accesarse
de forma opcional a travs de un nombre de usuario login y una contrasea password. La
conexin queda abierta hasta que se cierre mediante la siguiente llamada:
con.close();
Luego, se debe instanciar una variable de tipo Statement, la cual se utiliza como contenedor
de la llamada en SQL:
Statement stmt = con.createStatement();

EXCEPCIONES

Un aspecto de suma importancia y que es integral en lenguajes como Java, es el manejo


de excepciones. Cuando un error ocurre en un programa, el sistema lanza una
excepcin que el programa atrapa. El manejo de excepciones se re quiere para
cualquier cdigo que pueda resultar en estados inconsistentes,
en particular
situaciones donde se trate de accesar entidades externas al programa, como son los
archivos y las bases de datos.
En Java, este manejo se logra mediante tres palabras reservadas:

try. Define un bloque de cdigo donde pudieran ocurrir excepciones.


catch. Define una seccin para el manejo de las excepciones (a travs de a
clase Throwable o alguna de sus subclases). Este bloque es opcional.
finally. Cdigo a ejecutarse como finalizacin del bloque, ocurran o no
excepciones. Este bloque es opcional.

CDIGO NATIVO
Java permite al desarrollador de software incluir cdigo escrito en otros lenguajes, en
particular C, como parte de programa en Java. Para ello, se aplica el modificador native a
las declaraciones de los mtodos que son implementados de manera nativa en C o
algn otro lenguaje, pero no en Java. Al igual que un mtodo abstracto, se agrega un
punto y coma al final de una declaracin nativa.
SINCRONIZACIN
Al igual que otros lenguajes, Java permite procesar mltiples objetos y mtodos de
manera concurrente dentro de una aplicacin mediante el uso de mltiples hilos
(threads) de control. La concurrencia en el procesamiento requiere de sincronizacin
de los bloques afectados. Para ello, Java incluye el modificador synchronized, el cual

especifica una seccin crtica de procesamiento


su ejecucin.

que no puede interrumpirse durante

SERIALIZACIN
Como apoyo al procesamiento distribuido de aplicaciones, Java permite enviar objetos
entre diversos procesos. Este envo se facilita mediante el uso de la interface serializable,
la cual debe ser incluida en la implementacin de la clase afectada.
FlNALIZADOR
Existe en Java un mtodo de finalizacin de clase llamado final i ze. El objetivo del
finalizador, de manera complementaria al constructor, es cerrar; por ejemplo, archivos
o sockets que se encuentren abiertos. Un finalizador se vera de la siguiente forma:
protected void finalize() throws IOException {
if (fd != null) close();
}
Java llama a un finalizador una sola vez por objeto. El mtodo finalizador se llama
por lo general antes de la recoleccin de basura; sin embargo, Java no garantiza el
orden de estas llamadas, y cualquier recurso an no cerrado o re colectado sera
liberado al terminar el programa.

UML Y JAVA
Objetos y Clases.
Todo programa de Java debe incluir clases. Consideremos los diversos aspectos de las clases
como se describi inicialmente en el Captulo 4. Utilizando la notacin UML, una clase se
representa como se muestra en la Figura.
NombreClase
En Java, el cdigo correspondiente a una clase se muestra continuacin:
class NombreClase {
}
Ntese que el nombre de la clase siempre comienza con mayscula. Si el nombre es
compuesto, como en este caso, para facilitar su lectura, la siguiente palabra debe iniciarse
tambin con maysculas. No debe haber espacios dentro del nombre de la clase.
Atributos
El siguiente paso en la definicin de una clase es indicar sus atributos, estos se muestran
nuevamente en la Figura.

NombreClase
ListaAtributos
En Java, el cdigo correspondiente a una clase con atributos se muestra continuacin:
class NombreClase {
// atributos
tipoAtributo1 nombreAtributo1;
...
tipoAtributoi nombreAtributoi;
...
tipoAtributoN nombreAtributoN;
}
Operaciones
El siguiente paso en la definicin de una clase es indicar sus operaciones, estos, junto con los
atributos se muestran en la Figura.
NombreClase
ListaAtributos
ListaOperaciones
En Java, el cdigo correspondiente a una clase con atributos se muestra continuacin:
class NombreClase {
// atributos
tipoAtributo1 nombreAtributo1;
...
tipoAtributoi nombreAtributoi;

...
tipoAtributoN nombreAtributoN;
// operaciones
tipoRetorno1 nombreMtodo1 ( listaParmetrosMtodo1 )
{ cuerpoMtodo1 }
...
tipoRetornoj nombreMtodoj ( listaParmetrosMtodoj )
{ cuerpoMtodoj }
...
tipoRetornoM nombreMtodoM ( listaParmetrosMtodoM )
{ cuerpoMtodoM }
}
Encapsulamiento
En Java, como en la mayora de los lenguajes orientados a objetos, es muy importante
considerar el encapsulamiento de los atributos y mtodos definidos en la clase. Aunque todos
los campos de una clase son accesibles dentro de esa clase.
Para ello, Java define tres modificadores bsicos para el manejo del encapsulamiento y que
puede ser aplicados a los campos o miembros (atributos y mtodos) de una clase y a la propia
clase completa: public, private y protected, como se muestra a continuacin:

public - se agrega a los campos de la clase que pueden ser accesados fuera de la clase. En
general, deben ser pblicos los mtodos de la clase, aunque no necesariamente todos sus
mtodos.

private - se agrega a los campos de la clase que son accesados nicamente desde dentro de
la clase, o sea, dentro de sus propios mtodos. En general, deben ser privados los atributos de
la clase, y posiblemente algunos mtodos de uso interno.

protected - se agrega a los campos de la clase que son accesados nicamente desde dentro
de la clase o dentro de una subclase que hereda de la actual, o sea, dentro de sus propios
mtodos o mtodos de alguna de sus subclase. En general, deben ser protegidos los atributos
de la clase, y posiblemente algunos mtodos de uso interno.

La distincin entre estos modificadores de encapsulamiento puede volverse un poco confusa


dado que adems de afectar el encapsulamiento de los campos entre clases, tambin afecta la
el acceso dependiendo si las clase son, o no, campos del mismo paquete. Por lo tanto, Java
define dos maneras generales de aplicar estos modificadores, como se muestra a continuacin:

Modificador de encapsulamiento para campo de una clase se aplica nicamente a un


atributo o mtodo de una clase y puede consistir de cualquiera de los tres
modificadores: public, private y protected. Este modificador se aade al inicio de una
declaracin, sea atributo o mtodo, como se muestra a continuacin:
class Persona {
private String nombre;
protected int edad;
public int seguroSocial;
public String licenciaConducir;
private int setNombre(String nom) {
nombre = nom; return 1; }
protected int setEdad(int ed) {
edad = ed; return 1; }
public void set(String nom, int ed) {

setNombre(nom); setEdad(ed); }
public void set(int ed, String nom) {
setNombre(nom); setEdad(ed); }
}

Modificador de encapsulamiento para una clase se aplica a toda la clase como tal y
puede consistir nicamente del modificador: public y afecta la visibilidad de la clase
entre paquetes. Este modificador se aade al inicio de la especificacin de la clase,
como se muestra a continuacin:
public class Persona {
private String nombre;
protected int edad;
public int seguroSocial;
public String licenciaConducir;
private int setNombre(String nom) {
nombre = nom; return 1; }
protected int setEdad(int ed) {
edad = ed; return 1; }
public void set(String nom, int ed) {
setNombre(nom); setEdad(ed); }
public void set(int ed, String nom) {
setNombre(nom); setEdad(ed); }

Es accesible por:

public

protected

paquete

private

Misma clase

Clase en el mismo paquete

no

Subclase
diferente

No

no

no

No

no

en

No-subclase
diferente

en

un
un

paquete
paquete

La explicacin de la Tabla es la siguiente:

Todos los campos o miembros de una clase son siempre accesibles dentro de una
misma clase, sin importar el modificador de sus campos.

Todos los campos de una clase son siempre accesibles por cualquier otra clase,
incluyendo subclases, dentro del mismo paquete, siempre y cuando el campo no
sea private.

Una subclase en un paquete distinto, slo puede accesar campos public o protected.
Ntese que la clase debe ser public para poder ser vista en otro paquete.

Una clase, que no sea subclase, en un paquete distinto, slo puede accesar
campos public. Nuevamente la clase debe ser public para poder ser vista en otro
paquete.

Constructores
Para completar los aspectos fundamentales de una clase se debe considerar
sus constructores. Estos son mtodos especiales que pueden ser llamados nicamente durante
la instanciacin de un nuevo objeto (esto ltimo lo veremos en la siguiente seccin.) El
constructor lleva el mismo nombre de la clase y puede incluir parmetros. A diferencia del resto
de los mtodos, un constructor no especifica ningn tipo de retorno, ya que de por s, el objeto
recin creado es lo que se devuelve. Su formato es como se muestra a continuacin:
class NombreClase {
// atributos
...listaAtributos...
//contructor
NombreClase ( listaParmetrosConstructor1 )

{ cuerpoConstructor1 }
...
NombreClase ( listaParmetrosConstructori )
{ cuerpoConstructori }
...
NombreClase ( listaParmetrosConstructorN )
{ cuerpoConstructorN }
// operaciones ...
listaMtodos...
Instanciacin
Una vez definidos los aspectos esenciales de la clase, el siguiente paso es poder instanciar
objetos. Java, para crear un nuevo objeto, se debe utilizar el operador new seguido por la clase
a la que pertenece el objeto objeto. Adems de la clase, puede haber una lista de argumentos
opcionales entre parntesis, que son asignados y deben corresponder a la lista de parmetros
de algn constructor de la clase. Si la clase no tiene un constructor, la lista deber estar vaca.
Debe quedar muy claro que este operador permite instanciar un nuevo objeto, pero si no existe
una variable que guarde la referencia al nuevo objeto, el objeto prcticamente ser perdido por
ser imposible su acceso. Por lo tanto, antes de proceder con la instanciacin debe declararse
una variable que guarde la referencia al nuevo objeto, como se muestra a continuacin:
Persona p1 = new Persona(Juan,35,1234567,x254f);
Esta instanciacin asigna los valores especificados a cada una de los atributos. En el caso de
no haber especificado ningn constructor, Java permite instanciar un nuevo objeto utilizando la
llamada a un constructor vaci generado implcitamente, como se muestra a continuacin:
Persona p2 = new Persona();
Esta instanciacin crea un objeto tipo Persona donde los atributos toman como valor aquellos
asignados por Java por omisin. Esta generacin implcita por parte de Java no ocurre si ya se
ha definido al menos otro constructor para esa clase. En este ltimo caso, de no haber un
constructor que no tome argumentos, la llamada anterior hubiese ocasionado un error.
Acceso a Campos
Una vez instanciado un objeto, lo ms importante es poder accesar los campos de la clase los
cuales ya han sido definidos previamente.

Atributos
Los atributos (tipos primitivos) son manipulados como se explic en la seccin correspondiente.
Estas manipulaciones se hacen mediante expresiones tales como asignacin o flujos de
control. Lo particular a considerar en los objetos es el acceso mediante la variable que guarda
la referencia al objeto seguido por un . y el nombre del atributo.
Por ejemplo, para asignar el nmero del seguroSocial del objeto p1 al valor 8888888, donde el
objeto es de tipo Persona se hace lo siguiente:
p1.seguroSocial = 8888888;
Ntese que esta asignacin puede ser hecha si el atributo no es privado, ya que de lo contrario
el encapsulamiento no lo permitira. Si esto ocurriese, que debiera ser la norma, el acceso se
hara a travs de un acceso a un mtodo no privado del objeto, como veremos a continuacin.
Mtodos
Los mtodos son llamados a partir de la variable que guarda la referencia al objeto seguido por
un . y el nombre del mtodo. Por ejemplo, para copiar el nmero del edad del objeto p1 al
valor 25, donde el objeto es de tipo Persona se hace lo siguiente:
p1.setEdad(25);
Ntese que esta llamada al mtodo para la asignacin puede ser hecha si el mtodo no es
privado, ya que de lo contrario el encapsulamiento no lo permitira.
Referencia Propia
Existe una palabra reservada, this, que es muy importante para referirse al objeto actual. Se
utiliza de dos maneras distintas: como referencia a algn campo del objeto o cmo llamada a
un constructor. Veamos los dos casos:

Como ejemplo de referencia a un campo de un objeto, el atributo edad puede ser


accesado dentro del mtodo setEdad mediante el siguiente cdigo:
protected int setEdad(int edad) {
this.edad = edad; return 1; }

Ntese como el this no cambia en absoluto la lgica original del mtodo, aunque evita un
posible conflicto cuando un argumento del mtodo tiene el mismo nombre que el atributo de la
clase. Obviamente, este posible conflicto se resuelve utilizando nombres diferentes. (Para Java
esto no es un conflicto, ms bien pudiera ser base de confusin para el programador.) Sin
embargo, el uso ms importante para esta referencia es como referencia a ser devuelta por un
mtodo. Por ejemplo, modifiquemos el mtodo anterior, en particular el tipo devuelto, de la
siguiente manera:

protected Persona setEdad(int ed) {


edad = ed; return this; }
En este ejemplo, el this juega un papel primordial ya que permite que el mtodo devuelva la
referencia del propio objeto para ser usado por otras variables. Obviamente, la referencia debe
ser de tipo Persona para que el cdigo sea correcto.

Como ejemplo de llamada a un constructor de un objeto, consideremos el siguiente


constructor adicional para la clase Persona:
public Persona() {
this(null, 0, 0, null); }

Este segundo constructor no tiene argumentos y se aprovecha del primer constructor para
redirigir la llamada utilizando this(), en este caso con parmetros de omisin. En este ejemplo
particular no es necesario hacer esta ltima llamada por asignar valores similares a los que
asigna Java por omisin a las variables, sin embargo, esta es una buena prctica. Por otro
lado, sera necesario incluir este llamada si quisiramos asignar valores de omisin diferentes a
los que asigna Java. La llamada a this() debe utilizarse dentro de un constructor y debe
aparecer como su primera lnea.
Expresiones para Objetos
Las expresiones que se aplican a los objetos son ms bien limitadas en el sentido de que las
manipulaciones principales en el control de un programa son sobre los tipos primitivos. Los
objetos como tales se usan ms bien como encapsuladores de estos tipos primitivos y no tanto
como la base de expresiones. Sin embargo existen algunos operadores que vale la pena
mencionar aqu y que se muestra en la Tabla.

Operador

Descripcin de la Operacin

(tipo)

cast

instanceof

comparacin de tipo

==
!=

igual (se refieren al mismo objeto) no


igual (se refieren a distintos objetos)

Ntese la lista reducida de operadores en relacin a lista extensa de operadores aplicables a


tipos primitivos. De esta lista vale la pena resaltar los siguientes aspectos:

Los operadores == y != comparan referencias. Para comparar los propios valores a


donde apuntan las referencias, se debe utilizar el mtodo equals().

El operador instanceof devuelve true si el objeto a la izquierda es una instancia de la


clase especificada a la derecha, de lo contrario devuelve falso. Tiene la misma
precedencia que los operadores de comparacin.

Adems de esto, los objetos como tales son utilizados muy comnmente en expresiones que
involucran funciones, donde las referencias a los objetos son sus argumentos.

Ligas, Asociaciones y Composicin.


Hasta ahora hemos mostrado como se definen las clases y como se crean los objetos. Para
poder generar una aplicacin completa es necesario poder relacionar clases, o sea objetos,
entre si. Esto corresponde a los conceptos de ligas y asociaciones entre objetos y clases,
respectivamente. En la gran mayora de los lenguajes orientados a objetos no existe ninguno
de estos dos conceptos. Por lo tantos estos deben ser implementados por algn mecanismo
existente en el lenguaje. Tpicamente se describen asociaciones mediante la especificacin de
referencias a otras clases, donde las referencias son guardadas como atributos de la clase. En
general asociaciones de grados mayores a dos se implementan mediante asociaciones
binarias.
Asociacin entre clases.
Una asociacin binaria es implementada mediante un atributo correspondiente a cada clase de
la asociacin, como se muestra a continuacin:
class Clase1 {
Clase2 ref;
}
class Clase2 {
Clase1 ref;
}
El mayor problema que existe con este tipo de implementacin para las asociaciones es
mantener la consistencia entre las referencias. En otras palabras, si la asociacin, o liga, deja
de existir, es importante que las referencias sean actualizadas de la manera correspondiente.
Es importante que estos atributos de referencia no sean accesibles externamente para evitar
actualizaciones de forma independiente. Por otro lado, los mtodos accesibles externamente
para actualizar los atributos no deberan ser aadidos a una de las clases de la asociacin sin
accesar la implementacin del otro objeto, ya que los atributos estn mutuamente restringidos.
Cuando una nueva liga se aade a la asociacin, ambos apuntadores deben ser actualizados,
y cuando la liga es removida, ambos apuntadores tambin deben ser tambin removidos. Este

es un ejemplo de la complejidad que le agrega a un programa por la falta de un mecanismo que


implemente asociaciones y ligas de manera natural.
Rol
En el cdigo de Java anterior no hay ningn indicio al concepto de la asociacin ms que las
dos referencias mencionadas. Por lo tanto, aunque la asociacin tuviera un nombre, este
nombre sera asignado a ninguno de las dos clases ya que el concepto como tal de la
asociacin se ha perdido. Sin embargo, el nombre de rol, es ms fcil de asignar.
Los nombres de rol pueden ser aprovechados para nombrar a los de las dos referencias, como
se muestra a continuacin:
class Clase1 {
Clase2 rol2;
}
class Clase2 {
Clase1 rol1;
}
Acceso
Analicemos ahora que ocurre si integramos el concepto del acceso o navegacin para las
asociaciones apoyado por UML. El diagrama de la Figura 5.10 muestra una asociacin con
navegacin bidireccional, que es equivalente al cdigo anterior. Ntese que se agrego el
nombre de la asociacin, aunque esto no afecta al cdigo.
Multiplicidad
En todos los ejemplos anteriores la multiplicidad de la relacin fue de uno-uno. La
multiplicidad de mucho agrega cierta complicacin ya que requiere de estructuras adicionales
en lugar de la referencia directa.
Asociacin Reflexiva
Una asociacin reflexiva se implementa como caso especial de una asociacin entre clases
distintas.
Asociacin como Clase
Como se describi en el Captulo 4, se pueden modelar las asociaciones como clase. Esto en
cierta manera puede simplificar la implementacin de las asociaciones en especial el manejo

de la consistencia entre las referencia de las clases. Aunque estos objetos no son difciles de
implementar, siempre ayuda que la biblioteca de clases las contenga o al menos que contenga
clases que ayuden a la implementacin final. El enfoque ms sencillo es implementar un objeto
de asociacin como un objeto diccionario que hace un mapa entre la direccin hacia delante y
la direccin hacia atrs de la asociacin. El diccionario debe ser actualizado cuando la
asociacin es actualizada.

Composicin
La composicin es bsicamente una extensin del concepto de asociacin. Dado que la
asociacin no tiene ningn mecanismo que la soporte en Java, la composicin tampoco.
Clases Contenedoras
Las clases contenedoras son un buen ejemplo de clases que contienen a otras clases y que
utilizan asociaciones y composicin como base. Dos de los ejemplos ms importantes de estas
clases son la lista o lista ligada (LinkedList) y la pila (stack).
Lista
El siguiente diagrama muestra un diseo genrico para una lista que puede contener cualquier
tipo de objeto.
Se utilizan tres clases:

Lista que agrupa las operaciones de insertar y eliminar los objetos contenidos a travs
de un nmero indefinido de nodos. Se guarda la referencia al primero y al actual
(corresponde al ltimo elemento). Se utiliza una relacin de composicin para resaltar
que la lista contiene nodos.

Nodo que son los contenedores para cada uno de los objetos. Cada nodo tiene una
referencia al prximo o siguiente nodo (que puede ser nula), adems de una referencia
al propio objeto. Es muy importante esta clase ya que ofrece la funcionalidad de liga
entre nodos.

Objeto que corresponde a la propia informacin que la lista guarda. Es importante


separarla de los nodos para no requerir ninguna funcionalidad que no sea exclusiva al
objeto, a diferencia del nodo que guarda funcionalidad propia de la lista.

Aunque pudiesen utilizarse menos clases (tambin pudieran ser ms), este diseo es muy
compacto evitando cualquier mezcal de la informacin con la lista, un requisito importante de
una clase contenedora. Comenzamos la descripcin del cdigo a partir de la clase Nodo ya que
la clase Objeto la representamos por la clase Object, la superclase de todas las clases en Java,

como describiremos en mayor detalle en la seccin de herencia ms adelante. Esto ltimo


facilita mucho el diseo y el manejo de las clases contenedoras.
Pila
El siguiente diagrama muestra un diseo genrico para una pila que puede contener cualquier
tipo de objeto,
Se utilizan nuevamente tres clase:

Pila que agrupa las operaciones de push (meter) y pop (sacar) los objetos contenidos a
travs de un nmero indefinido de nodos. Se guarda la referencia al primero
nicamente. Se utiliza una relacin de composicin para resaltar que la pila contiene
nodos.

Nodo que son los contenedores para cada uno de los objetos. Cada nodo tiene una
referencia al prximo o siguiente nodo (que puede ser nula), adems de una referencia
al propio objeto. Es similar al nodo de la lista.

Objeto que corresponde a la propia informacin que la pila guarda.

Aplicaciones y applets

Existen dos maneras de estructurar un programa en Java: por aplicaciones o por applets.
Ambos siguen el mismo proceso de desarrollo, incluyendo la gran mayora de las
facilidades que Java ofrece. La diferencia es que las aplicaciones se ejecutan como
cualquier programa "normal", mientras que los applets estn especficamente
diseados para correr en el Web a travs de un browser.
Aplicaciones
Las aplicaciones requieren de un mtodo especial para iniciar
el programa: el mtodo mai n. La aplicacin ms sencilla es la
famosa "Hola Mundo", la cual se programa de la siguiente
manera como aplicacin en Java:
class ej {
public static void main(String args[]) {
System.out.println("Hola Mundo!");
}
}
Al ejecutar el programa escribira "Hola
Mundo".

En una aplicacin que contiene mltiples clases, el mtodo main puede agregarse
cualquiera de las clases. Dado que el mtodo main est definido como esttico, ste no
tiene acceso a las estructuras internas de la clase. A continuacin se muestra un
ejemplo del uso del main,
public class Persona {
public static void main(String args[]) {
for (int i = O; i < args. length; i++)
System.out.print(args[i] +" ");
System.out.print("\n");
System.exit(O);
}
}
Observe el argumento args de main, que recuerda cierta similitud con argc y argv en el
lenguaje C, slo que integrndolos en uno solo.
Applets

Tomamos ahora el programa anterior de "Hola Mundo",


siguiente manera como un applet en java.,

que se programara

de la

public class ej extends Applet {


public void paint(Graphics g){
g.drawString("Hola Mundo!",25,25);
}
}
En lugar del mtodo main, un applet requiere una clase que herede de Applet y
sobrescriba el mtodo paint, para desplegar textos o grficas en la pantalla. Todo applet
requiere de una pgina html para su ejecucin, por ejemplo ej . htm l, como se muestra a
continuacin:
<applet code=ej.class width=200 height=200></applet>
El archivo html puede ejecutarse en un browser o mediante la aplicacin appletviewer de la
siguiente forma:
appletviewer ej.html
A diferencia del mtodo mai n, el paso de argumentos
parmetros del archivo html.

iniciales es a travs de los

INTERFACES GRFICAS DE USUARIO


Hasta ahora hemos desarrollado programas que usan la consola para interactuar con el
usuario. Esa forma de interfaz de usuario es muy simple y nos ha permitido centrarnos en todo
aquello que tiene que ver tan slo con la programacin orientada a objetos con el lenguaje
Java, sin tener que tratar al mismo tiempo con ventanas, botones y otros elementos similares.
Las interfaces grficas de usuario (GUI) ofrecen al usuario ventanas, cuadros de dilogo,
barras de herramientas, botones, listas desplegables y muchos otros elementos con los que ya
estamos muy acostumbrados a tratar. Las aplicaciones son conducidas por eventos y se
desarrollan haciendo uso de las clases que para ello nos ofrece la API de Java.
La API de Java para desarrollo de GUI
La interfaz de usuario es la parte del programa que permite al usuario interaccionar con l. La
API de Java proporciona una biblioteca de clases para el desarrollo de Interfaces grficas de
usuario (en realidad son dos). La biblioteca proporciona un conjunto de herramientas para la
construccin de interfaces grficas que tienen una apariencia y se comportan de forma
semejante en todas las plataformas en las que se ejecuten. La estructura bsica de la
biblioteca gira en torno a componentes y contenedores. Los contenedores contienen
componentes y son componentes a su vez, de forma que los eventos pueden tratarse tanto en
contenedores como en componentes. La API est constituida por clases, interfaces y
derivaciones. AWT y Swing
Algunos componentes de AWT

Algunos componentes de Swing

Swing
Paquete de Java para la generacin del GUI en aplicaciones reales de gran tamao. Disponible
como paquete externo en Java 1.1 e integrado desde Java 1.2. Es una de las API de JFC (Java
Foundation Classes): AWT, Java 2D, Accessibility, Drag and Drop, Swing, ... Escrito totalmente
en Java. No reemplaza a AWT. Se apoya sobre AWT y aade JComponents. Utiliza el modelo
de eventos de Java 1.1. Eleccin entre diferentes aspectos (look & feel). Arquitectura ModelView-Controller (MVC). Nuevos componentes (rboles, tablas, frames internos, iconos, bordes,
tooltips, beans, etctera).
Jerarqua de clases para las GUI
Component: superclase de todas las clases de interfaz grfica.
Container: para agrupar componentes.
JComponent: superclase de todos los componentes de Swing que se dibujan directamente en
los lienzos (canvas). Sus subclases son los elementos bsicos de la GUI.
JFrame: ventana que no est contenida en otras ventanas.
JDialog: cuadro de dilogo.
JApplet: subclase de Applet para crear applets tipo Swing.
JPanel: contenedor invisible que mantiene componentes de interfaz y que se puede anidar,
colocndose en otros paneles o en ventanas. Tambin sirve de lienzo.
Graphics: clase abstracta que proporciona contextos grficos donde dibujar cadenas de texto,
lneas y otras formas sencillas.
Color: color de los componentes grficos.
Font: aspecto de los caracteres.
FontMetrics: clase abstracta para propiedades de las fuentes.
Categoras de clases: 9

Contenedores:
JFrame, JApplet, JWindow, JDialog 9
Componentes intermedios:
JPanel, JScrollPane 9
Componentes:

JLabel, JBbutton, JTextField, JTextArea, ...


Clases de soporte:
Graphics, Color, Font, ...

También podría gustarte