[go: up one dir, main page]

0% encontró este documento útil (0 votos)
17 vistas39 páginas

Lenguaje Java

Cargado por

Juan Carlos
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
17 vistas39 páginas

Lenguaje Java

Cargado por

Juan Carlos
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 39

Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Lenguaje Java

Sesión 1: Introducción al Lenguaje


Java

© 2012-2013 Depto. Ciencia de la Computación e IA


Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Índice
• Introducción a Java
• Conceptos de POO
• Elementos de un programa Java
• Herencia, interfaces, polimorfismo
• Hilos
• Clases útiles

Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 2


Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Java
• Java es un lenguaje OO creado por Sun
Microsystems para poder funcionar en distintos
tipos de procesadores y máquinas.
• Similar a C o C++, pero con algunas
características propias (gestión de hilos,
ejecución remota, etc)
• Independiente de la plataforma, gracias a la JVM
(Java Virtual Machine), que interpreta los ficheros
objeto
• Se dispone de antemano de la API (Application
Programming Interface) de clases de Java.
Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 3
Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Clases
• Clases: con la palabra class y el nombre de la clase
class MiClase
{
...
}

• Como nombre utilizaremos un sustantivo


• Puede estar formado por varias palabras
• Cada palabra comenzará con mayúscula, el resto se
dejará en minúscula
• Por ejemplo: DataInputStream
• Si la clase contiene un conjunto de métodos estáticos o
constantes relacionadas pondremos el nombre en plural
• Por ejemplo: Resources

Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 4


Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Campos y variables
• Campos y variables: simples o complejos
• Utilizaremos sustantivos como nombres

Properties propiedades;
File ficheroEntrada;
int numVidas;

• Puede estar formado por varias palabras, con la primera en minúsculas y


el resto comenzando por mayúsculas y el resto en minúsculas
• Por ejemplo: numVidas
• En caso de tratarse de una colección de elementos, utilizaremos plural
• Por ejemplo: clientes
• Para variables temporales podemos utilizar nombres cortos, como las
iniciales de la clase a la que pertenezca, o un carácter correspondiente al
tipo de dato
int i;
Vector v;
DataInputStream dis;

Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 5


Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Constantes
• Constantes: Se declarán como final y static

final static String TITULO_MENU = “Menu”;


final static int ANCHO_VENTANA = 640;
final static double PI = 3.1416;

• El nombre puede contener varias palabras


• Las palabras se separan con ‘_’
• Todo el nombre estará en mayúsculas
• Por ejemplo: MAX_MENSAJES

Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 6


Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Métodos
• Métodos: con el tipo devuelto, nombre y parámetros
void imprimir(String mensaje)
{
...// Codigo del método
}
Vector insertarVector(Object elemento, int posicion)
{
...// Codigo del método
}

• Los nombres de los métodos serán verbo


• Puede estar formados por varias palabras, con la primera
en minúsculas y el resto comenzando por mayúsculas y
el resto en minúsculas
• Por ejemplo: imprimirDatos
Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 7
Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Constructores
• Constructores: se llaman igual que la clase, y se
ejecutan con el operador new para reservar memoria
MiClase()
{
...// Codigo del constructor
}
MiClase(int valorA, Vector valorV)
{
...// Codigo del otro constructor
}
• No hace falta destructor, de eso se encarga el garbage
collector
• Constructor superclase: super(…)
Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 8
Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Paquetes
• Paquetes: organizan las clases en una jerarquía de
paquetes y subpaquetes
• Para indicar que una clase pertenece a un paquete o
subpaquete se utiliza la palabra package al principio de la
clase
package paquete1.subpaquete1;
class MiClase {

• Para utilizar clases de un paquete en otro, se colocan al


principio sentencias import con los paquetes necesarios:
package otropaquete;
import paquete1.subpaquete1.MiClase;
import java.util.*;
class MiOtraClase {

Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 9


Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Paquetes
• Si no utilizamos sentencias import, deberemos
escribir el nombre completo de cada clase del
paquete no importado (incluyendo subpaquetes)
class MiOtraClase {
paquete1.subpaquete1.MiClase a = ...; // Sin import
MiClase a = ...; // Con import

• Los paquetes se estructuran en directorios en el


disco duro, siguiendo la misma jerarquía de
paquetes y subpaquetes
./paquete1/subpaquete1/MiClase.java

Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 10


Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Paquetes
• Siempre se deben incluir las clases creadas en
un paquete
• Si no se especifica un nombre de paquete la clase
pertenecerá a un paquete “sin nombre”
• No podemos importar clases de paquetes “sin
nombre”, las clases creadas de esta forma no serán
accesibles desde otros paquetes
• Sólo utilizaremos paquetes “sin nombre” para hacer
una prueba rápida, nunca en otro caso

Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 11


Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Convenciones de paquetes
• El nombre de un paquete deberá constar de una serie
de palabras simples siempre en minúsculas
• Se recomienda usar el nombre de nuestra DNS al revés
especialistajee.org  org.especialistajee.prueba
• Colocar las clases interdependientes, o que suelan
usarse juntas, en un mismo paquete
• Separar clases volátiles y estables en paquetes
diferentes
• Hacer que un paquete sólo dependa de paquetes más
estables que él
• Si creamos una nueva versión de un paquete, daremos
el mismo nombre a la nueva versión sólo si es
compatible con la anterior
Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 12
Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Tipo enumerado
enum EstadoCivil {soltero, casado, divorciado};

EstadoCivil ec = EstadoCivil.casado;
ec = EstadoCivil.soltero;

switch(ec) {
case soltero:
System.out.println("Es soltero"); break;
case casado:
System.out.println("Es casado"); break;
case divorciado:
System.out.println("Es divorciado"); break;
}
Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 13
Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Otras características
• Imports estáticos
import static java.lang.Math;

double raiz = sqrt(1252.2);

• Argumentos variables
public void miFunc(String param, int... args) {
for(int i: args) { … }
}

• Anotaciones (metainformación)
• P.ej., @deprecated
Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 14
Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Convenciones generales
• Indentar el código uniformemente
• Limitar la anchura de las líneas de código (para impresión)
• Utilizar líneas en blanco para separar bloques de código
• Utilizar espacios para separar ciertos elementos en una
línea
• Documentación:
• Utilizar /*... */ para esconder código sin borrarlo
• Utilizar // ... para detalles de la implementación
• Utilizar javadoc para describir la interfaz de
programación

Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 15


Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Modificadores de acceso
• Las clases y sus elementos admiten unos
modificadores de acceso:
• privado: el elemento es accesible sólo desde la
clase en que se encuentra
• protegido: el elemento es accesible desde la propia
clase, desde sus subclases, y desde clases del
mismo paquete
• público: el elemento es accesible desde cualquier
clase
• paquete: el elemento es accesible desde la propia
clase, o desde clases del mismo paquete.
Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 16
Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Modificadores de acceso
• private se utiliza para elementos PRIVADOS
• protected se utiliza para elementos
PROTEGIDOS
• public se utiliza para elementos PUBLICOS
• No se especifica nada para elementos PAQUETE
public class MiClase {
private int n;
protected void metodo() { ... }

• Todo fichero Java debe tener una y solo una


clase pública, llamada igual que el fichero (más
otras clases internas que pueda tener)
Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 17
Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Modificadores de acceso

La misma Cualquier Subclase de Cualquier


clase clase del otro paquete clase de otro
mismo paquete
paquete
public
sí sí sí sí
protected
sí sí sí

default
sí sí sí

private

Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 18


Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Otros modificadores
• abstract: para definir clases y métodos abstractos
• static: para definir elementos compartidos por todos los
objetos que se creen de la misma clase
• miembros que no pertenecen al objeto en si, sino a la clase
• dentro de un método estático sólo podemos utilizar elementos
estáticos, o elementos que hayamos creado dentro del propio
método
• final: para definir elementos no modificables ni heredables

public abstract class MiClase {


public static final int n = 20;
public abstract void metodo();
...

Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 19


Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Otros modificadores
• volatile y synchronized: para elementos a los que no se
puede acceder al mismo tiempo desde distintos hilos de
ejecución
– volatile no proporciona atomicidad pero es más eficiente
volatile int contador;
contador++; //puede causar problemas, son 3 operaciones
diferentes
– synchronized se usa sobre bloques de código y métodos
synchronized(this){
contador++;
}

Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 20


Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Otros modificadores
• native: para métodos que están escritos en otro lenguaje,
por ejemplo en C++, utilizando JNI (Java Native Interface)
• transient: para atributos que no forman parte de la
persistencia de objeto, para evitar que se serialicen
• strictfp: evitar que se utilice toda la precisión de punto
flotante que proporcione la arquitectura. Usar el estándar
del IEEE para float y double. No es aconsejable a menos
que sea necesario.

Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 21


Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Herencia y polimorfismo
• Herencia: definir una clase a partir de otra existente
• La nueva clase “hereda” todos los campos y métodos
de la clase a partir de la que se crea, y aparte puede
tener los suyos propios
• Ejemplo: a partir de una clase Animal podemos definir
otras más concretas como Pato, Elefante…
• Polimorfismo: si tenemos un método en cualquier clase
que sea dibuja (Animal a), podemos pasarle como
parámetro tanto un objeto Animal como cualquier subtipo
que herede directa o indirectamente de él (Elefante,
Pato…)

Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 22


Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Clases abstractas e interfaces


• Una clase abstracta es una clase que deja algunos métodos sin código,
para que los rellenen las subclases que hereden de ella
public abstract class MiClase {
public abstract void metodo1();
public void metodo2() {
...
}
}

• Un interfaz es un elemento que sólo define la cabecera de sus


métodos, para que las clases que implementen dicha interfaz rellenen
el código según sus necesidades.
public interface Runnable {
public void run();
}
• Asignaremos un nombre a los interfaces de forma similar a las clases,
pudiendo ser en este caso adjetivos o sustantivos.
Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 23
Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Herencia e interfaces
• Herencia
• Definimos una clase a partir de otra que ya existe
• Utilizamos la palabra extends para decir que una clase hereda de
otra (Pato hereda de Animal):
class Pato extends Animal
• Relación “es”: Un pato ES un animal
• Interfaces
• Utilizamos la palabra implements para decir que una clase
implementa los métodos de una interfaz
class MiHilo implements Runnable {
public void run() {
... // Codigo del método
}

• Relación “actúa como”: MiHilo ACTÚA COMO ejecutable


Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 24
Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Polimorfismo
• Si una variable es del tipo de la superclase, podemos
asignarle también un objeto de la clase hija
Animal a = new Pato();

• Si una variable es del tipo de una interfaz implementada


por nuestra clase, podemos asignarle también un objeto de
esta clase
Runnable r = new MiHilo();

• Sólo se puede heredar de una clase, pero se pueden


implementar múltiples interfaces:
class Pato extends Animal implements Runnable, ActionListener

Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 25


Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Punteros this y super


• this se utiliza para hacer referencia a los
elementos de la propia clase:
class MiClase {
int i;
MiClase(int i) {
this.i = i; // i de la clase = i del parámetro

• super se utiliza para llamar al mismo método en la


superclase:
class MiClase extends OtraClase{
MiClase(int i) {
super(i); // Constructor de OtraClase(...)

Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 26


Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Object
• Clase base de todas las demás
• Todas las clases heredan en última instancia de ella

• Es importante saber las dependencias


(herencias, interfaces, etc) de una clase para
saber las diferentes formas de instanciarla o
referenciarla (polimorfismo)

Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 27


Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Ejemplo de polimorfismo
• Por ejemplo, si tenemos:
public class MiClase extends Thread
implements List

• Podremos referenciar un objeto MiClase de


estas formas:
MiClase mc = new MiClase();
Thread t = new MiClase();
List l = new MiClase();
Object o = new MiClase();

Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 28


Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Object: objetos diferentes


• También es importante distinguir entre entidades
independientes y referencias:
MiClase mc1 = new MiClase();
MiClase mc2 = mc1;
// Es distinto a:
MiClase mc2 = (MiClase)(mc1.clone());
• El método clone de cada objeto sirve para
obtener una copia en memoria de un objeto con
los mismos datos, pero con su propio espacio
• No realiza una copia en profundidad
• Si queremos hacer copias de los objetos que tenga
como campos debe sobrescribir este método

Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 29


Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Object: comparar objetos


• Cuando queremos comparar dos objetos entre sí
(por ejemplo, de la clase MiClase), no se hace
así: if (mc1 == mc2)
• Sino con su método equals: if (mc1.equals(mc2))

• Deberemos redefinir este método en las clases


donde lo vayamos a usar, para asegurarnos de
que los objetos se comparan bien
• Notar que la clase String, es un subtipo de Object por
lo que para comparar cadenas...:
if (cadena == “Hola”) ... // NO
if (cadena.equals(“Hola”)) ... // SI

Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 30


Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Object: representar en cadenas


• Muchas veces queremos imprimir un objeto como
cadena. Por ejemplo, si es un punto geométrico, sacar su
coordenada X, una coma, y su coordenada Y
• La clase Object proporciona un método toString para
definir cómo queremos que se imprima un objeto.
Podremos redefinirlo a nuestro gusto
public class Punto2D {
...
public String toString()
{
return “(“ + x + ”,” + y + ”)”;
}
}
...
Punto2D p = ...;
System.out.println(p); // Imprimirá (x, y) del punto

Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 31


Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Properties
• Esta clase es un tipo de tabla hash que almacena
una serie de propiedades, cada una con un valor
asociado
• Además, permite cargarlas o guardarlas en algún
dispositivo (fichero)
• Algunos métodos interesantes:
Object setProperty(Object clave, Object valor)
Object getProperty(Object clave)
Object getProperty(Object clave, Object default)

void load(InputStream entrada)


void store(OutputStream salida, String cabecera)

Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 32


Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

System
• Ofrece métodos y campos útiles del sistema,
como el ya conocido System.out.println
• Otros métodos interesantes de esta clase (todos
estáticos):

void exit(int estado)


void gc()
long currentTimeMillis()
void arrayCopy(Object fuente, int pos_fuente,
Object destino, int pos_destino,
int numElementos)

Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 33


Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Otras clases

• La clase Math proporciona una serie de métodos


(estáticos) útiles para diferentes operaciones
matemáticas (logaritmos, potencias,
exponenciales, máximos, mínimos, etc)
• Otras clases útiles son la clase Calendar (para
trabajar con fechas y horas), la clase Currency
(para monedas), y la clase Locale (para situarnos
en las características de fecha, hora y moneda
de una región del mundo)

Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 34


Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Transfer Objects
• Encapsulan datos con los que normalmente se
trabaja de forma conjunta
• Nos permiten transferir estos datos entre las
diferentes capas de la aplicación

public class Usuario {


private String login;
private String password;
private boolean administrador;
}

Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 35


Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Getters y Setters
• Es buena práctica de programación declarar todos
los campos de las clases privados
• Para acceder a ellos utilizaremos métodos
• Getters para obtener el valor del campo
• Setters para modificar el valor del campo
• Estos métodos tendrán prefijo get y set
respectivamente, seguido del nombre del campo al
que acceden, pero comenzando por mayúscula
• Por ejemplo: getLogin(), setLogin(String login)
• El getter para campos booleanos tendrá prefijo is
en lugar de get
• Por ejemplo: isAdministrador()
Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 36
Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

BeanUtils

• Utilidades de la biblioteca commons-beanutils de


Apache.
• BeanUtils.copyProperties(objDestino, objOrigen)
• Copia los campos comunes entre los dos objetos
• Los reconoce usando la API de Reflection
• La identificación está basada en los nombres de
los getters y los setters y en su tipo de dato.
• Ejemplo: int origen.getNombreCampo( ), e
void destino.setNombreCampo(int n).

Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 37


Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

BeanUtils public class Punto2D {


private int x;
private int y;
private String descripcion;

public String getDescripcion() {

• Ejemplo: proyección de un
return descripcion;
}
public void setDescripcion(String descripcion) {

punto3D en un punto2D.
this.descripcion = descripcion;
}
public int getX() {
return x;

• En lugar de copiar todos los


}
public void setX(int x) {
this.x = x;

campos uno a uno:


}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
punto2D.setX(punto3D.getX()); }
punto2D.setY(punto3D.getY());
punto2D.setDescripcion(punto3D.getDescripcion());
public class Punto3D {

• usamos copyProperties:
private int x;
private int y;
private int z;
private String descripcion;
/* ...y los getters y setters para los cuatro campos */
}

BeanUtils.copyProperties(punto2D, punto3D);

Java © 2012-2013 Depto. Ciencia de la Computación e IA Lenguaje Java 38


Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

¿Preguntas...?

© 2012-2013 Depto. Ciencia de la Computación e IA

También podría gustarte