Está en la página 1de 12

Home About Me Contact Android Juegos en Android JavaScript Java

C++ Linux godot mysql vbscript LUA C# Python

     

EL BLOG DE TINCHICUS
Un blog para el programador

JAVA

Java / Abstraccion

Fecha: mayo 23, 2019 Autor/a: tinchicus 3

Anuncios

Bienvenidos sean a este post, hoy hablaremos sobre la abstaccion, la cual por
diccionario es:

la cualidad de tratar con ideas en lugar de los eventos

— EL TINCHICUS
Anuncios

Un ejemplo de esto seria cuando enviamos un mail, usualmente el usuario no sabe lo


que sucede despues de enviado el mail y desconoce los complejos protocolos que se
encargan de ello sin embargo nosotros para enviarlo solo necesitamos el contenido, la
direccion de destino y apretar Enviar.

Anuncios

En programacion Orientada a objetos la abstraccion es el proceso de ocultar los detalles


de la implementacion al usuario y solo se mostrara la funcionalidad, es decir el usuario
obtendra la informacion que el objeto hace en lugar de como lo hace y en Java se hace
implementando las clases abstractas e implementando interfaces

Anuncios

Clases Abstractas
Las clases abstractas se declaran por medio de la palabra abstract y contienen las
siguientes propiedades:
Estas clases pueden o no tener metodos abstractos, por ejemplos metodos sin un
cuerpo ( public void get(); )

Si la clase tiene aunque sea un solo metodo abstracto debe ser declarado como
abstracto

Las clases declaradas como abstractas no pueden ser instanciadas

Para usar una clase abstracta esta debe ser heredada desde otra clase y proveer
implementaciones para los metodos abstractos en ella.

Si se hereda una clase abstracta, se deben crear implementaciones para todos los
metodos en ella

Anuncios

Para entender un poco mejor este concepto veamos el siguiente ejemplo, el cual
constara de dos clases, una para nuestro empleado donde el nombre del archivo sera
Empleado.java y luego tendremos la clase que sera nuestro programa llamado
PruebaAbstracta.java para ello comencemos con la primera clase:

Empleado.java

public abstract class Empleado


{
private String nombre;
private String direccion;
private int numero;
public Empleado(String nombre, String direccion, int numero)
{
System.out.println("Construyendo un empleado");
this.nombre = nombre;
this.direccion = direccion;
this.numero = numero;
}
public double pagoComputado()
{
System.out.println("Dentro del pago computado al empleado");
return 0.0;
}
public void chequeCorreo()
{
System.out.println("Enviando el cheque por correo a "
+ this.nombre + " " + this.direccion);
}
public String toString()
{
return nombre + " " + direccion + " " + numero;
}
public String getNombre()
{
return nombre;
}
public String getDireccion()
{
return direccion;
}
public void setDireccion(String nueva)
{
direccion = nueva;
}
public int getNumero()
{
return numero;
}
}

Anuncios
Este caso es muy similar al visto al post
anterior, donde tendremos una clase
llamado Empleado, en lugar de
Trabajador, y en la cual habra un
constructor para iniciar todos los datos
del mismo, y las funciones para recuperar
los datos, una para ingresar una nueva
direccion, chequeCorreo() la cual se
encarga de noti car del envio del cheque
al empleado con el nombre y la direccion
pero observen al principio de la misma, en
ella declaramos a toda la clase como
abstracta por ende todos estos metodos son abstractos, sin necesidad de especi car en
los mismos porque se entiende que es intrinseco, pasemos al codigo de la siguiente clase
para poder probaralo:

public class PruebaAbstracta


{
public static void main(String[] args)
{
Empleado e = new Empleado("Martin Miranda","M. Sosa",333);
System.out.println("LLamada a chequeCorreo usando la "
+ "referencia de la clase Empleado --");
e.chequeCorreo();
}
}

Anuncios
En este caso creamos un objeto de la clase Empleado y con la referencia de la clase
Empleado, luego llamamos a chequeCorreo(), si lo compilamos obtendremos esta
salida:

