+ All Categories
Home > Documents > 9 TRADUCIDAzxc

9 TRADUCIDAzxc

Date post: 11-Apr-2016
Category:
Upload: giiaan-tu-niniow
View: 214 times
Download: 0 times
Share this document with a friend
Description:
zxczxc
116
2003 Prentice Hall, Inc. Todos los derechos reservados. 1 Capítulo 9 - Programación orientada a objetos: Herencia Contorno 9.1 Introducción 9.2 Superclases y subclases 9.3 Los miembros protegidos 9.4 Relación entre Superclases y subclases 9.5 Estudio de caso: Tres Niveles Jerarquía de herencia 9.6 Constructores y finalizadores en subclases 9.7 Ingeniería del Software con la herencia 2003 Prentice Hall, Inc. Todos los derechos reservados.
Transcript
Page 1: 9 TRADUCIDAzxc

 2003 Prentice Hall, Inc. Todos los derechos reservados.

1

Capítulo 9 - Programación orientada a objetos: Herencia

Contorno 

9.1 Introducción 

9.2 Superclases y subclases 

9.3 Los miembros protegidos 

9.4 Relación entre Superclases y subclases 

9.5 Estudio de caso: Tres Niveles Jerarquía de herencia 

9.6 Constructores y finalizadores en subclases 

9.7 Ingeniería del Software con la herencia

 2003 Prentice Hall, Inc. Todos los derechos reservados.

Page 2: 9 TRADUCIDAzxc

2

9.1 Introducción Herencia Reusabilidad del software Crear nueva clase de clase existente Absorber 'clase existente s de datos y comportamientos Mejorar con nuevas capacidades Subclase extiende superclase Subclase Grupo más especializado de objetos Los comportamientos heredados de superclase Puede personalizar Comportamientos adicionales

Page 3: 9 TRADUCIDAzxc

 2003 Prentice Hall, Inc. Todos los derechos reservados.

3

9.1 Introducción Jerarquía de clases Superclase directa Se hereda de forma explícita (un nivel superior jerarquía) Superclase indirecta Jerarquía de dos o más niveles hasta Heredado Herencia individual Hereda de una superclase La herencia múltiple Hereda de varias superclases Java no soporta herencia múltiple

Page 4: 9 TRADUCIDAzxc

 2003 Prentice Hall, Inc. Todos los derechos reservados.

4

9.1 Introducción Abstracción Centrarse en los aspectos comunes entre los objetos en el sistema "Es-un" frente "tiene-un" "Es un" Herencia objeto subclase tratado como objeto superclase Ejemplo: coche es un vehículo Propiedades de vehículos / comportamientos también propiedades de automóviles / comportamientos "Tiene un"

Page 5: 9 TRADUCIDAzxc

Composición Objeto contiene uno o más objetos de otras clases como miembros Ejemplo: Car tiene un volante

 2003 Prentice Hall, Inc. Todos los derechos reservados.

5

9.2 Superclases y subclases Superclases y subclases Objeto de una clase "es un" objeto de otra clase Ejemplo: rectángulo es un cuadrilátero. Clase Rectangle hereda de la clase Cuadrilátero Cuadrilátero: superclase Rectángulo: subclase Superclase representa típicamente mayor conjunto de objetos que subclases

Page 6: 9 TRADUCIDAzxc

Ejemplo: superclase: Vehículo Coches, camiones, barcos, bicicletas, ... subclase: Coche Más pequeño subconjunto, más específico de vehículos

 2003 Prentice Hall, Inc. Todos los derechos reservados.

6

9.2 Superclases y subclases (Cont.) Ejemplos de herencia

 2003 Prentice Hall, Inc. Todos los derechos reservados.

7

9.2 Superclases y subclases (Cont.) Jerarquía de herencia Relaciones de herencia: árbol-como la estructura de jerarquía

Page 7: 9 TRADUCIDAzxc

Cada clase se convierte en superclase Datos de la fuente / comportamientos a otras clasesOregón subclase Heredar de datos / comportamientos de otras clases

 2003 Prentice Hall, Inc. Todos los derechos reservados.

8

Fig. 9.2 jerarquía de herencias de CommunityMembers universitarios.CommunityMember

Empleado

Estudiante

Personal

Facultad

Administrador

Page 8: 9 TRADUCIDAzxc

Profesor

Antiguo alumno

 2003 Prentice Hall, Inc. Todos los derechos reservados.

9

Fig. 9.3 jerarquía de herencias de Formas.Forma

TwoDimensionalShape

ThreeDimensionalShape

Círculo

Cuadrado

Triángulo

Esfera

Cubo

Tetraedro

 2003 Prentice Hall, Inc. Todos los derechos reservados.

10

Page 9: 9 TRADUCIDAzxc

9.3 Los miembros protegidos acceso protegido Nivel intermedio de protección entre lo público y lo privado miembros protegidos accesibles a miembros superclase miembros de subclases Miembros de la clase en el mismo paquete Acceso Subclase miembro superclase Súper palabras clave y un punto (.)

 2003 Prentice Hall, Inc. Todos los derechos reservados.

11

9.4 Relación entre Superclases y subclases Superclase y subclase relación

Page 10: 9 TRADUCIDAzxc

Ejemplo: jerarquía de herencia / círculo del punto Punto xy par de coordenadas Círculo xy par de coordenadas Radio 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno12

Point.java 

Líneas 5-6 

Mantener xey coordenadas como variables de instancia privada. 

Page 11: 9 TRADUCIDAzxc

Línea 11 

Llamada implícita a Object constructor

1 // Fig. 9.4: Point.java

2 declaración de la clase // Punto representa un par de coordenadas xy.

3

