Sei sulla pagina 1di 11

Prcticas de Programacin

Tema 1. Introduccin al anlisis y diseo de programas


Tema 2. Clases y objetos en Java
Tema 3. Herencia y Polimorfismo
Tema 4. Tratamiento de errores
Tema 5. Aspectos avanzados de los tipos de datos
Tema 6. Modularidad y abstraccin: aspectos avanzados
Tema 7. Entrada/salida con ficheros
Tema 8. Verificacin y prueba de programas

Prcticas de Programacin

M. Aldea y M. Gonzlez
23/02/10

Tema 2. Clases y objetos en Java

Tema 2. Clases y objetos en Java


2.1.
2.2.
2.3.
2.4.
2.5.
2.6.
2.7.
2.8.
2.9.

Introduccin
Creacin e inicializacin de objetos
Tipos primitivos, referencias y objetos
Recolector de basura
Comparacin de objetos
Control de acceso
Mtodos y campos de clase (o estticos)
Anidamiento de clases
Bibliografa

Prcticas de Programacin

M. Aldea y M. Gonzlez
23/02/10

Tema 2. Clases y objetos en Java


2.1 Introduccin

2.1 Introduccin
La clase es la unidad bsica de estructuracin en un lenguaje
orientado a objetos
Est formada por miembros:
atributos (tambin llamados campos): almacenan el estado
mtodos: definen el comportamiento
Una clase es una descripcin de un conjunto de objetos con los
mismos atributos y comportamiento
public class UnaClase {
atributos
constructores
mtodos
}
Un objeto es una instancia o ejemplar concreto de una clase
Prcticas de Programacin

M. Aldea y M. Gonzlez
23/02/10

Tema 2. Clases y objetos en Java


2.2 Creacin e inicializacin de objetos

2.2 Creacin e inicializacin de objetos


En el lenguaje Java los objetos se crean con el operador new:
UnaClase obj = new UnaClase();
Se invoca el CONSTRUCTOR

Los constructores son mtodos especiales que


se llaman igual que la clase
no tienen tipo de retorno

Una clase puede tener varios constructores con diferentes


parmetros
public UnaClase() { ... }
public UnaClase(int i) { ... }
public UnaClase(boolean b, int i) { ... }
Si y slo si no definimos constructor, la clase tendr el constructor
por defecto (constructor sin parmetros que no hace nada)
public UnaClase() {}
Prcticas de Programacin

M. Aldea y M. Gonzlez
23/02/10

Tema 2. Clases y objetos en Java


2.2 Creacin e inicializacin de objetos

Inicializacin de los atributos


Cuando se crea un objeto sus atributos se inicializan en 3 etapas:
1. Se asigna a cada atributo su valor por defecto
- tipos numricos (int, double, ...): 0 (o 0.0)
- Caracteres (char): carcter nulo
- Booleanos (boolean): false
- Referencias a objetos (String, otras clases): null
2. Si la declaracin del atributo contiene un inicializador, ste es
evaluado y asignado
private int numRuedas = numCoches * 4;
3. Se ejecuta el constructor de la clase, que puede cambiar el
valor de los atributos que desee
Recordar: slo se inicializan los atributos, las variables
locales de los mtodos no son inicializadas por defecto
Prcticas de Programacin

M. Aldea y M. Gonzlez
23/02/10

Tema 2. Clases y objetos en Java


2.2 Creacin e inicializacin de objetos

Atributos finales
Su valor no se puede cambiar despus de haber sido inicializados
pueden inicializarse en la definicin del atributo o en el
constructor de la clase
Inicializacin de PI

