You are on page 1of 28

Sumario

Programacin orientada a objetos (POO)

Introduccin a la


Encapsulacin
Herencia

programacin con JAVA Polimorfismo

Lenguaje de programacin Java

Elena Hernndez Pereira


scar Fontenla Romero
Departamento de Computacin
Antonio Faria
Facultad de Informtica
Universidad de A Corua
Tecnologa de la Programacin
Febrero 2007
Introduccin a la programacin con JAVA 2

Programacin orientada a objetos: POO (I)

La programacin orientada a objetos se basa en la programacin


de clases

Programacin orientada a Un programa se construye a partir de un conjunto de clases

objetos (POO) Clase: una agrupacin de datos (variables) y de funciones


(mtodos) que operan sobre los datos

A estos datos y funciones pertenecientes a una clase se les


denomina variables y mtodos o funciones miembro

Todos los mtodos y variables se definen dentro del bloque de la


clase

Introduccin a la programacin con JAVA 4


Programacin orientada a objetos: POO (II) Programacin orientada a objetos: POO (III)

Conceptos importantes de la POO: Conceptos importantes de la POO:

Encapsulacin: Herencia:
Las estructuras de datos y los detalles de la Una clase (subclase) puede derivar de otra
implementacin de una clase se hallan ocultos de (superclase)
otras clases del sistema La subclase hereda todas las variables y mtodos de
Control de acceso a variables y mtodos la superclase
Las subclase puede redefinir y/o aadir variables y
mtodos
Fomenta la reutilizacin de cdigo

Introduccin a la programacin con JAVA 5 Introduccin a la programacin con JAVA 6

Programacin orientada a objetos: POO (IV) Programacin orientada a objetos: POO (V)

Ejemplo herencia: Polimorfismo:


Es la capacidad de tener mtodos con el mismo
Clase PERSONA Clase ALUMNO (SUBCLASE) nombre y diferente implementacin
Una operacin puede tener ms de un mtodo que la
implementa

CLASE Mtodo tocar


INSTRUMENTO
NIF Titulacin
Nombre Curso
Apellidos
Edad

Introduccin a la programacin con JAVA 7 Introduccin a la programacin con JAVA 8


Clases y objetos

Una vez definida e implementada una clase, es posible


declarar elementos de esta clase: objetos
De una nica clase se pueden declarar o crear numerosos
objetos.
Programacin con Java
La clase es lo genrico: es el patrn o modelo para crear
objetos.
Cada objeto tiene sus propias copias de las variables
miembro, con sus propios valores
Vista externa de una clase: interfaz
Variables y mtodos visibles por otras clases

Introduccin a la programacin con JAVA 9

Bibliografa (I) Bibliografa (II)

B. Eckel. Piensa en Java (2 edicin). Prentice Hall. 2002 J. Jaln, J.I. Rodrguez, I. Mingo, A. Imaz, A. Brazlez, A.
Larzabal, J. Calleja, J. Garca. Aprenda java como si
estuviese en primero. Escuela Superior de Ingenieros
H.M. Deitel, P.J. Deitel. Cmo programar en Java (5 Industriales. Universidad de Navarra
edicin). Pearson Prentice-Hall. 2004 http://mat21.etsii.upm.es/ayudainf/

D. Arnow, G. Weiss, C.-Brooklyn. Introduccin a la Fco. J. Ceballos, Java 2. Curso de programacin, Ra-Ma,
programacin en Java. Un enfoque orientado a 2000
objetos. Pearson Addison Wesley. 2000

K. Arnold, J. Gosling, D. Holmes. El lenguaje de


programacin JAVA (3 edicin). Pearson Addison
Wesley. 2001

Introduccin a la programacin con JAVA 11 Introduccin a la programacin con JAVA 12


Introduccin (I) Introduccin (II)

Desarrollado por Sun Microsystems en 1995 Caractersticas (continuacin):


Caractersticas: Robusto
Simple Fuerte comprobacin de tipos y de lmites de los arrays

Cdigo similar a C/C++ pero eliminando algunos elementos Ausencia de punteros


conflictivos: punteros, herencia mltiple, etc. Manejo de errores (excepciones)
Portable Seguro
Representacin y comportamiento nico para los tipos No se puede acceder a memoria directamente mediante
primitivos punteros
Sistema abstracto de ventanas que presenta el mismo Gestor de seguridad (Security Manager) para los bytecodes
comportamiento en distintos entornos
Orientado a objetos puro
Multiplataforma
Obliga a trabajar en trminos que facilitan la reutilizacin

Introduccin a la programacin con JAVA 13 Introduccin a la programacin con JAVA 14

Introduccin (III) Introduccin (IV)

Caractersticas (continuacin): Inconvenientes:


Orientado a Internet Amplio nmero de plataformas a soportar
No todas soportan la misma versin del lenguaje
Multihilo (multi-thread)
Sun slo soporta las versiones de MS Windows y
Da soporte a la programacin de procesos concurrentes Solaris
Dinmico Lentitud y amplio consumo de recursos
Permite la carga dinmica de clases La mquina virtual est interpretando continuamente
Bsqueda de nuevos objetos o clases en entornos el ByteCode
distribuidos Utilizacin de los elementos avanzados de la
Lenguaje interpretado plataforma:
Recolector de basura, gestor de seguridad, carga
dinmica de clases, comprobaciones en tiempo de
ejecucin, etc.
Introduccin a la programacin con JAVA 15 Introduccin a la programacin con JAVA 16
Java Development Kit (JDK) Modelo de ejecucin
Versiones:
1995 - JDK 1.0
1997 - JDK 1.1
APLICACIONES JAVA
1998 - JDK 1.2 (Java 2) APLICACIONES
2000 - JDK 1.3 NO JAVA
API
2003 - JDK 1.4
2004 JDK 1.5 JAVA VIRTUAL MACHINE (JVM)

Java Runtime Environment (JRE) SISTEMA


SISTEMA OPERATIVO
OPERATIVO
Java Virtual Machine (JVM)
HARDWARE
HARDWARE
Java API: lenguaje bsico + biblioteca estndar de
clases

Introduccin a la programacin con JAVA 17 Introduccin a la programacin con JAVA 18

Compilacin y ejecucin (I) Compilacin y ejecucin (II)


