Unidad 4. Herencia y Polimorfismo

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 14

INSTITUTO TECNOLÓGICO SUPERIOR DE

ACAYUCAN.

NOMBRE: ARIEL CANDELARIO LURIA


DOCENTE: ROBERTO QUINTO GARCÍA
MATERIA: PROGRAMACION ORIENTADDA
A OBJETOS
GRUPO: 207-C
CARRERA: ING. EN INFORMATICA
SEMESTRE: FEBRERO-JULIO 2020
INVESTIGACION-UNIDAD 4

21 DE MAYO DEL 2020



4.1- CONCEPTO DE HERENCIA Y POLIMORFISMO EPTO DE HERENCIA Y
POLIMORFISMO

Herencia

Herencia en la programación orientada a objetos es la habilidad de extender


una funcionalidad existente definiendo una nueva clase que hereda
funcionalidad de una clase existente. Lo cual nos ahorrara mucho tiempo a los
programadores.

Si contamos con una clase que se acerca a lo que necesitamos; no es


necesario crear una clase desde cero. Podemos aprovecharla y extenderla
para crear nuestra nueva clase. Esta nueva clase se llamara subclase y la
clase que ya teníamos se llamara superclase.

La subclase heredara todos los atributos y los métodos que fueron definidos en
la clase padre. Si necesitamos cambiar algún método, se puede sobrescribir el
comportamiento en nuestra subclase; utilizando el mismo nombre y los mismos
argumentos del método que se encuentra en la subclase. O bien si se requiere
crear un nuevo método lo podemos incluir en nuestra subclase.

Una clase puede heredar atributos por dos superclases (clases padres). La
herencia múltiple puede ser usada para agrupar atributos y métodos de
distintas clases en una sola.

Polimorfismo

Significa literalmente muchas formas. En programación orientada a objetos es


una técnica para optimizar la funcionalidad basada en tipos particulares.

La diferencia entre herencia y polimorfismo es que herencia está relacionada


con clases y polimorfismo con métodos.

Existen 3 tipos de polimorfismo:

- Sobrecarga:
Es cuando existen funciones con el mismo nombre, con funcionalidad similar;
en clases que son completamente independientes una de la otra.

- Paramétrico:

Existen funciones con el mismo nombre pero se usan diferentes parámetros


(nombre o tipo). Se selecciona el método dependiendo del tipo de datos que se
mande.

-Inclusión:

Es cuando se puede llamar a un método sin tener que conocer su tipo, así no
se toma en cuenta los detalles de las clases especializadas, utilizando una
interfaz común.

4.2- DEFINICIÓN DE UNA CLASE BASE

Clase Base
Una clase base es aquella que no dependen ninguno de sus atributos u objetos
de la clase de alguna otra clase, se podría decir que en términos de herencia,
seria la clase padre, la clase que se mantiene fija, en el aspecto de herencia.
Es también por así llamarlo la clase principal de un programa, seria la clase
primaria sin incluir la clase main en donde se corre todo el programa en si.

Clase Base o también conocida como Clase abstracta le permite definir una


clase que puede heredarse en otras clases los atributos y comportamientos
definido en esta.

A continuación un ejemplo de la clase Persona con un método interno:

class Persona(object):

"""Clase que representa una Persona"""

def __init__(self, cedula, nombre, apellido, sexo):

"""Constructor de clase Persona"""


self.cedula = cedula

self.nombre = nombre

self.apellido = apellido

self.sexo = sexo

def __str__(self):

"""Devuelve una cadena representativa de Persona"""

return "%s: %s, %s %s, %s." % (

self.__doc__[25:34], str(self.cedula), self.nombre,

self.apellido, self.getGenero(self.sexo))

def hablar(self, mensaje):

"""Mostrar mensaje de saludo de Persona"""

return mensaje

def getGenero(self, sexo):

"""Mostrar el genero de la Persona"""

genero = ('Masculino','Femenino')

if sexo == "M":

return genero[0]

elif sexo == "F":

return genero[1]

else:

return "Desconocido"

En el ejemplo previo, es donde empieza a crear una clase (lo hace con la
palabra class). La segunda palabra Persona es el nombre de la clase. La
tercera palabra que se encuentra dentro de los paréntesis este hace referencia
al objeto object, usando para indicar la clase de la cual precede.
La clase Persona tiene los métodos __init__, __str__, hablar y getGenero. Sus
atributos son cedula, nombre, apellido y sexo.

La instancia de dos nuevos objetos Persona seria de la siguiente forma:

persona1 = Persona("V-13458796", "Leonardo", "Caballero", "M")

persona2 = Persona("V-23569874", "Ana", "Poleo", "F")

El método constructor __init__ es un método especial el cual debe escribir


como: MiClase(parámetros iniciales si hay cualquiera).

Usted puede llamar esos métodos y atributos con la siguiente


notación: claseinstancia.metodo o claseinstancia.atributo.

>>> print persona1.nombre, persona1.apellido

>>> print persona1.getGenero(persona1.sexo)

