You are on page 1of 87

Conceptos de Java

Profesor Vladimir Bataller

Caractersticas

Es un lenguaje de programacin multiplataforma (independiente del S.O. Y de la arquitectura)

Se compila a un cdigo intermedio (Byte codes) que posteriormente ser interpretado por la plataforma Java (Maquina virtual) instalada en el equipo. Es orientado a objetos con sintaxis muy parecida a C++. No se hace gestin directa de memoria (de hecho no existen los punteros). Se pueden generar aplicaciones estndar, servidores web activos (Servlets y JSP), servidores de aplicaciones (EJBs), aplicaciones incrustadas en un navegador web (Applets) y aplicaciones para dispositivos mviles (J2ME).

Conceptos de Java
Profesor Vladimir Bataller

Primer Programa

La parte que se ejecuta inicialmente de un programa se encuentra en el mtodo main. En este caso empleamos System.out.println para mostrar por pantalla el texto Hola Mundo.

class HolaMundo { public static void main ( String [] args) { System.out.println(Hola a todos); } } Nota: El nombre del archivo debe coincidir (incluidas mayusculas y minsculas) con el nombre de la clase. En este caso sera HolaMundo.java

Conceptos de Java
Profesor Vladimir Bataller

Crear y ejecutar un programa

Los archivos de java contienen clases. Extensin .java : Son archivos de texto que contienen el cdigo fuente de una o varias clases (Se recomienda crear un archivo por cada clase) Extensin .class: Son los archivos compilados de java, listos para ser ejecutados por la mquina virtual. Determinadas clases (las que tienen el mtodo main) son ejecutables directamente. Para compilar una clase desde la lnea de comandos emplearemos: c:\jdk1.4\bin\javac NombrePrograma.java Para ejecutarlo: java NombreProgrma Ejemplo: java HolaMundo

Conceptos de Java
Profesor Vladimir Bataller

Eclipse

La versin WTP incluye editores para html, css, Jsp y javascript.

Eclipse Web Tools (WTP) url:


http://download.eclipse.org/webtools/downloads/ paquete recomendado: Web Tools Platform All-In-One Packages (wtp-all-in-one-sdk-win32)

Sintaxis
Profesor Vladimir Bataller

Generalidades

En java se hace distincin entre maysculas minsculas. Las instrucciones de java terminan en punto y coma.

