Está en la página 1de 43

Introduccin a Java

Cecilia Hernndez

Introduccin a Java

Lenguaje de Programacin Orientado a 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 codes Para que bytescodes puedan 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

Incluye J2SE Java 2 Standard Edition J2EE Java 2 Enterprise Edition Java ME Java APIs para desarrollo de aplicaciones en PDAs y celulares 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 Versin 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

Primer programa
public class Hello { public static void main(String[] args) { System.out.println("Hola, amigo!!"); } }

Compilador: javac : Traduce archivos .java en .class (bytecodes) Intrprete: java : dinmicamente ejecuta programa previa interpretacin de bytecode a cdigo de lenguaje de mquina Existen ambientes para la creacin, edicin, compilacin y ejecucin: Eclipse, NetBeans, DrJava, etc

Estructura de programas en Java

Cada programa ejecutable en java consiste en una clase Aplicacin


Al menos una de las clases debe contener el mtodo main Declaracin de mtodo main debe ser mtodo esttico
Metodo asociado a clase no objeto

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

Palabras claves tienen significado especial y no pueden usarse como identificadores de variables ni clases ni mtodos

Tipos de datos

Tipos primitivos

Tipos de datos simples definidos por el lenguaje de programacin


En Java son 8
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

Declaracin

public static final <type> <name> = <value> ;

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

Ciclos

for(), while(), do-while() If else switch (expresion){


case n: sentencias; case m: sentencias; default: sentencias; }

Condicionales

Objetos

Instancias de tipos de datos complejos llamados clases Entidad que contiene datos y comportamientos Existen variables, que almacenan datos dentro de un objeto Existen mtodos dentro de objeto que representan su comportamiento Creacin de objetos en Java mediante uso de keyboard new

Variables de referencia

Variables de tipos de objetos son llamadas referencias Referencias no almacenan objeto, sino que almacenan la direccin de una ubicacin en memoria del objeto 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 CuantaBanco { 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

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

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

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

Tales mtodos pueden ser declarados estticos: el mtodo no es parte de una instancia sino que de la clase Se invocan enviando mensaje a la clase 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

Modo texto-ms simple:

Usando System.out.print (ln)

E/S en java es poderosa, pero no tan simple.

Mirar http://java.sun.com/docs/books/tutorial /essential/io/index.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

Uno de los mayores beneficios de OO


Reconocer caractersticas comunes cuando se disea Como se capturan las caractersticas comunes en un diseo?
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

Relacin tiene-un/una. A esto se denomina Composicin


Ejemplo: Un auto tiene-un motor, 4 ruedas, un volante, etc La relacin en este caso es que un objeto tiene un componente que es otro objeto

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

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

Overloading

Varios mtodos definidos en una clase, todos con el mismo nombre, pero diferentes argumentos Usando herencia
Clase A superclase
Define mtodo dibujar()

Overriding

Clase B subclase
Redefine mtodo dibujar()

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

Hebras y Sincronizacin

Hebra

Una secuencia de sentencias de cdigo que puede estar en ejecucin concurrente con otras hebras Para crear hebras en Java
Crear una clase que implementa la Clase que implementa interface Runnable
Class A implements Runnable

Clase derivada de clase Thread


Class A extends Thread

Implementar el mtodo run con un loop que hace algo en un periodo de tiempo 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

join

Permite a una hebra esperar por la terminacin de otra Una hebra puede dormir por un tiempo dado
Mtodo esttico

sleep

Manejando hebras en Java 6

Soporte para aplicaciones concurrentes

Aplicacin crea y maneja hebras


Mediante uso de clase Thread o interface Runnable

Pasar tareas concurrentes a clase Executor


API para crear y manejar hebras Proporciona pool de hebras para aplicaciones de gran escala

Sincronizacin

Sincronizacin Keyword synchronized para indicar, bloque o mtodo sincronizado, slo una hebra puede ejecutarse dentro de bloque o mtodo sincronizado 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

Estructuras de datos accesadas atomicamente


Colas, listas, tablas hash, etc.

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()

Desde java 1.5 clase Condition (son variables de condicin)


await(), signal() y signalAll() son los principales mtodos disponibles

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(); } }

También podría gustarte