Title: El lenguaje de programacin Java
1El lenguaje de programación Java
Pedro Rodríguez Moreno Paradigmas de Programación
(ICI/IECI) Departamento de Sistemas de
Información Facultad de Ciencias Empresariales
2Introducción a Java
3Introducción
- Java es una plataforma virtual que provee
- Un lenguaje de programación (OO).
- La Java Virtual Machine (JVM) Una máquina
virtual con su propio set de instrucciones. - La Java Plataform API (Application Programming
Interface) Una interfaz para la programación de
aplicaciones.
4Qué es Java?
- De acuerdo a Sun Microsystem
- Java es un lenguaje simple, orientado a
objetos, distribuído, interpretado, robusto,
seguro, arquitectura neutral, portable, de
alta-performance, multithread (multihilo), y
dinámico. - Java es muy parecido a C/C pero hay varias
diferencias importantes.
5Estructura de un Programa
- Un programa en Java consiste de uno o más
definiciones de clases. Una de estas clases debe
definir un método main(), desde donde el programa
comienza a correr - // A Java Hello World Program
- public class HelloWorld
-
- public static void main( String args )
-
- System.out.println( "Hello World" )
-
-
6Entorno de Java
- SDK (Software Development Kit)
- Necesario para crear (desarrollar y compilar)
programas - JRE (Java Runtime Environment)
- Necesario para ejecutar un programa Java
- SDK JRE herramientas de desarrollo
- La tecnología Java se organiza en subáreas
- J2SE (Java 2 Platform, Standard Edition)
- J2EE (Java 2 Platform, Enterprise Edition)
- SDK soporte para servicios web y componentes
- J2ME (Java 2 Platform, Micro Edition) entorno
flexible y robusto para aplicaciones que
funcionan en dispositivos tales como teléfonos
móviles, PDA, - Java Web Services aplicaciones basadas en la web
que utiliza estándar XML y protocolos de
transporte para intercambiar datos con los
clientes que le invocan. - Recursos en http//java.sun.com.
7Compilación y ejecución en la línea de comandos
- Compilación
- En Unix/Linux
- javac -classpath . nombre_archivo.java
- En Windows
- C\javac -classpath . nombre_archivo.java
- Ejecución
- En Unix/Linux
- java -classpath . nombre_archivo argumentos
- En Windows
- C\java -classpath . nombre_archivo
argumentos - nombre_archivo.java es un archivo de texto que
contiene la clase principal (clase que contiene
el método main) - public static void main (String args)
Se obtiene el archivo nombre_archivo.class en
byte-code (lenguaje de máquina de la JVM de Java)
8Variables de ambiente
- JAVA_HOME
- Directorio en el que está instalado el J2SE SDK
- Por ejemplo
- JAVA_HOME /usr/local/jdk1.5.0_06 (definir en
.profile o .bashrc en Unix) - C\set JAVA_HOME c\Archivos de
programas\Java\jdk1.5.0_06 (en Windows) - CLASSPATH
- Ruta de acceso a las librerías y APIs de Java.
- Por ejemplo
- CLASSPATHJAVA_HOME/libJAVA_HOME/lib.
- C\set CLASSPATH.JAVA_HOME\libJAVA_HOME\lib
- PATH del sistema
- Directorio donde se encuentran los ejecutables de
java - Por ejemplo
- PATHPATHJAVA_HOME/bin.
- C\set PATHJAVA_HOME\binPATH
- Cambiar las variables de ambiente
- En Unix/Linux incoporar variables en el profile
del shell en uso. - En Windows Panel de Control gtgt Sistema gtgt
Opciones avanzadas gtgt Variables de entorno.
9Por qué Java es diferente a otros lenguajes?
- Java difiere de otros lenguajes porque
- Es interpretado
- Arquitectura neutral
- No hay punteros del estilo de C/C. Estos
existen pero no son explícitamente visibles. - Posee un Garbage Collector (Recolector de
Basura). - Viene con una sofisticada librería de clases
(paquetes de clases). - Incluye soporte para concurrencia, networking, e
interfaces gráficas.
10Aplicaciones y Applets
- Los programas Java vienen en dos formas
- Aplicaciones.
- Applets.
- Los Applets tipicamente son descargados desde un
browser y son ejecutadas por la Java Virtual
Machine (JVM) la cual es parte del browser. - Las aplicaciones son programas standalone que
pueden hacer casi cualquier cosa.
11El J2SE
Ambiente de desarrollo (jsdk)
Ambiente distribuido (jre)
12La Tecnología Java
Programación UI
JNI
Programación
AWT
Swing
java.
WWW
JavaBeans
Java3D
Applets
Programación gráfica
Java2D
Java Server Pages
Sistemas embebidos
Servidor
JavaSpaces
Servlets
JINI
RMI
Programación distribuida
CORBA
JDBC
Bases de datos
Enterprise JavaBeans
13Java es Orientado a Objetos
- Objetos
- Clases
- Métodos
- Subclases
- Herencia simple
- Polimorfismo
- Enlace dinámico
- Encapsulado
14Java es un lenguaje simple
- Sintaxis familiar estilo C.
- Se eliminan las características complejas de C y
C. - No hay aritmética de punteros.
- No hay herencia múltiple.
- No hay delete (Java posee un Garbage Collector).
- Bastante más amistoso que C y C.
15La API de la Plataforma Java
- API Application Programming Interface.
- Consiste en una biblioteca de clases que provee
- Manejo de archivos.
- Interfaces gráficas (AWT).
- Acceso a la red internet (applets, sockets).
- Acceso a bases de datos (jdbc).
- Objetos Distribuidos (RMI).
16Multiplataforma
- Windows'95 y 'NT.
- Power/Mac
- Unix (Solaris, Linux, ...)
- Compatibilidad a nivel de fuentes, código
intermedio y biblioteca de clases.
17 Implementación de la Plataforma Java
- La implementación de la plataforma Java provee
- Un compilador de Java (javac) para traducir
código fuente al set de instrucciones de la
máquina virtual de Java (bytecode). - Un intérprete (java/appletviewer) o un compilador
JIT para ejecutar las instrucciones de la máquina
virtual. - Una implementación de la API de Java.
18La Portabilidad
Intérprete Linux
Intérprete Solaris
Fuente Java
Compilador javac
bytecode
Intérprete Windows95
Intérprete Mac
java/appletviewer
19Los Ambientes de Compilación y Ejecución
Ambiente Tiempo de Compilación Ambiente Run
Time (Plataforma JAVA)
20El Lenguaje de Programación
21Identificadores
- Nombran variables, funciones, clases y objetos.
- Comienza con una letra, un subrayado (_) o un
símbolo de dólar (). Los siguientes caracteres
pueden ser letras o dígitos. - Se distinguen las mayúsculas de las minúsculas.
- No hay una longitud máxima establecida para el
identificador.
22Tipos primitivos en Java
23Variables
- Sirven para referirse tanto a objetos como a
tipos primitivos. - Tienen que declararse antes de usarse
- lttipogt identificador
- int posicion
- Se puede inicializar mediante una asignación
- lttipogt identificador valor
- int posicion 0
- Definición de constantes
- static final float PI 3.14159f
24Duración y visibilidad de las variables
- Las variables pueden ser de dos tipos
- Variables miembro de una clase (variables de
instancia y de clase). - Variables locales creadas en un método.
- Variables miembros
- Son declaradas en cualquier lugar de una clase,
fuera de cualquier método. - Las variables miembro static existen desde que se
crea el primer objeto o cuando se utiliza el
primer método static de la clase. Son visibles y
compartidas por todos los objetos de la clase,
viendo el mismo contenido en ellas. - Las variables miembros se pueden acceder desde
otras clases dependiendo de los permisos de
acceso de la clase y de la variable (public,
protected, package, private). - Las variables miembros de objetos (o de
instancia) existen desde que se crea el objeto.
Las variables de instancia poseen valores
particulares para cada objeto. - Variables locales
- Se declaran en cualquier lugar del cuerpo de un
método o en cualquier bloque dentro de un método. - Las variables locales existen desde el punto en
que se crean hasta que se llega al final del
bloque en el que han sido creadas. - Las variables locales en un bloque no pueden
tener el mismo nombre que otra variable local que
sea visible, aunque ésta esté definida en un
bloque más exterior. No debe haber conflicto de
nombre entre variables locales. - Los argumentos son como variables locales
visibles en todo el método.
25Inicialización de las variables
- Se puede asignar un valor a cada variable de un
tipo primitivo en el momento de su creación,
tanto si es variable miembro como si es local - int i 0
- long j 100, k 100000
- Variables finales
- Son aquellas cuyo valor, una vez inicializadas,
no puede cambiar. - La inicialización puede estar separada de la
declaración. - Ejemplo
- final double PI 3.141592654
- final int MAXNUM
- MAXNUM 234
26Declaraciones
- int k // Un elemento de tipo
entero - int k 10 // Un elemento entero
inicializado - double pi 3.14159 // Un elemento de tipo
real de doble - //precisión.
- char c 'a' // Un elemento de tipo char
- boolean flag false // Un elemento booleano
inicializado - //con un valor de verdad
- String s Hola //Un elemento de tipo string
(es un - //objeto)
27Expresiones
- Las expresiones se forman con casi los mismos
operadores de C/C - Aritméticos - /
- De bits (Bitwise) gtgt ltlt
- Pre y postincremento k, j, --k, j
- Relacionales gt lt gt lt !
- Booleanos !
- Cast (int) pi
- Condicional (k gt j ? k j)
28Operadores de Asignación
- Se usa la misma sintaxis de C k 1
- El operador de asignación se usa igual que en C
k (j 1) 2 - También existen - /
- Java realiza conversiones implícitas, pero es más
estricto que C.
29Precedencia de operadores
- De mayor a menor precedencia
- Postfix operators . (params) expr expr
- Unary operators expr --expr expr -expr
! - Creation or cast new (type)expr
- Multiplicative /
- Aditive -
- Shift ltlt gtgt gtgtgt
- Relational lt gt lt gt instanceof
- Equality !
- Bitwise AND
- Bitwise exclusive OR
- Bitwise inclusive OR
- Logical AND
- Logical OR
- Conditional ?
- Assignment - /
ltlt gtgt gtgtgt - Para la misma precedencia
- En Java todos los operadores binarios excepto los
operadores de asignación se evalúan de izquierda
a derecha. - Los operadores de asignación se evalúan de
derecha a izquierda.
30Conversiones implícitas
- byte lt short lt int lt long lt float lt double
- Ejemplos
- int i 1
- long k i // Ok
- k 5500000000000
- float f k // Ok.
- double x 5.0e-30
- int k x // Error en compilación
- float x 15.5f
- int k x // Error en compilación
- short s k // Error en compilación
31Conversiones implícitas
- Las conversiones son aceptadas usando cast
- float f 50.0f
- int k (int)f // Ok en compilación
- Java no avisa en caso de errores de conversión
numéricos. - int k 256
- byte b (byte)k // b 0, rebalse?
32Instrucciones de Control
- Similar a C/C
- Instrucción condicional if.
- Ciclos while y do ... while.
- Ciclos for.
- Selección switch/case.
33Control de flujo
switch(expresión) case valor1
sentencias break case valor2
sentencias break default
sentencias
if( expresión-booleana ) sentencias
else sentencias
34Ejemplo
- int saldo
-
- if ( saldo lt 0 )
- System.out.println(Cuenta en números
rojos) -
- int dia
-
- switch (dia)
- case 1 System.out.println(Lunes) break
- case 2 System.out.println(Martes) break
-
- case 7 System.out.println(Domingo)
break -
35Bucles o ciclos
inicialización do sentencias
iteración while(expresión-booleana )
for( inicialización exp-booleana iteración )
sentencias
inicialización while( expresión-booleana )
sentencias iteración
36Ejemplo
- for (int index0 ilttabla.length index)
- System.out.println(tablaindex)
-
- int i0
- while ( i lt tabla.length )
- System.out.println(tablai)
- i
-
- 3. int i 0
- do
- System.out.println(tablai)
- i
- while ( i lt tabla.length )
37Manejo de Strings
- Declaración de un string
- String s, t // Declaración
- String r "Hola" // Declaración con asignación
- Despliegue de un string
- System.out.println(r)
- Asignación de strings
- s r
- t "que tal"
- Concatenación de strings
- s r t // "Holaque tal"
- s r t // "Hola que tal"
38Métodos
- Tamaño de un string s.length()
- k-ésimo caracter s.charAt(k)
- Subsecuencias s.substring(begin, end)
- Comparación de strings s.equals("Hola")
- Comparación de punteros s s0
39Conversiones implícitas
- int n 5
- String s
- s "La variable n es " n
- System.out.println(s)
- System.out.println(n n)
40Epílogo
- Los strings no se pueden modificar
- s0 'h' // error, s no es un arreglo
- s.charAt(0) 'h' // error
- Java no posee aritmética de punteros
- s s 1 // agrega "1" al final de s
41Arreglos
- Declaración preferida de un arreglo
- int A
- Declaración compatible con C
- int A
- En Java, la declaración de un arreglo es similar
a la declaración de un puntero en C - En Java int A
- En C int A
42Epílogo
- Errores típicos con arreglos
- int A10 // Ahí no va el tamaño!
- int A // Ok!
- A1 100 // Todavía no se ha pedido
- // espacio para el arreglo.
-
- Petición de espacio para un arreglo
- int A
- A new int50
- A1 100 // Correcto!
Aquí se determina el tamaño
43El método main()
- La clase que lo contiene conduce la aplicación
- Al ejecutar el programa se busca el método main
que contiene dicha clase - public class Echo
- public static void main (String args)
- for (int i 0 iltargs.lengthi)
- System.out.print(argsi )
-
-
- String args parámetros del programa que se
reciben desde el shell. - Ejemplo de invocación
- java Echo Hola mundo
- Puede haber más de un main, pero sólo se
ejecutará uno.
44Argumentos de entrada de un Programa
- Al ejecutar un programa desde el shell, el
usuario puede especificar argumentos, tal como - java Echo Hola que tal
- donde Echo es la clase principal (Echo.class).
- Los argumentos "Hola", "que" y "tal" se reciben
en un arreglo de strings en el main llamado args - public static void main(String args) cuerpo
del main - args0 es "Hola"
- args1 es "que"
- args2 es "tal"
45Clases en Java definición
- class nombre_de_clase extends nombre_de_superclas
e implements nombre_interface ... - type variable_de_instancia1
- type variable_de_instancia2
- type variable_de_instanciaN
- nombre_de_clase(lista de parámetros) //Método
de instanci o constructor - cuerpo_del_método
-
- type nombre_de_metodo1(lista de parámetros)
- cuerpo_del_método
-
- type nombre_de_metodo2(lista de parámetros)
- cuerpo_del_método
-
- ...
-
46Atributos
- Atributos de clase o variables de (la) clase
- Común a todas las instancias de una clase
(funcionan como variables globales). - No necesitan un objeto para examinarlas o
modificarlas. - Compartidas por todos los objetos de la misma
clase. - Sólo se inicializan una vez.
- Ej static public int nextCodigo
- Atributos de instancia o variables de instancia
- Determina el estado de los objetos.
- Cada objeto reserva memoria para todas las
variables de instancia. - Declaración
- accesostaticfinal tipo nombreAtributo
valor_inicial
47Inicialización de los atributos
- Si un atributo no se inicializa se le asigna un
valor por defecto en función de su tipo
48Control de acceso en Java
- public los miembros que se declaran como public
son accesibles en cualquier parte donde la clase
sea accesible. - protected miembros declarados como protected
sólo accesibles en la propia clase y por sus
clases descendientes. - private miembros declarados como private sólo
accesibles en la propia clase. - package no llevan modificador de acceso y son
accesibles y heredados por el código del mismo
paquete. - public class A
- public int at1
- private int at2
-
A a //creamos el objeto a.at1 6 //OK a.at2 5
//ERROR
49Métodos
- Código que entiende y manipula el estado de un
objeto. - Pueden ser llamados dentro de la clase o por
otras clases. - Es obligatorio indicar el tipo de retorno o void.
- Declaración
- accesostatic tipoRetorno nomMet
(argumentos) - //cuerpo del método
- return valor a retornar
-
- Invocación utilizando la notación (operador)
punto - objReceptor.nomMet(argumentos)
50Métodos Estáticos y variables estáticas
- Los métodos estáticos se invocan sobre la clase,
no sobre un objeto. - Este tipo de método sólo puede acceder a las
variables y métodos de clase (static). - Los métodos y variables de instancia estáticos
actúan con relación a la clase, y no con respecto
a cada una de las instancias de la clase. - Los métodos estáticos sólo pueden llamar a otros
métodos static directamente, y no se pueden
referir a this o a super. - El declarar una variable static es equivalente a
declararlas como variables globales, que son
accesibles desde cualquier fragmento de código.
Si se necesita realizar cálculos para inicializar
las variables static, se puede declarar un bloque
static que se ejecuta una sola vez cuando la
clase se carga por primera vez.
51Ejemplo con Métodos Estáticos
- class Punto extends FiguraGeometrica
- float x
- ...
- public static boolean sonIguales(Punto p,
Punto q) - return p.xq.x p.yq.y
-
-
- Cuidado!
- public static boolean sonIguales(Punto q)
- return xq.x yq.y
-
- Can't make a static reference to nonstatic
variable x in class Punto. - Las variables de instancia no pueden ser
accesadas desde métodos estáticos.
52Cómo se instancia una clase
- Al crear el primer objeto de la clase o al
utilizar el primer método o variable static, se
localiza la clase en el disco (archivo .class) y
se carga en memoria. - Se ejecutan los inicializadores static (sólo una
vez). - Para crear un nuevo objeto
- Se reserva la memoria.
- Las variables miembros reciben los valores por
defecto según el tipo de datos primitivo. - Se ejecutan los inicializadores explícitos o de
objeto. - Se ejecutan los constructores.
53Sobrecarga de métodos
- Java soporta sobrecarga de métodos
- El mismo nombre pero con diferente lista de
argumentos. - Devuelven siempre el mismo tipo.
- public class ListaEnteros
-
- public void add (int elem)
- public void add (int elem, int index)
54Paso de parámetros
- Los valores de los parámetros son copias de los
valores que especifica el que lo invoca. - Tipos primitivos no cambian.
- Los objetos pueden cambiar su estado ? se pasa
por valor la referencia. - Si se usa una variable de tipo primitivo como
argumento, el pasaje de parámetros se llama por
valor (se hace la copia del valor del argumento
actual de la invocación a la variable local
declarada como argumento). - Si el argumento es referencia a objeto (Clase) el
pasaje de parámetro se llama por referencia
(puntero a objeto), se copia el valor de la
referencia del argumento de la llamada actual a
la referencia del argumento del método.
55Constructores
- Método que tiene el mismo nombre que la clase.
- Una clase puede tener varios constructores que se
diferencian por el tipo y número de argumentos
(sobrecarga de métodos). - Se invoca automáticamente cada vez que se crea un
objeto de la clase. - No pueden especificar tipos ni valores de
retorno. - Permite sobrecarga para especificar formas
distintas de inicializar los objetos. - Si no se define, el compilador crea uno por
defecto sin argumentos que inicializa los
atributos a los valores por defecto. - El programador también puede definir un
constructor sin argumentos.
56Constructor de copia
- Su objetivo es crear una copia de un objeto.
- class Punto
-
- private float x, y
-
- Punto (Punto p) // Recibe como pámetro la
referencia de un - // objeto que ya existe.
- x p.x
- y p.y
-
-
- Ejemplo
- Punto pto new Punto(p)
57Creación de objetos
- La creación de un objeto se realiza en tres pasos
- Declaración, proporcionar un nombre a un puntero
- Punto miPunto (null)
- Instanciación, asignar memoria al objeto (en el
heap) - miPunto new Punto()
- Inicialización, opcionalmente se pueden
proporcionar valores iniciales a las variables de
instancia del objeto en la declaración o mediante
constructores.
Suponiendo que es local a un método
58Destrucción de Objetos
- En Java no existen los destructores de objetos
como C (nombreClase(), delete). - El sistema (JVM) se ocupa de liberar de forma
automática la memoria que ocupan los objetos que
han dejado de ser referenciado (ningún puntero
apunta a ellos). Esto se puede producir debido a - Porque al puntero se le ha asignado el valor
null. - Porque a ese puntero se le ha asignado la
referencia de un objeto diferente. - Java cuenta con un recoletor de basura (garbage
collector) para liberar de forma automática la
memoria. - No se sabe cuando se va a activar exactamente el
recolector de basura. - Se puede invocar explícitamente con System-gc(),
aunque esto es sólo una sugerencia que se envía a
la JVM.
59Ejemplo
- public class Grafica
- public static void main (String args)
- Punto miPunto new Punto()
-
- miPunto.Dibujar()
- miPunto.Mover(30,60)
- System.out.println(X miPunto.CoordX()
Y miPunto.CoordY() ) -
-
60Igualdad vs. Identidad
- Tener en cuenta que
- y ! compara punteros de manera que
- Punto p1 new Punto()
- Punto p2 new Punto()
- Si comparamos
- p1 p2 --gt false, luego p1 ! p2
- p1.equals(p2) --gt true compara el CONTENIDO de
los objetos.
61El puntero this itself
- Invocación a otro de los constructores de la
clase - public Punto (float x, float y)
- this.x x
- this.y y
-
-
- public Punto()
- this(0,0)
-
- Instancia actual
- Pasar el objeto actual como parámetro de otro
método - listaPunto.insertar(this)
- En cualquier método del objeto actual
- this.Mover(35,70)
62super
- Si se desea invocar al constructor de la
superclase se debe recurrir al método super. Por
ejemplo - class F extends Frame
- super(Este es un frame)
- ...
- ...
-
- Si se necesita llamar al método padre dentro de
una clase que ha reemplazado ese método, se puede
hacer referencia al método padre con la palabra
clave super - import MiClase
- public class MiNuevaClase extends MiClase
- public void Suma_a_i( int j )
- i i ( j/2 )
- super.Suma_a_i( j )
-
-
63Reglas de alcance
- Porción del programa en el que se puede hacer
referencia al identificador - Un identificador debe ser único dentro de su
ámbito - Alcance de Clase
- los métodos de una clase pueden modificar
directamente los atributos de clase y de
instancia - Un método de clase (static) sólo puede acceder a
atributos de clase. - Alcance de Bloque
- variables locales y parámetros de un método
- cuando se anidan los bloques y existen dos
identificadores con nombres iguales el compilador
da error de sintaxis (variable ya definida) - si una variable local tiene igual nombre que un
atributo de la clase éste queda oculto.
64Normas de estilo
- No es que existan reglas pero es conveniente
seguir unas normas para que el código sea mas
legible - Nombre de clase empieza por Mayúsculas.
- Nombre de métodos y atributos por minúsculas.
- Las constantes con MAYÚSCULAS completamente.
- Cuando empieza una nueva palabra la ponemos en
mayúsculas ej dibujarRectangulo
65Primer Ejemplo
66Ejemplo 1 Código fuente
- import java.awt.
- public class myGui extends Frame
- Button butQuit
- Label etiq
- TextArea area
- TextField texto
- Checkbox checkBox
- List listaItem
- Canvas canvas
- Panel panel
- public myGui()
- setLayout(new BorderLayout())
- // creando los widgets
- butQuit new Button("quit")
- butQuit.enable()
- etiq new Label("Hola Mundo, nuestro
primer ejemplo!", Label.CENTER) - area new TextArea(5, 20)
- texto new TextField(15)
listaItem new List(3) for (int i 1 i
lt 10 i) listaItem.addItem("Item
"i) canvas new MiCanvas() panel
new Panel() // El contenedor adicional
panel.setLayout(new FlowLayout()) // Se
construye el panel panel.add(texto)
panel.add(butQuit) panel.add(checkBox)
// Se construye la ventana add("North",
etiq) add("West", area) add("East",
listaItem) add("Center", canvas)
add("South", panel)
67Ejemplo 1 Código fuente (continuación)
public boolean action(Event evt, Object what)
if ( evt.target butQuit )
System.exit(0) return true
else if ( evt.target checkBox )
checkBox.disable() return true return
false //El método main. public static
void main(String args) // El main Frame
frame new myGui() frame.pack()//Ajusta
tamaño frame.show()//Lo hace visible
// La extension de Canvas class MiCanvas extends
Canvas public void paint(Graphics g)
g.setColor(Color.red) g.fillArc(30,30,size().
width/2,size().height/2,0,270) public
Dimension getMinimumSize() return new
Dimension(150,130) public Dimension
getPreferredSize() return
getMinimumSize()
68La Interfaz
Frame
North
Label
List
Canvas
TextArea
Center
West
East
Panel
TextField
South
Button
CheckBox