4 Punto public class {

5    private int x; // x parte del par de coordenadas

6    int y privado; // parte y del par de coordenadas

7

8    // Constructor sin argumentos

9    Point público ()

10 {

11       // Llamada implícita al constructor de objetos se produce aquí

Page 12: 9 TRADUCIDAzxc

12}

13

14    // Constructor

15    Punto público (int xValue, int yValue)

16 {

17       // Llamada implícita al constructor de objetos se produce aquí

18 x = xValue; // sin necesidad de validación

19 y = yValue; // sin necesidad de validación

20}

21

22    // Establecer x en par de coordenadas

23    setX public void (int xValue)

24 {

Page 13: 9 TRADUCIDAzxc

25 x = xValue; // sin necesidad de validación

26}

27

Mantener xey coordenadas como variables de instancia privada.

Llamada implícita a Object constructor

 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno13

Point.java 

Líneas 47-50 

Invalidar método toString de la clase Object.

28    // Devuelve x del par de coordenadas

Page 14: 9 TRADUCIDAzxc

29    public int getX ()

30 {

31       return x;

32}

33

34    // Conjunto y en el par de coordenadas

35    pública setY void (int yValue)

36 {

37 y = yValue; // sin necesidad de validación

38}

39

40    // Devuelve y del par de coordenadas

41    public int getY ()

Page 15: 9 TRADUCIDAzxc

42 {

43       volver y;

44}

45

46    // Devuelve representación String del objeto Point

47    public String toString ()

48 {

49       retorno "[" + X + "," + y + "]";

50}

51

52} // fin Point clase

Método de anulación toString de la clase Object

 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Page 16: 9 TRADUCIDAzxc

Contorno14

PointTest.java 

Línea 9 

Instanciar objeto Point 

Líneas 15-16 

Cambie el valor de X e Y las coordenadas del punto 

Línea 19 

Implícitamente llamar al método toString de punto

1 // Fig. 9.5: PointTest.java

2 // Prueba Point clase.

Page 17: 9 TRADUCIDAzxc

Javax.swing.JOptionPane 3 de importación;

4

5 public class PointTest {

6

7    principales (String [] args) void estáticos públicos

8 {

9 punto Point = new Point (72, 115); // crea objeto Point

10

11       // Obtener coordenadas de punto

12 String salida = "coordenada X es" + point.getX () +

13          "\ NY coordenada es" + point.getY ();

14      

15 point.setX (10); // conjunto coordenada x

Page 18: 9 TRADUCIDAzxc

16 point.setY (20); // establece coordenada

17

18       // Obtener representación String del nuevo valor del punto

19 salida + = "\ n \ nLa nueva ubicación del punto es" + punto;

20

21 JOptionPane.showMessageDialog (null, salida); // salida de la pantalla

22

23 System.exit (0);

24

25} // fin principal

26

27} // fin de la clase PointTest

Instanciar objeto Point

Page 19: 9 TRADUCIDAzxc

Cambie el valor de X e Y las coordenadas del punto

Implícitamente llamar al método toString de punto

 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno15

Circle.java 

Líneas 5-7 

Mantener coordenadas x e y y el radio como variables de instancia privada. 

Líneas 25-28 

Código similar al código de Punto Nota.

1 // Fig. 9.6: Circle.java

Page 20: 9 TRADUCIDAzxc

2 // clase Circle contiene xy par de coordenadas y el radio.

3

4 Círculo public class {

5    private int x; // coordenada x del centro del círculo

6    int y privado; // coordenada y del centro del círculo

7    doble radio privada; // el radio del círculo

8

9    // Constructor sin argumentos

10    Círculo pública ()

11 {

12       // Llamada implícita al constructor de objetos se produce aquí

13}

14

Page 21: 9 TRADUCIDAzxc

15    // Constructor

16    Círculo público (int xValue, int yValue, doble radiusValue)

17 {

18       // Llamada implícita al constructor de objetos se produce aquí

19 x = xValue; // sin necesidad de validación

20 y = yValue; // sin necesidad de validación

21 setRadius (radiusValue);

22}

23

24    // Establecer x en par de coordenadas

25    setX public void (int xValue)

26 {

27 x = xValue; // sin necesidad de validación

Page 22: 9 TRADUCIDAzxc

28}

29

Mantener coordenadas xy y radio como variables de instancia privada.

Código similar al código de Punto Nota.

 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno16

Circle.java 

Líneas 31-47 

Código similar al código de Punto Nota. 

Page 23: 9 TRADUCIDAzxc

Línea 51 

Asegurar valor no negativo para el radio.

30    // Devuelve x del par de coordenadas

31    public int getX ()

32 {

33       return x;

34}

35

36    // Conjunto y en el par de coordenadas

37    pública setY void (int yValue)

38 {

39 y = yValue; // sin necesidad de validación

40}

Page 24: 9 TRADUCIDAzxc

41

42    // Devuelve y del par de coordenadas

43    public int getY ()

44 {

45       volver y;

46}

47

48    // Radio set

49    pública setRadius void (doble radiusValue)

50 {

51 radio = (radiusValue <0.0 0.0:? RadiusValue);

52}

53

Page 25: 9 TRADUCIDAzxc

54    // Radio de regreso

55    doble getRadius pública ()

56 {

57       volver radio;

58}

59

Código similar al código de Punto Nota.

Asegurar valor no negativo para el radio.

 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno17

Circle.java 

60    // Calcular y diámetro volver

Page 26: 9 TRADUCIDAzxc

61    doble getDiameter pública ()

62 {

63       retorno 2 * radio;

64}

65

66    // Calcular y devolver la circunferencia

67    doble getCircumference pública ()

68 {

69       volver Matemáticas PI * getDiameter (.);

70}

71

72    // Calcular y área de regresar

73    doble getArea pública ()

Page 27: 9 TRADUCIDAzxc

74 {

75       volver Matemáticas PI * radio * radio.;

76}

77

78    // Devuelve representación String del objeto Circle

79    public String toString ()

80 {

81       retorno "Centro = [" + x + "," + y + "]; Radio =" + radio;

82}

83

84} // fin del círculo de la clase

 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno

Page 28: 9 TRADUCIDAzxc

18

CircleTest.java 

Línea 10 

Crear objeto Circle 

Líneas 17-19 

Utilice métodos set para modificar variable de instancia privada 

Línea 23 

Explícitamente llamar al método toString del círculo 

1 // Fig. 9.7: CircleTest.java

2 // Prueba Círculo clase.

