Está en la página 1de 19

REPUBLICA BOLIVARIANA DE VENEZUELA

MINISTERIO DEL PODER POPULAR PARA LA DEFENSA


UNIVERSIDAD NACIONAL EXPERIMENTRAL POLITÉCNICA
DE LA FUERZA ARMADA NAIONAL BOLIVARIANA
NÚCLEO CARACAS
INGENIERÍA EN SISTEMAS
CÁTEDRA: LENGUAJE DE PROGRAMACIÓN II

ABSTRACCIÓN, HERENCIA, INTERFACE Y POLIMORFISMO

PROFESOR: BACHILLERES:
DAVID CEDRES MATOS, GABRIEL C.I.: 28.434.285
MENDOZA, JESÚS C.I.: 27.862.585
ORTIZ, LISANDRO C.I.: 28.356.169
4TO SEMESTRE SECCIÓN D01

CARACAS, ENERO 2023


INTRODUCCIÓN

Cuando hablamos de programación en lenguajes de alto nivel se suele


decir que todo tiene similitud con la vida real. Dicho de otro modo, si algo se puede
imaginar es que podemos programarlo. Aunque lo cierto es que habría que
matizar que esto es más bien es un tira y afloja entre dos realidades. Por un lado,
tenemos lo que conocemos como real y por otra la parte lógica y más abstracta
que viene siendo nuestra interpretación de cómo deben funcionar las cosas.

Así cuando programamos en JAVA tarde o temprano necesitaremos


trabajar con clases abstractas. Qué son y para que las usamos es algo que
veremos en este artículo y ya adelanto que no es un concepto especialmente
difícil de entender pues si ya entendemos los fundamentos básicos de la
programación orientada a objetos como herencia y polimorfismo no costará
entender éste.

Podemos pensar en las clases abstractas como una anotación y en cierto


modo como si de una lista de la compra se tratase. En la vida real solemos hacer
breves anotaciones de tareas pendientes sin entrar en descripciones detalladas o
en cómo realizar cada una de ellas. Se trata de no olvidarnos de nada y evitar
hacer borrón y cuenta nueva o volver sobre nuestros pasos más adelante
organizando nuestro tiempo.

Así en programación las clases abstractas funcionan como una clase que


declara la existencia de métodos, pero no su implementación. Eso es algo que
haremos después en las diferentes subclases derivadas de la clase abstracta.
Una clase abstracta puede contener métodos no abstractos, pero al menos uno de
los métodos sí debe serlo.
ABSTRACCIÓN

La abstracción es un proceso de interpretación y diseño que implica


reconocer y enfocarse en las características importantes de una situación u objeto,
y filtrar o ignorar todas las particularidades no esenciales.

o Dejar a un lado los detalles de un objeto y definir las características


específicas de éste, aquellas que lo distingan de los demás tipos de
objetos.

o Hay que centrarse en lo que es y lo que hace un objeto, antes de decidir


cómo debería ser implementado.

o Se hace énfasis en el qué hace más que en el cómo lo hace.

Ejemplo:

La gerencia de un taller mecánico necesita un sistema para controlar los


vehículos que ingresan a sus instalaciones. En este caso, las características
esenciales de la clase vehículo son: Marca, Modelo, Color, Falla detectada,
Nombre del Propietario, Dirección del Propietario, Teléfono del Propietario...

A esto se le llama abstracción. En general un programa no es más que una


descripción abstracta de un procedimiento o fenómeno que existe o sucede en el
mundo real.

La abstracción es crucial para comprender este complejo mundo.

La abstracción es esencial para el funcionamiento de una mente humana


normal y es una herramienta muy potente para tratar la complejidad.

La abstracción es clave para diseñar un buen software.


HERENCIA

Es una propiedad que permite crear clases a partir de otras ya existentes,


obteniendo características (métodos y atributos) similares a los ya existentes. En
otras palabras la nueva clase (subclase o clase derivada) puede utilizar la misma
implementación de su superclase (clase base) o especificar una nueva
implementación.

Es la relación entre una clase general y otra clase más específica. Es un


mecanismo que nos permite crear clases derivadas a partir de clases base.

Nos permite compartir automáticamente métodos y datos entre clases,


subclases y objetos. Por ejemplo: Si declaramos una clase párrafo derivada de
una clase texto todos los métodos y variables asociadas con la clase texto son
automáticamente heredados por la subclase párrafo.

Herencia simple: Es cuando una clase hereda de sólo una clase base.

La clase B hereda de la clase A.


Ejemplo:

Las clases Circle, Line y Triangle heredan todos los atributos y métodos de la
clase Shape.

Herencia múltiple: Es cuando una clase hereda de dos o más clases base.
La clase C hereda tanto de la clase A como de la clase B.

Ejemplo:

En este ejemplo, las clases Passenger y Employee heredan de la clase Human y


las clases FlyingPlane y GroundPlane heredan de la clase Plane.

INTERFAZ
Es un conjunto de métodos abstractos y de constantes cuya funcionalidad
es la de determinar el funcionamiento de una clase, es decir, funciona como un
molde o como una plantilla. También es una descripción de las acciones que un
objeto puede hacer. En programación orientada a objetos una interfaz X describe
todas las funciones que un objeto debe tener para poder ser un X.

Una interface es una variante de una clase abstracta con la condición de


que todos sus métodos deben ser abstractos. Si la interface va a tener atributos,
éstos deben llevar las palabras reservadas static final y con un valor inicial ya que
funcionan como constantes por lo que, por convención, su nombre va en
mayúsculas.

Una clase implementa una o más interfaces (separadas con comas ",") con
la palabra reservada implements.

La principal diferencia entre interface y abstract es que una interface


proporciona un mecanismo de encapsulación de los protocolos de los métodos sin
forzar al usuario a utilizar la herencia.

Ejemplo:
Un ejemplo de uso de una interfaz se presenta en la siguiente imagen a
través de un diagrama de clases, donde las clases InstrumentoMusical y
Sirena implementan de la interfaz Sonoro que cuenta con la declaración del
método sonar(volumen: int).

POLIMORFISMO

Son comportamientos diferentes, asociados a objetos distintos, pueden


compartir el mismo nombre; al llamarlos por ese nombre se utilizará el
comportamiento correspondiente al objeto que se esté usando.

Ejemplo:
Ambas clases deben sobreescribir el método getArea () puesto que se
calculan de diferentes maneras en cada caso.

Tipos de polimorfismo:

o Polimorfismo Ad Hoc
o Polimorfismo paramétrico
o Polimorfismo de subtipos

Polimorfismo Ad Hoc: Se refiere a funciones que cambian su


comportamiento dependiendo del tipo de argumentos que reciben (sobrecarga de
métodos o funciones).

La sobrecarga de métodos hace referencia a varios métodos con el mismo


nombre, pero con diferentes firmas.

Ejemplo:
En el lenguaje de programación ABAP4 también se permite la sobrecarga
de métodos como un tipo de polimorfismo.

En el ejemplo anterior tenemos la clase Empleado y se desea realizar la


sobrecarga del método modificarNombre. Este tipo de polimorfismo se
implementa como se muestra en la siguiente imagen, el método recibe un
parámetro i_nombre para una funcionalidad específica y como segunda medida, el
método recibe dos parámetros i_nombre y i_apellido para otro procedimiento en
particular.
Polimorfismo paramétrico: El polimorfismo paramétrico permite que las
funciones y las clases puedan escribirse de forma genérica, de tal manera que
pueda manipular los datos de la misma manera sin importar el tipo.

Ejemplos:

o C++ - Templates

o Java - Generics

Polimorfismo de subtipos: Es una forma de polimorfismo en la cual los


subtipos de un tipo pueden sustituir el comportamiento de las funciones del
supertipo con su propia implementación.
ActionListener

ActionListener es una Interface del grupo de los Listeners (escuchadores).