tinchicus@dbn001vrt:~/programacion/java/codigo$ javac
PruebaAbstracta.java
PruebaAbstracta.java:5: error: Empleado is abstract; cannot be
instantiated
Empleado e = new Empleado("Martin Miranda","M.
Sosa",333);
^
1 error
tinchicus@dbn001vrt:~/programacion/java/codigo$

Anuncios

Este error es por lo que hablamos antes, una clase abstracta no puede ser instanciada
para solucionar este error deberemos agregar la siguiente clase y hacerla heredera de
Empleado:

Salario.java

public class Salario extends Empleado


{
private double salario;
public Salario(String nombre, String direccion, int numero,
double salario)
{
super(nombre, direccion, numero);
setSalario(salario);
}
public void chequeCorreo()
{
System.out.println("Dentro de chequeCorreo de la clase Salario");
System.out.println("Enviando cheque a " + getNombre()
+ " con salario " + getSalario());
}
public double getSalario()
{
return salario;
}
public void setSalario(double nuevo)
{
if (nuevo >= 0.0)
salario = nuevo;
}
public double pagoComputado()
{
System.out.println("Computando el pago del salario a "
+ getNombre());
return salario/52;
}
}

Anuncios
Esta clase no solamente nos va a permitir acceder a la clase
abstracta sino a su vez instanciarla por no ser abstracta pero
con acceso a todos los metodos y/o variables que sean public
o protected, en esta clase vamos a tener dos metodos que
nos van a interesar mas, el primero es el constructor el cual
se encargara de recibir los tres datos del empleado (nombre,
direccion, numero) y el salario del mismo, luego por medio de
super enviara los tres datos a la clase abstracta y seteara los
mismos, y utilizaremos luego a setSalario() para darle el
nuevo valor a salario, luego tendremos el metodo anulado de
la clase abstracta llamado chequeCorreo() donde
modi caremos las instucciones del mismo, recuerden al
sobreescribir un metodo lo unico que cambia son las
instrucciones dentro del bloque el resto (nombre y
argumentos) debe permanecer igual, y despues tendremos
varios metodos para obtener el salario y el pago computado,
getNombre() es un metodo heredado de la clase Empleado,
ahora pasemos a modi car nuevamente a
PruebaAbstracta.java de la siguiente forma:

public class PruebaAbstracta


{
public static void main(String[] args)
{
Empleado e = new Salario("Martin
Miranda","M. Sosa",333,100000.0);
Salario s = new Salario("Enzo Tortore",
"Gral. Paz", 777, 90000.0);
System.out.println("LLamada a chequeCorreo
usando la "
+ "referencia de la clase Empleado --");
e.chequeCorreo();
System.out.println("Llamada a chequeCorreo usando la "
+ "referencia de la clase Salario --");
s.chequeCorreo();
}
}

Anuncios
En este caso crearemos dos empleados, uno con referencia a la clase Empleado y otro
con la clase Salario pero en lugar crearlos los objetos en base a la clase abstracta
Empleado lo haremos con la clase heredera Salario, en este cargaremos los cuatro datos
que necesita Salario luego mostraremos un mensaje y llamaremos a chequeCorreo()
para ambos empleados, si lo compilamos y ejecutamos veremos el siguiente resultado:

tinchicus@dbn001vrt:~/programacion/java/codigo$ java PruebaAbstracta


Construyendo un empleado
LLamada a chequeCorreo usando la referencia de la clase Empleado --
Dentro de chequeCorreo de la clase Salario
Enviando cheque a Martin Miranda con salario 100000.0
Construyendo un empleado
Llamada a chequeCorreo usando la referencia de la clase Salario --
Dentro de chequeCorreo de la clase Salario
Enviando cheque a Enzo Tortore con salario 90000.0
tinchicus@dbn001vrt:~/programacion/java/codigo$

Anuncios

En este caso funciono porque el objeto creado pudo instanciar Salario que no es
abstracto pero si tiene acceso a esta, permitiendo acceder a todos los metodos y
ejecutar nuestro programa correctamente, pasemos a la siguiente parte.

Anuncios

Metodos Abstractos
Los metodos abstractos son implementados cuando nosotros necesitamos que el
metodo sea implemetando por una de las clases hijas o herederas de nuestra clase, por
eso la declaramos como abstracta (es decir solo el tipo y nombre sin un cuerpo como
vimos antes), veamos algunas propiedades:

Se usa la palabra abstract para declarar al metodo abstracto

La palabra abstract siempre debe estar adelante del nombre de metodo, puede estar
adelante del modi cador o el tipo pero siempre delante del nombre del metodo

El metodo abstracto siempre contiene un metodo de rma (prototipo) pero nunca un


cuerpo

Los metodos abstractos siempre llevan un punto y coma al nal (;) y nunca llevan
llaves ({})

Anuncios

Para entender el concepto de metodo abstracto tomemos como ejemplo el metodo


pagoComputado() y cambiemoslo a abstracto, para ello modi caremos el metodo actual
de la clase Empleado.java

public double pagoComputado()


{
System.out.println("Dentro del pago computado al empleado");
return 0.0;
}

Por la siguiente forma:

public abstract double pagoComputado();

Esta modi cacion nos traera dos consecuencias:

La clase contenedora debe ser declarada como abstracta, aunque en nuestro caso ya
era.

Todo clase heredera de esta debe rede nida el metodo declarado como abstracto.
Anuncios

Recuerden que cualquiera clase heredera debe rede nir el metodo abstracto, de lo
contrario tendras una jerarquia de clases abstractas que no se podra instanciar. En
nuestro caso solo debio hacerse una modi cacion porque nuestro metodo abstracto
estaba rede nido en su clase heredera.

Anuncios

En resumen, hoy hemos visto abstraccion, para que sirve, cual es su funcion, las clases
abstractas, como se deben implementar, los metodos abstractos, como son y como se
deben implementar, espero les haya sido util sigueme en Twitter o Facebook para
recibir una noti cacion cada vez que subo un nuevo post en este blog, nos vemos en el
proximo post.
Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.50

Publicado por tinchicus


Un bohemio, un soñador, un responsable e irresponsable al mismo
tiempo, quiero hacer la enciclopedia de programacion mas grande del
Internestor. Ver todas las entradas de tinchicus

← ANTERIOR SIGUIENTE →
Android / Bases de datos, onUpgrade Android / URI

3 COMENTARIOS SOBRE “JAVA / ABSTRACCION” Añadir comentario ↓

Pingback: Java / Encapsulacion – El blog de Tinchicus


Pingback: Java / Listado completo de posts – El blog de Tinchicus

Pingback: Java / Curso completo inicial de Java – El blog de Tinchicus

DEJA UNA RESPUESTA

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están


marcados con *

Comentario *

Nombre * Correo electrónico *

Web

PUBLICAR EL COMENTARIO

Noti carme los nuevos comentarios por correo electrónico.


Recibir nuevas entradas por email.
Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus
comentarios.


© 2023 EL BLOG DE TINCHICUS
ESTA WEB FUNCIONA GRACIAS A WORDPRESS.COM.

También podría gustarte