Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1
Programacin de Sistemas
2
Escenario IV:
Declarar e implementar una clase
Objetivo:
Ser capaz de declarar una clase con un conjunto de caractersticas
(atributos) y comportamientos (mtodos)
Ser capaz de crear objetos de una clase dada y modificar o restringir el
acceso a su estado y su comportamiento
Plan de trabajo:
Memorizar la nomenclatura bsica de la programacin orientada a objetos
Practicar el modelado de objetos con ejemplos sencillos para distinguir entre una
clase, un objeto, su estado y su comportamiento
Repasar la sintaxis java para declarar clases, atributos, constructores y mtodos
Recordar el mecanismo y la sintaxis para paso de mensajes entre objetos
3
Objetivos
4
Clases y objetos
Encapsulacin de objetos
Abstraccin funcional
Abstraccin de datos
Miembros de una clase (atributos y mtodos)
Paso de mensajes
Sobrecarga de mtodos
Constructores
Modificadores y acceso
5
Qu es un objeto?
6
Qu es un objeto?
7
Qu es un objeto?
8
Ejemplo
Clase Objetos
Estado
Constructor
Comportamiento
9
Ejercicio 1
10
Encapsulacin de objetos
11
Encapsulacin de objetos
Normalmente:
Los mtodos son pblicos
Los atributos son privados
Puede haber mtodos privados
Es peligroso tener atributos pblicos
12
Definicin de objetos
13
Interacciones entre objetos
14
Paso de Mensajes
Interfaz Pblica
Implementacin
Arrancar
15
Ejemplo
Clase Rueda
Paso de
mensajes
16
Clasificacin de objetos
17
Objetos vs. Clases
18
Sobrecarga (Overloading)
Qu es?
19
Sobrecarga (Overloading)
Para qu sirve?
Clase Objetos
Sobrecarga
20
Ejercicio 2
21
Constructores
Cuando se crea un objeto sus miembros se inicializan con un
mtodo constructor
Los constructores:
llevan el mismo nombre que la clase
No tienen tipo de resultado (ni siquiera void)
Conviene que haya al menos 1 constructor
Pueden existir varios que se distinguirn por los parmetros que
aceptan (sobrecarga)
Si no existen se crea un constructor por defecto sin parmetros
que inicializa las variables a su valor por defecto.
Si la clase tiene algn constructor, el constructor por defecto deja
de existir. En ese caso, si queremos que haya un constructor sin
parmetros tendremos que declararlo explcitamente.
22
Constructores
Sobrecarga de constructores
23
Ejercicio 3
24
Modificadores y acceso
Static (miembros estticos)
Modificador static
Slo existen una vez por clase, independientemente del
nmero de instancias (objetos) de la clase que hayamos
creado y aunque no exista ninguna.
El mtodo o el atributo se comportan siempre de la
misma manera
Se puede acceder a los miembros estticos
utilizando el nombre de la clase.
Un mtodo esttico no puede acceder a miembros no
estticos directamente, tiene que crear primero un objeto
25
Modificadores y acceso
Static (miembros estticos)
Atributo esttico
Otros ejemplos
Atributo esttico
=> -231
=> 231-1
http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html
26
Modificadores y acceso
Static. Algunas reglas
27
Acceso
Mtodos get() y set()
28
Ejercicio 4
29
MODIFICADORES clase metodo atributo
public Accesible desde cualquier otra clase
acceso
Clase de nivel mximo. Es el mismo para todos Es la misma para todos los
static
otros
30
Paquetes
import java.math.BigDecimal
31
Paquetes
import MiPropioPaquete.Clase1
32
Programacin de Sistemas
33
Escenario V:
Reutilizar cdigo. Herencia
Una vez que eres capaz de crear tus propias clases ests preparado para
trabajar en equipo y reutilizar cdigo de tus compaeros. Tu equipo te
proporciona un conjunto de clases y te pide que crees especializaciones o
generalizaciones de las mismas
Objetivo:
Ser capaz de crear una clase derivada aadiendo algunas caractersticas
(atributos) y comportamiento (mtodos) a una clase existente.
Ser capaz de extraer todo el cdigo comn de un conjunto de clases similares
para agruparlo en una nueva clase padre para que sea ms fcil de mantener.
Ser capaz de crear objetos, y referenciar y acceder a sus atributos y
mtodos dependiendo de su posicin en la jerarqua de herencia y sus
modificadores
Plan de trabajo:
Memorizar la nomenclatura relacionada con herencia
Memorizar la sintaxis de java relacionada con la herencia (extends), con la referencia
(super) y con modificadores de acceso avanzados (protected)
Conocer mecanismos bsicos de herencia como ocultacin de atributos, sobreescritura
de mtodos ,saber para qu sirven y cmo se usan
34
Contenidos
35
Herencia
Qu es?Para qu sirve?
36
Herencia
Para qu sirve?
Recurso Recurso
nombre nombre
descripcion descripcion
decirNombre()
decirNombre()
decirDescripcion()
decirDescripcion()
37
Herencia
Nomenclatura
38
Herencia
Declaracin de clases derivadas
Profesor Bedel
39
Herencia
Clase derivada (subclase)
Atributos Mtodos
nombre imprime
apellidos
anyoNacimiento
grupo ponGrupo
horario imprimeGrupo
Clase Alumno
40
Herencia
Cmo se usa? Ej.: Persona.java
protected accesible
desde las subclases
41
Herencia
Cmo se usa? Ej.: Alumno.java
super acceder a
atributos o mtodos de
la superclase
mcfp@it.uc3m.es 2010
42
Herencia
Cmo se usa? Ej.: Prueba.java
43
Herencia
Qu pasa si?
44
Herencia
Consecuencias de la extensin de clases
Herencia de la interfaz
La parte pblica de la clase derivada contiene la parte
pblica de la clase base. La clase Alumno contiene el
mtodo imprime()
Herencia de la implementacin
La implementacin de la clase derivada
contiene la de la clase base. Al invocar los
mtodos de la clase base sobre el objeto de la clase
derivada (unAlumno.imprime()) se produce el
comportamiento esperado
45
Ejercicio 5
46
Herencia
Jerarqua de herencia en Java
47
Herencia
Jerarqua de herencia en Java
Object
Bedel Profesor
48
Herencia
Reescritura (o sobrescritura)
49
Reescritura I (Shadowing)
Ocultacin de atributos
Atributos Mtodos
nombre imprime()
Alumno a = new Alumno(...);
apellidos
System.out.println(a.nombre);
anyoNacimiento
Persona p = a;
Heredados de la clase Persona
System.out.println(p.nombre);
nombre ponGrupo(String s)
horario
tipo puede ser distinto
Clase Alumno
50
Reescritura I (Shadowing)
Ocultacin de atributos. Ejemplo
class Persona {
public String nombre = "Juan";
}
class Alumno extends Persona {
public int nombre = 10003041;
}
class Test {
public static void main (String[] args) {
Alumno a = new Alumno ();
Persona p = a;
System.out.println(p.nombre); Imprime Juan
System.out.println(a.nombre)
;
} }
Imprime 10003041
51
Reescritura I (Shadowing)
Ocultacin de atributos
52
Reescritura I (Shadowing)
Ocultacin de atributos
53
Reescritura II (Overriding)
Redefinicin de mtodos. Qu es?
54
Reescritura II (Overriding)
Redefinicin de mtodos Para qu sirve?
Recurso Recurso
nombre nombre
descripcion descripcion
decirNombre() decirNombre()
decirDescripcion() decirDescripcion()
55
Reescritura II (Overriding)
Redefinicin de mtodos
error
no
metodo(parametros)?
Object
no
metodo(parametros)?
metodo(parametros)?
Otro
Otro ancestro
ancestro
no
metodo(parametros)?
metodo(parametros)?
Superclase
no
mensaje
metodo(parametros)?
objeto instancia
Subclase
metodo(parametros)
56
Reescritura II (Overriding)
Redefinicin de mtodos
57
Reescritura II (Overriding)
Redefinicin de mtodos. Ejemplo
class Persona {
public String nombre = "Juan";
public void imprimir() {
System.out.println("Persona: " + nombre);
}
}
class Alumno extends Persona {
public String nombre = "JuanGarca";
public void imprimir() {
System.out.println("Alumno: " + nombre);
}
}
class Test2 {
public static void main (String[] args) {
Alumno a = new Alumno();
Persona p = a;
a.imprimir();
p.imprimir();
} Ambas imprimen:
} Alumno: JuanGarcia
58
Ejercicio 6
59
Reescritura vs. sobrecarga
60
Constructores y herencia
61
Constructores y herencia
62
Constructores y herencia
63
Constructores y herencia
2. Indicndolo explcitamente
64
Ms sobre super
super
referencia al objeto actual como si fuera una instancia de su
superclase
A travs de la referencia a super se puede acceder
explcitamente a mtodos de la superclase
Para reescribir mtodos (no slo el constructor), puede ser
til usar la referencia a super
65
Polimorfismo
Capacidad de un objeto de decidir qu mtodo
aplicar, dependiendo de la clase a la que pertenece
Una llamada a un mtodo sobre una referencia de un tipo
genrico (clase base) ejecuta la implementacin
correspondiente del mtodo dependiendo de la clase del
objeto que se cre
Permite disear e implementar sistemas extensibles
Los programas pueden procesar objetos
genricos (descritos por referencias de la
superclase)
El comportamiento concreto depende de las subclases
66
Polimorfismo
Ejemplo
Alumno, Profesor y Bedel.
Creamos un array de Persona donde incluimos objetos de
Alumno, Profesor y Bedel.
Al invocar al mtodo imprimir(), sobrescrito en las clases
Alumno, Profesor y Bedel, sobre el array de Persona, cada
objeto utilizar su propia implementacin del mtodo
67
Polimorfismo
Ligadura dinmica
Se llama al mtodo correcto, aunque nos
estemos refiriendo al objeto de la subclase a
travs de una referencia a la superclase
Este mecanismo se llama ligadura dinmica
permite detectar en tiempo de ejecucin cul es el
mtodo adecuado para llamar
El compilador no genera el cdigo para llamar
al mtodo en tiempo de compilacin
Genera cdigo para calcular qu mtodo llamar
68
Ejercicio 7
69
Modificadores y acceso
Final
70
Modificadores y acceso
Final
71
MODIFICADORES clase metodo atributo
public Accesible desde cualquier otra clase
acceso
No se puede heredar de
final ellas. Es la hoja en el
No se puede ocultar
Es cte y no puede ser
No se puede cambiar su
valor, es cte.
otros
72
Programacin de Sistemas
73
Contenidos
74
Casting (conversin)
Sintaxis y tipos
Sintaxis:(tipo) identificador
Dos tipos de casting:
Widening o upcasting: Una subclase se utiliza
como instancia de la superclase. Es implcito.
Narrowing o downcasting: La superclase se
utiliza como instancia de una subclase.
Conversin explcita.
Slo se puede hacer casting entre clases
padre e hija no entre clases hermanas
75
Casting (conversin)
Widening o upcasting
1. Compatibilidad hacia arriba
(upcasting)
Un objeto de la clase derivada siempre se
podr usar en el lugar de un objeto de la
clase base (ya que se cumple la relacin
es-un)
Persona p = new Alumno();
76
Casting (conversin)
Narrowing o downcasting
2. Compatibilidad hacia abajo (downcasting)
No se produce por defecto, ya que un objeto de la
clase base no siempre es un objeto de la clase
derivada
77
Casting (conversin)
Ejemplo
public class Prueba2 {
public static void main (String[] args) {
Persona p1;
//conversin ascendente implcita - funciona Un alumno
Alumno a1 = new Alumno(); siempre es una
persona
p1 = a1;
(implcito)
Alumno a2;
//conversin descendente implcita No funciona Una persona no
a2 = p1; //error porque no hago conversin explcita siempre es un
alumno
//conversin descendente explcita - funciona
a2 = (Alumno) p1; //p1 referencia una instancia
//de Alumno
79
Casting (conversin)
El operador instanceOf
Sintaxis:
objeto instanceOf clase
Comprueba si un objeto es realmente de la
clase derivada
Ejemplo:
public Alumno comprueba (Persona p) {
Alumno a = null;
if (p instanceOf Alumno)
a = (Alumno) p;
return a;
}
80
Clases abstractas
Qu son?
81
Clases abstractas
Caractersticas
82
Clases abstractas
Caractersticas
83
Clases abstractas
Para qu sirven?: Implementaciones parciales
84
Clases abstractas
Mtodos abstractos
Mtodos declarados pero no implementados
en las clases abstractas
public abstract tipoDevuelto nombre (listaParametros);
86
Ejercicio 8
88
Interfaces
Qu son?
Los interfaces son colecciones de mtodos (y constantes)
Todos los mtodos de un interfaz son
abstractos
El acceso a un interfaz es pblico
Los atributos son public, static y final
Los mtodos son public
Los interfaces son implementados por clases
una clase implementa un interfaz definiendo los cuerpos de
todos los mtodos de la interfaz
una clase abstracta implementa un interfaz definiendo los cuerpos de
todos los mtodos de la interfaz o declarando alguno como abstracto
una clase (abstracta o no) puede implementar uno o ms interfaces
89
Interfaces
Qu son?
Una interfaz es un elemento puramente de
diseo
Qu se quiere hacer?
90
Interfaces
Declaracin
Sintaxis:
public interface nombreInterfaz {
static final tipo CONSTANTE = valor;
tipoDevuelto nombreMetodo(listaParam);
}
92
Interfaces
Para qu sirven? Herencia mltiple
Class C
Figura Dibujable
area() dibujar()
extends implements
Crculo Rectngulo
area() area()
dibujar() dibujar()
95
Interfaces
Herencia de interfaces y polimorfismo
97
Resumen Orientacin a objetos
Clase (concreta)
Todos los mtodos implementados
Clase abstracta
Al menos un mtodo no implementado,
(slo declarado)
modificador abstract
Interfaz
Nada de implementacin
palabra reservada: interface
98
Resumen Orientacin a objetos
Clase (concreta o abstracta)
puede extender (extends) a una sola clase
(herencia simple)
puede implementar (implements) uno o
ms interfaces (herencia mltiple)
Interfaz
puede extender (extends) a uno o ms
interfaces
99
MODIFICADORES clase metodo atributo
public Accesible desde cualquier otra clase
acceso