PDF de programación - Programación orientada a objetos (y II)

Imágen de pdf Programación orientada a objetos (y II)

Programación orientada a objetos (y II)gráfica de visualizaciones

Publicado el 9 de Julio del 2017
839 visualizaciones desde el 9 de Julio del 2017
105,0 KB
8 paginas
Creado hace 14a (05/04/2010)
Desarrollo de Funciones en el Sistema Informático
Curso 2009/2010

Programación orientada a objetos (y II)

Herencia en Java
Ahora que ya parece que estamos entendiendo la manera de trabajar con objetos, vamos a
complicarnos un poco más (la verdad es que muy poco más).
¿Qué es la herencia?
Es un mecanismo que nos permite manejar clases que son muy parecidas a otras clases que
ya existen, aunque difieren de estas en algunas características.

Un concepto extremadamente parecido lo habéis estudiado en el módulo de SGBD, en lo
que allí se denomina especialización y generalización.

Se trata de un mecanismo que funciona como una estructura jerárquica, donde cada clase
puede tener una única superclase (que se encuentra por encima de ella en la jerarquía) y una
o varias subclases (que se encuentran por debajo en la jerarquía). Las clases que se
encuentran por debajo se dice que heredan de las clases que se encuentran por encima.
Aquí tenéis un diagrama que muestra un ejemplo de jerarquía:

Empleado

Director

Comercial

Informático

Ejecutivo

En este diagrama:

• La clase Empleado es la superclase de Director, Comercial e Informático.
• Las clases Director, Comercial e Informático son subclases de la clase Empleado.
• La clase Director es la superclase de Ejecutivo.
• La clase Ejecutivo es la subclase de Director.

Las subclases heredan todos los métodos y atributos de sus superclases. Por tanto, al definir
una subclase, esta tiene automáticamente el mismo comportamiento que la superclase que
hereda. Y tened en cuenta que esta herencia sube en la jerarquía hasta llegar a la cumbre.

Teoría 10 (TEO010)

Página 1 de 8

Desarrollo de Funciones en el Sistema Informático
Curso 2009/2010

Existe una raíz en esta jerarquía, que es la clase Object. Todas las clases creadas heredan las
características y el comportamiento de Object.

Object

Empleado

Director

Comercial

Informático

Si necesitamos añadir características y/o funcionalidades de una clase en otra clase, debemos
crear una subclase. Como ya hemos comentado, esta subclase heredará todo el
comportamiento de su superclase y nosotros simplemente deberemos añadir aquellos atributos
y métodos específicos en la subclase que la diferencian de su superclase.
¿Cómo se define la herencia en Java?
Para indicar que una clase herada de otra, se utiliza la palabra reservada extends. Siguiendo el
ejemplo de más arriba, deberíamos definir las clases de la siguiente manera:

class Empleado {}
class Director extends Empleado {}
class Comercial extends Empleado {}
class Informatico extends Empleado {}
class Ejecutivo extends Director {}

Como podéis observar, se define de manera totalmente natural a como se expresa en nuestro
propio lenguaje.
Método constructor
Cuando se crea un objeto de una clase heredada, primero se llamará al constructor de su
superclase y a continuación al constructor propio.
Continuando con el ejemplo de los empleados, si creamos un objeto Comercial:

Comercial unObjetoComercial = new Comercial();

En primer lugar se llamará al constructor de la clase Empleado y a continuación al constructor
de la clase Comercial.

Teoría 10 (TEO010)

Página 2 de 8

Desarrollo de Funciones en el Sistema Informático
Curso 2009/2010

Podéis hacer una sencilla prueba de este comportamiento, creando un nuevo proyecto, llamado
por ejemplo Herencia y dentro de este proyecto:
- Creáis una clase Empleado con el siguiente código:

public class Empleado {

public Empleado () {

System.out.println(“Empleado”);

}

}

- Creáis una clase Comercial con el siguiente código:

public class Comercial extends Empleado{

public Comercial () {

System.out.println(“Comercial”);

}

}

- Creáis una clase TestHerencia con el siguiente código:

public class Test {

public static void main(String[] args) {

Comercial unObjetoComercial = new Comercial();

}

}

Al ejecutar el código se puede comprobar cómo aparece primero el mensaje Empleado (se ha
llamado al constructor Empleado()) y, a continuación, el mensaje Comercial (se ha llamado al
constructor Comercial()).
Redefinición de funciones
En ocasiones, conviene tener métodos en las clases heredadas con la misma signatura
(nombre de método y parámetros que admite). Por ejemplo, podría ser interesante tener un
método llamado sueldo en cada una de las clases que tuviese código específico para controlar
las bonificaciones específicas según el cargo del empleado en la empresa. Así, tendríamos algo
parecido a esto:

Teoría 10 (TEO010)

Página 3 de 8

Desarrollo de Funciones en el Sistema Informático
Curso 2009/2010

public class Empleado {

// Método constructor
public Empleado () {

System.out.println(“Empleado”);

}
// Método sueldo
public void sueldo() {

System.out.println(“Sueldo base de un empleado”);

}

}