El método __str__ es un método usando para imprimir la descripción de la


instancia de objeto el cual debe mostrar como:

print "\n" + str(persona1) + "\n"

En el anterior código se usan para cierto formato para imprimir la instancia de


objeto usando la sentencia print, concatenando el carácter \n para generar un
salto de página y seguidamente convertir a formato cadena de caracteres
usando la función str() a la instancia de objeto llamada persona2.

4.3- DEFINICION DE UNA CLASE DERIVADA


Clase Derivada:
 son clases que dependen de las clases bases, ya que algunos de sus métodos
son también heredados, y muchas veces, el compilador arrojara malos
resultados, ya que al ser dependientes estas clases, a veces podrán generar
errores lógicos.

public class A

public A() { }

public class B : A

public B() { }

La nueva clase (la clase derivada) obtiene todos los datos no privados y el
comportamiento de la clase base, además de todos los demás datos y
comportamientos que define para sí misma. La nueva clase tiene dos tipos
efectivos: el tipo de la nueva clase y el tipo de la clase que hereda.
4.4. CLASES ABSTRACTAS

Las clases abstractas son aquellas que por sí mismas no se pueden identificar
con algo 'concreto' (no existen como tal en el mundo real), pero sí poseen
determinadas características que son comunes en otras clases que pueden ser
creadas a partir de ellas.

Para que lo comprendas mejor, un ejemplo de clase abstracta sería una


llamada Vehículo: todos ellos realizan acciones similares (arrancar, acelerar,
frenar, etc.), pero sin embargo existen muchos tipos de vehículos diferentes y
que se comportan de forma totalmente distinta (el proceso de arrancarlos no se
realiza siguiendo los mismos pasos, unos tienen que despegar y vuelan como
los aviones, otros se sumergen para desplazarse por debajo del agua como los
submarinos, cada uno de ellos necesita ser frenado de distinto modo...).

Es decir, en el mundo real no existe un objeto 'vehículo' como tal sino que hay
diferentes tipos de vehículo, pero aunque poseen características comunes y
realizan las mismas acciones lo hacen de forma muy diferente (pudiendo
además realizar otras específicas cada uno de ellos).

Así pues, ya que una clase abstracta no representa algo concreto tampoco
puede ser instanciada (no se puede crear un Objeto a partir de ella) pero sí es
posible crear otras clases en base a su definición.

Main.java:

package EjemplosPOO.ejemplo04;

public class Main

public static void main(String[] args)

Animal p = new Perro();


p.setNombre("TOBI");

p.comer();

p.caminar();

p.sonido();

System.out.println("-------------");

Animal g = new Gato();

g.setNombre("MICIFUS");

g.comer();

g.caminar();

g.sonido();

Animal.java (nuestra clase abstracta):

Expand Code

Perro.java (hereda de Animal):

Expand Code

Gato.java (hereda de Animal):
Expand Code

Al ejecutar el programa veríamos lo siguiente:

4.5- INTERFACES

4.5.1 Definición

La Interfaz es como todo puerto que nos permite enviar y recibir señales desde
un componente a otro, teniendo entonces distintas formas de realizar este
envío dispuestas por las Especificaciones Técnicas de cada equipo, o bien
mediante el establecimiento de distintos estándares que permiten la
comunicación.

También encontramos que una Interfaz representa a la comunicación


entre Actores mediante un Protocolo determinado, realizando una
conexión Física para realizar una función determinada tanto entre
dos dispositivos como bien entre dos sistemas completamente diferentes,
realizando así una comunicación.

En lo que respecta a un ordenador, generalmente conocemos a


la Interfaz como la forma en la cual se conectan el Hardware (es decir, todos
los componentes físicos del equipo) con el Software, que comprende las
aplicaciones, programas y herramientas que estén presentes.
La finalidad que persigue es justamente que un usuario pueda realizar una
acción determinada en la forma deseada, teniendo Eficacia, Rendimiento y
Seguridad en cada proceso ejecutado, lo que implica las siguientes
condiciones:
 Que la acción efectuada sea la que el usuario tenía intenciones de realizar

 La orden se debe realizar en forma rápida y precisa

 La acción debe afectar solamente al componente de Hardware o a


la aplicación que teníamos pensado utilizar, sin afectar a otros
componentes.

Es así que llegamos a una clasificación básica de las distintas Interfaces de


Usuario que se pueden dividir en tres tipos fundamentales:
 Hardware: Esta interfaz es la que se desarrolla para que los dispositivos
puedan Recibir, Procesar y Emitir todos los datos recibidos, interactuando
con los Periféricos de Entrada y Salida para ello

 Software: En este caso, la interfaz se encarga de brindar control al usuario


por sobre la herramienta que está utilizando

 Software - Hardware: Esta combinación de interfaces permite la


comunicación entre los procesos del ordenador y los usuarios, teniendo una
instrucción, su interpretación y la obtención de una información que es
percibida sensorialmente.

4.5.2. Implementación de una interfaz

Como ya se ha visto, las interfaces carecen de funcionalidad por no estar