Los bloques de cdigo se delimitan mediante llaves (despus de las llaves no se pone punto y coma). Junto al cdigo fuente de un programa, se pueden insertar comentarios. Pueden ser de una sola lnea, en ese caso empiezan con dos barras de divisin (//) o pueden ser de varias lnea, en ese caso el comentario se encierra con barra y asterisco (/* comentario de varias lneas */).

Sintaxis
Profesor Vladimir Bataller

Convenciones de nomenclatura

Clases: Empiezan en mayscula y si han cambio de palabra, la primera letra tambin en mayscula. class PrimerEjemplo { ...... } mtodos, propiedades y variables: Empiezan en minsculas pero si cambia la palabra, la primera letra de la palabra es en maysculas. void mostrarMensaje() { String mensajeAMostrar = Hola, buenas tardes; System.out.println(mensajeAMostrar); } Palabras reservadas del lenguaje: todo en minsculas.

Sintaxis
Profesor Vladimir Bataller

Mostrar un texto por pantalla

Cuando trabajemos en modo Consola, emplearemos el objeto System.out para mostrar textos en pantalla.

Emplearemos bsicamente dos mtodos: println: Muestra un texto y sita el cursor en la siguiente linea de la consola. System.out.println(Cadena de texto); print: Muestra un texto, pero no salta a la siguiente linea de modo que el siguiente texto que se envie a la pantalla, se mostrar a continuacin. System.out.print(Cadena de texto); Para concatenar varias cadenas se emplea el operador +: System.out.println(Primera Segunda); +

El carcter de salto de linea se representa con \n.

Sintaxis
Profesor Vladimir Bataller

Tipos primitivos de datos Tipo boolean char byte short int long

Son los tipos bsicos con los que en ultimo termino se almacena la informacin de un programa.

Descripcin 1 byte. Valores true y false 2 bytes. Unicode. Se indica entre comillas simples 1 byte. Valor entero entre 127 y +127 2 bytes. Valor entero entre -32768 y 32767 4 bytes. Valor entero entre -2.147 M y 2.147 M 8 bytes. Valor entero entre 9e18 y +9e18

float 4 bytes (entre 6 y 7 cifras significativas). Exponentes 45 a +38 double 8 bytes (unas 15 cifras significativas). Exponentes 324 a 308 Las cadenas de texto se manejan con la clase String. (Como es una clase, no es un tipo primitivo de datos)

Sintaxis
Profesor Vladimir Bataller

Variables

La informacin con la que se trabaja en un programa es accesible mediante variables, a las cuales se les asigna un nombre.

Definicin: tipoDato nombreVariable; Ejemplos: realizado; int a; double estatura; boolean

Asignacin de un valor: nombreVariable = NuevoValor; Ejemplos: a=38; estatura = 1.78; realizado = true; Definicin y asignacin simultaneas: tipoDato nombreVariable = NuevoValor; Ejemplos: int a = 38; double estatura =1.78; boolean realizado = true;

Sintaxis
Profesor Vladimir Bataller

Nombres de variables

Los nombres de las variables no pueden coincidir con palabras reservadas del lenguaje ni contener caracteres destinados a representar operadores. Tampoco pueden contener espacios en blanco. Palabras reservadas: 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, null, package, private, protected, public, return, short, static, super, switch, synchronized, this, throw, throws, transient, try, void, volatile, while. *-> comandos desaconsejados

Sintaxis
Profesor Vladimir Bataller

Variables de objeto (referencias)

Las variables tambin se emplean para acceder (hacer referencia o apuntar) a los objetos que haya creados en la memoria del sistema. A estas variables se les llama referencias

Definicin: Vehiculo v; // Se sigue la misma norma que con los tipos. Creacin de un objeto y asignacin del objeto a una referencia: v = new Vehiculo(); Acceso a las propiedades: v.numRuedas = 4; System.out.println(v.numRuedas);// Imprime 4 Asignacin de referencia a un objeto desde otra variable: Vehiculo w = v; v.numRuedas = 3; System.out.println(w.numRuedas);// Imprime 3 Vehiculo numRuedas: 3 marca: Renault

V w

Sintaxis
Profesor Vladimir Bataller

Variables de objeto (referencias)

Las variables tambin se emplean para acceder (hacer referencia o apuntar) a los objetos que haya creados en la memoria del sistema. A estas variables se les llama referencias

Vehiculo v; // Se sigue la misma norma que con los tipos. v = new Vehiculo(); v.numRuedas = 4; System.out.println(v.numRuedas);// Imprime 4 Vehiculo w = new Vehiculo(); w.numRuedas = 3; System.out.println(w.numRuedas);// Imprime 3 System.out.println(v.numRuedas);// Imprime 4 Vehiculo numRuedas: 4 marca: V w

Vehiculo numRuedas: 3 marca:

Sintaxis
Profesor Vladimir Bataller

Variables de objeto (referencias)

Las variables tambin se emplean para acceder (hacer referencia o apuntar) a los objetos que haya creados en la memoria del sistema.

Por ejemplo, acceso a variables de objetos de la clase String: Definicin: String miTexto; // Se sigue la misma norma que // con los tipos primitivos de datos. Creacin de un objeto y asignacin a una variable: miTexto = new String(); // Cadena vaca. miTexto = new String(Hola); // Con un texto. miTexto = Hola;// Con la clase String se puede // emplear esta forma abreviada. Asignacin de referencia a un objeto desde otra variable: String otroObjeto = miTexto; Asignacin de ninguna referencia: miTexto = null;

Sintaxis
Profesor Vladimir Bataller

Operadores (I)

Permiten indicar operaciones entre variables o literales (valores explicitos).

varias

Aritmticos(los operandos y el resultado son nmeros): suma (+), resta (-), multiplicacin (*), divisin (/) y resto de la divisin (%). Ejemplo : int a= 13; int c = a % 5; // c=3 De asignacin Operador Utilizacin Expresin equivalente += op1 += op2 op1 = op1 + op2 -= op1 -= op2 op1 = op1 - op2 *= op1 *= op2 op1 = op1 * op2 /= op1 /= op2 op1 = op1 / op2 %= op1 %= op2 op1 = op1 % op2

Sintaxis
Profesor Vladimir Bataller

Operadores (II)

Permiten indicar operaciones entre variables o literales (valores explicitos).

varias

Unarios de signo e incrementales ms (+) y menos (-) -> Mantiene o cambia el signo de la variable. incremento (++) y decremento (--). Ejemplos: a++; // a= a+1 b--; // b= b-1 c = -d; // c es igual a d pero con el signo cambiado.

Sintaxis
Profesor Vladimir Bataller

Operadores (III)

Permiten indicar operaciones entre variables o literales (valores explicitos).

varias

Relacionales (comparan dos nmeros o char y retornan un boolean) Operador > >= < <= == != Utilizacin op1 > op2 op1 >= op2 op1 < op2 op1 <= op2 op1 = = op2 op1 != op2 El resultado es true si op1 es mayor que op2 si op1 es mayor o igual que op2 si op1 es menor que op2 si op1 es menor o igual que op2 si op1 y op2 son iguales si op1 y op2 son diferentes

= = empleado con refencias a objetos, comprueba si ambas referencias apuntan al mismo objeto. Recuerdese que los Strings son objetos y dos Strings con los mismos caracteres no tienen porque ser el mismo objeto. Para verificar si dos objetos String contienen los mismos caracteres emplearemos el mtodo equals.

Sintaxis
Profesor Vladimir Bataller

Comparacin de referencias

Las variables tambin se emplean para acceder (hacer referencia o apuntar) a los objetos que haya creados en la memoria del sistema. A estas variables se les llama referencias

Vehiculo v =new Vehiculo(); Vehiculo w =new Vehiculo(); v.numRuedas = 4; V w.numRuedas = 4; if(v==w) //Este if no es cierto w System.out.println("Son el mismo objeto"); if(v.numRuedas == w.numRuedas) System.out.println("Mismo nmero de ruedas");

Vehiculo numRuedas: 4 marca: Vehiculo numRuedas: 4 marca:

Vehiculo w = v; if(v==w) System.out.println("Ahora objeto");

V s son w el mismo

Vehiculo numRuedas: 4 marca:

Sintaxis
Profesor Vladimir Bataller

Operadores (IV)

Permiten indicar operaciones entre variables o literales (valores explicitos).

varias

Lgicos (relacionan variables booleanas o condiciones)


Op. && || ! & | Nombre AND OR AND OR Utilizacin op1 && op2 op1 || op2 op1 & op2 op1 | op2 El resultado es true si op1 y op2 son true. si op1 u op2 son true. si op es false y false si op es true si op1 y op2 son true. Siempre se evala op2 si op1 u op2 son true. Siempre se evala op2

negacin ! op

Sintaxis
Profesor Vladimir Bataller

Operadores (V)

Permiten indicar operaciones entre variables o literales (valores explicitos).

varias

Concatenacin de cadenas de caracteres (+) miTexto = Hola + Adios; Op


>> <<

// miTexto = Hola Adios;

Operadores a nivel de bits(los operandos y el resultadoson nmeros) Utilizacin


op1 >> op2 op1 << op2

Resultado
Desplaza los bits de op1 a la derecha una distancia op2 Desplaza los bits de op1 a la izquierda una distancia op2 Desplaza los bits de op1 a la derecha una distancia op2 Operador AND a nivel de bits Operador OR a nivel de bits Operador XOR a nivel de bits Operador complemento (invierte el valor de cada bit)

>>> op1 >>> op2 (positiva) & | ^ ~ op1 & op2 op1 | op2 op1 ^ op2 ~op2

Sintaxis
Profesor Vladimir Bataller

Expresiones y sentencias.

Expresiones: Una expresin es un conjunto variables unidas por operadores que retornan un valor. Ejemplo: a+b Condicin: Expresin que retorna un valor booleano (true o false). Ejemplo: a>b Sentencias: Son las minimas unidades de ejecucin de un programa. En java cada sentencia termina en punto y coma. Se pueden indicar varias sentencias en una misma linea.

Sintaxis
Profesor Vladimir Bataller

Bifurcaciones If

Permiten ejecutar un bloque de sentencias si se cumple una condicin.

Bifurcacin If simple: Si solo hay una sentencia no hacen falta las llaves if (condicin) { sentencias; } } Bifurcacin if-else: if (condicin) { else { sentencias } sentencias

Bifurcacin if - else if - else: if (condicin 1) { sentencias 1 } else if (condicin 2) { sentencias 2 } else if (condicin 3) { sentencias 3 }

Sintaxis
Profesor Vladimir Bataller

Bifurcaciones Switch

Permiten ejecutar diferentes bloques de sentencias en funcin de los valores que retorne una expresin.

switch (expresin) { case valor1: sentencias 1; break; case valor2: sentencias 2; break; case valor3: sentencias 3; break; case valor4: sentencias 4; break; case valor5: sentencias 5; break; case valor6: sentencias 6; break; default: } sentencias 7;

Sintaxis
Profesor Vladimir Bataller

Asignacin condicional

Retorna uno de los dos valores en funcin de que la condicin sea verdadera o falsa

Operador condicional ?: condicin ? valor1 : valor2 donde se evala condicin y se devuelve valor1 si la condicin es true y valor2 si la condicin es false. Ejemplo: int a =3; int b = 5; int mayor; mayor = a>b ? a : b; equivale a : if(a>b) mayor = a; else mayor = b;

Sintaxis
Profesor Vladimir Bataller

Bucles for

Permiten ejecutar un bloque de sentencias un determinado numero de veces.

for (inicializacin; condicin; incremento) { sentencias; } Inicializacin: Es una o varias sentencias (separadas por comas) que se ejecutan una sola vez, cuando se entra en el bucle. (Generalmente consiste en la inicializacin de un contador. int i=0). Condicin: Es la condicin que se debe cumplir para ejecutar el bucle en cada repeticin. (Generalmente es una comparacin del contador con el valor lmite. i<100). Incremento: Es una o varias sentencias (separadas por comas) que se ejecutan en cada repeticin. (Generalmente consiste en el incremento del contador. i+ +).

Sintaxis
Profesor Vladimir Bataller

Bucles do ... while

Permiten ejecutar un bloque de sentencias una o ms veces mientras se cumpla una condicin de permanencia.

do { sentencias; } while (condicin); coma. // observese que termina en punto y

La condicin de permanencia se evalua tras ejecutar el bloque de sentencias.

Sintaxis
Profesor Vladimir Bataller

Bucles

while

Permiten ejecutar un bloque de sentencias cero o ms veces mientras se cumpla una condicin de permanencia.

while (condicin) { sentencias; } Si al llegar al bucle, no se cumple la condicin, las sentencias no se ejecutan ninguna vez.

Sintaxis
Profesor Vladimir Bataller

Sentencias break y continue

Permiten alterar la ejecucin normal de bucles y bifurcaciones.

La sentencia break es vlida tanto para las bifurcaciones como para los bucles. Hace que se salga inmediatamente del bucle o bloque que se est ejecutando, sin realizar la ejecucin del resto de las sentencias. La sentencia continue se utiliza en los bucles (no en bifurcaciones). Finaliza la iteracin i que en ese momento se est ejecutando (no ejecuta el resto de sentencias que hubiera hasta el final de la iteracin). Vuelve al comienzo del bucle y comienza la siguiente iteracin (i+1).

Clases Bsicas
Profesor Vladimir Bataller

Conversin de String a numero

Para convertir Cadenas de texto cuyos caracteres representan un nmero, empleamos unas clases auxiliares llamadas Wrappers (Integer, Double)

Conversin de String a int Para ello la clase Integer dispone del mtodo: int parseInt(String) ejemplo: int a; String s = 1348; a = Integer.parseInt(s); Conversin de String a double Para ello la clase Double dispone del mtodo: double parseDouble(String) ejemplo: double d; String s = 33.56; d = Double.parseDouble(s);

Clases Bsicas
Profesor Vladimir Bataller

Flujos de Entrada bsicos (I)

La entrada estndar del sistema (normalmente el teclado) est representada por un objeto de tipo InputStream accesible mediante System.in, esto representar el origen de los datos del teclado.

InputStream Solamente nos permite leer byte a byte la informacin que llega por la entrada estndar. Para ello cuenta con el mtodo read() que retorna un entero con el valor del byte ledo. InputStreamReader Nos permite leer caracteres mediante el mtodo read(), debe ser inicializado con un InputStream del cual tomar la informacin. BufferedReader Nos permite leer lneas de texto enteras, adems almacena en un buffer intermedio los datos que van llegando de forma que aumenta el rendimiento. El mtodo para leer lneas es String readLine(). Debe ser inicializado con un Reader, por ejemplo InputStreamReader.

Clases Bsicas
Profesor Vladimir Bataller

Leer el teclado con la clase BufferedReader

La entrada estndar del sistema (normalmente el teclado) est representada por un objeto de tipo InputStream accesible mediante System.in, esto representar el origen de los datos del teclado.

Las instrucciones de lectura de flujos pueden producir errores de entrada-salida, en el caso de lectura del teclado, delegaremos el tratamiento de ese tipo de error (Excepcion), para ello el mtodo que realice la lectura se declarar con throws IOException. Ejemplo: import java.io.*; class LeerTeclado { public static void main(String args[]) throws IOException { BufferedReader teclado = new BufferedReader(new InputStreamReader (System.in)); String texto = teclado.readLine(); System.out.println(El texto tecleado es: + texto); } }

Clases Bsicas
Profesor Vladimir Bataller

Leer teclado con la clase Scanner

A partir de la versin 1.5 se introdujo la clase Scanner del paquete java.util que simplifica la lectura de datos del teclado.

La clase Scanner no produce excepciones de entrada-salida. El mtodo nextLine() lee una linea de texto.Tambin tiene mtodos para leer enteros o doubles: nextInt(), nextDouble(). Ejemplo: import java.util.Scanner; class LeerTecladoScanner { public static void main(String args[]) { Scanner teclado = new Scanner(System.in); System.out.print("Escriba su nombre: "); String nombre = teclado.nextLine(); System.out.print("Escriba sus apellidos: "); String apellidos = teclado.nextLine(); System.out.println("Hola, " + nombre + " " +apellidos); } }

Sintaxis
Profesor Vladimir Bataller

Matrices (I)

Son objetos con una caracterstica especial, que pueden contener referencias, ordenadas bajo uno o varios indices, a otros objetos.

Definicin de matrices de tipos primitivos de datos: double[ ] x = new double[100]; // tambin double x[] Definicin de matrices de referencias a objetos: String[ ] s = new String[3]; //Las referencias de la matriz inicialmente contienen null. Acceso a elementos de una matriz: x[2]=5.3; s[0]= new String(Pablo); Inicializacin: int v[ ] = {4, 1, 6, 3, 42, 51, 61, 27, 98, 119}; String [] String(martes)}; dias ={new String(lunes), new

Sintaxis
Profesor Vladimir Bataller

otras caractersticas:
Matrices(II)

Los indices de una matriz van desde cero hasta el tamao menos uno. El tamao se puede conocer con la propiedad length. Ejemplo de bucle que recorre todos los elementos de una matriz: int [] matriz ={53,4,43,54}; for( int i=0; i<matriz.length; i++) { System.out.println(matriz[i]); } Cuando se pasa una matriz como parmetro de un mtodo, este paso, al igual que con el resto de objetos se hace por referencia. Se pueden crear matrices annimas (por ejemplo: como parmetro de un metodo.

La clase Vector
Profesor Vladimir Bataller

Las clases Vector y ArrayList

Permiten crear matrices dinmicas (Que pueden cambiar su numero de elementos). Se encuentran en el paquete java.util. (Ambas implementan la interface List)
Aade un objeto al final Retorna el objeto que hay en la posicion indicada como parmetro. Sustituye el objeto que hay en la posicin indicada por el objeto suministrado. Retorna el objeto sustituido. Devuelve el nmero de elementos

void add(Object obj) Object get(int posicion) Object set(int posicion, Object obj) int size()

Sintaxis
Profesor Vladimir Bataller

Matrices bidimensionales (I)

Una matriz bidimensional es un vector de referencias a los vectores fila. As pues, cada fila podra tener un nmero de elementos diferente.

Una matriz se puede crear directamente en la forma: int [ ][ ] mat = new int[3][4]; O dando los siguientes pasos: 1. Crear la referencia (con un doble corchete): int[ ][ ] mat; 2. Crear el vector de referencias a las filas: mat = new int[3][ ]; 3. Crear los vectores correspondientes a las filas: for (int i=0; i<3; i++) mat[i] = new int[4]; 4. Asignar valores a cada elemento for (int i=0; i<3; i++) for (int j=0; j<4; j++) mat[i] [j] = 2*i*j;

Sintaxis
Profesor Vladimir Bataller

Matrices bidimensionales (II)

Ejemplos:

Ejemplos double mat[ ][ ] = new double[3][3]; //tenemos 3x3 elementos a cero. int [ ][ ] b = {{1, 2, 3},{4, 5, 6},};// La tercera fila no est inicializada int c[ ][ ] = new int[3][]; // Vector de referencias a vectores de enteros c[0] = new int[5]; // Se creea el vector de la primera fila c[1] = new int[4]; // Se creea el vector de la segunda fila c[2] = new int[8]; // Se creea el vector de la tercera fila int nfilas = c.length; // Es el nmero de filas de la matriz c int ncols = c[0].length; // Es el nmero de elementos de la primera fila for(int i=0; i< c.length; i++) for(int j=0; j<c[i].length; j++) { c[i][j]=i*j; }

Clases Bsicas
Profesor Vladimir Bataller

La clase String (I)

La clase string nos permite manejar cadenas constantes. De hecho, java interpreta un texto entre comillas (literal) como un String.
Ejemplo: String s=Hola a todos;

Mtodos int length() ejemplo: int tam = s.length(); Devuelve el nmero de caracteres de la cadena char charAt(int indice) ejemplo: char letra = s.charAt(3); // letra = a Devuelve el carcter en la posicin especificada por indice. void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) Copia los caracteres indicados de la cadena(desde srcBegin hasta srcEnd) en la posicin indicada (dstBegin)de una matriz (dst []) de caracteres. int indexOf(String str, int fromIndex) ejemplo: int pos = s.indexOf(tod);//pos = 7 Devuelve la posicin en la que aparece por primera vez un String (str) en el string sobre el que se aplica el mtodo, a partir de una posicin dada (fromIndex, este es opcional). Si no la encuentra retorna -1. String replace(char oldChar, char newChar) Retorna un String en el que se ha sustituido un carcter (oldChar) por otro (newChar). ejemplo: String s2=s.replace(todos,todas); // s2=Hola a todas

Clases Bsicas
Profesor Vladimir Bataller

La clase String (II)

La clase string nos permite manejar cadenas constantes. De hecho, java interpreta un texto entre comillas (literal) como un String.

Mtodos boolean startsWith(String prefix) Indica si un String comienza con otro String o no. String substring(int beginIndex, int endIndex) Devuelve un String extrado a partir de beginIndex y hasta endIndex.(sin incluirlo) String toLowerCase() Retorna la cadena convertida a minsculas. String toUpperCase() Retorna la cadena convertida a maysculas. String trim() Retrona la cadena eliminando los espacios en blanco al principio y final. String valueOf(argumento) Devuelve la representacin en forma de String del argumento. Admite Object, matrices de caracteres y los tipos primitivos.

Clases Bsicas
Profesor Vladimir Bataller

La clase String (II) Mtodos boolean equals(String otraCadena) Retorn true si otraCadena tiene los mismos caracteres. boolean equalsIgnoreCase(String otraCadena) Retorna true si otra Cadena tiene los mismos caracteres sin hacer distinciones entre maysculas y minsculas. String [] split(String delimintador) Retorna una matriz de String donde cada elemento es uno de los segmentos en los que se ha dividido el String original empleando el delimitador que se pasa como argumento. String s = Lunes#Martes#Miercoles; String [] m = s.split(#); // m[0]=Lunes; m[1]=Martes; m[2]=Miercoles;

Clases Bsicas
Profesor Vladimir Bataller

La clase Math abs()

La clase Math proporciona mtodos static (que se ejecutan sobre la clase sin necesidad de crear instancias) para realizar las operaciones matemticas ms habituales.
sqrt( ) pow( , ) exp(), log() Log10() random() toDegrees() toRadians() PI raiz cuadrada. el primer argumento elevado al segundo el nmero e elevado al argumento. Logaritmo neperiano Logaritmo decimal. nmero aleatorio entre [0 y 1[ convierte radianes a grados convierte grados a radianes constante, numero

valor absoluto

cos(), acos() coseno y arco coseno tan(), atan(), atan2( , ) sin(), asin() ceil(), floor() round() E tangente, arco tantente entre -/2 y /2, arco tangente entre - y . seno y arco seno redondeo por exeso y por defecto. entero ms cercano constante, nmero e

Clases Bsicas
Profesor Vladimir Bataller

Paquetes predefinidos

La plataforma java tiene una serie de paquetes (equivalente a bibliotecas de clases) predefinidos dispuestos para que utilicemos las clases que contienen.

Para emplear una clase que est definida dentro de un determinado paquete empleamos la palabra reservada import seguida del nombre del paquete. Esta sentencia se escribe antes de la sentencia class de definicin de una clase. import java.io.*; // el asterisco indica que importamos todas las clases del //paquete java.io class NombreClase { // Ahora ya podemos crear instancias de objetos del paquete java.io } La clase String y las clases Wrappers (Double, Integer, Long, Byte ...) estn definidas dentro del paquete java.lang que es un paquete que se importa automticamente, sin necesidad de emplear import. Por el contrario las clases para tratar los flujos de entrada y salida se encuentran en el paquete java.io, por tanto para emplear cualquiera de estas clases, tendremos que importar dicho paquete.

POO
Profesor Vladimir Bataller

Las Clases

Los programas de Java estn estructurados en clases. Las clases son la definicin de las caractersticas de los diferentes tipos de objetos que vamos a crear (instanciar).

Estructura de una clase class NombreClase { // Cuerpo de la clase. } Las clases se componen de atributos (o propiedades) y mtodos Atributos: Son las variables que pertenecen a la clase. (Indican el estado del objeto)(No estn declaradas dentro de ningn mtodo). Mtodos: Son funciones que pertenecen a la clase. ( Indican la funcionalidad que tienen los objetos de una clase). class TrianguloRectangulo { double c1; double c2; // atributos void asignarValores(double valor1, double valor2) // Mtodo { c1 = valor1; c2 = valor2; } double hipotenusa(){ return Math.sqrt(c1*c1 +c2*c2); } // Mtodo }

POO
Profesor Vladimir Bataller

Las Clases

Los programas de Java estn estructurados en clases. Las clases son la definicin de las caractersticas de los diferentes tipos de objetos que vamos a crear (instanciar).

class TestTrianguloRectangulo { public static void main(String [] args) { TrianguloRectangulo tr= new TrianguloRectangulo(); tr.asignarValores(2,6); System.out.println("El triangulo de catetos " + tr.c1 + " y " + tr.c2 + " tiene una " + "hipotenusa de valor "+ tr.hipotenusa()); } }

POO
Profesor Vladimir Bataller

Herencia (I)

Nos permite aprovechar los atributos y mtodos de una clase, para crear otra que extienda su funcionalidad.

class Figura1 { double x; double y; void inicializar(double x, double y) { if(x>=0) this.x=x; else this.x=0; if(y>=0) this.y=y; else this.y=0; } //this es una referencia a si mismos que tienen todos los objetos Las clases que hereden de Figura1, tendrn definidas implicitamente las propiedades x e y, y el mtodo inicializar. Las clase Rectangulo1 aadir los lados l1 y l2 a los atributos que hereda de figura y definir el mtodo inicializar con cuatro parametros. Adems aade dos mtodos area() y toString() que permite establecer la representacin en modo String de los objetos de tipo Rectangulo1.
}

POO
Profesor Vladimir Bataller

Herencia(II)

Todos las clases que no heredan de ninguna clase, heredan de la clase Object, de forma que todas las clases de forma directa o indirecta heredan de Object.

class Rectangulo1 extends Figura1 // extends indica que hereda de Figura1 { double l1, l2; void inicializar(double x,double y,double l1, double l2) { super.inicializar(x, y); // Super = la clase de la cual se hereda this.l1 = l1; this.l2 = l2;. // this representa al objeto actual. } double area() { return l1 * l2;} public String toString(){return "Rect[("+x +","+y+"), "+l1 +","+l2+"]";} } class TestFiguras1 { public static void main(String args[]) { Rectangulo1 r1 = new Rectangulo1(); r1.inicializar(2,3,5,7); System.out.println(r1 + " tiene un area = " + r1.area()); }

POO
Profesor Vladimir Bataller

Momenclatura de la Herencia

Diferentes formas de llamar a las clases denotando su relacin de herencia.

Figura1 Superclase Clase Base "Madre"

Rectangulo1 Subclase Clase Derivada "Hija"

Rectangulo1 hereda de Figura1

POO
Profesor Vladimir Bataller

Constructores (I)

Son mtodos que se ejecutan automticamente al crear cada ejemplar de la clase. Tienen el nombre de la clase y no retornan ningn valor.

Una clase puede tener varios constructores, cada uno con diferentes parametros. class Figura2 { double x; double y; Figura2() {x=0; y=0;} // Constructor sin parmetros Figura2(double x, double y) { this.x=x>0?x:0; this.y= y>0?y:0; } double distancia(Figura2 otro) { double dx, dy; dx = this.x - otro.x; dy = this.y - otro.y; return Math.sqrt(dx*dx + dy* dy); } double area(){return 0;} public String toString() { return "Fig("+x +","+y+")";} } As podremos crear objetos usando el constructor que ms nos interese Figura2 a = new Figura2(); // se ejecuta el constructor sin parmetros. Figura2 b = new Figura2(3,7.5); // constructor con dos double

POO
Profesor Vladimir Bataller

Constructores (II)

Las subclases heredan los constructores de su superclase, estos pueden sobreescribirse. En ese caso solamente estar accesible el constructor sobrescrito.

El en la primera lnea de un constructor, debe ejecutarse uno de los constructores de la superclase, si esto no se hace, implcitamente se ejecutar el constructor por defecto (el que no tiene parmetros) de la superclase (Si este no existiera dara un error de compilacin) class Rectangulo2 extends Figura2 { double l1, l2; Rectangulo2(double x,double y,double l1, double l2) { super(x, y); // this.x=x; this.y=y; this.l1 = l1; this.l2 = l2; } double area() { return l1 * l2;} public String toString() { return "Rect[("+x +","+y+"), "+l1 + ","+l2+"]";} }

POO
Profesor Vladimir Bataller

Constructores (III)

De una clase (Figura2) pueden heredar varias clases (Rectangulo2, Circulo2). De forma que la superclase (Figura2) debe agrupar todo lo que tienen en comn las subclases.

class Circulo2 extends Figura2 { double r; Circulo2(double x,double y,double r) { super(x,y); this.r=r; } double area() {return Math.PI * r * r;} public String toString() { return "Cir[("+x +","+y+"), "+r+"]";} } class TestFiguras2 { public static void main (String args[]) {Circulo2 c = new Circulo2(4,3,2); Rectangulo2 r = new Rectangulo2(3,3,1,2); System.out.println(c+ " tiene un area = " + c.area()); System.out.println(r+ " tiene un area = " +r.area()); } }

POO
Profesor Vladimir Bataller

Javadoc

Es una herramienta que est en la carpeta bin del jdk que genera documentacin de las clases de nuestro proyecto. Para ello emplear unos comentarios con dos asteriscos.

/** * Este metodo sirve para sumar dos nmeros * @return Retorna un double con la suma de los dos parmetros * @param a primer sumando * @param b segundo sumando */ double sumar(double a, double b) { return a + b; } Para generar la javadoc de una clase, ejecutar: javadoc -private Sumador.java -private incluye todos los miembros de la clase en la documentacin, por defecto solamente se incluyen los miembros publicos.

POO
Profesor Vladimir Bataller

Clases abstractas

De la clase Figura3 no vamos a instanciar objetos, sino que a partir de ella extenderemos otras clases. Este tipo de clases en java se llaman abstractas y se les antepone el modificador abstract.

No se pueden instanciar objetos de clases abstractas. Pero si se pueden crear referencias de estas clases, as como heredar de ellas. Las clases abstractas pueden tener alguno de sus mtodos abstractos. Estos mtodos no tienen cuerpo (y terminan en punto y coma). La funcionalidad de estos mtodos se indicar en las clases que hereden de la clase abstracta.
Las clases que hereden de la clase abstracta, si no son abstractas, debern obligatoriamente implementar (aadirles el cdigo) los mtodos abstractos de la superclase.

Las clases abstractas nos permiten agrupar varias clases bajo sus caractersticas comunes de forma que podremos tratar de una forma comn, mediante referencias de la clase abstracta, objetos de diferentes subclases. Esta caracterstica se denomina Polimorfismo.

POO
Profesor Vladimir Bataller

Clases abstractas

De la clase Figura3 no vamos a instanciar objetos, sino que partir de ella extenderemos otras clases. Este tipo de clases en java se llaman abstractas y se les antepone el modificador abstract.

abstract class Figura3 { double x; double y; Figura3() {x=0; y=0; } Figura3(double x, double y) { this.x=x; this.y= y; } double distancia(Figura3 otro) { double dx, dy; dx = x - otro.x; dy = y - otro.y; return Math.sqrt(dx*dx + dy* dy); } abstract double area(); } Nota: Rectangulo3 y Circulo3 son exactamente iguales que Rectangulo2 y Circulo2, la nica diferencia es que heredan de Figura3

POO
Profesor Vladimir Bataller

Polimorfsmo (I)

El polimorfismo nos permite tratar de una forma comun a diferentes clases que heredan de una misma superclase.

class TestFiguras3 { public static void main (String args[]) { System.out.println("**** Polimorfismo con figuras ****"); Figura3 m[]= new Figura3[2]; m[0]= new Circulo3(0,0,2); m[1]= new Rectangulo3(4,2,0.5,0.5); for(int i =0;i< m.length; i++) { String tipo ="es de tipo desconocido: "; if(m[i] instanceof Circulo3) tipo="es un circulo: "; if(m[i] instanceof Rectangulo3) tipo="es un rectangulo: "; System.out.println(tipo +m[i]+ " tiene un area = " + m[i].area() ); } System.out.println("Distancia entre ambos: " + m[0].distancia(m[1])); } }

POO
Profesor Vladimir Bataller

Polimorfsmo (II)

El polimorfismo nos permite tratar de una forma comun a diferentes clases que heredan de una misma superclase.

class CentroMasas3 { public static void main(String args[]) { Figura3 [] e = new Figura3[3]; e[0]= new Rectangulo3(1,1,3,7); e[1]= new Circulo3(3,4,5); e[2]= new Circulo3(2,5,2); double sumaX =0;double sumaY =0;double areaT=0; for(int i=0;i<e.length;i++) { sumaX+=e[i].x * e[i].area(); sumaY+=e[i].y * e[i].area(); areaT+=e[i].area(); } double Xcm = sumaX/areaT; double Ycm = sumaY/areaT; System.out.println("Centro de masas: " + Xcm +", "+ Ycm); } }

POO
Profesor Vladimir Bataller

Conversin de referencias (I)

Cuando a una referencia se le asigna un objeto de una clase diferente o se le asigna un objeto mediante una referencia de una clase diferente, se han de cumplir determinadas reglas.

Conversiones implicitas: Se puede asignar a una referencia de una determinada clase, otra referencia de una subclase. Rectangulo2 r = new Rectangulo2(2,3,5,8); Figura2 f =r; // Conversin implcita de la subclase (Rectangulo2) a la //superclase (Figura2), // ya que todos los atributos y mtodos de la superclase // estn en la subclase Conversiones explicitas: Se puede asignar a una referencia de una determinada clase, otra referencia de una superclase solamente cuando previamente a esta referencia se le haya asignado un objeto de la clase. Es decir toda conversin explicita debe ir precedida de una conversin implicita. Rectangulo2 r = new Rectangulo2(1,9,4,5); Figura2 f = r; // Conversin implicita previa. Rectangulo2 rr = (Rectangulo2) f; // Casting o conversin explicita // de Figura2 a Rectangulo2

POO
Profesor Vladimir Bataller

Conversin de referencias (II)

Cuando a una referencia se le asigna un objeto de una clase diferente o se le asigna un objeto mediante una referencia de una clase diferente, se han de cumplir determinadas reglas.

POO
Profesor Vladimir Bataller

Conversin de referencias(III)

Cuando a una referencia se le asigna un objeto de una clase diferente o se le asigna un objeto mediante una referencia de una clase diferente, se han de cumplir determinadas reglas.

Las conversiones explicitas no dan error de compilacin, pero pueden producir errores de ejecucin si el objeto asignado no es de la misma clase que la que la referencia. Figura2 f = new Figura2(3,7); Rectangulo2 rr = (Rectangulo2) f; // Error de ejecucin porque el objeto //apuntado no es un Rectangulo.(ClassCastException) rr.l1=7;

POO
Profesor Vladimir Bataller

Conversin de referencias(Ejempl o de Vectores)

Los vectores almacenan objetos de la clase Object. Como todas las clases directa o indirectamente heredan de Object, dentro del vector puedo guardar cualquier tipo de objeto.

Vector v = new Vector(); // El mtodo add de la clase Vector, espera como parmetro un Oject. // Nosotros en lugar de asignarle un Object, le asignamos un objeto Rectangulo2 // Que hereda de Object ya que Figura2 hereda de Object Rectangulo2 r = new Rectangulo2(1,2,5,4); v.add(r);// Conversin implicita le paso un //Rectangulo2 (un objeto de una sublcase de Object) // Para extraer un elemento del vector, el mtodo get retorna un Object // Como lo queremos asignar a una referencia de tipo Rectangulo2 // y eso es una conversin (de superclase a subclase) explicita. Hay que // indicarle al compilador que sabemos que el Object que vamos a obtener // es un retangulo y por lo tanto no hay problema en asignarlo una // referencia de tipo Rectangulo2 Rectangulo2 rect =(Rectangulo2) v.get(i);

POO
Profesor Vladimir Bataller

Genericos

A partir de la versin 1.5 al crear una coleccion se le puede indicar el tipo de Objetos que contendr, de esta forma podemos ahorrarnos algunas conversiones explicitas.

// Inidicamos que el vector contendr objetos de la clase Rectangulo2 (o clases herederas) Vector<Rectangulo2> v = new Vector<Rectangulo2>(); Rectangulo2 r = new Rectangulo2(1,2,5,4); v.add(r); Rectangulo2 rect =v.get(i); // No hace falta una conversin explicita ya que el mtodo get ahora en lugar de referecias Object retorna referencias de la clase Rectangulo2 // Incluso se puede acceder directamente a los miembros de la clase desde el vector: v.get(i).l1=3; v.get(i).l2=5; System.out.println(El area de + v.get(i) + es + v.get(i).area() );

POO
Profesor Vladimir Bataller

instanceof

Instance of nos permite comprobar si una referencia apunta a un objeto de una determinada clase

instanceof Nombrevariable instanceof NombreClase; Retorna true si la variable hace referencia a un objeto de la clase indicada. Ejemplo: Rectangulo2 r; Figura2 f = new Rectangulo2(3,4,5,8); //Con f no puedo acceder a //l1 y l2 de este rectangulo if (f instanceof Rectangulo2) { r=(Rectangulo2) f;// Tenemos la garanta que no producir //error en tiempo de ejecucin. r.l1=22; }

POO
Profesor Vladimir Bataller

el mtodo finalize

Heredado de la clase Object, se ejecuta automticamente cuando el recolector de basura (garbage collector) va a eliminar el objeto de la memoria. Permite cerrar archivos, conexiones, etc.

El recolector de basura es lanzado por la maquina virtual de java para recuperar la memoria ocupada por objetos que ya no tienen ninguna referencia apuntndoles (objetos inaccesibles desde el programa). Desde el programa se puede forzar la ejecucin del recolector de basura mediante el mtodo gc de System: System.gc(); protected void finalize() { } Persona p = new Persona(Pedro,Martinez); Persona q = p; p=null; q=null; // A partir de este momento, el objeto ya no es apuntado por ninguna referencia // Por lo que la maquina virtual puede eliminarlo en cualquier momento. System.gc(); // Forzamos a la eliminacin de los objetos no apuntados por referencias.

POO
Profesor Vladimir Bataller

Atributos Dinmicos

Los atributos por defecto tienen un comportamiento dinmico.

Los atributos por defecto tienen un comportamiento dinmico. Esto significa que cada objeto tiene una copia de sus atributos, por lo que sus valores son independientes de los atributos de los dems objetos de la clase.

Rectangulo2 r = new Rectangulo2(3,4,5,6); System.out.println("Poscion: " + r.x + ", " + r.y); // 3,4 Rectangulo2 q = new Rectangulo2(7,8,9,10); System.out.println("Poscion: " + q.x + ", " + q.y); // 7,8 System.out.println("Poscion: " + r.x + ", " + r.y); // 3,4

POO
Profesor Vladimir Bataller

Atributos Static

Los atributos static son variables compartidas por todos los Objetos de la clase, por lo tanto cuando uno modifica su valor, todos los dems objetos ven el nuevo valor y pierden el antiguo.

class AtributosEstaticos { static int numElementos=0; AtributosEstaticos() { numElementos++; System.out.println(numElementos);} protected void finalize() { numElementos--; System.out.println(numElementos);} public static void main(String args[]) { AtributosEstaticos [] ae = new AtributosEstaticos[10]; for(int i = 0; i<ae.length; i++) {ae[i]=new AtributosEstaticos();} for(int i = 0; i<ae.length; i++) {ae[i]=null; System.gc();} // Fuerza el recolector de basura } }
De cada atributo esttico se puede decir que hay una variable por clase en lugar de una por objeto. A las variables estticas, se les llama tambin variables de Clase. Los atributos y mtodos static pueden ser accedidos sin necesidad de crear una instancia para ello, basta con poner el nombre de la clase: double a = 2*

POO
Profesor Vladimir Bataller

Mtodos dinmicos y estticos. (I)

Cuando una referencia de una clase apunta a un objeto de una subclase, cabe preguntarse que mtodos se ejecutarn los de la clase o los de la subclase.

Por defecto todos los mtodos son dinmicos, es decir, se ejecuta el mtodo correspondiente a la clase del objeto apuntado independientemente de la clase de la referencia. (Vase TestFiguras3). Por el contrario los mtodos definidos con el modificador static (mtodos estticos) ejecutan el mtodo correspondiente a la clase de la referencia, independientemente de la clase del objeto apuntado. Cuando se define un mtodo static, en las subclases ese mtodo se deber seguir declarando como static. class Superclase { static void metodo() {System.out.println(Mtodo de Superclase); } } class Subclase extends Superclase { static void metodo() {System.out.println(Mtodo de Subclase); } } class TestEstatico { public static void main(String args[]) { Superclase a= new Superclase(); a.metodo(); // Mtodo de Superclase a = new Subclase(); a.metodo(); // tambin mtodo de Superclase Subclase b = new Subclase(); b.metodo();// Metodo de Sublclase} }

POO
Profesor Vladimir Bataller

Mtodos dinmicos y estticos.(II)

Los mtodos estticos solamente pueden acceder a los atributos estticos de la clase, no a los atributos dinmicos porque no sabran de que objeto tomarlo.

Ejemplo de una clase con un mtodo esttico que facilita la tarea de leer del teclado. import java.util.Scanner; public class Teclado { static Scanner teclado = new Scanner(System.in); public static String leer() { return teclado.nextLine(); } }

String texto = Teclado.leer();

POO
Profesor Vladimir Bataller

Modificador Final

Indica que ya no se puede modificar (que es definitivo). En un atributo, no se puede cambiar su valor (es una constante), en un mtodo, que no se puede reescribir en las subclases.

Si una clase se declara con el modificador final, ya no se podr heredar de ella. Esto ocurre con la clase String que est declarada como final class String class HeredaString extends String { // No se puede compilar porque la clase // String est declarada como final. } Cuando se quiere definir una constante, generalmente se define como static final. Ya que como es constante y con el mismo valor para todos los objetos, es suficiente con una sola copia de la variable. Las constantes en java se suelen nombrar con maysculas y si hay cambio de palabra se separa con guin bajo. static final double EURO_PESETAS=166.386; EURO_PESETAS=200; // Error de compilacin, no se puede cambiar.

POO
Profesor Vladimir Bataller

Clases Anidadas (I)

Las clases anidadas son clases definidas dentro de otras. Podemos distinguir tres tipos internas, locales y annimas.

Clases internas La clase interna se define como un miembro de la clase externa. La clase interna solamente se puede usar (crear objetos) desde la externa. La clase interna tiene acceso a los miembros de la clase externa. Para acceder desde una clase interna al this de la clase externa se emplea: NombreClaseExterna.this

POO
Profesor Vladimir Bataller

Clases Anidadas (II)

Las clases anidadas son clases definidas dentro de otras. Podemos distinguir tres tipos internas, locales y annimas.

class AutomovilConPropietario { String marca; int numRuedas; Propietario propietario; class Propietario { String nombre; String dni; Propietario(String nombre,String dni) { this.nombre = nombre; this.dni= dni;} public String toString() {return nombre+" es dueo de un " + marca;} } AutomovilConPropietario(String marca,int numRuedas,String nombre,String dni) {this.marca=marca; this.numRuedas=numRuedas; this.propietario= new Propietario(nombre,dni);} public static void main(String args[]) { AutomovilConPropietario auto = new AutomovilConPropietario( "Renault",4,"Fernando","646464"); System.out.println(auto.propietario); } }

POO
Profesor Vladimir Bataller

Clases Anidadas (III)

Las clases anidadas son clases definidas dentro de otras. Podemos distinguir tres tipos internas, locales y annimas.

Clases locales Se definen dentro de un mtodo y solamente se usan dentro de l. public class EjemploClaseLocal { public static void main(String[] args) { class Persona { String nombre; String apellidos; Persona(String nombre, String apellidos) { this.nombre = nombre; this.apellidos = apellidos; } } Persona [] m = new Persona[2]; m[0] =new Persona("Pepe","Garcia"); m[1] =new Persona("Pablo","Fernandez"); for(int i=0; i< m.length;i++) System.out.println(m[i].nombre); } }

POO
Profesor Vladimir Bataller

Clases Anidadas (IV)

Las clases annimas permiten cambiar a un objeto, cuando solamente vamos a crear un ejemplar, sin necesidad de crear una clase nueva.

Clases annimas Al instanciar un objeto de una determinada clase, se puede derivar esa clase en ese mismo punto en el que se instancia el objeto. Esta ser una clase annima. Las clases annimas no tienen constructor. class TestAnonima { public static void main(String args[]) { Figura2 fNormal = new Figura2(5,3); Figura2 fExtendida = new Figura2(8,6) //no lleva punto y coma { public String toString() // redefinimos toString de Figura2 {return ***** + super.toString() +*****;} }; // ahora es cuando se pone el punto y coma. System.out.println(fNormal); System.out.println(fExtendida); } }

POO
Profesor Vladimir Bataller

Paquetes (packages)

las clases en java se agrupan en paquetes (package). Las clases sin paquete asignado pertenecen al paquete por defecto. Para hacer uso de una clase de otro paquete debemos importar el paquete (import).

Los paquetes perminten restringir el acceso entre clases de distintos paquetes. Para indicar que una clase pertenece a un paquete, la primera sentencia del archivo debe ser: package nombre_paquete; Se pueden crear jerarquias de paquetes separados por puntos package paquete1.paquete2.paquete3; Los archivos .class de un paquete deben estar en un directorio con el nombre del paquete. El directorio que contenga los directorios de los paquetes, debe incluirse en la variable CLASSPATH del sistema. CLASSPATH= . ; C:\JDK1.3\LIB; C:\CLASES Para ejecutar una clase que pertenece a un paquete, debemos anteponer el nombre del paquete: java paquete.MiClase

POO
Profesor Vladimir Bataller

Modificadores de acceso de clases

Las clases con el modificador public son accesibles desde clases de otros paquetes. Las clases sin modificador public solamente son accesibles desde clases del mismo paquete.

(public)

POO
Profesor Vladimir Bataller

Modificadores de acceso a miembros (I) VISIBILIDAD Desde la misma clase

Los miembros son los atributos (propiedades) y mtodos de una clase. Segn su modificador se podr acceder a ellos desde otra clase.
private SI NO NO NO sin modificador SI SI NO NO protected SI SI SI NO public SI SI SI SI

Desde otra clase o subclase del mismo paquete Desde una subclase de otro paquete Desde una clase de otro paquete

private: Solo accesible desde la propia clase (los miembros private no son accesibles desde las clases herederas). (sin modificador): Accesible desde clases del mismo paquete. protected: accesible desde clases del mismo paquete y subclases de cualquier paquete. public: accesible desde cualquier paquete. Al heredar, se hereda todo, incluido lo privado, pero no es accesible directamente.

POO
Profesor Vladimir Bataller

Modificadores de acceso a miembros (II)


package paquete1; public class SuperClase { private String privada = "accesible"; /*defecto*/ String defecto = "accesible"; protected String protegida = "accesible"; public String publica = "accesible"; public String getPrivada(){return privada;}
}

package paquete1; class SubClase1 extends SuperClase { public SubClase1() // Constructor { System.out.println("Constructor de Subclase1"); // Esta da error: System.out.println("privada = " + privada); System.out.println("defecto = " + defecto); System.out.println("protegida = " + protegida); System.out.println("publica = " + publica); System.out.println("metodo getPrivada = " + getPrivada());} }

POO
Profesor Vladimir Bataller

Modificadores de acceso a miembros (III) package paquete1; class MismoPaquete { public MismoPaquete() // Constructor { SuperClase sc = new SuperClase(); System.out.println("Constructor de MismoPaquete"); //Error: System.out.prrintln("privada = " + sc.privada); System.out.println("defecto = " + sc.defecto); System.out.println("protegida = " + sc.protegida); System.out.println("publica = " + sc.publica); } } package paquete1; class Demo1 { public static void main(String [] args) { SubClase1 subc = new SubClase1(); MismoPaquete mp = new MismoPaquete(); }

POO
Profesor Vladimir Bataller

Modificadores de acceso a miembros (IV) package paquete2; //import paquete1.*; class SubClase2 extends paquete1.SuperClase { // Constructor public SubClase2() { System.out.println("Constructor de Subclase2"); // Error: System.out.println("privada = " + privada); // Error:System.out.println("defecto = " + defecto); System.out.println("protegida = " + protegida); System.out.println("publica = " + publica); } }

POO
Profesor Vladimir Bataller

Modificadores de acceso a miembros (V) package paquete2; class DistintoPaquete { public DistintoPaquete() // Constructor { paquete1.SuperClase sc = new paquete1.SuperClase(); System.out.println("Constructor de DistintoPaquete"); //Error: System.out.prrintln("privada = " + sc.privada); //Error: System.out.println("defecto = " + sc.defecto); //System.out.println("protegida = " + sc.protegida); System.out.println("publica = " + sc.publica); } public static void main(String [] args) { SubClase2 sc2 = new SubClase2(); DistintoPaquete dp = new DistintoPaquete(); // Error porque SubClase1 no es publica // paquete1.SubClase1 sc1 = new paquete1.SubClase1(); } }

POO
Profesor Vladimir Bataller

Interfaces(I)

Son estructuras similares a las clases abstractas con todos sus mtodos implcitamente abstractos y todos sus atributos implcitamente finales y estticos (Constantes).

Una interface es como una plantilla de atributos y mtodos. Se dice que una clase implementa una interface cuando tiene desarrollados todos los mtodos de la interface. As mismo en la declaracin de la clase se aadir de la misma forma que la palabra extends para la herencia, la palabra implements seguido del nombre de la interface. La clase heredar tambin todas las constantes (static final) definidas en la interface. Cuando una clase implementa una interface, representa una garanta de disponer de los mtodos relacionados en la interface. Las interfaces permiten la estandarizacin y el polimorfismo. interface DosDimensiones { /*static final*/ int ROJO = 3; /*abstract*/public void dibujar(); }

POO
Profesor Vladimir Bataller

Interfaces(II)

Son estructuras similares a las clases abstractas con todos sus mtodo implcitamente abstractos y todos sus atributos implcitamente finales y estticos (Constantes).

class Rombo extends Figura3 implements DosDimensiones { double d1,d2; // Diagonales Rombo(double x,double y, double d1, double d2) { super(x,y); this.d1=d1; this.d2=d2; } public void dibujar() { System.out.println(" /\\"); System.out.println(" / \\"); System.out.println("/ \\"); System.out.println("\\ /"); System.out.println(" \\ /"); System.out.println(" \\/"); } double area() { return (d1*d2)/2; } }

POO
Profesor Vladimir Bataller

Interfaces(III)

Son estructuras similares a las clases abstractas con todos sus mtodo implcitamente abstractos y todos sus atributos implcitamente finales y estticos (Constantes).

class Elipse extends Figura3 implements DosDimensiones { double a=3; double b= 5; public void dibujar() { System.out.println(" ___"); System.out.println(" / \\"); System.out.println("( )"); System.out.println(" \\ /"); System.out.println(" --"); } double area() { return Math.PI * a *b; } }

POO
Profesor Vladimir Bataller

Interfaces(IV)

Son estructuras similares a las clases abstractas con todos sus mtodo implcitamente abstractos y todos sus atributos implcitamente finales y estticos (Constantes).

class Monigote implements DosDimensiones { public void dibujar() { System.out.println(" []"); System.out.println(" _/ \\_"); System.out.println(" ||"); System.out.println(" / \\"); System.out.println(" ( )"); System.out.println("_| |_"); System.out.println(" "); } }

POO
Profesor Vladimir Bataller

Interfaces(V)

Son estructuras similares a las clases abstractas con todos sus mtodo implcitamente abstractos y todos sus atributos implcitamente finales y estticos (Constantes).

class TestDosDimensiones { public static void main(String [] args) { // dd es una matriz de referencias a objetos que // implementen la interface DosDimensiones. DosDimensiones [] dd = new DosDimensiones[3]; dd[0]=new Rombo(2,3,4,5); dd[1]=new Elipse(); dd[2]=new Monigote(); for(int i=0; i< dd.length; i++) { System.out.print("\n"); dd[i].dibujar(); } System.out.print("\n color rojo:"+ Rombo.ROJO); } }

POO
Profesor Vladimir Bataller

AgendaInterface (I)

Mediante una interface podemos indicar los mecanismos de comunicacin entre dos subsistemas, sin indicar su estructura interna. De esta forma podemos tener deferentes implementaciones de la misma.

Ejemplo: La interface AgendaInterface que modela la informacin de la aplicacin (Capa de Datos). Esta puede implementarse para guardar los datos en memoria (AgendaVector), en un archivo (AgendaArchivo) o en una Bbdd (AgendaBbdd). Asi mismo podemos tener varias aplicaciones (Capa de presentacin) que hagan uso de objetos que implementen la misma interface. Capa de Datos Capa de Presentacin AplicacionConsola AgendaInterface AplicacionSwing AgendaArchivo AgendaVector

AplicacionWeb

Persona

AgendaBbdd

POO
Profesor Vladimir Bataller

AgendaInterface (II)

Mediante una interface podemos indicar los mecanismos de comunicacin entre dos subsistemas, sin indicar su estructura interna. De esta forma podemos tener deferentes implementaciones de la misma.

La AgendaInterface hace uso de objetos de la clase persona que contienen los datos de un contacto de la agenda. package agenda; public class Persona { int id; String nombre; String telefono; public Persona(int id,String nombre, String telefono) { this.id= id; this.nombre = nombre; this.telefono = telefono; } public String toString() { return nombre + " "+ telefono;} }

POO
Profesor Vladimir Bataller

AgendaInterface (III)

Mediante una interface podemos indicar los mecanismos de comunicacin entre dos subsistemas, sin indicar su estructura interna. De esta forma podemos tener deferentes implementaciones de la misma.

package agenda; import java.util.Vector; public interface AgendaInterface { // En el constructor, se recomienda cargar los datos de la agenda // en un vector interno. public boolean insertar(Persona nueva); // inserta una persona en al agenda public boolean grabar(); // guarda los datos de en un archivo o bbdd si es
posible

public Persona buscarPorId(int id); // Busca por el id una persona en la agenda public Vector<Persona> buscarPorNombre(String nom); public Vector<Persona> getAll(); // Reemplaza la persona con el id indicado por la persona que se pasa por parmetro. public boolean editar(int id, Persona nueva); public boolean borrar(int id); // Elimina la persona con el id indicado.
public String getError();// Retorna un mensaje descriptivo del ultimo error producido.

POO
Profesor Vladimir Bataller

AgendaInterface (IV)

Mediante una interface podemos indicar los mecanismos de comunicacin entre dos subsistemas, sin indicar su estructura interna. De esta forma podemos tener deferentes implementaciones de la misma.

Ejemplo: La interface AgendaInterface que modela la informacin de la aplicacin (Capa de Datos). Esta puede implementarse para guardar los datos en memoria (AgendaVector), en un archivo (AgendaArchivo) o en una Bbdd (AgendaBbdd). As mismo podemos tener varias aplicaciones que hagan uso de objetos que implementen la misma interface. Capa de Presentacin Capa de Datos AgendaVector

AbstractMenu AbstractMenu(String []) arrancar() stract ejecutarOpcion(int opcion) AgendaInterface AplicacionSwing

AgendaArchivo

AplicacionWeb Persona

AgendaBbdd

Clases de utilidad
Profesor Vladimir Bataller

El paquete java.util

Es uno de los paquetes incluidos en el jdk de java y nos ofrece clases para realizar tareas frecuentes de manipulacin de la informacin de forma sencilla.
Permiten crear clases contenedoras de varios objetos los cuales se pueden recorrer de forma secuencial. Permite crear matrices dinmicas (Que pueden cambiar su numero de elementos). Permite almacenar un conjunto de objetos con estructura de pila (el ltimo dato insertado, ser el primero en sacarse.) Almacena objetos, asocindole a cada uno una clave. No puede haber dos elementos con la misma clave. Almacena objetos, asocindole a cada uno una clave, los elementos quedarn ordenados segn la clave. Almacena objetos, sin importar el orden y sin posibilidad de repetir elementos. Almacena objetos, de los cuales se puede establecer la posicin en la que se ubican

Algunas de las clases e interfaces de este paquete frecuentemente empleadas son: Enumeration e Iterator (Interface) List,Vector y ArrayList Stack

Hashtable TreeMap HashSet LinkedList

You might also like