Código de Empleado.java

public class Comercial extends Empleado{

// Método constructor
public Comercial() {

System.out.println(“Comercial”);

}
// Método sueldo
public void sueldo() {

cargo de comercial”);

System.out.println(“Sueldo base de un empleado+sueldo específico del

}

}

Código de Comercial.java

public class TestHerencia {

public static void main(String[] args) {

Comercial unObjetoComercial = new Comercial();
unObjetoComercial.sueldo();

}

}

Código de TestHerencia.java

Teoría 10 (TEO010)

Página 4 de 8

Desarrollo de Funciones en el Sistema Informático
Curso 2009/2010

Como es de esperar, al ejecutar el método sueldo() aparece el código de la clase Comercial.
Lo que debemos tener en cuenta en este caso es que estamos ocultando el método de la
superclase en la clase heredada.
Polimorfismo
Esta es la última herramienta que nos proporciona la herencia. Se trata de la capacidad que
tiene un objeto de una superclase de convertirse en un objeto de cualquiera de sus subclases.
Es decir, Java permite realizar intrucciones de este tipo:

Empleado unObjetoComercial = new Comercial();

unObjetoComercial está definido como un objeto de la clase Empleado, pero se le reserva
espacio de memoria como un objeto de tipo Comercial. Esto es correcto (y ni en la
compilación ni en la ejecución habrá errores) ya que la clase Comercial hereda de la clase
Empleado.

Teoría 10 (TEO010)

Página 5 de 8

Desarrollo de Funciones en el Sistema Informático
Curso 2009/2010

Excepciones en Java
Nos guste o nos deje de gustar, la realidad es que los programas no son perfectos y siempre
acaban por funcionar de manera inadecuada, ya sea por errores de programación, errores en
la entrada de datos de los usuarios, hardware que deja de responder, o cualquier otra cosa que
pueda pasar. De esto es lo que vamos a hablar en esta entrada; en concreto, de cómo
desarrollar nuestros programas para que gestionen correctamente los errores que puedan
producirse.
Un poco de historia (o cómo funcionábamos en la era pre-POO)
La gestión de errores en lenguajes de programación tradicionales se ha hecho habitualmente
mediante el uso de sentencias condicionales que trataban los distintos errores que el
programador podía presuponer. Algo parecido a esto:

int status = miFuncionQueAcabaraConLaPobrezaEnElMundo();
if (status == 0) {
// La función se ejecuta correctamente, tenemos un mundo mejor. Creemos
// código ahora para abordar la paz mundial.
}
} else {
switch (status) {
case 1: System.out.println(“Error de tipo 1. Los gobiernos no ayudan.”);
case 2: System.out.println(“Error de tipo 2. La población no se implica.”);
case 3: System.out.println(“Error de tipo 3. Es una utopía”);
default: System.out.println(“Cualquier otro error que no había previsto”);
}
}

En este código se llama al método para “acabar con la pobreza en el mundo” que estará en
algún otro lugar de la clase. Este método devuelve un entero que indica que se ha ejecutado
correctamente (devuelve un 0) o bien ha ocurrido un error (devuelve cualquier otro valor
diferente de 0). Según que error ocurra, el código mostrará un mensaje u otro.
Fijaos que la cantidad de código que controla los errores oscurece el código “normal”. A
medida que el código aumente, también se hará más complicado el control de errores.
Además, se dificultará la lectura del programa y su mantenimiento.
Con el lenguaje Java esta idea del control de errores deja de existir, ya que la gestión de
errores se realiza automáticamente. Para hacer esta gestión automática, Java incluye un
conjunto de clases creadas específicamente para el control de errores, que se llaman
excepciones.
¿Cómo funcionan las excepciones?
Cuando un programa finaliza su ejecución de manera anormal, se lanza una excepción. Las
excepciones pueden haberse lanzado por las clases que se utilizan o bien manualmente por tu
propio código.

Teoría 10 (TEO010)

Página 6 de 8

Desarrollo de Funciones en el Sistema Informático
Curso 2009/2010

Además de “lanzadas” (del término thrown en inglés), las excepciones también se pueden
“capturar” (del término catch en inglés). Capturar una excepción significa que tú mismo
controlarás esa excepción para que el programa no finalice de manera inesperada.
Las excepciones son clases heredadas de la clase Throwable y pueden pertenecer a distintos
paquetes. En todos los tipos se pueden usar los métodos siguientes:

1. String getMessage(). Mensaje de la excepción
2. String toString(). Mensaje que describe la excepción
3. void printStackTrace(). Método desde el cual se lanzó la excepción

Capturar una excepción
Como ya hemos comentado, cuando en un método se produce una situación inesperada, se
lanza una excepción. Para capturarla, se utilizan el conjunto de sentencias try, catch y
finally.
Todo el código que pongamos dentro de un bloque try será inspeccion
  • Links de descarga
http://lwp-l.com/pdf5067

Comentarios de: Programación orientada a objetos (y II) (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad