Está en la página 1de 43

Introduccin al JAVA

Carrera: COMPUTACION E INFORMATICA


Semestre: 2016 - 1
Nombre de Unidad Didctica: LOGICA DE
PROGRAMACION.

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/onlineTraining/
Tutorial J2SE JDK
http://java.sun.com/docs/books/tutorial/index.ht
ml
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
transient
case
catch
char
class
const
continue

default if
private
this
do
implements protected throw
double import
public
throws
else
instanceof
return
extends
final
finally
float
for
goto

int
interface
long
native
new
package

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()
Condicionales
If else
switch (expresion){
case n: sentencias;
case m: sentencias;

default: sentencias;
}

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

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

Cuando una clase implementa una interfaz promete que


implementa comportamientos definidos en interfaz

Debe implementar todos los mtodos de las interfaces

Un dato puede definirse con tipo de interface


Interfaces de java importantes

Runnable, collection, iterator, Comparable

Diseando con clases


Uno de los mayores beneficios de O.O.
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)

Herencia Simple en clases

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

Overriding
Usando herencia
Clase A superclase
Define mtodo dibujar()

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

sleep
Una hebra puede dormir por un tiempo
dado
Mtodo esttico

Manejando hebras en Java


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