Ampliación sobre clases y objetos Conceptos a tratar

Anuncio
Fundamentos de la Programación Orientada a Objetos
Ampliación sobre clases y objetos
Programación Orientada a Objetos
Facultad de Informática
Juan Pavón Mestras
Dep. Ingeniería del Software e Inteligencia Artificial
Universidad Complutense Madrid
Conceptos a tratar
„
„
„
„
„
„
Objetos y clases
Igualdad e identidad
Miembros de clase: static
Constantes: final
El patrón singleton
El método main()
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
Programación Orientada a Objetos
2
Programación orientada a objetos
„
„
La unidad fundamental de la programación orientada a
objetos es la clase
Un programa orientado a objetos en ejecución
„
„
„
crea objetos
y manipula (mediante llamadas a métodos) objetos
Cada objeto es un ejemplar de una clase
„
„
Cuando se invoca un método de un objeto, se mira en el
código de su clase las acciones a ejecutar
Un objeto puede crear y usar otros para realizar su trabajo
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
3
Programación Orientada a Objetos
Clases
„
Una definición de clase comprende:
„
„
Cabecera
Campos:
• Variables
• Constantes
„
estado del objeto
Métodos:
• Funciones
• Constructores
• Bloques de inicialización static
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
Programación Orientada a Objetos
comportamiento
4
Programación orientada a objetos
„
Para hacer un programa orientado a objetos
1.
2.
Identificar los objetos del dominio
Ver cómo se pueden implementar usando clases ya
existentes
• Evitar reinventar la rueda
• Las clases estándar suelen estar muy probadas y son eficientes
„
Para ello es conveniente familiarizarse con las librerías
estándar de Java (o del lenguaje correspondiente)
„
„
„
Conocer bien clases de uso común
Saber encontrar las demás
Lo más importante es la interfaz, no la implementación
„
Cómo usar una clase, no cómo se implementa
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
Programación Orientada a Objetos
5
Objetos
„
Los objetos son instancias de las clases
„
„
Cada objeto tiene sus propios valores de las variables
definidas en la clase
Cada objeto tiene su propia identidad
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
Programación Orientada a Objetos
6
Igualdad vs. Identidad
if(entrada == "hola") {
...
}
if(entrada.equals("hola")) {
...
}
„
„
Prueba la
identidad
Prueba la
igualdad
Todos los objetos Java se deben comparar siempre
con .equals
Los tipos básicos (incluidos referencias a objetos) se
comparan con ==
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
Programación Orientada a Objetos
7
Igualdad vs. Identidad (1)
:Persona
:Persona
“Ana”
“Pepe”
persona1
persona2
persona1 == persona2 ?
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
Programación Orientada a Objetos
8
Igualdad vs. Identidad (2)
:Persona
:Persona
“Ana”
“Ana”
persona1
persona2
persona1 == persona2 ?
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
Programación Orientada a Objetos
9
Igualdad vs. Identidad (3)
:Persona
:Persona
“Ana”
“Ana”
persona1
persona2
persona1 == persona2 ?
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
Programación Orientada a Objetos
10
Igualdad vs. Identidad
class PruebaIgualdad {
public static void main(String args[]) {
String str1, str2;
str1 = “Texto de prueba.";
str2 = str1;
System.out.println("String1: " + str1);
System.out.println("String2: " + str2);
System.out.println("El mismo objeto? " + (str1 == str2));
str2 = new String(str1);
System.out.println("String1: " + str1);
System.out.println("String2: " + str2);
System.out.println("El mismo objeto? " + (str1 == str2));
System.out.println("El mismo valor? "+ str1.equals(str2));
}
}
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
Programación Orientada a Objetos
11
Miembros estáticos de una clase (static)
„
Sólo hay un miembro por clase
„
Se declaran con la palabra clave static
• variables de clase
• métodos de clase
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
Programación Orientada a Objetos
12
Miembros estáticos
„
Variables de clase
„
Hay exactamente una (aunque no exista ningún objeto)
• Si se modifica, todos los objetos la verán modificada
„
Se inicializan antes de usarse:
public static final int MAXIMO = 12;
protected static int[] primos = new int[4];
„
Se usan
• Para definir constantes de clase (static final)
• Para implementar el patrón singleton
• Otras utilizaciones no suelen resultar de un buen diseño
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
Programación Orientada a Objetos
13
Constantes
„
Literal (valor constante de un tipo)
„
null (referencia literal de objeto)
• Para acabar de utilizar un objeto:
variable = null;
„
„
„
„
„
true y false
12
0
‘N’
\116
"Hola Mundo.“
28.4
‘\n’
Variable constante (variable cuyo valor nunca cambia)
„
Se declaran con la palabra clave final
• static final float pi = 3.141592;
• static final valormax = 255;
• static final int abierto = 0, cerrado = 1;
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
Programación Orientada a Objetos
14
Miembros estáticos
public class Cuenta{
public static String INFO = "Ejemplo de clase Cuenta";
public final static int UNO = 1;
public final static int DOS = 2;
public final static int TRES = 3;
}
„
Se pueden acceder
„
Consola
Directamente desde la clase
1
System.out.println(Cuenta.UNO);
„
O bien desde un objeto cualquiera
Cuenta cuenta = new Cuenta();
System.out.println(cuenta.INFO);
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
Consola
Ejemplo de clase Cuenta
Programación Orientada a Objetos
15
Miembros estáticos
„
Métodos de clase
„
„
„
„
Definen comportamiento referido a la clase, no a objetos
concretos
Se invocan en nombre de la clase
Sólo pueden acceder a variables de clase (static)
Para realizar funciones de utilidad (que sólo actúan sobre sus
parámetros:
Math.sqrt(234.0);
public static void main() {};
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
Programación Orientada a Objetos
16
Métodos de clase
„
También se pueden acceder desde la clase o los objetos
public class Cuenta{
public static String INFO = "Ejemplo de clase Cuenta";
public final static int UNO = 1;
public final static int DOS = 2;
public final static int TRES = 3;
public static String getInfo(){
return INFO;
}
}
System.out.println(Cuenta.getInfo());
Ejemplo de clase Cuenta
Cuenta cuenta = new Cuenta();
System.out.println(cuenta.getInfo());
Ejemplo de clase Cuenta
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
Programación Orientada a Objetos
17
Patrón Singleton
„
Sirve para asegurarse de que se crea sólo un único objeto
de la clase
„
La referencia a ese objeto se guarda en una variable estática
y se accede por un método estático
public class Singleton {
private static Singleton theInstance;
public static Singleton getInstance(){
if (theInstance == null){
theInstance = new Singleton();
}
return theInstance;
}
private Singleton(){
super();
}
}
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
Programación Orientada a Objetos
18
Patrón Singleton
„
Obsérvese que el contructor se declara private
„
„
Así se asegura que no se pueden crear objetos de la clase
desde código externo a la clase
El método getInstance() comprueba si existe una instancia
y si no la crea y la guarda en la variable estática
„
Esta técnica se denomina inicialización perezosa
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
Programación Orientada a Objetos
19
Uso del patrón Singleton
„
Si se intenta llamar a la creación de una instancia, fallará
new Singleton()
„
error
El constructor Singleton() no es visible
Al llamar al método estático getInstance() devolverá una
referencia
Singleton.getInstance()
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
Devuelve la única instancia de la clase
Programación Orientada a Objetos
20
Uso del patrón Singleton
„
Ejercicio: busca ejemplos donde sea útil el patrón
Singleton
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
Programación Orientada a Objetos
21
Miembros estáticos
„
Bloques de inicialización estática
„
Para configurar campos estáticos u otros estados necesarios
static {
for (int i = 0; i < primos.length; i++)
primos[i] = i;
}
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
Programación Orientada a Objetos
22
El método main()
„
„
Define el flujo principal de un programa
El ínterprete de Java espera que se le pase una clase con
el método main() declarado como
public static void main (String[] args) {
// … flujo principal del programa
}
„
Y se invoca
java NombreDeClase lista de parámetros
„
Los parámetros se guardan en el array args
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
Programación Orientada a Objetos
23
Ejercicio de programa main
„
Hacer un programa que lea una serie de palabras y las
escriba al revés
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
Programación Orientada a Objetos
24
Cadenas de caracteres
„
La clase java.lang.String implementa cadenas
„
Las cadenas son constantes: String s = "hola";
• Cambiar una significa construir una nueva
„
„
„
„
„
Se pueden concatenar con el operador +
Todos los objetos tienen el método toString()
Se pueden formatear con valueOf()
Se comparan con equals() (== es para comparar referencias)
Tiene un tratamiento especial por el compilador
„
El compilador se encarga de crear una clase String cuando se
encuentra un literal:
String uno = "Uno";
String dos = "Dos";
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
String uno = new String("Uno");
String dos = new String("Dos");
Programación Orientada a Objetos
25
Cadenas de caracteres
„
La clase StringBuffer permite manipular cadenas
„
„
„
„
Se crea con StringBuffer(NumeroGrande)
Luego se usan los métodos insert(), append(), setCharAt(),
...
Al final se llama a toString() para obtener un String
Permite añadir, reemplazar y borrar caracteres
„
„
Cuando se añaden caracteres se incrementa el tamaño
Un objeto StringBuffer conoce su longitud y capacidad
• length indica cuántos caracteres tiene
• capacity indica cuántos caracteres caben
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
Programación Orientada a Objetos
26
Cadenas de caracteres
StringBuffer buffer = new StringBuffer();
buffer.append("Hello");
buffer.append(", do you");
buffer.insert(13, " like my hat?");
System.out.println(buffer);
buffer.replace(0,5,"Hi");
System.out.println(buffer);
buffer.delete(2,buffer.length()-1);
buffer.replace(buffer.length()-1,
buffer.length(), "!");
System.out.println(buffer);
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
Console
Hello, do you like my hat?
Hi, do you like my hat?
Hi!
Programación Orientada a Objetos
27
Cadenas de caracteres
„
La clase StringBuffer es más eficiente que String
„
Aunque no tan cómoda de utilizar
„
Usar String para cadenas de caracteres constantes
Y StringBuffer cuando haya que manipularlas
„
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
Programación Orientada a Objetos
28
Descargar