12 Atributos Atributos de clase: Común a todas las instancias de una clase Sólo se inicializan una vez. Ej: static public int nextCodigo;
Atributos de instancia: determina el estado de los objetos cada objeto reserva memoria para todas las variables de instancia
Declaración:
[acceso][static][final] tipo nombreAtributo [= valor_inicial];
13 Inicialización de los atributos Si un atributo no se inicializa se le asigna un valor por defecto en función de su tipo:
14 Control de acceso public – los miembros que se declaran como public son accesibles en cualquier parte donde la clase sea accesible
private – miembros declarados como private sólo accesibles en la propia clase
public class A{ public int at1; private int at2; … }
Atributos privados y acceso a través de métodos públicos (set/get)
A a; //creamos el objeto a.at1 = 6 //OK a.at2 = 5 //ERROR
15 Métodos Código que “entiende” y manipula el estado de un objeto
Pueden ser llamados dentro de la clase o por otras clases
Es obligatorio indicar el tipo de retorno o void
Declaración:
[acceso][static] tipoRetorno nomMet ([argumentos]){ //cuerpo del metodo [return valorRetorno;] }
Invocación: Notación punto objReceptor.nomMet(argumentos);
16 Métodos de clase Se invocan sobre la clase, no sobre un objeto
Sólo puede acceder a las variables y métodos de clase (static)
Ejemplos: int i = Integer.parseInt(“123”);
public class Ejemplo{ static private int at; static public int getAt(){ return at; } } Se invoca Ejemplo.getAt();
17 Métodos Java soporta sobrecarga de métodos el mismo nombre pero con DIFERENTE lista de argumentos SIEMPRE devuelven el mismo tipo
public class ListaEnteros{ … public void add (int elem){…} public void add (int elem, int index){…} } Paso de parámetros siempre por valor los valores de los parámetros son copias de los valores que especifica el que lo invoca tipos primitivos no cambian los objetos pueden cambiar su estado ? se pasa por valor la referencia
18 Paso de parámetros public class Contador { int valor; … public void sincronizar(Contador c){ c.setValor(valor); } }
(Gp:) 23 (Gp:) valor
c1 (Gp:) c
Se puede modificar el estado del objeto pero no la referencia c2 (Gp:) 45 (Gp:) valor
c1.sincroniza(c2); 23 (Gp:) c=c2
19 Constructores Procedimiento con el mismo nombre que la clase
Se invoca automáticamente cada vez que se crea un objeto de la clase
No pueden especificar tipos ni valores de retorno
Permite sobrecarga para especificar formas distintas de inicializar los objetos
Si no se define, el compilador crea uno por defecto sin argumentos que inicializa los atributos a los valores por defecto
El programador también puede definir un constructor sin argumentos.
20 Constructor de copia public class Ejemplo{ private int at1; … public Ejemplo (Ejemplo e){ at1 = e.at1; } }
21 Ejemplo: Clase Contador v1 public class Contador{
// Variables de instancia private int valor;
// Constructores public Contador (){ valor = 0; } public void incrementar(){ valor++; } public int getValor(){ return valor; } }
22 semántica referencia!!! Creación de objetos Un objeto es una instancia de una clase. La creación de un objeto se realiza en tres pasos Declaración, proporcionar un nombre al objeto Contador miContador; (null)
Instanciación, asignar memoria al objeto miContador = new Contador(); objContador
Inicialización, opcionalmente se pueden proporcionar valores iniciales a las variables de instancia del objeto en la declaración o mediante CONSTRUCTORES.
23 Ejemplo. Clase de prueba v1 public class TestContador{ public static void main (String [] args){ Contador c = new Contador();
c.incrementar(); c.incrementar();
System.out.println(“C = “ + c.getValor()); } }
24 Igualdad vs. Identidad ¡¡OJO!! == y != compara REFERENCIAS de manera que:
Contador c1 = new Contador(); Contador c2 = new Contador();
c1 == c2 –> false, luego c1!=c2 c1.equals(c2) –> true compara el CONTENIDO de los objetos si lo redefinimos en la clase (por defecto es igual que ==) 47 0 c2 valor valorInicial 47 0 c1 valor valorInicial
25 this Invocación a otro de los constructores de la clase: public Contador (int i) { valor=i; valorInicial=i; } public Contador(){ this(0); } Instancia actual: Pasar el objeto actual como parámetro de otro método servicio.añadir(this);
En cualquier método del objeto actual this.otroMetodo();
26 Reglas de alcance Porción del programa en el que se puede hacer referencia al identificador
Un identificador debe ser único dentro de su ámbito
Alcance de CLASE: los métodos de una clase pueden modificar directamente los atributos de clase y de instancia Un método de clase (static) sólo puede acceder a atributos de clase.
Alcance de Bloque: variables locales y parámetros de un método cuando se anidan los bloques y existen dos identificadores con nombres iguales el compilador da error de sintaxis (variable ya definida) si una variable local tiene igual nombre que un atributo de la clase éste queda oculto.
27 Reglas de alcance class MiClase{ … public static void metodo1(…){
{ …//bloque } } public void metodo2(…){ … } } variables de clase parámetros variables locales var. de instancia parámetros variables locales
28 El método main Clase que conduce la aplicación
Al ejecutar el programa se busca el método main que contiene dicha clase: public class Eco { public static void main (String[] args){ for (int i = 0; i=step) valor-=step; else valor=0; } public void reset(){ valor=valorInicial; } public int getValor(){ return valor; } public int getCodigo(){ return codigo; } }
32 Ejemplo. Clase de prueba public class TestContador{ public static void main (String [] args){ Contador c1 = new Contador(); Contador c2 = new Contador (0, 10);
c1.incrementar(); c2.incrementar();
System.out.println(“C1 = “ + c1.getValor()); System.out.println(“C2 = “ + c2.getValor()); } }
33 Paquetes Agrupar todas las clases relacionadas //MiClass.java package miBiblioteca; public class MiClase{ //…
Se coloca al comienzo del fichero
Indica que las clases públicas que contenga está accesible a cualquiera que incluya: import miBiblioteca.MiClase; o bien import miBiblioteca.*;
Las clases que no tienen un nombre de paquete están en el paquete por defecto (Default Package)
Soporta el concepto de jerarquía de paquetes (estilo directorio) ej: import miPaquete.miSubPaquete.MiClase;
34 Control de acceso Designar qué clases de una biblioteca (miBiblio) están disponibles desde fuera del paquete
Controlan si el cliente puede crear objetos de la clase public class MiClase { … } Entonces import miBilio.MiClase;
Modificador de acceso por omisión indica visibilidad a nivel de paquete. Tanto la clase como atributos y métodos.
Una clase NUNCA puede ser private.
35 Estructura de un proyecto (Gp:) modelo
(Gp:) Contador valor
sumar() restar()
(Gp:) vista
(Gp:) VentanaContador …
…
(Gp:) Contiene nom_proyecto.jpx (Gp:) Ficheros .class (Gp:) Ficheros .java
Una carpeta por cada paquete Cada carpeta contiene los ficheros corres- pondientes a las clases del paquete. Coincidencia EXACTA de nombres.
36 Paquetes básicos del sistema java.lang: para funciones del lenguaje java.util: para utilidades adicionales java.io: para manejo de ficheros java.awt: para diseño gráfico e interfaz de usuario java.awt.event: para gestionar eventos javax.swing: nuevo diseño de GUI java.net: para comunicaciones …
Página anterior | Volver al principio del trabajo | Página siguiente |