Java.text.DecimalFormat 3 de importación;

Page 29: 9 TRADUCIDAzxc

Javax.swing.JOptionPane 4 de importación;

5

6 public class CircleTest {

7

8   principales (String [] args) void estáticos públicos

9 {

10 Círculo círculo = new Circle (37, 43, 2.5); // crea objeto Circle

11

12       // Obtener coordenadas xy iniciales de círculo y radio

13 String salida = "coordenada X es" + circle.getX () +

14         "\ NY coordenada es" + circle.getY () +

15          "\ NRadius es" + circle.getRadius ();

16

Page 30: 9 TRADUCIDAzxc

17 circle.setX (35); // establecer nuevos coordenada x

18 circle.setY (20); // establece nueva coordenada

19 circle.setRadius (4,25); // establecer nuevo radio

20

21       // Obtener representación String del nuevo valor círculo

22 salida + = "\ n \ nLa nueva ubicación y el radio del círculo son \ n" +

23 circle.toString ();

24

25       // valores de punto flotante formato con 2 dígitos de precisión

26 twoDigits DecimalFormat = nueva DecimalFormat ("0,00");

27

Crear objeto Circle.

Utilice métodos set para modificar variable de instancia privada.

Explícitamente llamar al método toString del círculo

Page 31: 9 TRADUCIDAzxc

 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno19

CircleTest.java 

Líneas 29-37 

Utilice obtener métodos para obtener del círculo de diámetro, circunferencia y área.

28       // Obtener el diámetro del círculo

29 salida + = "\ nDiameter es" +

30 twoDigits.format (circle.getDiameter ());

31

32       // Obtener la circunferencia del círculo

Page 32: 9 TRADUCIDAzxc

33 salida + = "\ nCircumference es" +

34 twoDigits.format (circle.getCircumference ());

35

36       // Obtener el área del círculo

37 salida + = "\ nArea es" + twoDigits.format (circle.getArea ());

38

39 JOptionPane.showMessageDialog (null, salida); // salida de la pantalla

40

41 System.exit (0);

42

43} // fin principal

44

45} // fin de la clase CircleTest

Page 33: 9 TRADUCIDAzxc

Utilice obtener métodos para obtener del círculo de diámetro, circunferencia y área.

 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno20

Circle2.java 

Línea 4 

Clase circle2 extiende Point clase. 

Línea 5 

Mantener instancia privada radio variable. 

Líneas 17-18 

Page 34: 9 TRADUCIDAzxc

Si intenta acceder a variables de instancia privadas x del punto superclase y resultados anuales en los

errores de sintaxis. 

1 // Fig. 9.8: Circle2.java

2 clase // circle2 hereda de Punto.

3

4 public class circle2 extiende Point {

5   doble radio privada; // radio de circle2

6

7   // Constructor sin argumentos

8   circle2 pública ()

9 {

10       // Llamada implícita al punto constructor ocurre aquí

11}

Page 35: 9 TRADUCIDAzxc

12   

13    // Constructor

14    pública circle2 (int xValue, int yValue, doble radiusValue)

15 {

16       // Llamada implícita al punto constructor ocurre aquí

17 x = xValue; // no permitido: x privado en Point

18 y = yValue; // no permitido: y privado en Point

19 setRadius (radiusValue);

20}

21

22    // Radio set

23    pública setRadius void (doble radiusValue)

24 {

Page 36: 9 TRADUCIDAzxc

25 radio = (radiusValue <0.0 0.0:? RadiusValue);

26}

27

Clase circle2 extiende Point clase.

Mantener instancia privada radio variable.

Si intenta acceder a variables de instancia privadas x del punto superclase y resultados anuales en los

errores de sintaxis.

 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno21

34    // Calcular y diámetro volver

35    doble getDiameter pública ()

36 {

Page 37: 9 TRADUCIDAzxc

37       retorno 2 * radio;

38}

39

40    // Calcular y devolver la circunferencia

41    doble getCircumference pública ()

42 {

43       volver Matemáticas PI * getDiameter (.);

44}

45

46    // Calcular y área de regresar

47    doble getArea pública ()

48 {

49       volver Matemáticas PI * radio * radio.;

Page 38: 9 TRADUCIDAzxc

50}

51

52    // Devuelve representación String del objeto Circle

53    public String toString ()

54 {

55       // Uso de x e y no pueden: x e y privado en Point      

56       retorno "Centro = [" + x + "," + y + "]; Radio =" + radio;

57}

58  

59} // fin de la clase circle2

Circle2.java 

Línea 56 

Page 39: 9 TRADUCIDAzxc

Si intenta acceder a variables de instancia privadas x del punto superclase y resultados anuales en los

errores de sintaxis. 

Si intenta acceder a variables de instancia privadas x del punto superclase y resultados anuales en los

errores de sintaxis.

 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno22

Circle2.java 

salida 

Si intenta acceder a variables de instancia privadas x del punto superclase y resultados anuales en los

errores de sintaxis. 

Circle2.java:17: x tiene acceso privado en Point

Page 40: 9 TRADUCIDAzxc

x = xValue; // No permitido: x privado en Point

^

Circle2.java:18: y tiene acceso privado en Point

y = yValue; // No se permiten: y privado en Point

^

Circle2.java:56: x tiene acceso privado en Point

return "Centro = [" + x + "," + y + "]; Radio =" + radio;

^

Circle2.java:56: y tiene acceso privado en Point

return "Centro = [" + x + "," + y + "]; Radio =" + radio;

^

4 errores

Page 41: 9 TRADUCIDAzxc

Si intenta acceder a variables de instancia privadas x del punto superclase y resultados anuales en los

errores de sintaxis.

 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno23

Point2.java 

Líneas 5-6 

Mantener xey coordenadas como variables de instancia protegidas, accesibles a las subclases. 

1 // Fig. 9.9: Point2.java

2 declaración de la clase // Point2 representa un par de coordenadas xy.

3

