Publicado el 26 de Octubre del 2018
1.030 visualizaciones desde el 26 de Octubre del 2018
386,3 KB
15 paginas
Creado hace 13a (22/09/2010)
Tema 1- Conceptos de Java para
Estructuras de Datos
Germán Moltó
Escuela Técnica Superior de Ingeniería Informática
Uni ersidad Politécnica de Valencia
Universidad Politécnica de Valencia
Tema 1- Conceptos de Java para Estructuras de Datos
Tema 1 Conceptos de Java para Estructuras de Datos
ÍÍndice general:
1. Clases y Objetos en Java
2.
El Principio de la Programación Orientada a Objetos de la Herencia y
su Soporte en Java
El Polimorfismo en Java
El Polimorfismo en Java
3
3.
4. Más Herencia en Java: Métodos y Clases Finales y Abstractos.
5. Herencia Múltiple: Interfaces Java
5. Herencia Múltiple: Interfaces Java
1
2
Objetivos y Bibliografía
Objetivos y Bibliografía
Objetivos:
Conocer los conceptos básicos de la POO y su soporte en el
lenguaje Java
Aprender el concepto de Herencia en Java para afrontar el
Aprender el concepto de Herencia en Java para afrontar el
desarrollo de estructuras de datos y algoritmos que se realiza en
temas posteriores.
Estudiar el concepto de paquete como mecanismo para la
Estudiar el concepto de paquete como mecanismo para la
agrupación de clases.
Comprender el concepto de Polimorfismo, Interfaz y Clase
Ab
ilid d
Abstracta, así como su utilidad.
í
Bibliografía:
Weiss M A Estructuras de datos en Java Adisson-Wesley 2000
Weiss, M.A. Estructuras de datos en Java. Adisson-Wesley, 2000.
Capítulos 2 (Apartado 2.5) 3 y 4
Arnow, D., Weiss G. Introducción a la Programación con Java. Un
enfoque orientado a objetos. Adisson-Wesley, 2001. Capítulo 14
2001 C ít l 14
t d bj t
W l
Adi
f
i
Objetos y Clases en Java (I)
Objetos y Clases en Java (I)
En Java todo son objetos (i.e. instancias de una Clase dada),
exceptuando los 8 tipos primitivos (i.e. byte, short, int, long,
float, double, char y boolean).
Una Clase consta de un conjunto de atributos (almacenan
Una Clase consta de un conjunto de atributos (almacenan
datos) y un conjunto de métodos (trabajan con esos datos).
Un Objeto de una Clase se usa/manipula desde cualquier
Un Objeto de una Clase se usa/manipula desde cualquier
método de otra Clase, como por ejemplo TestClase.
public class TestClase {
public class TestClase {
public static void main( String args[] ){ ... }
}
Ejemplo: sea TestCirculo una aplicación que maneja Círculos,
i e Objetos de la clase Circulo
i.e. Objetos de la clase Circulo
3
4
Objetos y Clases en Java (II)
Objetos y Clases en Java (II)
public class TestClase {
p
{
public static void main( String args[] ){
¿ ?
}
}
¿Qué podemos hacer con un objeto?
Especificación de una Clase: descripción de QUÉ se puede
hacer con un Objeto, es decir, qué métodos expone
(especificación de Circulo).
Implementación de una Clase: detalles internos de CÓMO
Implementación de una Clase: detalles internos de CÓMO
se satisface la Especificación o cómo se consigue hacer lo que
se hace con un Objeto.
5
Referencias en Java
Referencias en Java
Una variable Referencia almacena la dirección de memoria en
la que se encuentra el Objeto al que referencia.
0
102
c1
Circulo c1 = new Circulo();
Circulo c1
new Circulo();
102
408
• Al hacer:
Memoria
• Circulo c2 = c1;
• La variable referencia c2 pasa a tener el mismo valor que
c1, es decir, ambas apuntan al mismo objeto.
7
Objetos y Clases en Java (III)
Objetos y Clases en Java (III)
public class TestClase {
p
{
public static void main( String args[] ){
Circulo c1 = new Circulo();
Circulo c2;
c2 = c1;
}}
}
Creación de Objetos de una Clase:
c1 es una variable Referencia al nuevo Objeto creado.
c2 es una variable Referencia a ningún Objeto, i.e. tras la
j
declaración Circulo c2 ; c2 == null
¿ Qué ocurre si se ejecuta c2 = c1; ?
6
Ejemplo de Utilización de Objetos Circulo
Ejemplo de Utilización de Objetos Circulo
Podemos crear un objeto de la clase Circulo de la manera
j
especificada en los constructores que define la clase.
public class TestCirculo {
p
{
public static void main( String args[] ){
Circulo c1 = new Circulo();
double radio = 4.0;
Color color = Color.red;
Circulo c2 = new Circulo(radio color);
Circulo c2 = new Circulo(radio, color);
System.out.println(c2);
System.out.println(c2.toString());
y
g());
p
(
}
}
8
¿Qué diferencia hay en las
dos últimas invocaciones?
dos últimas invocaciones?
Implementación de una Clase
Implementación de una Clase
Implementación de una Clase:
Detalles internos de cómo se satisface la Especificación o cómo se
consigue hacer lo que se hace sobre un Objeto.
Componentes de una Clase:
Componentes de una Clase:
Atributos, que almacenan los datos de la Clase
Métodos que definen la funcionalidad de la Clase mediante por lo
Métodos, que definen la funcionalidad de la Clase mediante, por lo
general, la manipulación de los atributos.
q
Elementos que aparecen en la implementación de una clase:
p
El operador this.
Modificadores estáticos, dinámicos y finales de una Clase y sus
p
componentes.
Modificadores de visibilidad public y private de una Clase y sus
componentes
componentes.
9
Implementación de una Clase: Definición de
Constructores
Constructores
Los Constructores de una clase permiten dar un valor
inicial a los atributos del objeto. Ejemplo: definición de los
métodos Constructores de Circulo
p
public Circulo() {
radio = RADIO_POR_DEFECTO;
color = COLOR_POR_DEFECTO;
}
public Circulo(double radio Color color) {
public Circulo(double radio, Color color) {
this.radio = radio;
this.color = color;
}
}
public Circulo(){
this hace referencia al objeto
sobre el que se invoca el método
y sirve para evitar el aliasing de
p
y
nombres.
g
this(RADIO_POR_DEFECTO, COLOR_POR_DEFECTO);
)
(
}
11
Implementación de una Clase: Definición de
Atributos
Atributos
Los Atributos de una Clase almacenan los datos de la Clase
i
l
d fi
Ejemplo: definición de los Atributos de la Clase Circulo
l
Modelo de la relación TIENE UN(A)
Modificadores de atributos
Ej
private double radio;
private String color;
private String color;
private static final double RADIO_POR_DEFECTO = 3.0;
private static final Color COLOR_POR_DEFECTO = Color.black;
d l Cl
ió d l
A ib
Ci
• Por lo general, los atributos se suelen definir privados y se definen
métodos consultores y modificadores. De esta manera se garantiza la
encapsulación u ocultación de datos
encapsulación u ocultación de datos.
• Modificador static: Permite definir variables a nivel de clase (compartidas
por todos los objetos).
• Modificador final: Impide asignar un nuevo valor al atributo.
10
Implementación de una Clase: Definición de
Métodos (I)
Métodos (I)
Los Métodos de una clase definen su funcionalidad.
: Definición de Métodos Consultores en la clase
Ejemplo: Definición de Métodos Consultores en la clase
Ejem l
Circulo.
Al definir como privados todos los atributos de Circulo, se deben
l
proporcionar métodos para acceder a su valor.
é d
d
i
public double getRadio() {
public double getRadio() {
return radio;
}
public Color getColor() {
p
p
Se podría utilizar this para referenciar a
los atributos (i.e., this.radio) pero no es
necesario puesto que no hay aliasing de
nombres.
return color;
t
l
}
12
Implementación de una Clase: Definición de
Métodos (II)
Métodos (II)
Implementación de una Clase: Definición de
Métodos (III)
Métodos (III)
Al definir como privados todos los atributos de Circulo,
se deben proporcionar métodos para modificar su valor.
Ejemplo: definición de los Métodos Modificadores de
p
Circulo
p
Ejemplo: definición de otros Métodos de Circulo
j
public double area() { return Math.PI * radio * radio; }
public String toString() {return “Circulo de radio “ + radio}
p
}
public static Circulo leerCirculo(Scanner teclado) { ... }
g() {
g
public void setRadio(double nuevoRadio) {
radio = nuevoRadio;
}
public void setColor(Color nuevoColor) {
color = nuevoColor;
}
13
Utilizar diferentes nombres para el
argumento y el atributo evita el aliasing y
ya no es necesario utilizar this
ya no es necesario utilizar this.
El uso de un método estático permite definirlo a nivel de
clase, no a nivel de instancia (objeto individual).
Se deberá invocar como Circulo.leerCirculo(...).
¿Se podría utilizar this en la
implementación del método area para
referenciar al atributo radio?
referenciar al atributo radio?
14
Estado Actual de la Clase Circulo
Estado Actual de la Clase Circulo
public class Circulo {
private double radio;
private double radio;
private Color color;
private static final double RADIO_POR_DEFECTO = 3.0;
private static final Color COLOR POR DEFECTO = Color black;
private static final Color COLOR_POR_DEFECTO Color.black;
/** crea un Circulo con radio r y color c */
public Circulo(Color c double r) {
public Circulo(Color c, double r) {
this.color = c;
this.radio = r;
}}
/** crea un Circulo estándar.: radio 3.0, color negro y centro en el origen*/
public Circulo() {
hi (COLOR POR DEFECTO RADIO POR DEFECTO)
this(COLOR_POR_DEFECTO, RADIO_POR_DEFECTO);
}
…
}
}
15
Ejercicios Propuestos
Ejercicios Propuestos
Ejercicio 1: Escribe la clase Manzana que tiene un sabor, de tipo
entero que representa una escala [0 10]
entero que representa una escala [0,10].
Por defecto, la manzana tiene un sabor de 5, aunque se puede especificar
su sabor al crearla.
Ejercicio 2: En lugar de trabajar con Círculos, se desea trabajar con
otro tipo de Figuras (Cuadrados o Rectángulos o Triángulos). Si ya
se dispone de la aplicación misCirculos, ¿cómo se afrontaría el
diseño e implementación de la nueva aplicación?
p
p
¿
Ejercicio 3: Se desea realizar una aplicación que maneje un grupo
de Círculos En particular se desea:
de Círculos. En particular, se desea:
Construir el grupo con varios Circulos, mostrar el grupo por pantalla y
obtener el área del grupo.
Siguiendo los pasos da
Comentarios de: Tema 1- Conceptos de Java para Estructuras de Datos (0)
No hay comentarios