ActionListener tiene un sólo método: void actionPerformed(ActionEvent e).
ActionListener se usa para detectar y manejar eventos de acción (ActionEvent):
los que tienen lugar cuando se produce una acción sobre un elemento del
programa.
Los botones son unos de los componentes más utilizados cuando se trata
de construir interfaces gráficas de usuario (GUI). En Java, para que los botones, o
cualquier otro componente, reaccionen ante cierta acción, es necesario emplear la
interfaz ActionListener.

Esta interfaz pertenece a la clase Event Listener de la librería


java.awt.event. Solo tiene un método (actionPerformed) que siempre tendremos
que implementar cuando hagamos uso de la interfaz.

Dentro de ese método vamos a programar el código que necesitamos que


se ejecute cuando suceda determinado evento.

Pasos para crear un ActionListener en Java

Declararemos la clase que va a manejar el evento.

Especificamos si la clase va a implementar la interfaz o a extender la clase


que la ha implementado.

El componente debe registrarse como el elemento que sirve de oyente.

Incluiremos el código dentro del método actionPerformed que hará la acción


que queremos implementar.

Ejemplos de ActionListener en Java

Veamos un ejemplo sobre la codificación de un ActionListener en Java que


le dará funcionalidad a un botón dentro de una aplicación.

ActionListener oyente = new ActionListener() {

@Override
//Implementamos el único método que tiene esta interfaz
public void actionPerformed(ActionEvent e) {
/*Incluimos el código que queremos que se ejecute,
en este caso se trata de un código que sumará dos
números ingresados por el usuario y mostrará el
resultado en un cuadro de diálogo*/

String n1 = num1.getText();
String n2 = num2.getText();

double a = Double.parseDouble(n1);
double b = Double.parseDouble(n2);

double resultado = (a + b);


JOptionPane.showMessageDialog(null, "Resultado: "
+ resultado

//incorporamos el listener al componente que desencadenará la


acción
boton.addActionListener(oyente);

Cuando el usuario haga clic en el botón (componente), el ActiónListener


recibirá una notificación y se ejecutará el método actiónPerformed() que hemos
preparado anteriormente.

Este es solo el fragmento de código donde se implementa la interfaz


ActionListener con su respectivo método, pero no debemos olvidar que todo esto
va enmarcado dentro de una interfaz gráfica de usuario (GUI) que puede tener
más componentes, con otros eventos de acción.

Además, recordemos que para usar este listener es necesario importar la


librería que lo contiene cuando iniciamos la codificación de nuestro proyecto o
aplicación.
Como podemos ver, implementar un ActionListener no es una tarea pesada,
simplemente se trata de seguir las indicaciones generales e incluir el código que
sea necesario para cumplir la tarea que requerimos.

ActionPerformed

ActionPerformed(ActionEvent e) es un evento de ActionListener.


ActionListener se usa para detectar y manejar eventos, los cuales tienen lugar
cuando se produce una acción sobre un elemento del programa.

En otras palabras, al hablar de ActionPerformed nos referimos al evento


que se produce al hacer click en un componente o al pulsar Enter (teniendo el foco
en el componente).

EventPerformed

Un evento ActionEvent se produce:

o al pulsar un botón (Button)


o al hacer doble clic en un elemento de lista (List)
o al pulsar INTRO en una caja de texto (TextFiel)
o al elegir un menú (MenuItem)
o entre otros.

Los distintos elementos del programa (un botón, por ejemplo) están
vigilados por Listeners que detectan las acciones que tienen lugar sobre el
elemento vigilado. Cuando ActionListener detecta una acción (por ejemplo: pulsar
sobre un botón) se genera un evento de acción (ActionEvent) en el elemento
(botón). Los ActionEvent invocan el método actionPerformed(ActionEvent e) que
realiza las acciones programadas ante ese evento.

Es necesario importar el paquete java.awt.event.*.


EventListener

El método addEventlistener, es un escuchador que indica al navegador que


esté atento a la interacción del usuario. La ventaja es que se escribe totalmente en
el JS, sin necesidad de tocar el HTML.

Su sintaxis es muy sencilla:

target.addEventListener('tipo de evento',función_a_lanzar,booleano);

Target, es el elemento que se escucha generalmente se identifica por su


ID.

Ejemplo:

document.getElementById("myBtn").addEventListener("click", myFunction);

function myFunction() {
    document.getElementById("demo").innerHTML = "Hello World";
}

Puede aplicarse más de una función a un mismo evento.

document.getElementById("myBtn").addEventListener("click", myFunction);
document.getElementById("myBtn").addEventListener("click", someOtherFunction);

Puede aplicarse diferentes tipos de evento a un mismo elemento.

document.getElementById("myBtn").addEventListener("mouseover", myFunction);
document.getElementById("myBtn").addEventListener("click", someOtherFunction);
document.getElementById("myBtn").addEventListener("mouseout", someOtherFunction);

Puede escribirse la función directamente, equivale a: elemento.onclick =


función () { / * ACCIONES* / };
elemento.addEventListener('click', function() { /*ACCIONES*/ }, false);
document.getElementById("myBtn").addEventListener("click", function() {
this.style.backgroundColor = "red";
});
Puede borrarse un escuchador empleando el método removeEventListener()
// crear un escuchador
document.getElementById("myDIV").addEventListener("mousemove", myFunction);
//borrar un escuchador
document.getElementById("myDIV").removeEventListener("mousemove", myFunction);

CONCLUSIÓN
Abstracción es un término del mundo real que podemos aplicar tal cual lo
entendemos en el mundo de la Programación Orientada a Objetos. Algo abstracto
es algo que está en el universo de las ideas, los pensamientos, pero que no se
puede concretar en algo material, que se pueda tocar.

Por consiguiente, la herencia es una propiedad que permite crear clases a


partir de otras ya existentes, obteniendo características (métodos y atributos)
similares a los ya existentes. En otras palabras, la nueva clase (subclase o clase
derivada) puede utilizar la misma implementación de su superclase (clase base) o
especificar una nueva implementación.

Seguidamente las Interfaces son unas clases completamente abstractas


que contiene sólo una colección de métodos abstractos y propiedades constantes.
Al igual que en las clases abstractas en un Interface se especifica qué se debe
hacer, pero no su implementación. Serán las clases que implementen estas
interfaces las que describen las acciones que puede llevar a cabo un determinado
objeto.

Por último, el polimorfismo son comportamientos diferentes, asociados a


objetos distintos, pueden compartir el mismo nombre; al llamarlos por ese nombre
se utilizará el comportamiento correspondiente al objeto que se esté usando.
BIBLIOGRAFÍA

Alonso F., Martínez L., Segovia Fco. J. Introducción a la ingeniería de software.


2005. Delta Publicaciones. Zaragoza, España.

Clases Abstractas e Interfaces. [consultado 18 de enero de 2023]. Disponible en


internet:
https://www.unirioja.es/cu/jearansa/0809/archivos/EIPR_Tema04.pdf

Desarrollo Web. Teoría de la Programación Orientada a Objetos. [consultado 18


de enero de 2023]. Disponible en internet:
https://desarrolloweb.com/articulos/abstraccion-programacion-orientada-
objetos-poo.html.

Durán F., Gutiérrez F., Pimentel E. Programación orientada a objetos con Java.
2007. Editorial Thomson. Madrid.

Nakayama C., Angélica. Solano Gálvez, Jorge A. Guía práctica de estudio 08:
Polimorfismo. [consultado 17 de enero de 2023]. Disponible en internet:
http://odin.fi-b.unam.mx/salac/practicasPOO/P08-POO_Polimorfismo.pdf.

Programación Orientada a Objetos. [consultado 18 de enero de 2023]. Disponible


en internet:
https://ferestrepoca.github.io/paradigmas-de-programacion/poo/poo_teoria/
concepts.html.

También podría gustarte