4 public class Point2 {

Page 42: 9 TRADUCIDAzxc

5    protegido int x; // x parte del par de coordenadas

6    int y protegida; // parte y del par de coordenadas

7

8    // Constructor sin argumentos

9    Point2 pública ()

10 {

11       // Llamada implícita al constructor de objetos se produce aquí

12}

13   

14    // Constructor

15    Point2 público (int xValue, int yValue)

16 {

17       // Llamada implícita al constructor de objetos se produce aquí

Page 43: 9 TRADUCIDAzxc

18 x = xValue; // sin necesidad de validación

19 y = yValue; // sin necesidad de validación

20}

21

22    // Establecer x en par de coordenadas

23    setX public void (int xValue)

24 {

25 x = xValue; // sin necesidad de validación

26}

27

Mantener xey coordenadas como variables de instancia protegidas, accesibles a las subclases.

 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno

Page 44: 9 TRADUCIDAzxc

24

Point2.java 

28    // Devuelve x del par de coordenadas

29    public int getX ()

30 {

31       return x;

32}

33

34    // Conjunto y en el par de coordenadas

35    pública setY void (int yValue)

36 {

37 y = yValue; // sin necesidad de validación

38}

Page 45: 9 TRADUCIDAzxc

39

40    // Devuelve y del par de coordenadas

41    public int getY ()

42 {

43       volver y;

44}

45

46    // Devuelve representación String del objeto Point2

47    public String toString ()

48 {

49       retorno "[" + X + "," + y + "]";

50}

51

Page 46: 9 TRADUCIDAzxc

52} // fin de la clase Point2

 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno25

Circle3.java 

Línea 5 

Clase Circle3 hereda de la clase Point2. 

Línea 6 

Mantener las variables de instancia privada radio. 

Líneas 11 y 17 

Implícitamente llamar constructor por defecto de la superclase. 

Page 47: 9 TRADUCIDAzxc

Líneas 18-19 

Modificar heredadas instancia variables x e y, declarada protegida en superclase Point2. 

1 // Fig. 9.10: Circle3.java

2 // clase Circle3 hereda de Point2 y tiene acceso a Point2

3 // protegidas miembros x e y.

4

5 public class Circle3 extiende Point2 {

6    doble radio privada; // radio de Circle3

7

8    // Constructor sin argumentos

9    Circle3 público ()

10 {

11       // Llamada implícita al constructor Point2 ocurre aquí

Page 48: 9 TRADUCIDAzxc

12}

13   

14    // Constructor

15    pública Circle3 (int xValue, int yValue, doble radiusValue)

16 {

17       // Llamada implícita al constructor Point2 ocurre aquí

18 x = xValue; // sin necesidad de validación

19 y = yValue; // sin necesidad de validación

20 setRadius (radiusValue);

21}

22

23    // Radio set

24    pública setRadius void (doble radiusValue)

Page 49: 9 TRADUCIDAzxc

25 {

26 radio = (radiusValue <0.0 0.0:? RadiusValue);

27}

28

Clase Circle3 hereda de la clase Point2.

Mantener las variables de instancia privada radio.

Pide Implícitamente constructor por defecto de superclase.

Modificar heredadas instancia variables x e y, declarada protegida en superclase Point2.

 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno26

Circle3.java 

Page 50: 9 TRADUCIDAzxc

Línea 56 

Acceso heredado de instancia variables x e y, declarada protegida en superclase Point2. 

29    // Radio de regreso

30    público doble getRadius ()

31 {

32       volver radio;

33}

34

35    // Calcular y diámetro volver

36    doble getDiameter pública ()

37 {

38       retorno 2 * radio;

39}

Page 51: 9 TRADUCIDAzxc

40

41    // Calcular y devolver la circunferencia

42    doble getCircumference pública ()

43 {

44       volver Matemáticas PI * getDiameter (.);

45}

46

47    // Calcular y área de regresar

48    doble getArea pública ()

49 {

50       volver Matemáticas PI * radio * radio.;

51}

52

Page 52: 9 TRADUCIDAzxc

53    // Devuelve representación String del objeto Circle3

54    public String toString ()

55 {

56       retorno "Centro = [" + x + "," + y + "]; Radio =" + radio;

57}

58

59} // fin de la clase Circle3

Acceso heredado de instancia variables x e y, declarada protegida en superclase Point2.

 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno27

Circletest3.java 

Línea 11 

Page 53: 9 TRADUCIDAzxc

Crear objeto Circle3. 

Líneas 14-15 

Utilice métodos get heredados acceder heredadas protegidas instancia variables x e y. 

variables x e y. 

Línea 16 

Utilice Circle3 conseguir método para acceder a las variables de instancia privada. 

Líneas 18-19 

Utilice métodos set heredadas modificar heredadas protegidas datos x e y. 

Línea 20 

Utilice método set Circle3 modificar el radio de datos privados. 

1 // Fig. 9.11: CircleTest3.java

2 // clase de pruebas Circle3.

Java.text.DecimalFormat 3 de importación;

Javax.swing.JOptionPane 4 de importación;

Page 54: 9 TRADUCIDAzxc

5

6 public class CircleTest3 {

7

8    principales (String [] args) void estáticos públicos

9 {

10       // Objeto Circle instantiate

11 Circle3 círculo = new Circle3 (37, 43, 2.5);

12

13       // Obtener coordenadas xy iniciales de Circle3 y radio

14 String salida = "coordenada X es" + circle.getX () +

15        "\ NY coordenada es" + circle.getY () +

16          "\ NRadius es" + circle.getRadius ();

17

Page 55: 9 TRADUCIDAzxc

18 circle.setX (35); // establecer nuevos coordenada x

19 circle.setY (20); // establece nueva coordenada

20 circle.setRadius (4,25); // establecer nuevo radio

21

22       // Obtener representación String del nuevo valor círculo

23 salida + = "\ n \ nLa nueva ubicación y el radio del círculo son \ n" +

24 circle.toString ();

25

Utilice métodos get heredados acceder heredadas protegidas instancia variables x e y.

Crear objeto Circle3.

Utilice Circle3 conseguir método para acceder a las variables de instancia privada.

Utilice métodos set heredadas modificar heredadas protegidas datos x e y.

Utilice método set Circle3 modificar el radio de datos privados.

Page 56: 9 TRADUCIDAzxc

 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno28

Circletest3.java 

26       // valores de punto flotante formato con 2 dígitos de precisión

27 twoDigits DecimalFormat = nueva DecimalFormat ("0,00");

28

29       // Obtener el diámetro del círculo

30 salida + = "\ nDiameter es" +

31 twoDigits.format (circle.getDiameter ());

32

33       // Obtener la circunferencia del círculo

34 salida + = "\ nCircumference es" +

Page 57: 9 TRADUCIDAzxc

35 twoDigits.format (circle.getCircumference ());

36

37       // Obtener el área del círculo

38 salida + = "\ nArea es" + twoDigits.format (circle.getArea ());

39

40 JOptionPane.showMessageDialog (null, salida); // salida de la pantalla

41

42 System.exit (0);

43

44} // fin del método principal

45

46} // fin de la clase CircleTest3

 2003 Prentice Hall, Inc. Todos los derechos reservados.