Entorno de ejecucin de Java
Entorno de (Java Runtime Environment)
compilacin de Java
Compilador: javac
Cargador
Cargador de
de Libreras
Libreras de
de
Cdigo fuente extensin .java Cdigo
Cdigo fuente
fuente Bytecode Clases
Clases clases
clases de
de Java
Java
Java
Java (.java)
Ficheros compilados (bytecodes) extensin .class (.java) de Java

Ejecucin: java Compilador


Compilador
Compilador Intrprete
Intrprete
Compilador
Compilador Bytecodes locales (Just-In-Time
(Just-In-Time Mquina
Ejecuta los ficheros .class de
de Java
Java
Bytecodes locales
ooBytecodes
enviados
enviados aa
de
de Java
Java Compiler)
Compiler) virtual
(javac)
(javac) travs
travs de la red
de la
Herramienta de compresin: jar red de Java
(JVM)
Permite comprimir los ficheros compilados extensin Cdigo mquina
Sistema
Sistema de
de ejecucin
ejecucin
.jar ByteCode
ByteCode dede nativo
Java
Java (.class)
(.class)
Variable de entorno CLASSPATH: determina dnde se Sistema
Sistema operativo
operativo
encuentran las clases de Java (del API)
Hardware
Hardware

Introduccin a la programacin con JAVA 19 Introduccin a la programacin con JAVA 20


Clases y objetos en Java (I) Clases y objetos en Java (II)

La clase consiste en: Definicin:


Atributos (datos que contienen: variables) class NombreClase

Mtodos (operaciones que se les puede aplicar) {


// Atributos

Un programa est compuesto por un conjunto


// Mtodos
de clases (al menos una)
}
Debe existir un mtodo main() en una de ellas
Atributos variables
De tipo primitivo u otra clase
La clase define un determinado tipo de objetos
Mtodos declaraciones de funciones:
abstracci
abstraccin
Contiene el cdigo que se ejecutar cuando se invoque

Introduccin a la programacin con JAVA 21 Introduccin a la programacin con JAVA 22

Clases y objetos en Java (III) Clases y objetos en Java (IV)


Ejemplo de una clase: Ejemplo de una clase:
/** Clase de ejemplo: cuenta bancaria */ class Punto /* Clase de ejemplo: Punto */
class CuentaBancaria {
{ double _x; // atributo x
long numero; double _y; // atributo y
Punto
string titular; Atributos
long saldo; -_x : double double x(){ // mtodo x()
-_y : double return _x;
void ingresar (long cantidad) +x() : double }
{ +y() : double double y(){ // mtodo y()
saldo = saldo + cantidad; +x (x:double) return _y;
} +y (y:double) }
void retirar (long cantidad) Mtodos void x(double d){ // mtodo x(double)
{ _x = d;
if (cantidad <= saldo) }
saldo = saldo cantidad; void y(double d){ // mtodo y(double)
} _y = d;
} }
}
Introduccin a la programacin con JAVA 23 Introduccin a la programacin con JAVA 24
Clases y objetos en Java (V) Clases y objetos en Java (VI)

Las clases anteriores no pueden ejecutarse por s Declaracin de los objetos de una clase:
mismas NombreClase nombreObjeto;
Son slo definiciones que permiten crear y Ejemplo: Punto miPunto;
manipular objetos de esa clase
Arranque de un pograma en java, en un clase Creacin de los objetos de la clase:
especial del programa:
Operador new
Contiene el mtodo main() comienza la
nombreObjeto = new NombreClase();
ejecucin del programa
Ejemplo: miPunto = new Punto();
En un fichero fuente puede haber varias clases pero
slo una que contenga el mtodo main()
Se pueden declarar y crear al mismo tiempo:
Punto miPunto = new Punto();

Introduccin a la programacin con JAVA 25 Introduccin a la programacin con JAVA 26

Clases y objetos en Java (VII) Clases y objetos en Java (VIII)


Ejemplo: fichero Prueba.java
Qu podemos hacer con el objeto?
class Punto /* Clase Punto anterior */
Acceder a sus atributos y mtodos {
...
Para acceder se usa la notacin punto: }

nombreObjeto..caracterstica; public class Prueba


