Tema3 SII Java

Embed Size (px)

Citation preview

Tema 3. Clases en JAVA (i)n

Clasesn n n n n n n n

Concepto de clase y objeto Variables miembro de objeto y de clase Variables finales Mtodos. Paso de argumentos Mtodos de clase Control de acceso Mtodos sobrecargados Constructores y destructores

n

Packages1

Tema 3. Clases en JAVA (ii)n

Herencian n n n

Clase Object Redefinicin de mtodos Constructores Clases y mtodos abstractos Definicin Herencia

n

Interfacesn n

n n

Polimorfismo Clases internasn

Clases static, clases miembro, clases locales y clases annimas2

Concepto de clasen

Tipo definido por el usuario que describe los atributos y los mtodos de los objetos que se crearn a partir de la misman n

Los atributos son los datos que definen el estado del objeto Los mtodos son las operaciones que definen su comportamiento [public] class NombreClase { //definicin de datos y mtodos } * Si no se define public, la clase slo es visible para las dems clases del package3

n

Definicin:

Concepto de objeton

Es un ejemplar concreto de una clase (una instancia)n n

Clases: tipos de variables Objetos: variables concretas de un tipo determinado NombreClase unObjeto; unObjeto = new NombreClase(); NombreClase otroObjeto; otroObjeto = new NombreClase();4

n

Creacin objetos:n n n n

Ejemplo (i)class Circulo { public static final double PI = 3.14159265; private double x,y; private double radio; public Circulo(double cx, double cy, double r) { x = cx; y = cy; radio = r; }5

Ejemplo (ii)public Circulo() { this(0.0,0.0,1.0); } public double perimetro() { return 2.0*PI*radio; } public double area() { return PI*radio*radio; } }6

Variables miembro de objeton n

Pueden ser de tipos primitivos o referencias a objetos Van precedidas por modificadores de acceso:n

public, private, protected o package private double x, y; private double radio

n

Ejemplo: Cada objeto posee sus propias variables miembro. Para acceder a ellas se utiliza el operador punto (.)n

n

Ejemplo: circulo1.radio

n

Se inicializan de forma automtica, incluso antes de llamar al constructor7

Variables miembro de clasen

Variables de clase (variables static): son variables propias de la clase y no de cada objeton

Permiten definir variables que slo tienen sentido para toda la clase.

n

n

Es lo ms parecido que Java tiene a las variables globales de C/C++ Ejemplo: contador de crculos creadosn n

Definicin: static int numCirculos = 0; Uso: Circulo.numCirculos

n

Si no se les da un valor en la declaracin, se inicializa con los valores por defecto para los tipos primitivos, y con null si es una referencia8

Variables finalesn

No pueden cambiar su valor a lo largo de la ejecucin del programan

Pueden considerarse constantes public static final double PI = 3.14159265; La inicializacin puede hacerse en tiempo de ejecucin La variable es constante, pero no tiene por qu tener el mismo valor en todas las ejecuciones del programa

n

Ejemplo:n

n

Es posible separar la definicin de la inicializacin:n n

n

Si se declara como final un objeto, se hace constante la referencia, pero no el objeto.n

No es posible hacer que un objeto sea constante9

Mtodosn n

Son funciones definidas dentro de una clase Ejemplo:public double perimetro() { return 2.0*PI*radio; }

n

Declaracin:n

modificador_acceso tipo_devuelto nombreMtodo (lista_argumentos)

n

Se aplican a un objeto a travs del operador punto (.). Dicho objeto es su argumento implcito.n

circulo1.perimetro()10

Paso de argumentosn

Los argumentos de los tipos primitivos se pasan por valorn

El mtodo recibe una copia del argumento

n

n

Las referencias se pasan tambin por valor, pero a travs de ellas se pueden modificar los objetos referenciados No se pueden pasar mtodos como argumentos a otros mtodosn

En C/C++ se pueden pasar punteros a funcin como argumentos11

Mtodos de clasen

n n

n

Los mtodos de clase (static) no actan sobre objetos concretos a travs del operador punto (.) Se crean anteponiendo la palabra static Para llamarlos se suele utilizar el nombre de la clase Ejemplo:n

n

Mtodos matemticos de la clase java.lang.Math: sin, cos, exp, pow,... Math.sin(ang); // Calcula el seno de ang12

Control de acceson

Modificadores de acceson n

Indican el tipo de acceso permitido a cada miembro de la clase Modificadores: public, private, protected y package (por defecto) public protected S S S S S S S No S S private S No No No No package S S No S No13

Visibilidad Propia clase Otra clase del package Otra clase fuera del package Clase derivada dentro del package Clase derivada fuera del package

Mtodos sobrecargadosn

Java permite mtodos sobrecargadosn

Tienen el mismo nombre, pero se diferencian por el nmero y tipo de los argumentos public void calcula (int dato1) public void calcula (int dato1, float dato2) public void calcula (int dato1, float dato2, double dato3)

n

Ejemplo:n n n

n

n

No es posible crear dos mtodos sobrecargados que slo difieran en el valor de retorno Constructores sobrecargados:n n

public Circulo() public Circulo(double cx, double cy, double r)14

Constructores (i)n

Constructor: mtodo que se llama automticamente cada vez que se crea un objeto de una clasen

n n

Misin: reservar memoria e inicializar las variables miembro de la clase No tiene valor de retorno Su nombre es el mismo que el de la clase No tiene argumentos Si no se especifica, el compilador crea uno, inicializando las variables de tipos primitivos a su valor por defecto, y las referencias a null

n

Constructor por defecto:n n

n

Un constructor puede llamar a otro definido por medio de la palabra this15

Constructores (ii)class Punto { private double x,y; public Punto(double cx,double cy) { x = cx; y = cy; } public Punto() { this(0.0,0.0); } }

Constructor por defecto: Punto pt1 = new Punto(); Constructor parametrizado: Punto pt2 = new Punto (3,6);

16

Constructor copian n

Permite crear un objeto a partir de otro objeto de la misma clase Ejemplo:public Punto(Punto pto) { x = pto.x; y = pto.y; }

n

Llamada:n

Punto pt3 = new Punto(pt2);

17

Destructores: liberacin de memorian n

n

En Java no hay destructores El sistema libera la memoria de los objetos que han perdido la referencia garbage collection (recogida de basura) No se sabe exactamente cuando se va a activar el garbage collectorn

Si no falta memoria es posible que no se active en ningn momento

18

Packages (i)n

Un package es una agrupacin de clasesn n

API Java 1.1 22 packages API Java 1.2 59 packages

n

Para que una clase forme parte del package llamado nombrePaquete:n

package nombrePaquete; //1 lnea del fichero

n

El nombre de un package puede constar de varios nombres unidos por puntosn

Ej: java.awt.event

n

Todas las clases que forman parte de un package deben estar en el mismo directorio19

Packages (ii)n

import nombrePaquete;n

Evita tener que utilizar nombres largosn n

import java.io.*; Se puede acceder a la clase FileReader simplemente con el nombre FileReader en lugar de con el nombre java.io.FileReader

n

n

No hace que se carguen todas las clases (slo se cargan las clases public) No se importan los subpaquetesn

import java.awt; // no importa java.awt.event

n

Los packages hacen referencia a los ficheros compilados *.class20

Herencia (i)n n

El mecanismo de herencia permite construir una clase a partir de otra Sintaxis:class ClaseDerivada extends ClaseBase { }

n

La clase derivada hereda todos los miembros de la clase base, excepto los constructores.n n

n

No tiene acceso a los miembros privados de la clase base Los mtodos de la clase base pueden ser redefenidos (overriden) en la clase derivada Se pueden aadir nuevas variables y mtodos en la clase derivada21

Herencia (ii)n

n

n

Java permite mltiples niveles de herencia No permite que una clase derive de varias no existe herencia mltiple Todas las clases tienen una superclasen

Si no se especfica nada, la clase deriva de java.lang.Object clase raz22

La clase Objectn n

Es la raz de la jerarqua de clases de Java Mtodos que pueden ser redefinidos:n

n

n

clone() crea un objeto a partir de otro objeto de la misma clase equals() indica si dos objetos son o no iguales. Devuelve true si son iguales toString() devuelve un String conteniendo una representacin del objeto como cadena de caracteres23

Redefinicin de mtodosn n

Se puede redefinir cualquier mtodo heredado que no sea final Se puede acceder a un mtodo de la superclase que haya sido redefinido utilizando la palabra supern n n

public int funcion() // mtodo clase base public int funcion() // mtodo redefinido en la clase derivada super.funcion() // acceso al mtodo de la clase base

n

Los mtodos de clase o static no pueden ser redefinidos

24

Constructores en clases derivadasn

El constructor de una clase derivada puede llamar al constructor de su clase base mediante la palabra superSubclase(lista_parmetros) { super(lista_parmetros); // sentencias adicionales }

n

Si no se llama explcitamente al constructor de la clase base, se llama automticamente al constructor por defecto de la clase base25

Ejemplo constructorclass Rectangulo { public int alto,ancho; Rectangulo(int alto,int ancho) { this.alto = alto; this.ancho = ancho; } }26

class Cuadrado extends Rectangulo { Cuadrado(int tam) { super(tam,tam); } }

Clases y mtodos abstractosn n

n

Una clase abstracta es una clase de la que no se pueden crear objetos Proporciona los atributos y mtodos que sern compartidos por todas sus clases derivadas Se declaran anteponindoles la palabra abstractn

Ej: public abstract class Geometria

n

Una clase abstract puede tener mtodos declarados como abstractn

n

Los mtodos abstract no son definidos en la clase abstracta, deben ser redefinidos en las clases derivadas Si una clase tiene un mtodo abstract, es obligatorio que la clase sea abstract27

Ejemplo clase abstractapublic abstract class Geometria { public abstract double perimetro(); public abstract double area(); } n Se declara public para que pueda ser utilizada por cualquier otra clase n Al ser abstract, no se permiten crear objetos de esta clase n Ambos mtodos debern definirse en las clases que deriven de esta clase28

Interfacesn

Una interface es un conjunto de declaraciones de mtodos (sin definicin)n

Puede definir constantes (public, static y final) que deben inicializarse en la declaracin

n

n

Las clases que implementen una interface deben proporcionar una definicin de los mtodos de la interface Una clase puede implementar una o varias interfaces:n

public class CirculoGrafico implements Dibujable, Cloneable

n

Una interface define un tipo de conducta de las clases que la implementan29

Interface vs. clase abstractn

Tienen en comn que contienen declaraciones de mtodosn

La clase abstract puede definirlos Una clase no puede heredar de dos clases abstract, pero s puede heredar de una clase abstract e implementar una interface, o implementar dos o ms interfaces Una clase no puede heredar mtodos definidos de una interface, aunque s constantes Las interfaces tienen una jerarqua propia, permitindose la herencia mltiple30

n

Diferencias:n

n

n

Definicin de interfacesn

Se define de forma similar a las clasespublic interface Dibujable { public void setPosicion(double x, double y); public void dibujar(Graphics dw); }

n

n

Cada interface public debe ser definida en un fichero *.java con el mismo nombre de la interface Las interfaces slo admiten los modificadores de acceso public y packagen

Si no es public no ser accesible desde fuera del package

n

Los mtodos son implcitamente public y abstract31

Herencia en interfacesn

Se permite la herencia simple y mltiplen

La interface derivada incluye todas las constantes y declaraciones de mtodos de la(s) interface(s) base(s) [public] interface InterfaceDerivada extends InterfaceBase1, InterfaceBase2, ...

n

Sintaxis:n

n

Una interface puede ocultar una constante definida en una interface base, definiendo una constante con el mismo nombre. Del mismo modo puede ocultar la declaracin de un mtodo heredado

32

Polimorfismo (i)Geometria Rectangulo Dibujable RectanguloGraficon

Circulo Dibujable CirculoGrafico

n

Una referencia a un objeto de una determinada clase puede servir de referencia a objetos de cualquiera de sus clases derivadas Ejemplo: Slo se pueden utilizar las capacidades definidas en la Geometria geom1,geom2; clase Geometria: perimetro() geom1 = new RectanguloGrafico(); y area() geom2 = new CirculoGrafico();33

Polimorfismo (ii)n

n

Se puede utilizar una referencia a una interface para manejar objetos de clases que implementan dicha interface Ejemplo:Dibujable dib1,dib2; dib1 = new RectanguloGrafico(); dib2 = new CirculoGrafico(); n Los objetos dib1 y dib2 slo pueden ser utilizados con los mtodos definidos por la interface Dibujable

n

El poder utilizar nombres de una superclase o de una interface permite tratar de un modo unificado objetos distintos, aunque pertenecientes a distintas subclases o a clases que implementan dicha interface34

Clases internasn

Clase interna: clase definida dentro de otra clase (clase contenedora)n

Se utilizan en el modelo de eventos introducido en la versin Java 1.1 Clases Clases Clases Clases internas static internas miembro internas locales annimas

n

Hay 4 tipos de clases internas:n n n n

n

La JVM desconoce la existencia de clases internas.n

El compilador las convierte en clases globales, contenidas en ficheros ClaseContenedora$ClaseInterna.class35

Clases e interfaces internas staticn n

n

n

n

n

Clases anidadas (nested classes) Slo pueden ser creadas dentro de otra clase al mximo nivel: en el bloque de definicin de la clase contenedora Se pueden definir clases e interfaces static dentro de una interface contenedora Para utilizar su nombre desde fuera de la clase contenedora hay que precederlo por el nombre de la clase contenedora y el operador punto (.) Las clases internas static slo tienen acceso a los miembros static de la clase contenedora No se necesitan objetos de la clase contenedora para crear objetos de la clase interna static36

Ejemplo clase interna static (i)class A { int i = 1; static int is = -1; public A(int i){ this.i = i; } // a los mtodos de la clase contenedora hay que pasarles // referencias a los objetos de la clase interna static public void printA(Bs unBs) { System.out.println("i=" + i + " unBs.j=" + unBs.j); }37

Ejemplo clase interna static (ii)// Clase interna static static class Bs { int j = 2; public Bs(int j) { this.j = j; } // los mtodos de la clase interna static no pueden acceder // a la i (variable de objeto). S pueden acceder a is public void printBs() { System.out.println("j=" + j + " is=" + is); } } }38

Ejemplo clase interna static (iii)class ClasesIntStatic { public static void main(String [] arg) { A a1 = new A(11), a2 = new A(12); System.out. println("a1.i=" + a1.i + " a2.i=" + a2.i); A.Bs b1 = new A.Bs(-10); A.Bs b2 = a1.new Bs(-11); System.out. println("b1.j=" + b1.j + " b2.j=" + b2.j); b1.printBs(); b2.printBs(); a1.printA(b1); a1.printA(b2); } 39 }

Clases internas miembro (i)n

Son clases definidas al mximo nivel de la clase contenedora, y no son staticn

No pueden tener miembros static Los mtodos de la clase interna ven directamente las variables miembro del objeto de la clase contenedora Los mtodos de la clase contenedora no ven directamente las variables miembro de los objetos de la clase interna: necesitan una referencia Se puede acceder a los objetos de la clase interna, aunque se pierda la referencia al objeto de la clase contenedora40

n

Relacin entre las clases internas y la contenedora:n

n

n

Clases internas miembro (ii)n

Permisos de acceso:n

n

n

n

Las clases internas pueden ser private o protected (las normales slo pueden ser public o package) Los mtodos de las clases internas acceden a todos los miembros, incluso private, de la clase contenedora La clase contenedora puede acceder (con una referencia) a todas las variables miembro de sus clases internas Una clase interna puede acceder a los miembros (incluso private) de otras clases internas41

Clases internas miembro (iii)n n

n

n

Una clase interna puede contener otra clase interna En la clase interna this se refiere al objeto de la propia clase interna. Para acceder al objeto de la clase contenedora se utiliza ClaseContenedora.this Para crear un objeto de la clase interna se utiliza new precedido por la referencia al objeto de la clase contenedora. Ejemplo: B clase interna de A y C clase interna de B A a = new A(); A.B b = a.new B(); A.B.C c = b.new C();

42

Ejemplo clase interna miembro (i)class A { int i = 1; public A(int i) { this.i = i; } public void printA(B unB) { System.out.println("i=" + i + " unB.j=" + unB.j); } protected class B { int j = 2; public B(int j) { this.j = j; } public void printB() { System.out.println("i=" + i + " j=" + j); } } }43

Ejemplo clase interna miembro (ii)class ClasesInternas { public static void main(String []arg) { A a = new A(13); A.B b = a.new B(-30); // se destruye la referencia al objeto de la clase contenedora a = null; b.printB(); // i = 13, j = -30 a = new A(14); // se crea un nuevo objeto asociado a la referencia a // b sigue asociado al anterior objeto de la clase contenedora b.printB(); // i = 13, j = -30 } } 44

Clases internas localesn n

n

n

n

No se declaran dentro de otra clase al mximo nivel, sino dentro de un bloque de cdigo (en un mtodo) Slo son visibles y utilizables en el bloque de cdigo en el que estn definidas Tienen acceso a todos los miembros de la clase contenedora Pueden utilizar las variables locales y argumentos de mtodos visibles en ese bloque de cdigo, slo si son final No pueden ser declaradas public, protected, private o package. Su visibilidad es la del bloque en la que ha sido definida45

Ejemplo clase interna local (i)class A { int i = -1; public A(int i) { this.i = i; } public void getAi(final long k) { final double f = 3.14; class BL { int j = 2; public BL(int j) { this.j=j; } public void printBL() { System.out.println("j=" + j + " i=" + i + " f=" + f + " k=" + k); } } // fin clase BL BL bl = new BL(2*i); bl.printBL(); } // fin getAi } // fin clase A 46

Ejemplo clase interna local (ii)class ClasesIntLocales { public static void main(String []arg) { A a1 = new A(-10), a2 = new A(-11); a1.getAi(1000); a2.getAi(2000); } }47

Clases annimasn

n

Son similares a las clases internas locales, pero sin nombre: n Al no tener nombre, slo se puede crear un nico objeto n Se utilizan en el AWT para definir clases y objetos que gestionen los eventos de la interface de usuario Formas de definir una clase annima: n Palabra new seguida de la definicin de la clase annima entre llaves n Palabra new seguida del nombre de la clase de la que hereda (sin extends) y la definicin de la clase annima entre llaves el nombre de la clase base puede ir seguido de los argumentos de su constructor n Palabra new seguida de la interface que implementa (sin implements) y la definicin de la clase annima entre llaves el nombre de la interface va seguido por parntesis vacos48

Ejemplo clase anniman

Definicin de clase annima en relacin con el AWT:unObjeto.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { .... } });

n

La clase annima deriva de Object e implementa la interface ActionListener49