Page 58: 9 TRADUCIDAzxc

29

9.4 Relación entre Superclases y subclases (Cont.) El uso de variables de instancia protegidas Ventajas subclases pueden modificar directamente los valores Ligero incremento en el rendimiento Evite set / get función de llamada sobrecarga Desventajas Sin comprobación de validez subclase puede asignar valor no válido Dependiente de Implementación métodos de subclase que dependen más probable sobre la implementación de la superclase

Page 59: 9 TRADUCIDAzxc

cambios de implementación superclase pueden dar lugar a modificaciones de subclases Software frágil (frágil) 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno30

Point3.java 

Líneas 5-6 

Mejor práctica de ingeniería de software: privado sobre protegida cuando sea posible. 

1 // Fig. 9.12: Point3.java

2 declaración de la clase // Punto representa un par de coordenadas xy.

3

Page 60: 9 TRADUCIDAzxc

4 public class Point3 {

5    private int x; // x parte del par de coordenadas

6    int y privado; // parte y del par de coordenadas

7

8    // Constructor sin argumentos

9    Point3 público ()

10 {

11       // Llamada implícita al constructor de objetos se produce aquí

12}

13

14    // Constructor

15    Point3 público (int xValue, int yValue)

16 {

Page 61: 9 TRADUCIDAzxc

17       // Llamada implícita al constructor de objetos se produce aquí

18 x = xValue; // sin necesidad de validación

19 y = yValue; // sin necesidad de validación

20}

21

22    // Establecer x en par de coordenadas

23    setX public void (int xValue)

24 {

25 x = xValue; // sin necesidad de validación

26}

27

Mejor práctica de ingeniería de software: privado sobre protegida cuando sea posible.

 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Page 62: 9 TRADUCIDAzxc

Contorno31

Point3.java 

Línea 49 

Invoque métodos públicos para acceder a las variables de instancia privada. 

28    // Devuelve x del par de coordenadas

29    public int getX ()

30 {

31       return x;

32}

33

34    // Conjunto y en el par de coordenadas

35    pública setY void (int yValue)

Page 63: 9 TRADUCIDAzxc

36 {

37 y = yValue; // sin necesidad de validación

38}

39

40    // Devuelve y del par de coordenadas

41    public int getY ()

42 {

43       volver y;

44}

45

46    // Devuelve representación String del objeto Point3

47    public String toString ()

48 {

Page 64: 9 TRADUCIDAzxc

49       retorno "[" + GetX () + "," + getY () + "]";

50}

51

52} // fin de la clase Point3

Invoque métodos públicos para acceder a las variables de instancia privada.

 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno32

Circle4.java 

Línea 5 

Clase Circle4 hereda de la clase Point3. 

Page 65: 9 TRADUCIDAzxc

Línea 7 

Mantener instancia privada radio variable. 

1 // Fig. 9,13: Circle4.java

2 // clase Circle4 hereda de Point3 y accesos Point3 de

3 // x e y privado a través de métodos públicos de Point3.

4

5 public class Circle4 extiende Point3 {

6

7    doble radio privada; // radio de Circle4

8

9    // Constructor sin argumentos

Page 66: 9 TRADUCIDAzxc

10    Circle4 público ()

11 {

12       // Llamada implícita al constructor Point3 ocurre aquí

13}

14   

15    // Constructor

16    pública Circle4 (int xValue, int yValue, doble radiusValue)

17 {

18       super (xValue, yValue); // llamar Point3 constructor explícitamente

19 setRadius (radiusValue);

20}

21

22    // Radio set

Page 67: 9 TRADUCIDAzxc

23    pública setRadius void (doble radiusValue)

24 {

25 radio = (radiusValue <0.0 0.0:? RadiusValue);

26}

27

Clase Circle4 hereda de la clase Point3.

Mantener instancia privada radio variable.

 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno33

Circle4.java 

Línea 37, 49 y 55 

Page 68: 9 TRADUCIDAzxc

Invoque el método getRadius en lugar de acceder directamente instancia radio variable. 

Líneas 53-56 

Redefinir el método toString de la clase Point3. 

28    // Radio de regreso

29    doble getRadius pública ()

30 {

31       volver radio;

32}

33

34    // Calcular y diámetro volver

35    doble getDiameter pública ()

36 {

37       retorno 2 * getRadius ();

Page 69: 9 TRADUCIDAzxc

38}

39

40    // Calcular y devolver la circunferencia

41    doble getCircumference pública ()

42 {

43       volver Matemáticas PI * getDiameter (.);

44}

45

46    // Calcular y área de regresar

47    doble getArea pública ()

48 {

49       volver Matemáticas PI * getRadius () * getRadius (.);

50}

Page 70: 9 TRADUCIDAzxc

51

52    // Devuelve representación String del objeto Circle4

53    public String toString ()

54 {

55       retorno "Centro =" + súper .toString (+) "; Radio =" + getRadius ();

56}

57

58} // fin de la clase Circle4

Invoque el método getRadius en lugar de acceder directamente instancia radio variable.

Redefinir el método toString de la clase Point3.

 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno34

Page 71: 9 TRADUCIDAzxc