implementados sus métodos, por lo que se necesita algún mecanismo para dar
cuerpo a sus métodos.

La palabra reservada implements utilizada en la declaración de una clase


indica que la clase implementa la interfaz, es decir, que asume las constantes
de la interfaz, y codifica sus métodos:
class ImplementaInterfaz implements MiInterfaz{

int multiplicando=CONSTANTE;

int metodoAbstracto( int parametro ){

return ( parametro * multiplicando );

En este ejemplo se observa que han de codificarse todos los métodos que
determina la interfaz (metodoAbstracto()), y la validez de las constantes
(CONSTANTE) que define la interfaz durante toda la declaración de la clase.

Una interfaz no puede implementar otra interfaz, aunque sí extenderla


(extends) ampliándola.

4.5.3- VARIABLE POLIMÓRFICAS

Variables polimórficas

Es la capacidad que tiene los objetos de comportarse de múltiples formas.


Polimorfismo: Upcasting Únicamente tienen sentido por la existencia de la
herencia. ¨El polimorfismo (o upcasting) consiste en la posibilidad de que una
referencia a objetos de una clase pueda conectarse también con objetos de
descendientes de ésta.

El sentido del polimorfismo es realizar una generalización, olvidar los detalles


concretos de uno o varios objetos de distintas clases y buscar un punto común
a todos ellos en un ancestro Se trata de algo que realiza comúnmente la mente
humana durante el proceso de Razonamiento.
Las conexiones polimórficas se realizan a veces de manera implícita en el paso
de argumentos a una operación.  Puede contener referencias a objetos de
diferentes clases.

El polimorfismo hace posible que un usuario pueda añadir nuevas clases a una
jerarquía sin modificar o recompilar el código escrito en términos de la clase
base. Permite programar a nivel de clase base utilizando objetos de clases
derivadas.

Se puede clasificar el polimorfismo en dos grandes clases:

Polimorfismo dinámico(o polimorfismo paramétrico): es aquél en el que el


código no incluye ningún tipo de especificación sobre el tipo de datos sobre el
que se trabaja. Así, puede ser utilizado a todo tipo de datos compatible.

Polimorfismo estático (o polimorfismo ad hoc): es aquél en el que los tipos


a los que se aplica el polimorfismo deben ser explicitados y declarados uno por
uno antes de poder ser utilizados.

El polimorfismo dinámico unido a la herencia es lo que en ocasiones se conoce


como programación genérica.

También se clasifica en herencia por redefinición de métodos abstractos y por


método sobrecargado. El segundo hace referencia al mismo método con
diferentes parámetros.

En términos de programación, el polimorfismo permite que un solo nombre de


clase o de método represente diferente código seleccionado mediante algún
mecanismo automático.

De esta forma, puesto que un nombre puede representar diferente código,


también puede representar muchos comportamientos distintos.
Un lenguaje que acepta el polimorfismo es un lenguaje polimórfico.
Un lenguaje monomórfico no acepta el polimorfismo, está restringido a un
comportamiento estático, porque cada nombre está ligado en forma
estática a su código.

4.6.- REUTILIZACIÓN DE LA DEFINICIÓN DE PAQUETES/LIBRERÍAS

Los paquetes Java agrupan las clases en librerías (bibliotecas). Los paquetes
Java se utilizan de forma similar a como se utilizan las librerías en C++, sólo
que en Java se agrupan clases y/o interfaces.

En los paquetes las clases son únicas, comparadas con las de otros paquetes,
y permiten controlar el acceso; esto es, los paquetes proporcionan una forma
de ocultar clases, evitando que otros programas o paquetes accedan a clases
que son de uso exclusivo de una aplicación determinada.

Los paquetes se declaran utilizando la palabra reservada package seguida del


nombre del paquete. Esta sentencia debe estar al comienzo del fichero fuente,
concretamente debe ser la primera sentencia ejecutable del código Java,
excluyendo, los comentarios y espacios en blanco. Por ejemplo:

package figuras;

public class Circulo {

 ...

}
En este caso, el nombre del paquete es figuras. La clase Circulo se considera
como parte del paquete. La inclusión de nuevas clases en el paquete es
simple, se ha de colocar la misma sentencia al comienzo de los ficheros que
contengan la declaración de las clases. Cada uno de los ficheros que
contengan clases pertenecientes a un mismo paquete, deben incluir la misma
sentencia package, y solamente puede haber una sentencia package por
fichero. La sentencia package colocada el comienzo de un fichero fuente
afectará a todas las clases que se declaren en ese fichero, se pueden
referenciar paquetes precediendo con su nombre la clase que se quiere usar.
También se puede usar la palabra reservada import, si se van a colocar
múltiples referencias a un mismo paquete.

La sentencia import se utiliza para incluir una lista de paquetes en los que


buscar una clase determinada, y su sintaxis es:

import nombre_paquete.Nombre_Clase;

Esta sentencia, o grupo de ellas, deben aparecer antes de cualquier


declaración de clase en el código fuente.

También podría gustarte