Sunteți pe pagina 1din 48

Introduccin a Java

Lenguaje Hibrido (Tipos primitivos y objetos) Caractersticas  Independiente de la plataforma


Compilador no genera cdigo ejecutable nativo a la mquina donde se ejecuta Compilador produce un formato especial llamado byte code Para que el bytescode pueda ejecutarse en una mquina especfica se necesita un intrprete en tiempo de ejecucin. El intrprete es el que genera cdigo de lenguaje de mquina entendido por la mquina Ambiente de ejecucin normalmente se conoce como Java Virtual Machine (JVM)


Recolector de basura
Memoria es liberada automticamente cuando JMV lo determina

Plataforma Java

y Incluye y J2SE Java 2 Standard Edition y J2EE Java 2 Enterprise Edition y Java ME Java APIs para desarrollo de aplicaciones en PDAs y celulares y Compilador Just in time. En lugar de interpretar una instruccin a la vez, interpreta el bytecode completo a cdigo nativo en mquina cuando se carga en MV y Versin y Version actual de Java es normalmente referida a 1.6 o 6.0

Java

Documentacin


http://java.sun.com/developer/onlineTrainin g/
Tutorial J2SE JDK http://java.sun.com/docs/books/tutorial/index.html

Especificacin de API de Java Standard Edition 6.0




http://java.sun.com/javase/6/docs/api/

Programando en Java
y Primer programa
public class Hello { public static void main(String[] args) { System.out.println("Hola mundo"); } }

y Compilador: javac : Traduce archivos .java en .class (bytecodes) y Intrprete: java : dinmicamente ejecuta programa previa

interpretacin de bytecode a cdigo de lenguaje de mquina y Existen ambientes para la creacin, edicin, compilacin y ejecucin: Eclipse, NetBeans, DrJava, etc

Estructura de programas en Java


y Cada programa ejecutable en java consiste en

una clase y Aplicacin


y Declaracin de mtodo main debe ser mtodo

esttico
y

Metodo asociado a clase no objeto

y Declaracin public, cualquiera puede invocarlo

Palabras clave en Java


abstract boolean break byte case catch char class const continue default do double else extends final finally float for goto if implements import instanceof int interface long native new package private this protected throw public throws return transient short try static void strictfp volatile super while switch synchronized

y Palabras claves tienen significado especial y

no pueden usarse como identificadores de variables ni clases ni mtodos

Tipos de datos

y Tipos primitivos y Tipos de datos simples definidos por el lenguaje de programacin


y

En Java son 8 y boolean (true o false), char (16 bits set caracteres unicode), byte (8 bits con signo), short (16 bits), int (32 bits), long (64 bits), float (32 bits punto flotante), double (64 bits punto flotante) Tipos no primitivos se conocen como Tipos Objetos

Constantes
y Declaracin y public static final <type> <name> = <value> ; y Ejemplos
public static final int DAYS_IN_WEEK = 7; public static final double INTEREST_RATE = 3.5; public static final int SSN = 658234569;

Control de flujo
y Ciclos y for(), while(), do-while() y Condicionales y If else y switch (expresion){
case n: sentencias; case m: sentencias; default: sentencias; }

Objetos
y Instancias de tipos de datos complejos llamados clases y Entidad que contiene datos y comportamientos y Existen variables, que almacenan datos dentro de un

objeto y Existen mtodos dentro de objeto que representan su comportamiento y Creacin de objetos en Java mediante uso de la palabra reservada new

Variables de referencia
y Variables de tipos de objetos son llamadas referencias y Referencias no almacenan objeto, sino que almacenan

la direccin de una ubicacin en memoria del objeto y Si uno asigna una referencia a otra para referirse al mismo objeto, el objeto no es copiado. Las dos referencias comparten el mismo objeto. Llamando un mtodo en cualquiera de las dos variables modificar el mismo objeto

Variables estticas static