Circletest4.java 

Línea 11 

Crear objeto Circle4. 

Líneas 14 y 15 

Utilice métodos get heredados acceder heredadas variables de instancia privadas xe y. 

Línea 16 

Utilice Circle4 conseguir método para acceder a instancia privada radio variable. 

Líneas 18-19 

Utilice métodos heredados seta modificar heredadas variables de instancia privadas xe y. 

Línea 20 

Utilice método set Circle4 modificar instancia radio variable privada. 

1 // Fig. 9,14: CircleTest4.java

2 // clase de pruebas Circle4.

Java.text.DecimalFormat 3 de importación;

Page 72: 9 TRADUCIDAzxc

Javax.swing.JOptionPane 4 de importación;

5

6 public class CircleTest4 {

7

8    principales (String [] args) void estáticos públicos

9 {

10       // Objeto Circle instantiate

11 Circle4 círculo = new Circle4 (37, 43, 2.5);

12

13       // Obtener coordenadas xy iniciales de Circle4 y radio

14 String salida = "coordenada X es" + circle.getX () +

15          "\ NY coordenada es" + circle.getY () +

16          "\ NRadius es" + circle.getRadius ();

Page 73: 9 TRADUCIDAzxc

17

18 circle.setX (35); // establecer nuevos coordenada x

19 circle.setY (20); // establece nueva coordenada

20 circle.setRadius (4,25); // establecer nuevo radio

21

22       // Obtener representación String del nuevo valor círculo

23 salida + = "\ n \ nLa nueva ubicación y el radio del círculo son \ n" +

24 circle.toString ();

25

Crear objeto Circle4.

Utilice métodos get heredados acceder heredadas variables de instancia privadas xe y.

Utilice Circle4 conseguir método para acceder a instancia privada radio variable.

Utilice métodos heredados seta modificar heredadas variables de instancia privadas xe y.

Utilice método set Circle4 modificar instancia radio variable privada.

Page 74: 9 TRADUCIDAzxc

 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno35

Circletest4.java 

26       // valores de punto flotante formato con 2 dígitos de precisión

27 twoDigits DecimalFormat = nueva DecimalFormat ("0,00");

28

29       // Obtener el diámetro del círculo

30 salida + = "\ nDiameter es" +

31 twoDigits.format (circle.getDiameter ());

32

33       // Obtener la circunferencia del círculo

Page 75: 9 TRADUCIDAzxc

34 salida + = "\ nCircumference es" +

35 twoDigits.format (circle.getCircumference ());

36

37       // Obtener el área del círculo

38 salida + = "\ nArea es" + twoDigits.format (circle.getArea ());

39

40 JOptionPane.showMessageDialog (null, salida); // salida de la pantalla

41

42 System.exit (0);

43

44} // fin principal

45

46} // fin de la clase CircleTest4

Page 76: 9 TRADUCIDAzxc

 2003 Prentice Hall, Inc. Todos los derechos reservados.

36

9.5 Estudio de caso: Tres Niveles Jerarquía de herencia

Tres punto de nivel / círculo jerarquía / cilindro Punto xy par de coordenadas Círculo xy par de coordenadas Radio Cilindro xy par de coordenadas Radio

Page 77: 9 TRADUCIDAzxc

Altura 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno37

Cylinder.java 

Línea 4 

Cilindro clase extiende la clase Circle4. 

Línea 5 

Mantener instancia privada altura variable. 

1 // Fig. 9.15: Cylinder.java

2 // clase Cilindro hereda de Circle4.

Page 78: 9 TRADUCIDAzxc

3

Cilindro 4 clase pública se extiende Circle4 {

5   doble altura privado; la altura de // Cilindro

6

7   // Constructor sin argumentos

8   Cilindro público ()

9 {

10       // Llamada implícita al constructor Circle4 ocurre aquí

11}

12

13    // Constructor

14    Cilindro público (int xValue, int yValue, doble radiusValue,

15       doble heightValue)

Page 79: 9 TRADUCIDAzxc

16 {

17       super (xValue, yValue, radiusValue); // llamar Circle4 constructor

18 setHeight (heightValue);

19}

20

21    // Establecer la altura del cilindro

22    pública setHeight void (doble heightValue)

23 {

24 Altura = (heightValue <0.0 0.0:? HeightValue);

25}

26

Cilindro clase extiende la clase Circle4.

Mantener instancia privada altura variable.

Page 80: 9 TRADUCIDAzxc

 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno38

Cylinder.java 

Línea 34 y 42 

Redefinir método getArea de superclase Circle4 volver superficie del cilindro. 

Línea 36 

Invoque superclase método getArea de Circle4 usando palabra clave super. 

Líneas 46-49 

Redefinir el método toString de la clase Circle4. 

Page 81: 9 TRADUCIDAzxc

Línea 48 

Invoque el método toString de superclase Circle4 usando palabra clave super. 

27    // Obtener la altura del cilindro

28    doble getHeight pública ()

29 {

30       altura regresar;

31}

32

33    // Invalidar método Circle4 getArea para calcular el área del cilindro

34    doble getArea pública ()

35 {

36       retorno 2 * súper .getArea () + getCircumference () * getHeight ();

37}

Page 82: 9 TRADUCIDAzxc

38

39    // Calcular el volumen del cilindro

40    doble getVolume pública ()

41 {

42       retorno súper .getArea () * getHeight ();

43}

44

45    // Devuelve representación String del objeto Cilindro

46    public String toString ()

47 {

48       retorno súper .toString (+) ", Altura =" + getHeight ();

49}

50  

Page 83: 9 TRADUCIDAzxc

51} // fin de la clase Cilindro

Redefinir método getArea de superclase Circle4 volver superficie del cilindro.

Invoque superclase método getArea de Circle4 usando palabra clave super.

Redefinir el método toString de la clase Circle4.

Invoque el método toString de superclase Circle4 usando palabra clave super.

 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno39

CylinderTest.java 

Líneas 14 y 15 

Invoque métodos get Point3 indirectamente heredadas. 

Línea 16 

Invoque directamente heredada método get Circle4. 

