IntroJava.ppt

download IntroJava.ppt

of 43

Transcript of IntroJava.ppt

  • Introduccin a JavaCecilia Hernndez2007

  • Introduccin a JavaLenguaje de Programacin Orientado a ObjetosCaractersticasIndependiente de la plataformaCompilador no genera cdigo ejecutable nativo a la mquina donde se ejecutaCompilador produce un formato especial llamado byte codesPara 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 mquinaAmbiente de ejecucin normalmente se conoce como Java Virtual Machine (JVM)Recolector de basuraMemoria es liberada automticamente cuando JMV lo determina

  • Plataforma JavaIncluyeJ2SE Java 2 Standard EditionJ2EE Java 2 Enterprise EditionJava ME Java APIs para desarrollo de aplicaciones en PDAs y celularesCompilador 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 MVVersinVersion actual de Java es normalmente referida a 1.6 o 6.0

  • Documentacinhttp://java.sun.com/developer/onlineTraining/Tutorial J2SE JDK http://java.sun.com/docs/books/tutorial/index.htmlEspecificacin de API de Java Standard Edition 6.0http://java.sun.com/javase/6/docs/api/

    Java

  • Programando en JavaPrimer programa

    Compilador: javac : Traduce archivos .java en .class (bytecodes)Intrprete: java : dinmicamente ejecuta programa previa interpretacin de bytecode a cdigo de lenguaje de mquinaExisten ambientes para la creacin, edicin, compilacin y ejecucin: Eclipse, NetBeans, DrJava, etcpublic class Hello { public static void main(String[] args) { System.out.println("Hola, amigo!!"); }}

  • Estructura de programas en JavaCada programa ejecutable en java consiste en una claseAplicacinAl menos una de las clases debe contener el mtodo mainDeclaracin de mtodo main debe ser mtodo estticoMetodo asociado a clase no objeto Declaracin public, cualquiera puede invocarlo

  • Palabras clave en Java Palabras claves tienen significado especial y no pueden usarse como identificadores de variables ni clases ni mtodos abstract default if private this boolean do implements protected throw break double import public throws byte else instanceof return transient case extends int short try catch final interface static void char finally long strictfp volatile class float native super while const for new switch continue goto package synchronized

  • Tipos de datosTipos primitivosTipos de datos simples definidos por el lenguaje de programacinEn Java son 8boolean (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

  • ConstantesDeclaracinpublic static final = ;Ejemplospublic static final int DAYS_IN_WEEK = 7;public static final double INTEREST_RATE = 3.5;public static final int SSN = 658234569;

  • Control de flujoCiclosfor(), while(), do-while()CondicionalesIf elseswitch (expresion){case n: sentencias;case m: sentencias;default: sentencias;}

  • ObjetosInstancias de tipos de datos complejos llamados clasesEntidad que contiene datos y comportamientosExisten variables, que almacenan datos dentro de un objetoExisten mtodos dentro de objeto que representan su comportamientoCreacin de objetos en Java mediante uso de keyboard new

  • Variables de referenciaVariables de tipos de objetos son llamadas referenciasReferencias no almacenan objeto, sino que almacenan la direccin de una ubicacin en memoria del objetoSi 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 staticVariables estticasTambin se les conoce como class variablesVariables que se asocian a clase no a objetoVariable comn a todos los objetos (variables compartidas entre todos los objetos de la clase)Se define como variable de clase con la palabra clave staticEjemplo : Identificador de cuenta de CuentaBanco. Un nmero que identifique nicamente a dueo de cuenta.

  • Ejemplo variables estticaspublic 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++;}

  • Algunos mtodos no estn asociados, en forma natural, con objetos particularesEjemplo, mtodos en clase Math, sqrt, sin, cos, tanTambin podra darse el caso que nos gustara llamar un mtodos antes de crear un objetoTales mtodos pueden ser declarados estticos: el mtodo no es parte de una instancia sino que de la claseSe invocan enviando mensaje a la claseNo puede accesar referencia this o cualquier variable o mtodo dentro de un mtodo esttico dado que no est asociado a un objetoMtodos estticos

  • Entrada de datosGrfico. Usar un mtodo esttico showInputDialog de la clase JOptionPaneMtodo despliega un dialog y retorna un string ingresado por usuario o nulo si entrada se cancelaSi se desea un entero o real como entrada debe convertirse con Integer.parseInt o Double.parseDoubleString 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 InputStreamReaderInputStreamReader reader = new InputStreamReader(System.in); // no lee por string, solo caracteresPara leer por lneas usar BufferedReader texto = new BufferedReader(new InputStreamReader(System.in));EjemploSystem.out.println(Ingrese su edad):String input = texto.readLine();Int edad = Interger.parseInt(input);

  • Salida de datosModo 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

  • StringsSecuencias de caracteres UnicodeString bienvenida = HolaStrings no inmutables. Una vez creados no se pueden modificar. Si se necesitan strings que se pueden modificar usar clase StringBufferClase no contiene mtodos de setAlgunos mtodos definidos en StringcharAt, length, substring, equalPara analizar strings se puede usar clase StringTokenizer

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

  • ClasesConcretasTodos sus mtodos definidosInstanciablesPueden ser superclasesAbstractasAl menos uno de sus mtodos no definidosNo instanciablesPueden ser superclasesProporcionan implementacin parcial

  • InterfacesComo contrato entre clases y ambienteCuando una clase implementa una interfaz promete que implementa comportamientos definidos en interfazComo clases abstractas, pero slo permiten declaracin de mtodos sin su implementacinDefinen conjunto de mtodos que son tiles en varias clasesNo instanciablesUna clase puede implementar cualquier nmero de interfacesDebe implementar todos los mtodos de las interfacesUn dato puede definirse con tipo de interfaceInteraces de java importantesRunnable, collection, iterator, Comparable

  • Diseando con clasesUno de los mayores beneficios de OOReconocer caractersticas comunes cuando se diseaComo se capturan las caractersticas comunes en un diseo?Se quiere definir/describir (estas caractersticas) solo una vez, sin repetirlas en cada claseComo se relacionan distintas clases con partes comunes del diseo ?

  • Relaciones entre clasesRelacin tiene-un/una. A esto se denomina ComposicinEjemplo: Un auto tiene-un motor, 4 ruedas, un volante, etcLa relacin en este caso es que un objeto tiene un componente que es otro objetoRelacin es un/una En este caso, una clase define comportamiento general y clases especficas definen comportamiento especficoEjemplo: Persona, estudiante, profesor. Estudiante es una persona

  • HerenciaSuperclasesCada clase es un tipo especial de su superclaseReferencias this (a la de objeto actual) super (referencia a superclase)Herencia Simple en clasesUna clase slo puede ser derivada de una superclaseUna clase A extends B.B es superclase de A o A es clase derivada de BHerencia Mltiple mediante interfacesInterfaces como clases abstractaspublic class abstract Aabstract void metodo();Definen mtodos cuya implementacin es proporcionada por clases que implementan interfacepublic interface X { }Public interface Y{ }Una clase puede implementar mltiples interfacesclass A implements X, YUna clase puede derivar de una clase e implementar mltiples interfacesclass A extends B implements X,Y

  • Overloading y OverridingOverloadingVarios mtodos definidos en una clase, todos con el mismo nombre, pero diferentes argumentosOverridingUsando herenciaClase A superclaseDefine mtodo dibujar()Clase B subclaseRedefine mtodo dibujar()

  • ExcepcionesCualquier cosa que no funcione bien que podra resultar en una excepcinException es una clase con muchas subclases que permiter capturar diferentes tipos de problemasUsar try y catch para capturar excepcionestry{ // sentencias de cdigo que pueden arrojar excepciones, ejemplo divisin por cero}catch (ArithmeticException e){ // codigo que atiende division por cero}

  • Throws vs throwthrow : 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 estndarIllegalArgumentExceptionValor de parmetro es inapropiadoNullPointerExceptionEl valor del parmetro es null, cuando no deberaIndexOutOfBoundsExceptionArreglo o lista esta fuera de rangoFileNotFoundExceptionNo encuentra archivo InterruptedExceptionSe produce una excepcin por interrupcinIOExceptionExcepciones producidas en E/S

  • PaquetesClases de java se pueden agrupar en paquetes. Nombres de paquetes separados por . Comojava.io.* // clases de E/S y archivosjava.util.* // contenedores, date/time, java.lang.* //clases bsicas de java, importadas automticamenteMath, Integer, Double, System, Thread, String, etcjavax.swing.* // clases soporte grficojava.net.* // clases soporte comm en red, sockets, URLsPara garantizar nombres de paquetes nicos Sun recomienda dar nombres en sentido inverso a dominios en urlsLos archivos de paquetes creados deben seguir jerarqua de directorios dados en secuencia dada en nombre paquetecl.udec.inf.sc.pedro : Clases definidas en pedro debe estar en directorio cl/udec/inf/sc/pedro

  • Importando paquetesPara importar paquetes de clases ya definidos usar importEjemplosimport java.util.* // incluye un conjunto de contenedores definidos en java como ArrayLists, Vectors, HashMaps, Lists, etcimport java.io.* // incluye clases de clases para entrada/salidaimport 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. Ejemplojava.util.Date y java.sql.Date

  • Creando paquetesPara 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 JavaArrayList 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, VectorsArrays pueden contener datos primitivos u objetos mientras que ArrayLists slo objetosArrays son de tamao fijo, mientras que ArrayLists crecen dinmicamenteArrayLists en Java 6.0Como templates en C++Tipo de objeto especificado en momento de creacin de ArrayListArrayList vec1 = new ArrayList();ArrayList vec2 = new ArrayList(10);Algunos mtodos comunesAdd, remove, size, get, contains, indexOf, isEmpty, etcVentaja de ArrayListNo se necesita saber tamao a prioriDesventajaNo se puede ocupar la notacin [] para obtener elementosVectorsSimilar a ArrayListsMtodos de acceso sincronizados, luego ms lentoSe puede usar notacin [] directamente, adems de una serie de otros mtodosLinkedListsLento acceso itemes individuales, rpido al agregar

  • Hebras y SincronizacinHebraUna secuencia de sentencias de cdigo que puede estar en ejecucin concurrente con otras hebrasPara crear hebras en JavaCrear una clase que implementa la Clase que implementa interface RunnableClass A implements RunnableClase derivada de clase ThreadClass A extends ThreadImplementar el mtodo run con un loop que hace algo en un periodo de tiempoCrear una instancia de clase AInvocar 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 hebrasjoinPermite a una hebra esperar por la terminacin de otrasleepUna hebra puede dormir por un tiempo dadoMtodo esttico

  • Manejando hebras en Java 6Soporte para aplicaciones concurrentesAplicacin crea y maneja hebrasMediante uso de clase Thread o interface RunnablePasar tareas concurrentes a clase Executor API para crear y manejar hebrasProporciona pool de hebras para aplicaciones de gran escala

  • SincronizacinSincronizacinKeyword synchronized para indicar, bloque o mtodo sincronizado, slo una hebra puede ejecutarse dentro de bloque o mtodo sincronizadoPaquete java.util.concurrentOperaciones atmicas: (concurrent.atomic)Acciones atmicas sobre variables voltilesVariable volatile utilizada para decir a compilador que variable puede ser modificada por mltiples hebras y se necesita ltimo valor almacenadoEstructuras de datos accesadas atomicamenteColas, listas, tablas hash, etc. LocksHasta java 1.4 cada objeto tiene un lock asociadoDesde java 1.5 construcciones de locks para locks, LectoresEscritores y locks reentrantesSemforos Desde java 1.5http://java.sun.com/javase/6/docs/api/MonitoresUsar keyword synchronized para exclusin mutua en mtodosHasta java 1.4 slo soportaba una variable de condicin por objetowait() 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 semforosimport 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 Semforospublic 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 Semforospublic 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 Semforospublic 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

  • Productor consumidor Semforospublic 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

  • Productor consumidor Semforosimport 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(); }}