Variables estticas
Tambin se les conoce como class variables Variables que se asocian a clase no a objeto Variable comn a todos los objetos (variables compartidas entre todos los objetos de la clase) Se define como variable de clase con la palabra clave static Ejemplo : Identificador de cuenta de CuentaBanco. Un nmero que identifique nicamente a dueo de cuenta.

Ejemplo variables estticas


public class CuentaBanco { private String nombre; private int balance; private int Id; private static int proxIdDisponible = 1; /** Constructor, establece nombre dueo y balance inicial de la cuenta */ public CuentaBanco(String nombre, int balance){ this.nombre = nombre; this.balance = balance; this.Id = proxIdDisponible; proxIdDisponible++; }

Mtodos estticos
y

y Algunos mtodos no estn asociados, en forma natural, con objetos particulares


Ejemplo, mtodos en clase Math, sqrt, sin, cos, tan

y Tambin podra darse el caso que nos gustara llamar un mtodos antes de crear un objeto
y

Tales mtodos pueden ser declarados estticos: el mtodo no es parte de una instancia sino que de la clase y Se invocan enviando mensaje a la clase y No puede accesar referencia this o cualquier variable o mtodo dentro de un mtodo esttico dado que no est asociado a un objeto

Entrada de datos

Grfico. Usar un mtodo esttico showInputDialog de la clase JOptionPane




Mtodo despliega un dialog y retorna un string ingresado por usuario o nulo si entrada se cancela
Si se desea un entero o real como entrada debe convertirse con Integer.parseInt o Double.parseDouble String input = JOptionPane.showInputDialog(Ingrese su edad); If(input != null) edad = Integer.parseInt(input);

Texto: Usando System.in (solo lee bytes)




Para leer por caracteres usar InputStreamReader


InputStreamReader reader = new InputStreamReader(System.in); // no lee por string, solo caracteres Para leer por lneas usar BufferedReader texto = new BufferedReader(new InputStreamReader(System.in)); Ejemplo
System.out.println(Ingrese su edad): String input = texto.readLine(); Int edad = Interger.parseInt(input);

Salida de datos
y Modo texto-ms simple: y Usando System.out.print (ln) y E/S en java es poderosa, pero no tan simple. y Mirar http://java.sun.com/docs/books/tutorial/essential/io/in dex.html

Strings

Secuencias de caracteres Unicode




String bienvenida = Hola

Strings no inmutables. Una vez creados no se pueden modificar. Si se necesitan strings que se pueden modificar usar clase StringBuffer
  

Clase no contiene mtodos de set Algunos mtodos definidos en String


charAt, length, substring, equal

Para analizar strings se puede usar clase StringTokenizer


String frutas = uvas, manzanas, peras StringTokenizer tokenizer = new StringTokenizer(frutas, ,); while (tokenizer.hasMoreElements()){
String fruta = new String(tokenizer.nextToken());

Clases

Concretas
Todos sus mtodos definidos  Instanciables  Pueden ser superclases


Abstractas
Al menos uno de sus mtodos no definidos  No instanciables  Pueden ser superclases  Proporcionan implementacin parcial


Interfaces

Como contrato entre clases y ambiente




Cuando una clase implementa una interfaz promete que implementa comportamientos definidos en interfaz

Como clases abstractas, pero slo permiten declaracin de mtodos sin su implementacin


Definen conjunto de mtodos que son tiles en varias clases

No instanciables Una clase puede implementar cualquier nmero de interfaces




Debe implementar todos los mtodos de las interfaces

Un dato puede definirse con tipo de interface Interaces de java importantes




Runnable, collection, iterator, Comparable

Diseando con clases


y Uno de los mayores beneficios de OO y Reconocer caractersticas comunes cuando se disea y Como se capturan las caractersticas comunes en un diseo?
y

Se quiere definir/describir (estas caractersticas) solo una vez, sin repetirlas en cada clase Como se relacionan distintas clases con partes comunes del diseo ?

Relaciones entre clases


y Relacin tiene-un/una . A esto se denomina Composicin
Ejemplo: Un auto tiene-un motor, 4 ruedas, un volante, etc y La relacin en este caso es que un objeto tiene un componente que es otro objeto
y

y Relacin es un/una En este caso, una clase define comportamiento general y clases especficas definen comportamiento especfico
y

Ejemplo: Persona, estudiante, profesor. Estudiante es una persona

Herencia

Superclases
 

Cada clase es un tipo especial de su superclase Referencias this (a la de objeto actual) super (referencia a superclase) Una clase slo puede ser derivada de una superclase Una clase A extends B.
B es superclase de A o A es clase derivada de B

Herencia Simple en clases


 

Herencia Mltiple mediante interfaces




Interfaces como clases abstractas


public class abstract A
abstract void metodo();

Definen mtodos cuya implementacin es proporcionada por clases que implementan interface public interface X { } Public interface Y{ }


Una clase puede implementar mltiples interfaces


class A implements X, Y

Una clase puede derivar de una clase e implementar mltiples interfaces




class A extends B implements X,Y

Overloading y Overriding
y Overloading
y Varios mtodos definidos en una clase, todos con

el mismo nombre, pero diferentes argumentos

y Overriding
y Usando herencia y Clase A superclase
y

Define mtodo dibujar() Redefine mtodo dibujar()

Clase B subclase
y

Excepciones

Cualquier cosa que no funcione bien que podra resultar en una excepcin


Exception es una clase con muchas subclases que permiter capturar diferentes tipos de problemas Usar try y catch para capturar excepciones
try { // sentencias de cdigo que pueden arrojar excepciones, ejemplo divisin por cero } catch (ArithmeticException e) { // codigo que atiende division por cero }

Throws vs throw
throw :
Un objeto puede detectar una excepcin y enviarla como respuesta al mensaje.

throws :
public Object clone() throws CloneNotSupportedException {

Indica que mtodo puede (es posible) enviar excepcion CloneNotSupported. Debe incluirse la lista de excepciones que mtodo podra enviar. Chequeado por compilador

Algunas excepciones java estndar


IllegalArgumentException  Valor de parmetro es inapropiado NullPointerException  El valor del parmetro es null, cuando no debera IndexOutOfBoundsException  Arreglo o lista esta fuera de rango FileNotFoundException  No encuentra archivo InterruptedException  Se produce una excepcin por interrupcin IOException  Excepciones producidas en E/S

Paquetes

Clases de java se pueden agrupar en paquetes.  Nombres de paquetes separados por . Como  java.io.* // clases de E/S y archivos  java.util.* // contenedores, date/time,  java.lang.* //clases bsicas de java, importadas automticamente
Math, Integer, Double, System, Thread, String, etc
 

javax.swing.* // clases soporte grfico java.net.* // clases soporte comm en red, sockets, URLs

Para garantizar nombres de paquetes nicos Sun recomienda dar nombres en sentido inverso a dominios en urls  Los archivos de paquetes creados deben seguir jerarqua de directorios dados en secuencia dada en nombre paquete  cl.udec.inf.sc.pedro : Clases definidas en pedro debe estar en directorio cl/udec/inf/sc/pedro

Importando paquetes

Para importar paquetes de clases ya definidos usar import Ejemplos  import java.util.* // incluye un conjunto de contenedores definidos en java como ArrayLists, Vectors, HashMaps, Lists, etc  import java.io.* // incluye clases de clases para entrada/salida  import java.lang.* // import no necesario Si nombre de clase en un paquete es igual a otra en otro paquete y ambos son importados, de debe usar el nombre de paquete con clase. Ejemplo  java.util.Date y java.sql.Date

Creando paquetes

Para poner una clase en un paquete se agrega la sentencia de package nombre paquete

package cl.udec.inf.pedro; public class Cuenta{ } Cuando la sentencia package no se agrega la clase pertenece al paquete por defecto

Implementaciones de Colecciones en Java


ArrayList implementa List (usando arreglos) LinkedList implementa List (usando listas enlazadas) HashSet implementa Set (usando tablas hash) TreeSet implementa Set (usando rboles) HashMap implementa Map (usando tablas hash) TreeMap implementa Map (usando rboles)

Arrays, ArrayLists, Vectors


Arrays pueden contener datos primitivos u objetos mientras que ArrayLists slo objetos Arrays son de tamao fijo, mientras que ArrayLists crecen dinmicamente


ArrayLists en Java 6.0


Como templates en C++ Tipo de objeto especificado en momento de creacin de ArrayList
ArrayList<String> vec1 = new ArrayList<String>(); ArrayList<String> vec2 = new ArrayList<String>(10);

Algunos mtodos comunes Add, remove, size, get, contains, indexOf, isEmpty, etc
 

Ventaja de ArrayList
No se necesita saber tamao a priori

Desventaja
No se puede ocupar la notacin [] para obtener elementos

Vectors


Similar a ArrayLists
Mtodos de acceso sincronizados, luego ms lento Se puede usar notacin [] directamente, adems de una serie de otros mtodos

LinkedLists


Lento acceso itemes individuales, rpido al agregar

Hilos y Sincronizacin
y Hilo y Una secuencia de sentencias de cdigo que puede estar en ejecucin concurrente con otros hilos y Para crear hilos en Java
y y y y y y

Crear una clase que implementa la Clase que implementa interface Runnable
y

Class A implements Runnable Class A extends Thread

Clase derivada de clase Thread


y

Implementar el mtodo run con un loop que ejecute el codigo concurrente deseado. Crear una instancia de clase A Invocar operacin start, la que llama a mtodo run

Creando hebras
/** Opcin 1 */ import java.lang.*; public class A extends Thread { private: public A(){ } public void run() { .... } public static void main(String[] args){ A thread1 = new A(); thread1.start(); } } /** Opcin 2 */ import java.lang.*; public class B implements Runnable { private: public B(){ } public void run() { .... } public static void main(String[] args){ B b = new B(); Thread thread1 = new Thread(b); thread1.start(); } }

Otras operaciones sobre hebras


y join y Permite a una hebra esperar por la terminacin de otra y sleep y Una hebra puede dormir por un tiempo dado
y

Mtodo esttico

Manejando hebras en Java 6


y Soporte para aplicaciones concurrentes y Aplicacin crea y maneja hebras
y

Mediante uso de clase Thread o interface Runnable

y Pasar tareas concurrentes a clase Executor y API para crear y manejar hebras y Proporciona pool de hebras para aplicaciones de gran escala

Sincronizacin

Paquete java.util.concurrent  Operaciones atmicas: (concurrent.atomic)


Acciones atmicas sobre variables voltiles Variable volatile utilizada para decir a compilador que variable puede ser modificada por mltiples hebras y se necesita ltimo valor almacenado (se almacena en memoria principal)


Estructuras de datos accesadas atomicamente


Colas, listas, tablas hash, etc.

Sincronizacin (2)

Paquete java.util.concurrent  Locks


Hasta java 1.4 cada objeto tiene un lock asociado Desde java 1.5 construcciones de locks para locks, LectoresEscritores y locks reentrantes


Semforos
Desde java 1.5 http://java.sun.com/javase/6/docs/api/

Monitores
Usar keyword synchronized para exclusin mutua en mtodos Hasta java 1.4 slo soportaba una variable de condicin por objeto
wait() y notifyAll() como acciones en variable de condicin (En Java, nica por objeto) Monitor tipo Mesa luego, wait() debe ser encerrado en ciclo while() await(), signal() y signalAll() son los principales mtodos disponibles

Desde java 1.5 clase Condition (son variables de condicin)

Sincronizacin (2)
VOL TILE NCH ONIZED y Volatile es, j to con sync ronize , no de los

ecanis os

de sincronizaci n bsicos de Java. y e tiliza este odificador sobre los atributos de los objetos ara indicar al compilador ue es posible ue dic o atributo vaya a ser modificado por varios t reads de forma simultanea y asncrona, y ue no ueremos uardar una copia local del valor para cada t read a modo de cac , sino ue ueremos ue los valores de todos los t reads estn sincronizados en todo momento, ase urando as la visibilidad del valor actualizado a costa de un pe ue o impacto en el rendimiento.

Sincronizacin (2)
volatile int contador; public void aumentar() { contador++; }

En caso de que necesitemos atomicidad podemos recurrir a synchronized o a cosas ms avanzadas, como las clases del API java.util.concurrent de Java 5. synchronized se diferencia de volatile entre otras cosas en que este modificador se utiliza sobre bloques de cdigo y mtodos, y no sobre variables. Al utilizarsynchronized sobre un bloque se aade entre parntesis una referencia a un objeto que utilizaremos a modo de lock. int contador; public void aumentar() { synchronized(this) { contador++; } } int contador; public void synchronized aumentar() { contador++; } }

Sincronizacin (2) (volatile)


public class StoppableTask extends Thread { private volatile boolean pleaseStop; public void run() { while (!pleaseStop) { // hacer algo . } } public void tellMeToStop() { pleaseStop = true; } }

Sincronizacin (2) (volatile)

Tcnica sync ronized

volatile

Ventajas Desventajas Memoria de trabajo es limina la concurrencia. reconciliada con la memoria principal cuando se obtiene el bloqueo. Permite concurrencia. Memoria de trabajo es reconciliada con la memoria principal en cada acceso a memoria.

Ejemplo Productor-Consumidor con semforos import java.util.concurrent.Semaphore;


public class QueuePC { private int size; private Object[] queue; private int inptr = 0; private int outptr = 0; private int count = 0; private Semaphore vacios; private Semaphore llenos; private Semaphore mutex; public QueuePC(Integer size) { this.size = size.intValue(); queue = new Object[size]; vacios = new Semaphore(size, true); llenos = new Semaphore(0, true); mutex = new Semaphore(1, true); }

Productor consumidor Semforos


public void put(Object value) throws InterruptedException { vacios.acquireUninterruptibly();// WAIT() mutex.acquireUninterruptibly(); queue[inptr] = value; System.out.println("P : " + count); inptr = (inptr + 1) % size; count++; mutex.release();// SIGNAL() llenos.release(); }

Productor consumidor Semforos


public Object get() throws InterruptedException { Object value; llenos.acquireUninterruptibly(); mutex.acquireUninterruptibly(); value = queue[outptr]; outptr = (outptr + 1) % size; count--; System.out.println("C : " + count); mutex.release(); vacios.release(); return value; }

Productor consumidor Semforos


public class Producer extends Thread { private QueuePC buf; private int id; private static int number=0; public Producer(QueuePC buf, Integer id) { this.buf = buf; this.id = id.intValue(); this.setName(new String(id.toString())); } public void run() { for (int i = 1; i <= 50; i++) { try { System.out.println("Produciendo item : " + i); buf.put(new Integer(number++)); } catch (InterruptedException e) { System.out.println("Error al producir : " + e.getMessage()); } } } }

Productor consumidor Semforos


public class Consumer extends Thread { private QueuePC buf; private int id; public Consumer(QueuePC buf, Integer id) { this.buf = buf; this.id = id.intValue(); this.setName(new String(id.toString())); } public void run() { for (int i = 1; i <= 50; i++) { try { Object j = buf.get(); System.out.println("\tConsumiendo : " + j.toString()); } catch (InterruptedException e) { System.out.println("Error al consumir : " + e.getMessage()); } } } }

Productor consumidor Semforos


import java.util.*; /** Clase que define test de prueba para Problema ProductorConsumidor usando semaforos */ public class TestSemPC { public static void main(String[] args){ QueuePC queue = new QueuePC(new Integer(1)); Producer prod1 = new Producer(queue, new Integer(1)); Consumer cons1 = new Consumer(queue, new Integer(1)); Producer prod2 = new Producer(queue, new Integer(2)); Consumer cons2 = new Consumer(queue, new Integer(2)); Producer prod3 = new Producer(queue, new Integer(3)); prod1.start(); prod2.start(); prod3.start(); cons1.start(); cons2.start(); } }

S-ar putea să vă placă și