Ejemplo:
public class Crculo {

hay un valor ms preciso


de PI en la clase Math

private final double PI = 3.14159;


public final double rea;
private double radio;
La inicializacin de rea
se deja para el constructor
public Crculo(double radio) {
this.radio = radio;
this.rea = PI * radio * radio;
}
... // no se puede modificar el valor de rea
Prcticas de Programacin

M. Aldea y M. Gonzlez
23/02/10

Tema 2. Clases y objetos en Java


2.3 Tipos primitivos, referencias y objetos

2.3 Tipos primitivos, referencias y objetos


Cuando se declarara una variable de un tipo primitivo el
compilador reserva un rea de memoria para ella
int i, j;

Cuando se asigna un valor, ste es escrito en el rea reservada


i=16;
j=3;

16

La asignacin entre variables significa copiar el contenido de


una variable en la otra
i=j;

M. Aldea y M. Gonzlez
23/02/10

Prcticas de Programacin

Tema 2. Clases y objetos en Java


2.3 Tipos primitivos, referencias y objetos

Referencias y objetos
Cuando se declara una variable objeto la situacin es diferente
Si no se usa el operador new slo se crea una referencia a objeto
Complejo c1,c2;

c1

c2

El espacio en memoria del objeto se reserva con el operador new


c1=new Complejo(2.0,-3.2);
c2=new Complejo(1.3,2.1);

c1

:Complejo
r=2.0
i=-3.2

c2

:Complejo
r=1.3
i=2.1

M. Aldea y M. Gonzlez
23/02/10

Prcticas de Programacin

Tema 2. Clases y objetos en Java


2.3 Tipos primitivos, referencias y objetos
Referencias y objetos (cont.)

La asignacin entre objetos slo copia referencias


despus de la copia ambas referencias apuntan al mismo
objeto
c2=c1;
c1

:Complejo
r=2.0
i=-3.2

c2

:Complejo
r=1.3
i=2.1

La comparacin entre objetos compara las referencias no los


contenidos
en la figura anterior c1==c2 es true
en la situacin de debajo c1==c2 es false
c1

:Complejo
r=2.0
i=1.0

c2

:Complejo
r=2.0
i=1.0

el mtodo equals permite comparar contenidos (Ver 2.5)


Prcticas de Programacin

M. Aldea y M. Gonzlez
23/02/10

Tema 2. Clases y objetos en Java


2.3 Tipos primitivos, referencias y objetos

Arrays de tipos primitivos


Java trata los arrays como objetos
Crear una variable de tipo array slo crea una referencia
a

int a[];

El espacio en memoria para el array se crea con new


cuando se trata de un array de un tipo primitivo se crean los
elementos del array
y se inicializan a sus valores por defecto
a = new int[5];

M. Aldea y M. Gonzlez
23/02/10

Prcticas de Programacin

10

Tema 2. Clases y objetos en Java


2.3 Tipos primitivos, referencias y objetos

Arrays de referencias a objetos


Crear una variable de tipo array de objetos slo crea la referencia
a

Complejo a[];

Con new se reserva el espacio para el array de referencias


pero no los objetos a los que apuntarn las referencias
las referencias que forman el array se inicializan a null
a=new Complejo[4];

null

null

null

Los objetos hay que crearlos posteriormente


a[1]=new Complejo(2.0,-3.2);
null

null

null

:Complejo
r=2.0
i=-3.2

null

a
M. Aldea y M. Gonzlez
23/02/10

Prcticas de Programacin

11

Tema 2. Clases y objetos en Java


2.3 Tipos primitivos, referencias y objetos

Copia y comparacin de arrays (y strings)


Los arrays y los strings son objetos, por consiguiente:
La asignacin entre arrays (o strings) slo copia referencias
a2=a1;
4

-3

-3

a1

-7

a2

La comparacin entre arrays (o strings) compara las referencias


no los contenidos
en la figura anterior a1==a2 es true
en la situacin de debajo a1==a2 es false
4
a1

-3

-3

a2

Para comparar contenidos debe utilizarse el mtodo equals


Prcticas de Programacin

M. Aldea y M. Gonzlez
23/02/10

12

Tema 2. Clases y objetos en Java


2.4 Recolector de basura

2.4 Recolector de basura


La memoria ocupada por un objeto se reserva con el operador new
en Java no existe ningn operador para liberar la memoria de
un objeto que no se va a usar ms

La liberacin de memoria la realiza el Recolector de Basura de


forma automtica
el recolector va contando el nmero de referencias que
apuntan a cada objeto
cuando un objeto no est apuntado por ninguna referencia, se
convierte en basura (no va a poder ser utilizado nunca ms)
en los periodos de inactividad del sistema, el recolector
reincorpora la basura a la memoria disponible
M. Aldea y M. Gonzlez
23/02/10

Prcticas de Programacin

13

Tema 2. Clases y objetos en Java


2.4 Recolector de basura

Ejemplo de generacin de basura


Complejo c1 = new Complejo(2.0, 3.2);
Complejo c2 = new Complejo(1.3, 2.1);
c1

:Complejo
r=2.0
i=3.2

:Complejo
r=1.3
i=2.1

c2

c2 = c1;

c1

:Complejo
r=2.0
i=3.2

:Complejo
r=1.3
i=2.1

c2

Se convierte en basura al no estar


apuntado por ninguna referencia
Prcticas de Programacin

M. Aldea y M. Gonzlez
23/02/10

14

Tema 2. Clases y objetos en Java


2.5 Comparacin de objetos

2.5 Comparacin de objetos


La comparacin entre objetos (obj1==obj2) compara referencias
si queremos comparar los contenidos de los objetos debemos
utilizar el mtodo equals
Ejemplo: mtodo equals para la clase Coordenada:
public class Coordenada {
private int x; // coordenada en el eje x
private int y; // coordenada en el eje y
...
public boolean equals(Object obj) {
Coordenada c = (Coordenada) obj;
return c.x == x && c.y == y;
}
}
Prcticas de Programacin

M. Aldea y M. Gonzlez
23/02/10

15

Tema 2. Clases y objetos en Java


2.5 Comparacin de objetos

Ejemplo de uso del mtodo equals


if (c1.equals(c1)) {
...
}

true

:Coordenada
x=2
y=-3

c1

if (c1.equals(c4)) {
...
}

c4

false
if (c1.equals(c2)) {
...
}
true
if (c1.equals(c3)) {
...
}
Prcticas de Programacin

:Coordenada
x=10
y=4
c2

c3

:Coordenada
x=2
y=-3

M. Aldea y M. Gonzlez
23/02/10

16

Tema 2. Clases y objetos en Java


2.5 Comparacin de objetos

Comparacin de contenidos de arrays y strings


La clase String dispone del mtodo equals:
String str1 = "hola", str2 = "hola";
if (str1.equals(str2)) {
System.out.println("Los strings son iguales");
}
Para comparar arrays existe el mtodo equals de la clase Arrays:
import java.util.Arrays;
int[] a1= {4, -3, 0, 1}, a2= {4, -3, 0, 1};
if (Arrays.equals(a1, a2)) {
System.out.println("'a1' es igual a 'a2'");
}
Volveremos a hablar del mtodo equals en el tema 3, Herencia y Polimorfismo
Prcticas de Programacin

M. Aldea y M. Gonzlez
23/02/10

17

Tema 2. Clases y objetos en Java


2.6 Control de acceso

2.6 Control de acceso


Los sistemas software pueden llegar a ser muy complejos
Para abordar con xito su desarrollo es necesario aplicar los
principios de:
modularidad: descomposicin del sistema en un conjunto de
piezas poco acopladas
ocultamiento de informacin: se ocultan los detalles de
implementacin de las piezas
Ventajas de utilizar modularidad y ocultamiento de informacin
el ocultamiento de los detalles facilita la comprensin global
del sistema
el cambio en la implementacin de un mdulo no afecta al resto
de la aplicacin
el acoplo dbil entre mdulos facilita la reutilizacin de cdigo
Prcticas de Programacin

M. Aldea y M. Gonzlez
23/02/10

18

Tema 2. Clases y objetos en Java


2.6 Control de acceso

Modularidad y abstraccin en POO


En POO ambos principios se basan en el concepto de objeto
cada objeto es una pieza del sistema final
los objetos se relacionan mediante sus miembros pblicos
los miembros privados estn ocultos para los dems objetos

Parte
Pblica

Objeto
mtodo pblico 1
mtodo pblico 2
mtodos privados

Parte
Privada

mtodo pblico n
atributos

Prcticas de Programacin

M. Aldea y M. Gonzlez
23/02/10

19

Tema 2. Clases y objetos en Java


2.6 Control de acceso

Modificadores de acceso
Se pueden poner a una clase o miembro (campo o mtodo)
indican desde dnde es accesible
Modificadores de acceso para clases:
<ninguno>: accesible desde el paquete
public: accesible desde todo el programa
Modificadores de acceso para miembros de clases:
<ninguno>: accesible desde el paquete
public: accesible desde todo el programa
private: accesible slo desde esa clase
protected: accesible desde el paquete y desde sus subclases
en cualquier paquete

Prcticas de Programacin

M. Aldea y M. Gonzlez
23/02/10

20

Tema 2. Clases y objetos en Java


2.6 Control de acceso

Uso habitual
Lo normal es que una clase:
tenga todos sus atributos privados
slo proporcione los mtodos pblicos estrictamente
necesarios
De esta forma el estado del objeto slo puede cambiar a travs de
unos puntos de entrada bien definidos

Prcticas de Programacin

M. Aldea y M. Gonzlez
23/02/10

21

Tema 2. Clases y objetos en Java


2.6 Control de acceso

Ejemplo de uso de los modificadores de acceso


public class Coche {
private String matrcula;
private String nombrePropietario;
private String dniPropietario;
// constructor
public Coche(String m, String n, String dni) {...}
// mtodos para leer los atributos
public String matrcula() {...}
public String nombrePropietario() {...}
public String dniPropietario() {...}
// mtodos para cambiar los atributos
public void cambiaPropietario(String n,
String dni) {...}
...
}

NO existe un mtodo para cambiar


la matrcula, ya que ese dato no
cambia en toda la existencia del
coche

Prcticas de Programacin

NO existe un mtodo para cambiar el nombre


y el DNI por separado, ya que cuando cambia
uno, tambin hay que cambiar el otro
M. Aldea y M. Gonzlez
23/02/10

22

Tema 2. Clases y objetos en Java


2.7 Mtodos y campos de clase (o estticos)

2.7 Mtodos y campos de clase (o estticos)


Una clase puede tener atributos y mtodos estticos:
no pertenecen a los objetos de la clase, sino a la clase misma
si son atributos, slo existe uno por clase, no uno por objeto
- la vida es la de la clase, y no la del objeto
si son mtodos, slo pueden acceder a los objetos pasados
como parmetros y a campos y mtodos estticos
nos referimos a ellos como NombreClase.miembroEsttico

public class Clase {


private static int st;
private int i;
...
}
Prcticas de Programacin

:Clase
i=2

:Clase
i=23

:Clase
i=125

Clase.st=10

:Clase
i=-12

:Clase
i=-45

M. Aldea y M. Gonzlez
23/02/10

23

Tema 2. Clases y objetos en Java


2.7 Mtodos y campos de clase (o estticos)

Ejemplo de atributo y mtodo de clase


public class Coche {
// atributo esttico
private static int ltimoNumSerie=0;
// atributos normales
private int numSerie;
private String matrcula;

Coche
-ltimoNumSerie: int

// constructor
public Coche(String matrcula){
ultimoNumSerie++;
numSerie=ltimoNumSerie;
this.matrcula=matrcula;
}

Prcticas de Programacin

-numSerie: int
-matrcula: string
+Coche(matrcula: string)
+matrcula(): string
+numSerie(): int
+ltimoNumSerie(): int

M. Aldea y M. Gonzlez
23/02/10

24

Tema 2. Clases y objetos en Java


2.7 Mtodos y campos de clase (o estticos)
Ejemplo de atributo y mtodo de clase (cont.)

// retorna la matrcula
public String matrcula() {
return matrcula;
}
// retorna el nmero de serie
public int numSerie() {
return numSerie;
}
// retorna el ltimo nmero de serie usado
public static int ltimoNumSerie() {
return ltimoNumSerie;
}
}

Prcticas de Programacin

M. Aldea y M. Gonzlez
23/02/10

25

Tema 2. Clases y objetos en Java


2.7 Mtodos y campos de clase (o estticos)
Ejemplo de atributo y mtodo de clase (cont.)

public class PruebaCoche {


public static void main(String[] args) {
// consulta el ltimo nmero de serie usado
System.out.println("ltimo nmero usado:" +
Coche.ltimoNumSerie());
// crea dos coches
Coche c1=new Coche("1111 XXX");
Coche c2=new Coche("2222 YYY");
// muestra los datos de un coche
System.out.println("Coche: " + c1.matrcula());
System.out.println("Num serie: "+c1.numSerie());
// muestra los datos del otro coche
System.out.println("Coche: " + c2.matrcula());
System.out.println("Num serie: "+c2.numSerie());
}
}
Prcticas de Programacin

M. Aldea y M. Gonzlez
23/02/10

26

Tema 2. Clases y objetos en Java


2.7 Mtodos y campos de clase (o estticos)

Ejemplo de mtodo de clase


public class Vector2D {
// atributos
private double x;
private double y;
/** Constructor */
public Vector2D(double x, double y) {
this.x=x;
this.y=y;
}

Prcticas de Programacin

M. Aldea y M. Gonzlez
23/02/10

27

Tema 2. Clases y objetos en Java


2.7 Mtodos y campos de clase (o estticos)
Ejemplo de mtodo de clase (cont.)

/**
* Mtodo NO esttico: Suma el vector v con
* el vector actual
*/
public void suma(Vector2D v){
x = x + v.x;
y = y + v.y;
}
/**
* Mtodo ESTTICO: Retorna el vector
* resultado de v1+v2
*/
public static Vector2D suma(Vector2D v1,
Vector2D v2) {
return new Vector2D(v1.x+v2.x, v1.y+v2.y);
}
}
M. Aldea y M. Gonzlez
23/02/10

Prcticas de Programacin

28

Tema 2. Clases y objetos en Java


2.7 Mtodos y campos de clase (o estticos)

Vector2D v1 = new Vector2D(1,2);


Vector2D v2 = new Vector2D(5,10);
Vector2D v3;
v1

// suma no esttica
v1.suma(v2);

v1

refObjeto.nombreMtodo

// suma esttica
v3=Vector2D.suma(v1,v2);

v1

:Vector
x=1.0
y=2.0

:Vector
x=6.0
y=12.0

:Vector
x=6.0
y=12.0

Ejemplo de mtodo de clase (cont.)

v2

v2

v2

:Vector
x=5.0
y=10.0

:Vector
x=5.0
y=10.0

:Vector
x=5.0
y=10.0

v3

v3

v3

:Vector
x=11.0
y=22.0

NombreClase.nombreMtodo
Prcticas de Programacin

M. Aldea y M. Gonzlez
23/02/10

29

Tema 2. Clases y objetos en Java


2.8 Anidamiento de clases

2.8 Anidamiento de clases


Una clase puede definirse dentro de otra
las clases anidadas no estticas se denominan clases internas
y estn asociadas con una instancia (objeto) de la clase
las clases anidadas estticas se comportan como cualquier
otra clase
- salvo que su nombre es ClaseContenedora.ClaseAnidada
- las usaremos cuando veamos las excepciones y los
enumerados

Prcticas de Programacin

M. Aldea y M. Gonzlez
23/02/10

30

Tema 2. Clases y objetos en Java


2.8 Anidamiento de clases

Ejemplo de clase anidada esttica


public class Lnea {
public static class Punto {
double x, y;
}

clase anidada esttica

// atributos
private Punto pIni, pFin;
/** constructor */
public Lnea (Punto pIni, Punto pFin) {
this.pIni=pIni;
this.pFin=pFin;
}
...
}
Prcticas de Programacin

M. Aldea y M. Gonzlez
23/02/10

31

Tema 2. Clases y objetos en Java


2.8 Anidamiento de clases
Ejemplo de clase anidada esttica (cont.)

public class PruebaLnea {


public static void main() {
Lnea.Punto pIni = new Lnea.Punto();
Lnea.Punto pFin = new Lnea.Punto();
pIni.x=10.2; pIni.y=4.3;
pFin.x=1.3; pFin.y=5.6;
Lnea l = new Lnea(pIni, pFin);
}
}

Prcticas de Programacin

M. Aldea y M. Gonzlez
23/02/10

32

Tema 2. Clases y objetos en Java


2.9 Bibliografa

2.9 Bibliografa
Ken Arnold, James Gosling, David Holmes, El lenguaje de
programacin Java, 3 edicin. Addison-Wesley, 2000.
Eitel, Harvey M. y Deitel, Paul J., Cmo programar en Java,
quinta edicin. Pearson Educacin, Mxico, 2004.
King, Kim N. Java programming : from the beginning. W. W.
Norton & Company, cop. 2000
Francisco Gutirrez, Francisco Durn, Ernesto Pimentel.
Programacin Orientada a Objetos con Java. Paraninfo, 2007.

Prcticas de Programacin

M. Aldea y M. Gonzlez
23/02/10

33

Potrebbero piacerti anche