{
// Programa principal
Ejemplos: public static void main (String [] args)
{
miPunto._x Punto p = new Punto();
p.x(3.0);
miPunto._y System.out.println(Coordinada x = + p.x());
//escribe 3 por pantalla.
miPunto.x() deben incluirse los parntesis }
La ejecucin de un mtodo: paso de mensaje
Introduccin a la programacin con JAVA 27 Introduccin a la programacin con JAVA 28
Clases y objetos en Java (IX) Clases y objetos en Java (X)

Tipos de variables: Asignacin en variables de objetos:


Primitivas (entero, flotante, carcter, etc.) Son referencias Punto1 Punto2
De objeto Punto punto1 = new Punto();
Punto punto2 = new Punto();
Punto1.x(4);
Asignacin en variables primitivas: Punto2.y(7);
_x _x
4.0
0.0 0.0
Realiza una copia de los valores Punto2 = Punto1;
_y _y
int numero1 = 12, numero2 = 18; numero1 numero2
0.0 0.0
7.0
numero2 = numero 1; 12 18
Este objeto se ha perdido:
Entra en accin el recolector
de basura (garbage colector)

Introduccin a la programacin con JAVA 29 Introduccin a la programacin con JAVA 30

Clases y objetos en Java (XI) Clases y objetos en Java (XII)

Comparacin entre objetos: Modificadores de clase:


Compara referencias, no valores de atributos
Punto1 Punto2 Punto1 Punto2 class nombre_clase
[modificador]
{
_x _x _x _x Variables
4.0 0.0 4.0 4.0
_y _y _y _y
Mtodos
0.0 7.0 0.0 0.0
}
Punto1 == Punto2 true Punto1 == Punto2 false

Introduccin a la programacin con JAVA 31 Introduccin a la programacin con JAVA 32


Clases y objetos en Java (XIII) Clases y objetos en Java (XIV)

Tipos de clases (modificador): Hola Mundo!!

Pblica (public): accesible desde otras clases (del


mismo paquete). Para acceder desde otros paquetes,
primero tienen que ser importadas. /**
* Programa HolaMundo
* que presenta el mensaje Hola Mundo
Abstracta (abstract): no se instancia, sino que se */
utiliza como clase base para la herencia.
public class HolaMundo
{
Final (final): clase que termina una cadena de public static void main (String [] args)
herencia. No se puede heredar de una clase final. {
System.out.println (" Hola Mundo!! ");
}
Sincronizada (synchronized): todos los mtodos }
definidos en la clase son sincronizados no se puede
acceder al mismo tiempo a ellos desde distintos threads

Introduccin a la programacin con JAVA 33 Introduccin a la programacin con JAVA 34

Clases y objetos en Java (XV) Clases y objetos en Java (XVI)

Caractersticas de las clases en Java: Caractersticas de las clases en Java:


Todas las variables y funciones deben pertenecer a En un fichero pueden existir varias clases pero slo
una clase No hay variables ni funciones globales una pblica (public)
Si una clase deriva de otra hereda todas sus El fichero (.java) debe llamarse como la clase
variables y mtodos pblica
class Circulo
class Circulo {{
Una clase slo puede heredar de una nica clase }}
...
...

no hay herencia mltiple


public class Prueba
public class Prueba
Si al definir una clase no se especifica la clase de la {{

que deriva por defecto deriva de la clase


public
public static
static void
void main
main (String
(String []
[] args)
args)
{{
Object (base de la jerarqua de Java) }}
Circulo
Circulo cc == new
new Circulo();
Circulo();

}}
Prueba.java
Prueba.java

Introduccin a la programacin con JAVA 35 Introduccin a la programacin con JAVA 36


Clases y objetos en Java (XVII) Clases y objetos en Java (XVIII)

Paquetes (packages): Paquetes (continuacin):


Es una agrupacin de clases Se usan con las siguientes finalidades:
En la API de Java 1.2 existen 59 paquetes estndar Agrupar clases relacionadas (java.Math , java.lang, )
El usuario puede crear sus propios paquetes Para evitar conflictos de nombres el domino de nombres
de Java es Internet
Para que una clase pertenezca a un paquete hay que
Para ayudar en el control de la accesibilidad de clases y
introducir como primera sentencia: miembros
package nombrePaquete;
Importacin de paquetes:
El nombre de un paquete puede constar de varios
nombres unidos por puntos: Sentencia import:
import nombrePaquete;
Ejemplo: java.awt.event
Slo se importa el paquete y no subpaquetes:
Todas las clases que forman parte de un paquete deben
estar en el mismo directorio Ejemplo: Si se importa java.awt no se importa
java.awt.event

Introduccin a la programacin con JAVA 37 Introduccin a la programacin con JAVA 38

Clases y objetos en Java (XIX) Clases y objetos en Java (XX)

Ejemplos: Control de acceso a las variables y mtodos:

Importacin de una clase: private: slo pueden ser accedidos desde dentro de la
import es.udc.fic.oscar.tp.ordenar.QuickSort; clase (no desde las subclases)

Importacin de todo un paquete:


protected: slo pueden ser accedidos dentro de la clase,
import es.udc.fic.oscar.tp.ordenar.*; las subclases de la clase y las clases del paquete
En ambos casos en el classpath debe especificarse
public: cualquier clase desde cualquier lugar puede
el directorio del paquete:
acceder a las variables y mtodos
CLASSPATH /es/udc/fic/oscar/tp/ordenar
friendly o package (sin declaracin especfica): son
accesibles por todas las clases dentro del mismo
paquete, pero no por los externos al paquete

Introduccin a la programacin con JAVA 39 Introduccin a la programacin con JAVA 40


Clases y objetos en Java (XXI) Clases y objetos en Java (XXII)
Circulo.java
Circulo.java
EditorGrafico Circulo Punto
-_centro : Punto -_x : double package
+main() -_radio : double -_y : double package graficos;
graficos;
public
public class
class Circulo
Circulo {{
+mostrar() 1 1 +mostrar() private
+setCentro( x : double, y : double ) +setX( x : double ) private Punto
Punto _centro;
_centro;
+setY( y : double ) private
private double _radio;
double _radio;

public
public Circulo()
Circulo() //constructor
Especificador Clase Subclase Paquete Mundo package
package graficos;
graficos;
//constructor
graficos (paquete)
{{
class
class Punto
Punto _centro
{{ _centro == new
new Punto();
Punto();
private private
private double
double _x;
_x;
}}
private
private double
double _y;
_y; public
import public void
void setCentro(double
setCentro(double a,
a, double
double b)
b)
protected import graficos.*;
graficos.*; {{
public
public class
class EditorGrafico
EditorGrafico void setX(double
void setX(double d) d) _centro.x(a);
_centro.x(a);
{{ {{ _centro.y(b);
public public _centro.y(b);
public static void
static void main
main _x
_x == d;
d; }}
(String
(String []
[] args)
args) }}
{{ void setY(double
void setY(double d) d)
package
public
public void
void setRadio(double
setRadio(double d)
d)
Circulo
Circulo cc == new
new Circulo();
Circulo(); {{ {{
c.setCentro(3
c.setCentro(3 ,, 4);4); _y
_y == d;
d; _radio = d;
_radio = d;
c.mostrar();
c.mostrar(); }} }}
c.radio(2.5);
c.radio(2.5); void
void mostrar()
mostrar()
c.mostrar();
c.mostrar(); {{ public
public void
void mostrar()
mostrar()
}} System.out.println("Valores
System.out.println("Valores {{
de
de xx ee y:
y: "" ++ _x
_x ++ "" "" ++ _y);
_y);
System.out.println("Circulo:
}} }} System.out.println("Circulo:
"" ++ _radio
_radio ++ "" ");
");
}} _centro.mostrar();
_centro.mostrar();
}}
Prueba.java
Prueba.java Punto.java
Punto.java
}}

Introduccin a la programacin con JAVA 41 Introduccin a la programacin con JAVA 42

Clases y objetos en Java (XXV) Clases y objetos en Java (XXIII)


Clases abstractas:
Es una clase de la que no se pueden crear objetos
Herencia:
Utilidad: permitir que otras clases deriven de ella Construccin de una clase a partir de otra
proporcionando un modelo y mtodos generales de utilidad
Ejemplo: Mamfero, Perro, Gato
Se declaran empleado la palabra abstract:

public abstract class Geometria { . . . } Para indicar que una clase deriva de otra: extends
Pueden contener implementacin genrica de los mtodos. Ejemplo: class Perro extends Mamifero { ... }
Cuando una clase deriva de otra hereda todas sus variables
Mtodos de clase (static) p.ej main()
y mtodos (implementacin general)
Actan sobre la clase. No actan sobre objetos a travs del
operador punto Pueden ser redefinidas en la clase derivada (subclase)
Se definen usando la palabra static
Puede aadir nuevas variables y/o mtodos
Para usarlos se utiliza el nombre de la clase: Math.sin(1)

no necesito crear una instancia previamente [new] No se permite herencia mltiple ?:


Son lo ms parecido a variables y funciones globales de otros NO
lenguajes como, por ejemplo, C/C++
Introduccin a la programacin con JAVA 43 Introduccin a la programacin con JAVA 44
Clases y objetos en Java (XXIV) Clases y objetos en Java (XXV)
Ejemplo1. Herencia simple
Herencia (continuacin): abstract class Elemento { public class Principal {
public abstract void dibuja(); public static void main(String[] args) {
Todas las clases creadas por el programador tienen public void repinta() {
una superclase: System.out.println("repintando Elemento..."); System.out.println("executando");
Elemento A = new SubElementoA();
}
Cuando no se especifica deriva de java.lang.Object } Elemento B = new SubElementoB();
A.dibuja();
La clase java.lang.Object es la raz de toda la class SubElementoA extends Elemento{ B.dibuja();
public void dibuja(){ }
jerarqua de clases System.out.println("dibujando SubElementoA..."); }
Object }
}

class SubElementoB extends Elemento{ $javac d. Principal.java


Mamifero
public void dibuja(){ $java Principal
Vehiculo System.out.println("dibujando SubElementoB..."); dibujando SubElementoA...
Circulo
} dibujando SubElementoB...
public void repinta(){ repintando Elemento...
System.out.println("repintando SubElementoB..."); repintando SubElementoB...
Perro Gato }
}

Introduccin a la programacin con JAVA 45 Introduccin a la programacin con JAVA 46

Clases y objetos en Java (XXVI) Clases y objetos en Java (XXVII)


Ejemplo2. Herencia simple Persona

abstract class Persona { +nombre: String


Interfaz (Interface).
private String nombre; +Persona(n: String) Puede ser vista como una clase abstracta en la que ningn mtodo puede tener
protected Persona (String n) { +obtenNombre():
get String
+obtenTrabajo(): String
implementacin.
nombre = n; Ej: interface Cloneable { ... }
}
public String getNombre() {
return nombre;
Principal
Mtodos son implcitamente pblicos y abstractos.
}
Estudiante
+main() Atributos son implcitamente: public, static y final.
abstract public String obtenTrabajo();
} -titulacion: String Una clase que implemente un interfaz ha de definir todos sus mtodos.
class Estudiante extends Persona {
+Estudiante(tit: String, n: String) Clusula implements
+getTitulacion(): String
private String _titulacion; +toString(): String Ej: class Circulo extends Elemento implements Cloneable
+obtenTrabajo(): String
public Estudiante (String tit, String n) {
super(n);
_titulacion = tit;
1 clase puede:
} public class Principal { extender 1 superclase
public String getTitulacion() { public static void main (String[] args) Implementar n interfaces.
return titulacion; {
} Estudiante estu =
JAVA: Permite Herencia mltiple por implementacin.
public String toString() { new Estudiante(Enx. Informtica, Pepe);
return getNombre() + , + obtenTrabajo(); System.out.println( estu ); // llama a toString SuperClase Int1 Int2
} System.out.println( estu.getNombre() );
public String obtenTrabajo() { }
return Estudiante de + getTitulacion(); }
extends implements
}
}
Clase
Introduccin a la programacin con JAVA 47 Introduccin a la programacin con JAVA 48
Clases y objetos en Java (XXVIII) Clases y objetos en Java (XXIX)
Ejemplo 1. Uso comn de interface Ejemplo 2. Herencia mltiple
class ProfesorUniversidad extends Profesor implements Investigador {
class Profesor { private String investigacion;
interface ConNombre { private String nombre;
interface ConNombre { public ProfesorUniversidad(String nom, String inv) {
public String obtenerNombre(); public Profesor (String n) {
public String obtenerNombre(); super(nom);
} this.nombre = n;
} this.investigacion = inv;
}
public String getNombre() { }
interface Usuario extends ConNombre {
class UnaClaseConNombre implements return nombre; public String getCampoInvestigacion() {
ConNombre { public boolean autorizar (Usuario u); return investigacion;
}
public String obtenerNombre() { public int obtenerUID(); } // Implem el interface
return Un nombre; }
interface Investigador{
} public String getCampoInvestigacion() ; //getNombre() se hereda
} class UsuarioImpl implements Usuario { } }

Ha de implementar obtenerNombre() public String obtenerNombre() {return Un nombre; }


public boolean autorizar(Usuario u) {return false;}
public class Principal {
public int obtenerUID() {return -1;} public static void main(String[] args) {
Profesor A = new Profesor("Pepe Botella");
public void metodo1() {.} Profesor B = new ProfesorUniversidad("Nirvana","Musica Celestial");
public int metodo2() {.} ProfesorUniversidad C = new ProfesorUniversidad("Migueln","Deportes");
System.out.println(A.getNombre());
} System.out.println(B.getNombre());
Ha de implementar obtenerNombre(), System.out.println(B.getCampoInvestigacion()); //ERRNEO tratado como Profesor
autorizar() y obtenerUID(), porque al ser System.out.println(C.getCampoInvestigacion());
Usuario un interface, no puede haber }
implementacin all. }

Introduccin a la programacin con JAVA 49 Introduccin a la programacin con JAVA 50

Tipos primitivos (I) Tipos primitivos (II)

El tamao de los tipos no vara entre plataformas Clases envoltura de los tipos primitivos:
Se puede declarar un tipo primitivo como no
Tipo primitivo Tamao Mnimo Mximo Tipo envoltura
primitivo (manejo como objeto).
boolean - - - Boolean
char 16 bits Unicode 0 Unicode +216 -1 Character Ejemplo:
byte 8 bits -128 +127 Byte
char c = 'x';
short 16 bits -215 +215 -1 Short
int 32 bits -231 +231 -1 Integer Character C = new Character('x');
long 64 bits -263 +263 -1 Long
float 32 bits -3.4 x 1038 +3.4 x 1038 Float
double 64 bits -3.4 x 10308 +3.4 x 10308 Double
void - - - Void

Introduccin a la programacin con JAVA 51 Introduccin a la programacin con JAVA 52


Literales Variables

Numricos: como en otros lenguajes Definicin: tipo nombreVariable;


Se usa una L para que sea long y no int: 29L Variables de la clase: se les asigna un valor por
Se usa una F para que sea float y no double: 29.3F defecto (ej: int 0)
Carcter: comillas simples ('a') Variables locales de mtodos: deben inicializarse
siempre de forma explcita
Caracteres especiales:
\n : salto de lnea Modificador final:
\t : tabulador Impide que se altere el valor de la variable constante
Etc. Ejemplos:
Cadenas caracteres (String): comillas dobles final double PI = 3.1416;
("Mi cadena") final int MAXIMO = 100;

Introduccin a la programacin con JAVA 53 Introduccin a la programacin con JAVA 54

Identificadores (I) Identificadores (II)

Normas: Convenios: !!
Comienza por una letra, un guin bajo ( _ ) o un Nombres de clase: empiezan por mayscula (Circulo)
smbolo de dlar ($) Nombres de mtodos o atributos: empiezan por
Los dems caracteres pueden ser letras o dgitos minscula ( println() , unCirculo, )
Ejemplos: Constantes: todo en maysculas (Math.PI)
Correctas: midato, _midato, $midato Identificadores formados por varias palabras:
Incorrectas: 7clases , ?clases comienzo de cada nueva palabra en maysculas
Java distingue entre maysculas y minsculas Ejemplos: dibujaCuadrado(), ClaseCuadrado, unCuadrado

Introduccin a la programacin con JAVA 55 Introduccin a la programacin con JAVA 56


Operadores (I) Operadores (II)
Ejemplos:
Se parece a C ??
d = e++; // Se asigna e a d y luego se incrementa e
d = ++e; // Se incrementa e y luego se asigna e a d
Aritmticos: +, -, *, /, %
a += b; // equivale a x = x + y;
Asignacin: =, +=, -=, *=, /=, %=
a *= b; // equivale a x = x * y;
Incrementales: ++, --
c = 3;
Relacionales: >, >=, <, <=, ==, !=
a = c++; // Resultado: a = 3 y c = 4
Lgicos: &&, ||, !, &, | a = ++c; // Resultado: a = 4 y c = 4

Concatenacin de cadenas: +
perro + gato // Resultado perrogato
Introduccin a la programacin con JAVA 57 Introduccin a la programacin con JAVA 58

Comentarios Mtodos (I)

// comentarios para una sola lnea Son similares a las funciones de otros lenguajes
Definicin:

/* comentarios de una [modificadores] tipo nombre (parmetros)


o ms lneas */ {
// Cuerpo del mtodo
}
/** comentario de documentacin, de una o ms
lneas. Permite generar documentacin modificadores: indican el control de acceso al mtodo
automticamente con la herramienta javadoc */
tipo: tipo del dato que devuelve el mtodo (void = nada)
parmetros: declaraciones separadas por comas

Introduccin a la programacin con JAVA 59 Introduccin a la programacin con JAVA 60


Mtodos (II) Mtodos (III)

Para devolver valores: return Ejemplo:


El mtodo termina
public int min(int a, int b)
Al llegar a la llave de cierre
{
Al ejecutar el return int minimo;
Cada
Cada parmetro
parmetro concon susu tipo.
tipo.
No
No es
es vlido:
vlido: int
int a,
a, bb
Si el mtodo no es de tipo void debe terminar if (a<b)
siempre con un return minimo = a;

Si el mtodo es de tipo void se puede forzar el fin else


Indica
Indica el
el valor
valor que
que
con la instruccin: return; minimo = b; devuelve
devuelve elel mtodo
mtodo
return minimo;
}

Introduccin a la programacin con JAVA 61 Introduccin a la programacin con JAVA 62

Mtodos (IV) Mtodos (V)

Ejemplo: Mtodos especiales: constructores


Invocados automticamente en la creacin de un objeto
El nombre del constructor es el mismo que el de la clase
private void mostrar(int numero) Ejemplo:
{ class Ejemplo {
int dato;
System.out.println("Valor: " + numero);
Ejemplo() {
} System.out.printl("Creando el ejemplo");
dato = 10;
}
}

Introduccin a la programacin con JAVA 63 Introduccin a la programacin con JAVA 64


Mtodos (VI) Mtodos (VII): Clonacin

Sobrecarga de mtodos: Paso por referencia y valor:


Varios mtodos con el mismo nombre pero diferente Por valor: los tipos primitivos
cabecera Por referencia: los objetos
Ejemplo:
public class Ejemplo { Si se quiere pasar por valor los objetos:
public int interes(int a, int b) { . . . . . .} Hacer una copia antes de pasarlo: Clonacin de objetos
public int interes(double a, double b) { . . . . . .} Mtodo: clone()
public int interes(int a, int b, int c) { . . . . . .} Indicar que la clase es clonable: implements Cloneable
public int interes() { . . . . . .} Se copian automticamente todos atributos primitivos
} Obligacin de clonar atributos de objeto (slo copia referencias)
Se diferencian por el tipo y nmero de parmetros
Introduccin a la programacin con JAVA 65 Introduccin a la programacin con JAVA 66

Mtodos (VIII): Clonacin Clonacion.java


Clonacion.java
Mtodos (IX): Clonacin
public
public class
class Clonacion
Clonacion implements
implements Cloneable
Ejemplos: Object.clone()
Cloneable
{{
int
int dato;
dato;
public
public class
class Referencia
Referencia E:\TP\ejemplos>javac
ClonacionReferencia.java
Clonacion (int
(int valor)
valor) {{
E:\TP\ejemplos>java dato -classpath e:\tp\ejemplos Referencia
{{ dato == valor;
valor;
int dato; a: 10 }
Protected clone (); accesible slo desde jerarqua.
int dato; }
b: 10 public
Referencia
Referencia (int
(int valor)
valor) {{ a: 11 public static
static void
void main(String[]
main(String[] args)
args)
dato = valor; throws
throws CloneNotSupportedException
CloneNotSupportedException
dato = valor; b: 11
}} {{
Clonacion
Reserva memoria necesaria.
public
public static
static void
void main(String[]
main(String[] args)
args) Clonacion aa == new
new Clonacion(10);
Clonacion(10);
Copia bit a bit.
{{ //
// Clona
Clona el
el objeto
objeto
Clonacion
Referencia
Referencia aa == new
new Referencia(10);
Referencia(10); Clonacion bb == (Clonacion)
(Clonacion) a.clone();
a.clone();
//Referencia
//Referencia alal objeto System.out.println("a:
System.out.println("a: "" ++ a.dato);
Devuelve 1 objeto Object
objeto a.dato);
Referencia
Referencia bb == a;
a; System.out.println("b:
System.out.println("b: "" ++ b.dato);
b.dato);
System.out.println("a: " + a.dato);
System.out.println("a: " + a.dato); a.dato++;
a.dato++;
System.out.println("b: " + b.dato);
System.out.println("b: " + b.dato); System.out.println("a: " + a.dato);
System.out.println("a: " + a.dato);
a.dato++;
a.dato++; System.out.println("b:
System.out.println("b: "" ++ b.dato);
b.dato);
Se usar de base para implementar nuestro clone()
System.out.println("a: " + a.dato);
System.out.println("a: " + a.dato); }}

System.out.println("b: b.dato); }}
System.out.println("b: "" ++ b.dato);
}} E:\TP\ejemplos>javac Clonacion.java
}} E:\TP\ejemplos>java -classpath e:\tp\ejemplos Clonacion Normalmente 1 instruccin = super.clone()
a: 10
b: 10
Referencia.java
Referencia.java a: 11
b: 10

Introduccin a la programacin con JAVA 67 Introduccin a la programacin con JAVA 68


Mtodos (X): Clonacin Mtodos (IX): Clonacin
Clonacin Objetos simples.
Implementar interface Cloneable
Clonacin Objetos compuestos.
Object.clone() chequea si es clonable. 1. Copia superficial.
Sino CloneNotSupportedException
Como en objetos simples.
Reescribir como pblico. public Object clone() {}
Copia solamente referencias a objetos.
Llamar a super.clone() al principio
2. Copia en profundidad.
Clonar superficialmente el Objeto compuesto.
Clonar a su vez cada una de las referencias a los
objetos
Implica que dichos objetos han de ser clonables.

//Imprime: 3 3 2
Introduccin a la programacin con JAVA 69 Introduccin a la programacin con JAVA 70

Introduccin a la programacin con JAVA 71 Introduccin a la programacin con JAVA 72


Estructuras de control: sentencias
condicionales (I)
Condicin simple: if

if (expresin)
{
sentencia1;
...
sentencia N;
}

Las llaves delimitan el bloque de sentencias y no


son necesarias si slo hay una sentencia

Introduccin a la programacin con JAVA 73 Introduccin a la programacin con JAVA 74

Estructuras de control: sentencias Estructuras de control: sentencias


condicionales (II) condicionales (III)
Ejemplos:
Condicin doble: if else

if (calificacion >= 5)
if (expresin) System.out.println("Aprobado");
else
{
System.out.println("Suspenso");
Grupo de sentencias1;
if (saldo >= importe)
}
{
else saldo = saldo importe;
System.out.println("Saldo insuficiente");
{
}
Grupo de sentencias2; else
System.out.println("Error: saldo insuficiente");
}

Introduccin a la programacin con JAVA 75 Introduccin a la programacin con JAVA 76


Estructuras de control: sentencias Estructuras de control: sentencias
condicionales (IV) condicionales (V)
Condiciones mltiples: if else if else ... Condiciones mltiples: switch

if (expresin1){
switch (expresin) {
Grupo sentencias1;
case valor1: Grupo sentencias1;
} else if (expresin2) {
Grupo sentencias2; case valor2: Grupo sentencias2;
} else if (expresin3) { ...
Grupo sentencias3; case valorN: Grupo sentenciasN;
} else { [default: Grupo sentenciasN+1;]
Grupo sentencias4; }
}

Introduccin a la programacin con JAVA 77 Introduccin a la programacin con JAVA 78

Estructuras de control: sentencias Estructuras de control: sentencias


condicionales (VI) condicionales (VII)
Caractersticas del switch: Ejemplo:

Cada sentencia case se corresponde con un nico switch (dia) {


valor de la expresin No rangos ni condiciones
case 1: System.out.println("Lunes"); break;
La sentencia default es opcional y slo se ejecuta si case 2: System.out.println("Martes"); break;
no se cumple ninguno de los case
case 3: System.out.println("Mircoles"); break;
Cuando se ejecuta una sentencia case tambin se
case 4: System.out.println("Jueves"); break;
ejecutan las que vienen a continuacin break
case 5: System.out.println("Viernes"); break;
case 6: System.out.println("Sbado"); break;
case 7: System.out.println("Domingo"); break;
}

Introduccin a la programacin con JAVA 79 Introduccin a la programacin con JAVA 80


Estructuras de control: sentencias Estructuras de control: sentencias repetitivas (I)
condicionales (VIII)
Ejemplo: Nmero de das del mes 1,2,3

Bucle while:
switch (mes) {
case 1:
case 3: while (expresin) {
case 5:
case 7: Grupo de sentencias;
case 8:
case 10: }
case 12: NDias = 31; break;
case 4:
case 6: Bucle do while:
case 9:
case 11: NDias = 30; break;
case 2: do {
if ( ((year % 4 == 0) && !(year % 100 == 0)) || (year % 400 == 0) )
NDias = 29; Grupo de sentencias;
else NDias = 28;
break;
} while (expresin)
}

Introduccin a la programacin con JAVA 81 Introduccin a la programacin con JAVA 82

Estructuras de control: sentencias repetitivas (II) Estructuras de control: sentencias repetitivas (III)

Ejemplos:

Bucle for:
contador = 1;
while (contador <= 10)
{ for (inicializacin; expresin; incremento)
suma = suma + contador;
contador++; {
} Grupo de sentencias;
contador = 1; }
do
{
suma = suma + contador;
contador++;
} while (contador <= 10)

Introduccin a la programacin con JAVA 83 Introduccin a la programacin con JAVA 84


Estructuras de control: sentencias repetitivas (IV) Estructuras de control: sentencias repetitivas (V)

Ejemplos: Sentencia break:


Vlida para sentencias condicionales y repetitivas
for (contador=1;contador<=10;contador++)
Finaliza la ejecucin del bucle (no ejecuta las
suma = suma + contador; sentencias que vienen despus)
Sentencia continue:
for (i = 10, j = 0; i > j; j++, i--) Se usa slo en las sentencias repetitivas
System.out.println("Una iteracin del bucle + j); Finaliza la iteracin actual del bucle y comienza la
siguiente iteracin

Introduccin a la programacin con JAVA 85 Introduccin a la programacin con JAVA 86

Estructuras de control: sentencias repetitivas (VI) Cadenas de caracteres (I)

Ejemplos:
Clase de la biblioteca estndar: String

for (suma=0, numero=1; numero<5; numero++)


Las cadenas almacenadas en la clase string no se
{ pueden modificar
if (numero<=1) suma
Son objetos constantes que contienen la cadena que se
break; //sale del bucle 0 les asign durante su creacin
suma = suma + numero;
} Se pueden crean como cualquier otro objeto:
String cadena = new String(cad);
for (suma=0, numero=1; numero<5; numero++)
{
suma
Ejemplos:
if (numero<=1)
continue; String frase = new String("Mi primera cadena");
2+3+4 = 9
suma = suma + numero; String frase = "Mi primera cadena";
}

Introduccin a la programacin con JAVA 87 Introduccin a la programacin con JAVA 88


Cadenas de caracteres (II) Cadenas de caracteres (III)
Concatenacin de cadenas: operador +
Subcadenas: mtodo substring(ndice1, ndice2)
Ejemplo: String frase3 = frase2 + frase1;
ndice1 indica la posicin del primer elemento de la subcadena e
Longitud de la cadena: mtodo length()
indice2-1 el del ltimo elemento
Ejemplo: int longitud = frase.length();
ndice1 e ndice2 son enteros (int)
Acceso a un carcter: mtodo charAt(ndice)
Si slo se le pasa un ndice indica el comienzo
Si la cadena tiene longitud n el ndice va de 0 a n-1
Ejemplo:
Ejemplo: char c = frase.charAt(3);
String frase = "Mi cadena";
Comparacin de cadenas: mtodo equals(String) String subfrase1 = frase.substring(1,5);
Ejemplo: if ( frase1.equals(frase2) ) String subfrase2 = frase.substring(4, frase.length());
!! Si se compara frase1==frase2 se comprueba si son el String subfrase2 = frase.substring(4);
equivale
mismo objeto pero no si contienen la misma cadena
System.out.println(subfrase1); // Muestra: i ca
System.out.println ("LOCO".charAt(2) +" "+ "LOCO".length()+ System.out.println(subfrase2); // Muestra: adena
" " + "a".equals("a") + " " + ("a"=="b")); // C 4 true false
Introduccin a la programacin con JAVA 89 Introduccin a la programacin con JAVA 90

Arrays (I) Arrays (II)


Creacin de un array:
Clase de la biblioteca estndar: Array Como todo objeto: con el operador new
Para declarar un array: Se indica la longitud entre corchetes despus del tipo o
Especificar el tipo o clase de los elementos clase
Corchetes detrs del tipo o de la variable Ejemplos:
numeros = new double[30];
Ejemplos:
clase = new Alumno[50];
double numeros[];
Empleado empresa[] = new Empleado[60];
double[] numeros;
Alumno[] clase; Acceso a los elementos:
Empleado empresa[]; Con un ndice entero entre corchetes a continuacin del
nombre del array
Son colecciones homogneas de objetos
Ejemplos: numeros[15] clase[indice]

Introduccin a la programacin con JAVA 91 Introduccin a la programacin con JAVA 92


Arrays (III) Arrays (IV)
Arrays de objetos:
Si el array tiene longitud n: la primera posicin es la 0 y la
ltima la n-1 La creacin del array no crea ningn objeto de la clase
del array
Se permite la creacin de arrays dinmicos: determinacin
del tamao en tiempo de ejecucin Deben ser creados los objetos a medida que se usan
Es obligacin del programador la de controlar que el ndice Ejemplo:
es una posicin vlida:
Persona grupo[];
Si no es as se produce una excepcin
grupo = new Persona[100]; /* array listo para
Los arrays disponen de un atributo pblico denominado asignarle personas */
length que contiene el nmero de posiciones del array
No se crean los 100 elementos del grupo!
Ejemplo:
for (i=0;i<grupo.length;i++) grupo[i] = new Persona();
int longitud = numeros.length; // NO ES UN MTODO
System.out.println(grupo[45].toString());

Introduccin a la programacin con JAVA 93 Introduccin a la programacin con JAVA 94

Arrays (V) Arrays (VI)

Ejemplo (inicializacin esttica- y uso de arrays):


Arrays multidimensionales:

tipo[][] nombre = new tipo[tam1][tam2]; public class Ejemplo


{
tipo[][][] nombre = new tipo[tam1][tam2][tam3]; public static void main(String [] args)
.... {
int suma, i, numeros[] = {1, 2, 3, 4, 5};
Ejemplos:
int[][] tabla = new int[5][5]; for (i=0, suma=0 ; i<5; i++)
Persona[][] grupo = new Persona[10][10]; suma += numeros[i];

System.out.println("La suma es: " + suma);


}
}

Introduccin a la programacin con JAVA 95 Introduccin a la programacin con JAVA 96


Arrays (VII) Excepciones (I)

Ejemplo (array dinmico): Excepcin: error o condicin anormal que se produce


durante la ejecucin de un programa
public class Ejemplo { Java permite el manejo o gestin de las excepciones
public static void crear(int longitud) { Excepciones estndar de Java:
int [] conjunto = new int[longitud];
Throwable
Throwable
System.out.println("Longitud: " + conjunto.length);
} Error
Error Exception
Exception
public static void main(String [] args) {
crear(10); RuntimeException
RuntimeException IOException
IOException ClassNotFoundException
ClassNotFoundException
crear(20);
ArithmeticException
ArithmeticException FileNotFoundException
FileNotFoundException
}
} IndexOutOfBoundsException
IndexOutOfBoundsException ProtocolException
ProtocolException

Introduccin a la programacin con JAVA 97 Introduccin a la programacin con JAVA 98

Excepciones (II) Excepciones (III)

La clase Error: Las clases derivadas de Exception pertenecen a


Errores de compilacin, del sistema, de la JVM, etc. distintos packages: java.lang, java.io, etc.
Son situaciones anmalas e irrecuperables
La clase Exception: Pero todas ellas por heredar de Throwable pueden
usar los mtodos:
Excepciones implcitas:
Las de la clase RunTimeException String getMessage(): Mensaje asociado a la excepcin
Suelen estar producidas por errores de programacin String toString(): Devuelve un String que describe la
excepcin
Excepciones explcitas:
void printStackTrace(): Indica el mtodo donde se lanz
El resto de clases derivadas de Exception
la excepcin
Java obliga a tenerlas en cuenta y chequear si se producen

Introduccin a la programacin con JAVA 99 Introduccin a la programacin con JAVA 100


Excepciones (IV) Excepciones (V)

Captura de una excepcin: Si en el cdigo dentro del bloque try se produce


Estrutura try ... catch ... finally una excepcin de tipo TipoExcepcin (o
descendiente)
try {
// Cdigo que puede producir una excepcin Se omite la ejecucin del resto del cdigo en el bloque
}
try
catch (TipoExcepcin excep) { Se ejecuta el cdigo situado en el bloque catch
// Gestor de la excepcin (gestor)
} Pueden controlarse diversos tipos de excepciones
[finally { con varias clusulas catch
/* Cdigo que se ejecuta siempre (con excepcin o sin Se comprobar en el orden que el indicado
ella) */
Slo se ejecuta un bloque catch
}]

Introduccin a la programacin con JAVA 101 Introduccin a la programacin con JAVA 102

Excepciones (VI) Excepciones (VII)


Relanzar una excepcin
Ejemplo: En ocasiones no interesa gestionar la excepcin

public class EjemploCatch {


Java permite que el mtodo relance o pase la excepcin al
mtodo desde el que ha sido llamado
String mensajes[] = {"Luis", "Carlos", "David" };
public static void main(String[] args) Clusula throws:
{ Ejemplo:
int cont; void metodoEjem() throws IOException, ArithmeticException
try {
{
for (cont = 0; cont <= 3; cont++)
// Cdigo que puede lanzar las excepciones
System.out.println(mensajes[cont]);
} // No es necesario hacer try catch aqu (aunque es posible relanzar)
catch (ArrayIndexOutOfBoundsException excep) { }
System.out.println("El array se ha desbordado");
} Por tanto hay dos posibilidades:
}
}
Capturar las posibles excepciones y gestionarlas
Desentenderse de las excepciones y remitirlas al mtodo anterior
Introduccin a la programacin con JAVA 103 Introduccin a la programacin con JAVA 104
Excepciones (VIII) Entrada/salida estndar (I)
Crear una excepcin propia
Extender la clase Exception (u otra excepcin)
Regulada a travs de la clase System del paquete java.lang
Java permite que el mtodo relance o pase la excepcin al mtodo desde
el que ha sido llamado
Clusula throws: Contiene, entre otros, 3 objetos:
Ejemplo:
class MiExcepcion extends Exception{ System.in : Objeto de InputStream
public MiExcepcion() {} System.out : Objeto de PrintStream
public MiExcepcion(String message) {super(message);} //para e.getMessage()
System.err : Objeto de PrintStream
}
Mtodos de System.in
int read() : lee un carcter y lo devuelve como int
Throwable
Throwable
Mtodos de System.out y System.err
Error
Error Exception
Exception int print(cualquier tipo)
int println(cualquier tipo)
RuntimeException
RuntimeException IOException
IOException ... MiExcepcion
MiExcepcion
Introduccin a la programacin con JAVA 105 Introduccin a la programacin con JAVA 106

Entrada/salida estndar (II) Entrada/salida estndar (III)

Ejemplo: leer un carcter de teclado. Lectura de una lnea: Clase BufferedReader


import java.io.*; El mtodo String readLine() lee todos los caracteres
public class Ejemplo hasta un \n
{ BufferedReader necesita un Reader en el constructor
public static void main(String [] args) throws IOException pero System.in es un objeto de la clase InputStream:
{ Es necesario usar previamente: InputStreamReader
char caracter;
Object
Object

caracter = (char) System.in.read(); Reader


Reader
System.out.println("Dato leido: " + caracter + ". "); (abstracta)
(abstracta)
}
BufferedReader
BufferedReader InputStreamReader
InputStreamReader
}

Introduccin a la programacin con JAVA 107 Introduccin a la programacin con JAVA 108
Entrada/salida estndar (IV) Entrada/salida estndar (V)

Ejemplo (lectura de una lnea): Ejemplo (lectura de un entero):

import java.io.*; import java.io.*;


public class Ejemplo { public class Ejemplo {
public static void main(String [] args) throws IOException { public static void main(String [] args) throws IOException {
InputStreamReader canalEntrada = new InputStreamReader stdin = new InputStreamReader(System.in);
InputStreamReader(System.in); BufferedReader consola = new BufferedReader(stdin);
BufferedReader entrada = new BufferedReader(canalEntrada); int valor;
String datos; String cadena;

datos = entrada.readLine(); System.out.println("Introduzca un nmero: ");


System.out.println("Datos leidos: " + datos); cadena = consola.readLine();
valor = Integer.parseInt(cadena);
}
}
}
}

Introduccin a la programacin con JAVA 109 Introduccin a la programacin con JAVA 110

Otra clase estndar: Math

Proporciona dos contantes: Math.E y Math.PI


Pertenece a la clase java.lang: se importa
automticamente
Algunos mtodos:

Math.sqrt(num) Math.exp(num) Math.min(a,b)

Math.pow(a,b) Math.random() Math.log(num)

Math.abs(num) Math.cos(num) Math.sin(num)

Math.tan(num) Math.toDegrees(num) Math.toRadians(num)

Introduccin a la programacin con JAVA 111

You might also like