Professional Documents
Culture Documents
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
DESARROLLO DE LA ACTIVIDAD.
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.
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
/* prrafo comentado */
Caracteres
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 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
Short
Int
Long
Float
0.0
Doubl
0.0
Boolean
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
==
!=
primitivo primitivo
&
&
integral
booleano
integral
booleano
|
|
integral
booleano
&&
||
booleano
booleano
?:
boolean,
cualquiera
variable, cualquiera
OR para bits
OR booleano
AND condicional
OR condicional
cualquiera,
Asignacin
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
else bloque-n
bloque-n.
switch (variable)
case valor-i: bloque-i
default: bloque-n
for (expr-1;
bloque
condicin-2;
break label;
continue label;
label: expr
return 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:
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
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
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.
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
no
Subclase
diferente
No
no
no
No
no
en
No-subclase
diferente
en
un
un
paquete
paquete
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:
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:
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
==
!=
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.
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.
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,
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.
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
que se programara
de la
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: