Java
Java
Java
c
c
c
!
" # $
%#$ &
Java posee una curva de aprendizaje muy rápida. Resulta relativamente sencillo
escribir applets interesantes desde el principio. Todos aquellos familiarizados con
C++ encontrarán que Java es más sencillo, ya que se han eliminado ciertas
características, como los punteros. Debido a su semejanza con C y C++, y dado que
la mayoría de la gente los conoce aunque sea de forma elemental, resulta muy fácil
aprender Java. Los programadores experimentados en C++ pueden migrar muy
rápidamente a Java y ser productivos en poco tiempo.
ORIENTADO A OBJETOS
Java fue diseñado como un lenguaje orientado a objetos desde el principio. Los
objetos agrupan en estructuras encapsuladas tanto sus datos como los métodos (o
funciones) que manipulan esos datos. La tendencia del futuro, a la que Java se
suma, apunta hacia la programación orientada a objetos, especialmente en
entornos cada vez más complejos y basados en red.
c
c
DISTRIBUIDO
Java proporciona una colección de clases para su uso en aplicaciones de red, que
permiten abrir sockets y establecer y aceptar conexiones con servidores o
clientes remotos, facilitando así la creación de aplicaciones distribuidas.
Java fue diseñado para crear software altamente fiable. Para ello proporciona
numerosas comprobaciones en compilación y en tiempo de ejecución. Sus
características de memoria liberan a los programadores de una familia entera de
errores (la aritmética de punteros), ya que se ha prescindido por completo los
punteros, y la recolección de basura elimina la necesidad de liberación explícita de
memoria.
SEGURO
Dada la naturaleza distribuida de Java, donde las applets se bajan desde cualquier
punto de la Red, la seguridad se impuso como una necesidad de vital importancia. A
nadie le gustaría ejecutar en su ordenador programas con acceso total a su sistema,
procedentes de fuentes desconocidas. Así que se implementaron barreras de
seguridad en el lenguaje y en el sistema de ejecución en tiempo real.
c
INDIFERENTE A LA ARQUITECTURA
Java está diseñado para soportar aplicaciones que serán ejecutadas en los más
variados entornos de red, desde Unix a Windows Nt, pasando por Mac y estaciones
de trabajo, sobre arquitecturas distintas y con sistemas operativos diversos. Para
acomodar requisitos de ejecución tan variopintos, el compilador de Java genera
bytecodes: un formato intermedio indiferente a la arquitectura diseñado para
transportar el código eficientemente a múltiples plataformas hardware y software.
El resto de problemas los soluciona el intérprete de Java.
PORTABLE
Hoy en día ya se ven como terriblemente limitadas las aplicaciones que sólo
pueden ejecutar una acción a la vez. Java soporta sincronización de múltiples
hilos de ejecución (
$ ) a nivel de lenguaje, especialmente útiles en la
creación de aplicaciones de red distribuidas. Así, mientras un hilo se encarga de
la comunicación, otro puede interactuar con el usuario mientras otro presenta
una animación en pantalla y otro realiza cálculos.
DINÁMICO
Java puede ser usado para crear dos tipos de programas: aplicaciones
independientes y applets.
Por su parte, las applets son pequeños programas que aparecen embebidos en las
páginas Web, como aparecen los gráficos o el texto, pero con la capacidad de
ejecutar acciones muy complejas, como animar imágenes, establecer conexiones
de red, presentar menús y cuadros de diálogo para luego emprender acciones,
etc.
!"
La tecnología Java se creó como una herramienta de programación para ser
usada en un proyecto de set-top-box en una pequeña operación denominada
the Green Project en Sun Microsystems en el año 1991. El equipo (Green
Team), compuesto por trece personas y dirigido por James Gosling, trabajó
durante 18 meses en Sand Hill Road en Menlo Park en su desarrollo.
,- &, (8 de diciembre de 1998) ³ Nombre clave " . Esta y las
siguientes versiones fueron recogidas bajo la denominación , y el
nombre "J2SE" (Java 2 Platform, Standard Edition), reemplazó a JDK para
distinguir la plataforma base de J2EE (Java 2 Platform, Enterprise Edition) y
J2ME (Java 2 Platform, Micro Edition).
È Entrada de datos
È Procesamiento de los datos
È Salida de resultados
-
"
- Un programa en Java presenta la estructura habitual en los lenguajes
OOP
(lenguajes orientados a objetos).
.
5 6
5
5 7
5 -8
5 (
5 !
'
5 9
5 "
-
'
3
6
:
Una sentencia es una orden que se le da al programa para realizar una tarea
específica, esta puede ser: mostrar un mensaje en la pantalla, declarar una
variable (para reservar espacio en memoria), inicializarla, llamar a una función,
etc.
=>
3 & &?>
& &
@-
@>
A
B
B
C
-
'
3
-8
Una expresión es todo aquello que se puede poner a la derecha del operador
asignación =.
8=,.>
=8D++E/>
= & a ,&0>
< =< ++,++.++>
Una variable es un nombre que se asocia con una porción de la memoria del ordenador, en la
que se guarda el valor asignado a dicha variable.
Java tiene tres tipos de variables:
² de instancia
² de clase
² Locales
Las variables de instancia o miembros dato, se usan para guardar los atributos de un objeto
particular.
-
'3
(
Las variables de clase o miembros dato estáticos son similares a las variables de
instancia, con la excepción de que los valores que guardan son los mismos para
todos los objetos de una determinada clase.
En el siguiente ejemplo, PI es una variable de clase y radio es una variable de
instancia. PI guarda el mismo valor para todos los objetos de la clase Circulo, pero
el radio de cada círculo puede ser diferente
9
A
"6=.&/F>
>
EE&&&
C
-
'
3
(
9
A
EE&&&
a A
="6? ? >
>
C
C
-
'
3
È Tipos básicos de datos
!
)
int Tamaño 32 bits. El intervalo de valores va desde -231 hasta 231-1 (-2147483648 a
2147483647)
float Tamaño 32 bits. Números en coma flotante de simple precisión. Estándar IEEE 754-
1985 (de 1.40239846e²45f a 3.40282347e+38f)
-
'
3
Variables booleanas
En lenguaje Java existe el tipo de dato boolean. Una variable booleana
solamente puede guardar uno de los dos posibles valores: true (verdadero) y
false (falso).
Variables enteras
=,+0>
-
'
3
Valores constantes
Las variables del tipo float o double (flotante) se usan para guardar números en
memoria que tienen parte entera y parte decimal.
"6=.&/0>
=&KJ+0=,&KJ>
=&KJ+0=,&KJ
-
'
3
9
Además de los ocho tipos de datos primitivos, las variables en Java pueden ser declaradas
par guardar una instancia de una clase. Las cadenas de caracteres o strings son
distintas en Java y en el lenguaje C/C++, en este último, las cadenas son arrays de
caracteres terminados en el carácter '\0'. Sin embargo, en Java son objetos de la clase
String.
" a
A
LM A
EE
3
3=@-
@>
& &
3>
C
C
En una cadena se pueden insertar caracteres especiales como el carácter tabulador '\t' o el
-
'
3
7
$
7 #
8 $
$
$
È &
#
È &
Este objeto implementa la salida estándar. Los métodos que nos proporciona
para
controlar la salida son:
È
&
' !()!
!
$
En Java es posible utilizar dos tipos de ficheros 8 y dos tipos de
acceso a los ficheros &
9
En el paquete 3 & existen varias clases de las cuales podemos crear instancias
de clases para tratar todo tipo de ficheros.
È R
È R6
È <
aR
Ëc
Mediante los objetos de esta clase escribimos en ficheros de texto de forma secuencial.
Presenta el método write() para la escritura en el fichero. Presenta varios formatos:
-3
import java.io.*;
class CreaCarta
{
public static void main(String args[]) throws IOException
{
int c;
FileOutputStream f=new FileOutputStream("/carta.txt");
while( ( c=System.in.read() ) != -1 )
f.write( (char)c );
f.close();
}
C
Ëcc
Mediante los objetos de esta clase leemos de ficheros de texto de forma secuencial.
È
È LM
È LM
-3
import java.io.*;
class MuestraCarta
{
public static void main(String args[]) throws IOException
{
int c;
FileInputStream f=new FileInputStream("/carta.txt");
while( ( c=f.read() ) != -1 )
System.out.print( (char)c );
f.close();
}
}
Ëc
Mediante los objetos de esta clase utilizamos ficheros binarios mediante un acceso
aleatorio, tanto para lectura como para escritura.
%S!))-)-"Gaa%6-!
Cuenta con una serie de funciones para realizar el desplazamiento del puntero del fichero.
È R"4Devuelve la posición actual del puntero del fichero.
È #4 Coloca el puntero del fichero en la posición indicada por l. Un fichero
siempre empieza en la posición 0.
È #
74 Intenta saltar n bytes desde la posición actual.
È $4 Devuelve la longitud del fichero.
È G$4 Establece a l el tamaño de este fichero.
È R)
R)4 Devuelve el descriptor de este fichero.
%H
La escritura del fichero se realiza con una función que depende el tipo de datos que se
desee escribir.
È void write( byte b[], int ini, int len ): Escribe len caracteres del vector b.
È void write( int i ): Escribe la parte baja de i (un byte) en el flujo.
È void writeBoolean( boolean b ): Escribe el boolean b como un byte.
È void writeByte( int i ): Escribe i como un byte.
È void writeBytes( String s ): Escribe la cadena s tratada como bytes, no caracteres.
È void writeChar( int i ): Escribe i como 1 byte.
È void writeChars( String s ): Escribe la cadena s.
È void writeDouble( double d ): Convierte d a long y le escribe como 8 bytes.
È void writeFloat( float f ): Convierte f a entero y le escribe como 4 bytes.
È void writeInt( int i ); Escribe i como 4 bytes.
È void writeLong( long v ): Escribe v como 8 bytes.
È void writeShort( int i ): Escribe i como 2 bytes.
È void writeUTF( String s ): Escribe la cadena s utilizando la codificación UTF-8.
Los métodos que escriben números de más de un byte escriben el primero su parte alta.
%S!))-G-9!<a
La lectura del fichero se realiza con una función que depende del tipo de datos que queremos
leer.
È 7 4 Lee un byte y devuelve false si vale 0 o true sino.
È 74 Lee y devuelve un byte.
È $ 9$ 4 Lee y devuelve un caracter.
È ) 4 Lee 8 bytes, y devuelve un double.
È R 4 Lee 4 bytes, y devuelve un float.
È R LM4 Lee bytes del fichero y los almacena en un vector b.
È R LM4 Lee len bytes del fichero y los almacena en un
vector b.
È 64 Lee 4 bytes, y devuelve un int.
È G4 Lee 8 bytes, y devuelve un long.
È $ $4 Lee 2 bytes, y devuelve un short.
È 74 Lee 1 byte, y devuelve un valor de 0 a 255.
È $4 Lee 2 bytes, y devuelve un valor de 0 a 65535.
È !R4 Lee una cadena codificada con el formato UTF-8.
È #
74 Salta n bytes del fichero.
EJEMPLO DE CLASE:
L
M 9
A
EE
H
&&&
C
+ $!
2. Si una clase deriva de otra (8), hereda todas sus variables y métodos.
3. tiene una jerarquía de clases estándar de la que pueden derivar las clases que
crean los usuarios.
4. Una clase sólo puede heredar de una única clase (en no hay herencia
múltiple). Si al definir una clase no se especifica de qué clase deriva, por defecto la
clase deriva de 3. La clase 3es la base de toda la jerarquía de clases de
.
5. En un fichero se pueden definir varias clases, pero en un fichero no puede haber más
que una clase
. Este fichero se debe llamar como la clase
que contiene
con extensión &3 . Con algunas excepciones, lo habitual es escribir una sola clase
por fichero.
+ $!
7. Los métodos de una clase pueden referirse de modo global al 3de esa clase al
que se aplican por medio de la referencia $.
3 & - clases para soportar redes: URL, TCP, UDP, IP, etc.
'(
' ,%
3 & - clases para manejo de interface gráfica,
ventanas, etc.
3 & &
- clases que conectan la interface gráfica
implementaciones dependientes de la plataforma
(motif, windows).
3 &
Las clases
son accesibles desde otras clases, bien sea directamente o por herencia,
desde clases declaradas fuera
del paquete que contiene a esas clases públicas, ya que, por
defecto, las clases solamente son accesibles por otras clases
declaradas dentro del mismo paquete en el que se han
declarado.
a
: 8
3
&
!$!(!
a
Una clase tiene al menos un método abstracto. Una clase abstracta no
se instancia, sino que se utiliza como clase base para la herencia. Es el
equivalente al prototipo de una función en C++.
R
Una clase se declara como la clase que termina una cadena de herencia,
es lo contrario a una clase abstracta. Nadie puede heredar de una clase final.
Por ejemplo, la clase % $ es una clase final. Aunque es técnicamente posible
declarar clases con varias combinaciones de public, abstract y final, la
declaración de una clase abstracta y a la vez final no tiene sentido, y el
compilador no permitirá que se declare una clase con esos dos modificadores
juntos.
$:
Este modificador especifica que todos los métodos definidos en la clase son
sincronizados, es decir, que no se puede acceder al mismo tiempo a ellos
desde distintos $ ; el sistema se encarga de colocar los necesarios
para evitarlo. Este mecanismo hace que desde threads diferentes se puedan
modificar las mismas variables sin que haya problemas de que se
sobreescriban.
!"
Por convención, los identificadores que se les asignan a las clases en
Java comienzan con mayúscula.
-No final
-No abstracta
-Subclase de la clase 3
-No implementa interfaz alguno
% !
Lo primero que se nos viene a la mente para describir la palabra objeto es:
´«algo tangible...µ
int miVariable;
int miVariable = 7;
3
' &
3 & &?>
3 0+,A
LMA
& &
) >
C
C
Una vez que se tiene declarado un objeto con sus variables y sus métodos,
podemos acceder a ellos para que el uso para el que se ha creado ese objeto entre
en funcionamiento.
Para indicar que una clase deriva de otra, heredando sus propiedades (métodos y
atributos), se usa el término 8, como en el siguiente ejemplo:
9 8
9 A
EE9
C
$!.
Por ejemplo, creamos una clase %" .), hija de la clase ya mostrada %" :
La palabra clave 8 se utiliza para decir que deseamos crear una
subclase de la clase que es nombrada a continuación, en nuestro caso %" .) es hija de
%" .
c (
È En Java una es una clase abstracta pura, es decir una clase donde todos
los métodos son abstractos . Permite al diseñador de clases establecer la forma de
una clase.
È Una puede también contener datos miembro, pero estos son siempre
static y final.
Para indicar que una clase implementa los métodos de una interface se utiliza la
palabra clave implements.
Por ejemplo:
È Es posible crear referencias a interfaces, pero las interfaces no pueden ser instanciadas.
Una referencia a una interface puede ser asignada a cualquier objeto que implemente la
interface.
Por ejemplo:
È a
Dado que, por definición, todos los datos miembros que se definen en una
interface son static y final, y dado que las interfaces no pueden instanciarse
resultan una buena herramienta para implantar grupos de constantes. Por
ejemplo:
Meses {
ENERO = 1 , FEBRERO = 2 . . . ;
String [] NOMBRES_MESES = { " " , "Enero" , "Febrero" , . . . };
}
G $
Todos los campos y métodos de una clase son siempre accesibles para el código de la misma
clase.
Para controlar el acceso desde otras clases, y para controlar la herencia por las subclase, los
miembros (atributos y métodos) de las clases tienen tres modificadores posibles de control
de acceso:
"3
4
" AEE 3
EEa
R )
>
EE%H
a
A
R >
C
- A
>
C
A
)
>
C
C
3 8" A
EE)
C
( A
EE)
C
!$!($!
$!!+/
"G64
$
%<R6%4
£ 01
-
3
3
'
:
&
!$!($!
%H
R LM = L,M>
) 3
L+M= >
LM= >
=+>T,>DDA
9 LM& 3 >
R C
!' 9
R =9 >
R =! >
6
3
"
&
2 c
-
$
>
3
H -
&
3
&
2 c
-%"G-a)-=-R->
3
-
>
&
-
-
&
=@R : @>
EE6
! !
3"
$$!4
! !
3"$$!4
È Tanto Java como C++ soportan la noción de constructor.
È Que es un constructor ?
El constructor es un tipo específico de método que siempre tiene el mismo
nombre que la clase y se utiliza para construir objetos de esa clase.
! !
3"$$!4
MiClase mc;
mc = new MiClase ();
! !
3"$$!4
È
9W
È 9%"-!-)-G)*
Compilador de Java.
Interprete de Java (JVM).
Interprete de applets Java.
Depurador de Java.
generador de documentación.
Integrador de c y c++ (JNI).
Desensamblador.
--%"G)-"< <a%a-a(a
3 & &?>EE
3
A
LM
A
EE =
&>EE
=
&>
>
& &
@ @>
=&86>
- Aplicaciones en la programación.