Page 84: 9 TRADUCIDAzxc

Línea 16 

Invoque método get Cilindro. 

Líneas 18-19 

Invoque métodos set Point3 indirectamente heredadas. 

Línea 20 

Invoque directamente heredada método set Circle4. 

Línea 21 

Cilindro de invocación establecido método. 

Línea 26 

Invoque el método toString anulado. 

método.

1 // Fig. 9,16: CylinderTest.java

2 // Prueba Cilindro clase.

Java.text.DecimalFormat 3 de importación;

Page 85: 9 TRADUCIDAzxc

Javax.swing.JOptionPane 4 de importación;

5

6 public class CylinderTest {

7

8    principales (String [] args) void estáticos públicos

9 {

10       // Crear objeto Cilindro

11 Cilindro Cilindro Cilindro = new (12, 23, 2.5, 5.7);

12

13       // Obtener coordenadas xy iniciales del cilindro, el radio y la altura

14 String salida = "coordenada X es" + cylinder.getX () +

15          "\ NY coordenada es" + cylinder.getY () + "\ nRadius es" +

16 cylinder.getRadius () + "\ nHeight es" + cylinder.getHeight ();

Page 86: 9 TRADUCIDAzxc

17

18 cylinder.setX (35); // establecer nuevos coordenada x

19 cylinder.setY (20); // establece nueva coordenada

20 cylinder.setRadius (4,25); // establecer nuevo radio

21 cylinder.setHeight (10,75); // establecer nueva altura

22

23       // Obtener representación String del nuevo valor del cilindro

24 salida + =

25          "\ N \ nLa nueva ubicación, el radio y la altura del cilindro son \ n" +

26 cylinder.toString ();

27

Invoque métodos get Point3 indirectamente heredadas.

Invoque directamente heredada método get Circle4.

Invoque método get Cilindro.

Page 87: 9 TRADUCIDAzxc

Invoque métodos set Point3 indirectamente heredadas.

Invoque directamente heredada método set Circle4.

Cilindro de invocación establecido método.

Invoque el método toString anulado.

 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno40

CylinderTest.java 

Línea 40 

Invoque el método getArea anulado. 

28       // valores de punto flotante formato con 2 dígitos de precisión

29 twoDigits DecimalFormat = nueva DecimalFormat ("0,00");

Page 88: 9 TRADUCIDAzxc

30

31       // Obtener el diámetro del cilindro

32 salida + = "\ n \ nDiameter es" +

33 twoDigits.format (cylinder.getDiameter ());

34

35       // Obtener la circunferencia del cilindro

36 salida + = "\ nCircumference es" +

37 twoDigits.format (cylinder.getCircumference ());

38

39       // Obtener el área del cilindro

40 salida + = "\ nArea es" + twoDigits.format (cylinder.getArea ());

41

42       // Obtener el volumen del cilindro

Page 89: 9 TRADUCIDAzxc

43 salida + = "\ nVolume es" + twoDigits.format (cylinder.getVolume ());

44

45 JOptionPane.showMessageDialog (null, salida); // salida de la pantalla

46

47 System.exit (0);

48

49} // fin principal

50

51} // fin de la clase CylinderTest

Invoque el método getArea anulado.

 2003 Prentice Hall, Inc. Todos los derechos reservados.

41

9.6 Constructores y finalizadores en subclases Instanciar objeto subclase

Page 90: 9 TRADUCIDAzxc

Cadena de llamadas de constructor constructor de la subclase invoca constructor de la superclase Implícita o explícitamente, Base de jerarquía de herencia Última constructor llamado en cadena es constructor Object 's Cuerpo subclase original constructor 's termina de ejecutar la última Ejemplo: jerarquía Point3 / Circle4 / cilindro Point3 constructor llamado penúltimo (último es constructor de Object) Constructor Point3 's cuerpo termina segundo de ejecución (primera es constructor Object' cuerpo s)

 2003 Prentice Hall, Inc. Todos los derechos reservados.

42

Page 91: 9 TRADUCIDAzxc

9.6 Constructores y destructores de las clases derivadas

Basura objeto subclase coleccionismo Cadena de llamadas método finalize Invertir orden de la cadena de constructor Finalizer de subclase llama primero Finalizer del próximo jerarquía superclase al lado Continuar hasta la jerarquía hasta superreached definitiva Después superclase final (Objeto) finalizador, objeto removido de la memoria 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno43

Page 92: 9 TRADUCIDAzxc

Point.java 

Líneas 12, 22 y 28 

Mensajes Constructor y salida finalizador para demostrar orden llamada al método. 

1 // Fig. 9,17: Point.java

2 declaración de la clase // Punto representa un par de coordenadas xy.

3

4 Punto public class {

5   private int x; // x parte del par de coordenadas

6   int y privado; // parte y del par de coordenadas

7

8   // Constructor sin argumentos

9   Point público ()

Page 93: 9 TRADUCIDAzxc

10 {

11       // Llamada implícita al constructor de objetos se produce aquí

12 System.out.println ("Punto constructor sin argumentos:" + presente);

13}

14

15    // Constructor

16    Punto público (int xValue, int yValue)

17 {

18       // Llamada implícita al constructor de objetos se produce aquí

19 x = xValue; // sin necesidad de validación

20 y = yValue; // sin necesidad de validación

21

22 System.out.println ("constructor Point:" + presente);

Page 94: 9 TRADUCIDAzxc

23}

24

25    // Finalizador

26    protegida finalize void ()

27 {

28 System.out.println ("finalizador Point:" + presente);

29}

30

Mensajes Constructor y salida finalizador para demostrar orden llamada al método.

 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno44

Point.java 

Page 95: 9 TRADUCIDAzxc

31    // Establecer x en par de coordenadas

32    setX public void (int xValue)

33 {

34 x = xValue; // sin necesidad de validación

35}

36

37    // Devuelve x del par de coordenadas

38    public int getX ()

39 {

40       return x;

41}

42

43    // Conjunto y en el par de coordenadas

Page 96: 9 TRADUCIDAzxc

44    pública setY void (int yValue)

45 {

46 y = yValue; // sin necesidad de validación

47}

48

49    // Devuelve y del par de coordenadas

50    public int getY ()

51 {

52       volver y;

53}

54

55    // Devuelve representación String del objeto PUNTO4

56    public String toString ()

Page 97: 9 TRADUCIDAzxc

57 {

58       retorno "[" + GetX () + "," + getY () + "]";

59}

60

61} // fin Point clase

 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno45

Circle.java 

Líneas 12, 21 y 29 

Mensajes Constructor y salida finalizador para demostrar orden llamada al método. 

Page 98: 9 TRADUCIDAzxc

1 // Fig. 9,18: Circle.java

2 declaración de la clase // Circle5.

3

4 Círculo clase pública se extiende Point {

5

6    doble radio privada; // el radio del círculo

7

8    // Constructor sin argumentos

9    Círculo pública ()

10 {

11       // Llamada implícita al punto constructor ocurre aquí

12 System.out.println ("Círculo constructor sin argumentos:" + presente);

13}

Page 99: 9 TRADUCIDAzxc

14

15    // Constructor

16    Círculo público (int xValue, int yValue, doble radiusValue)

17 {

18       super (xValue, yValue); // llamar Point constructor

19 setRadius (radiusValue);

20

21 System.out.println ("Círculo constructor:" + presente);

22}

23

24    // Finalizador

25    protegida finalize void ()

26 {

Page 100: 9 TRADUCIDAzxc

27 System.out.println ("Círculo finalizador:" + presente);

28                                                           

29       súper .finalize (); // llamar al método finalize superclase

30}

31   

Mensajes Constructor y salida finalizador para demostrar orden llamada al método.

 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno46

Circle.java 

32    // Radio set

33    pública setRadius void (doble radiusValue)

34 {

Page 101: 9 TRADUCIDAzxc

35 radio = (radiusValue <0.0 0.0:? RadiusValue);

36}

37

38    // Radio de regreso

39    doble getRadius pública ()

40 {

41       volver radio;

42}

43

44    // Calcular y diámetro volver

45    doble getDiameter pública ()

46 {

47       retorno 2 * getRadius ();

Page 102: 9 TRADUCIDAzxc

48}

49

50    // Calcular y devolver la circunferencia

51    doble getCircumference pública ()

52 {

53       volver Matemáticas PI * getDiameter (.);

54}

 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno47

Circle.java 

55

56    // Calcular y área de regresar

Page 103: 9 TRADUCIDAzxc

57    doble getArea pública ()

58 {

59       volver Matemáticas PI * getRadius () * getRadius (.);

60}

61

62    // Devuelve representación String del objeto Circle5

63    public String toString ()

64 {

65       retorno "Centro =" + súper .toString (+) "; Radio =" + getRadius ();

66}

67

68} // fin del círculo de la clase

Page 104: 9 TRADUCIDAzxc

 2003 Prentice Hall, Inc. 

Todos los derechos reservados.

Contorno48

ConstructorFinalizerTest.java 

Línea 12 

Objeto Point entra y sale del alcance inmediato. 

Líneas 15 y 18 

Instanciar dos objetos Círculo de demostrar orden de subclase y llamadas a métodos constructor /

Finalizer superclase. 

1 // Fig. 9.19: ConstructorFinalizerTest.java

Orden 2 // Pantalla en la que superclase y subclase

Page 105: 9 TRADUCIDAzxc

3 // constructores y finalizadores se llaman.

4

5 public class ConstructorFinalizerTest {

6

7    static void públicos principales (String args [])

8 {

9 punto Point;

10 circle1 Círculo, circle2;

11

12 puntos = nuevo punto ( 11 , 22 );

13

14 System.out.println ();

15 circle1 = nuevo círculo ( 72 , 29 , 4.5 );

Page 106: 9 TRADUCIDAzxc

16

17 System.out.println ();

18 circle2 = nuevo círculo ( 5 , 7 , 10.67 );

19

20 puntos = nula ; // marca para la recolección de basura

21 circle1 = nula ; // marca para la recolección de basura

22 circle2 = nula ; // marca para la recolección de basura

23

24 System.out.println ();

25

Objeto Point entra y sale del alcance inmediato.

Instanciar dos objetos Círculo de demostrar orden de subclase y llamadas a métodos constructor /

Finalizer superclase.

Page 107: 9 TRADUCIDAzxc

2003 Prentice Hall, Inc.

Todos los derechos reservados.

Contorno49

ConstructorFinalizerTest.java 

26 System.gc (); // llamar al recolector de basura

27

28 } // fin principal

29  

30 } // fin de la clase ConstructorFinalizerTest

Constructor Point: [11, 22]

 

Constructor Point: Centro = [72, 29]; Radio = 0.0

Círculo constructor: Centro = [72, 29]; Radio = 4.5

Page 108: 9 TRADUCIDAzxc

 

Constructor Point: Centro = [5, 7]; Radio = 0.0

Círculo constructor: Centro = [5, 7]; Radio = 10,67

 

Finalizador Point: [11, 22]

Círculo finalizador: Centro = [72, 29]; Radio = 4.5

Finalizador Point: Centro = [72, 29]; Radio = 4.5

Círculo finalizador: Centro = [5, 7]; Radio = 10,67

Finalizador Point: Centro = [5, 7]; Radio = 10,67

Subclase cuerpo Círculo constructor se ejecuta después de constructor de la superclase de PUNTO4

finaliza la ejecución.

Finalizer por objeto Circle llamada en orden inverso al de constructores.

2003 Prentice Hall, Inc. Todos los derechos reservados.

50

Page 109: 9 TRADUCIDAzxc

9.9 Ingeniería del Software con la herencia Personalización del software existente Heredar de clases existentes Incluir miembros adicionales Redefinir miembros superclase No hay acceso directo a la superclase código fuente 's Enlace a código objeto Proveedores de software independientes (ISV) Desarrollar código propietario en venta / licencia Disponible en formato de código objeto Los usuarios obtienen nuevas clases Sin acceder ISV código fuente patentada


Recommended