You are on page 1of 17

Índice

1. Introducción
2. Abstracción
3. Uso
4. Ejemplo
5. Encapsulamiento
6. Formas de encapsular
7. Modularidad
8. Relación entre ellos
9. Jerarquía
10.Herencia
11.Ejemplo en java
12.Clase abstracta
13.Herencia y ocultación de información
14.Redefinición de métodos
15.Ventajas
16.Estereotipos de herencia
17.Polimorfismo
18.Clasificación
19.Ejemplos
20.Polimorfismo desde una interfaz
21.Diferencia entre polimorfismo y sobrecarga
INTRODUCCIÓN
La programación orientada a objetos mejor conocida como POO, que es un
modelo de programación como su nombre lo dice que toma como referencia
objetos, des esa forma crea una interacción para diseñar software
informático, mejor dicho todo tipo de aplicaciones o programas.

Está basado en varias técnicas, incluyendo herencia, abstracción,


polimorfismo y encapsulamiento. Su uso se popularizó a principios de la
década de los años 1990. En la actualidad, existe variedad de lenguajes de
programación que soportan la orientación a objetos.

Los objetos son entidades que combinan estado (atributo), comportamiento


(método) e identidad:

El estado está compuesto de datos, será uno o varios atributos a los


que se habrán asignado unos valores concretos (datos).
El comportamiento está definido por los procedimientos o métodos
con que puede operar dicho objeto, es decir, qué operaciones se
pueden realizar con él.
La identidad es una propiedad de un objeto que lo diferencia del resto,
dicho con otras palabras, es su identificador (concepto análogo al de
identificador de una variable o una constante).

Un objeto contiene toda la información que permite definirlo e identificarlo


frente a otros objetos pertenecientes a otras clases e incluso frente a objetos
de una misma clase, al poder tener valores bien diferenciados en sus
atributos. A su vez, los objetos disponen de mecanismos de interacción
llamados métodos, que favorecen la comunicación entre ellos. Esta
comunicación favorece a su vez el cambio de estado en los propios objetos.
Esta característica lleva a tratarlos como unidades indivisibles, en las que no
se separa el estado y el comportamiento.

Los métodos (comportamiento) y atributos (estado) están estrechamente


relacionados por la propiedad de conjunto. Esta propiedad destaca que una
clase requiere de métodos para poder tratar los atributos con los que cuenta.
El programador debe pensar indistintamente en ambos conceptos, sin
separar ni darle mayor importancia a alguno de ellos. Hacerlo podría producir
el hábito erróneo de crear clases contenedoras de información por un lado y
clases con métodos que manejen a las primeras por el otro. De esta manera
se estaría realizando una programación estructurada camuflada en un
lenguaje de programación orientado a objetos.

La POO difiere de la programación estructurada tradicional, en la que los


datos y los procedimientos están separados y sin relación, ya que lo único
que se busca es el procesamiento de unos datos de entrada para obtener
otros de salida. La programación estructurada anima al programador a
pensar sobre todo en términos de procedimientos o funciones, y en segundo
lugar en las estructuras de datos que esos procedimientos manejan. En la
programación estructurada sólo se escriben funciones que procesan datos.
Los programadores que emplean POO, en cambio, primero definen objetos
para luego enviarles mensajes solicitándoles que realicen sus métodos por sí
mismos.
ABSTRACCIÓN

La abstracción consiste en aislar un elemento de su contexto o del resto de


los elementos que lo acompañan. En programación, el término se refiere al
énfasis en el "¿qué hace?" más que en el "¿cómo lo hace?" (característica
de caja negra). El común denominador en la evolución de los lenguajes de
programación, desde los clásicos o imperativos hasta los orientados a
objetos, ha sido el nivel de abstracción del que cada uno de ellos hace uso.

Los lenguajes de programación son las herramientas mediante las cuales los
diseñadores de lenguajes pueden implementar los modelos abstractos. La
abstracción ofrecida por los lenguajes de programación se puede dividir en
dos categorías: abstracción de datos (pertenecientes a los datos) y
abstracción de control (perteneciente a las estructuras de control).

Los diferentes paradigmas de programación han aumentado su nivel de


abstracción, comenzando desde los lenguajes de máquina, lo más próximo al
ordenador y más lejano a la comprensión humana; pasando por los
lenguajes de comandos, los imperativos, la orientación a objetos (OO), la
Programación Orientada a Aspectos (POA); u otros paradigmas como la
programación declarativa, etc.

La abstracción encarada desde el punto de vista de la programación


orientada a objetos expresa las características esenciales de un objeto, las
cuales distinguen al objeto de los demás. Además de distinguir entre los
objetos provee límites conceptuales. Entonces se puede decir que la
encapsulación separa las características esenciales de las no esenciales
dentro de un objeto. Si un objeto tiene más características de las necesarias
los mismos resultarán difíciles de usar, modificar, construir y comprender.

La misma genera una ilusión de simplicidad dado a que minimiza la cantidad


de características que definen a un objeto.

Durante años, los programadores se han dedicado a construir aplicaciones


muy parecidas que resolvían una y otra vez los mismos problemas. Para
conseguir que sus esfuerzos pudiesen ser utilizados por otras personas se
creó la POO que consiste en una serie de normas para garantizar la
interoperabilidad entre usuarios de manera que el código se pueda reutilizar.
Uso

A grandes rasgos, la abstracción, permite que dispongamos de las


características de un objeto que necesitemos. Si necesitamos el objeto
Persona, podríamos poner nombre, edad, dirección, estado civil, etc. Si lo
necesitamos en un sistema administrativo, pero, si lo requerimos para el área
de biología, dentro de sus atributos quizá tengamos, ADN, RND, Gen x1,
Gen x2, etc. Y los atributos antes mencionados no sean requeridos. En
general, podemos decir que Persona cuenta con todos los atributos
mencionados aquí, pero, por el proceso de abstracción excluimos todos
aquellos, que no tiene cabida en nuestro sistema.

Ejemplo

Pensar en términos de objetos es muy parecido a cómo lo haríamos en la


vida real. Una analogía sería modelizar un coche en un esquema de POO.
Diríamos que el coche es el elemento principal que tiene una serie de
características, como podrían ser el color, el modelo o la marca. Además
tiene una serie de funcionalidades asociadas, como pueden ser ponerse en
marcha, parar o aparcar. En un esquema POO el coche sería el objeto, las
propiedades serían las características como el color o el modelo y los
métodos serían las funcionalidades asociadas como ponerse en marcha o
parar.

Por poner otro ejemplo vamos a ver cómo modelizaríamos en un esquema


POO una fracción, es decir, esa estructura matemática que tiene un
numerador y un denominador que divide al numerador, por ejemplo 3/2. La
fracción será el objeto y tendrá dos propiedades, el numerador y el
denominador. Luego podría tener varios métodos como simplificarse,
sumarse con otra fracción o número, restarse con otra fracción, etc.

Estos objetos son utilizables en los programas, por ejemplo en un programa


de matemáticas se puede hacer uso de objetos fracción y en un programa
que gestione un taller de coches, objetos coche. Los programas orientados a
objetos utilizan muchos objetos para realizar las acciones que se desean
realizar y ellos mismos también son objetos. Es decir, el taller de coches será
un objeto que utilizará objetos coche, herramienta, mecánico, recambios, etc.
ENCAPSULAMIENTO

En programación modular, y más específicamente en programación


orientada a objetos, se denomina encapsulamiento al ocultamiento del
estado, es decir, de los datos miembro, de un objeto de manera que sólo se
puede cambiar mediante las operaciones definidas para ese objeto.

Cada objeto está aislado del exterior, es un módulo natural, y la aplicación


entera se reduce a un agregado o rompecabezas de objetos. El aislamiento
protege a los datos asociados a un objeto contra su modificación por quien
no tenga derecho a acceder a ellos, eliminando efectos secundarios e
interacciones.

De esta forma el usuario de la clase puede obviar la implementación de los


métodos y propiedades para concentrarse sólo en cómo usarlos. Por otro
lado se evita que el usuario pueda cambiar su estado de maneras
imprevistas e incontroladas.

Se dice que es el empaquetado de métodos y atributos dentro de un objeto,


mediante una interfaz grafica. La clave está precisamente en el envoltorio del
objeto .

Como se puede observar de los diagramas, las variables del objeto se


localizan en el centro o núcleo del objeto. Los métodos rodean y esconden el
núcleo del objeto de otros objetos en el programa. Al empaquetamiento de
las variables de un objeto con la protección de sus métodos se le llama
encapsulamiento. Típicamente, el encapsulamiento es utilizado para
esconder detalles de la puesta en práctica no importantes de otros objetos.
Entonces, los detalles de la puesta en práctica pueden cambiar en cualquier
tiempo sin afectar otras partes del programa.

El encapsulamiento de variables y métodos en un componente de software


ordenado es, todavía, una simple idea poderosa que provee dos principales
beneficios a los desarrolladores de software: El encapsulamiento consiste en
unir en la Clase las características y comportamientos, esto es, las variables
y métodos. Es tener todo esto en una sola entidad. En los lenguajes
estructurados esto era imposible. Es evidente que el encapsulamiento se
logra gracias a la abstracción y el ocultamiento que veremos a continuación.
La utilidad del encapsulamiento va por la facilidad para manejar la
complejidad, ya que tendremos a las Clases como cajas negras donde sólo
se conoce el comportamiento pero no los detalles internos, y esto es
conveniente porque lo que nos interesará será conocer qué hace la Clase
pero no será necesario saber cómo lo hace.

La encapsulación da lugar a que las clases se dividan en dos partes:

1. Interface: captura la visión externa de una clase, abarcando la


abstracción del comportamiento común a los ejemplos de esa clase.
2. Implementación: comprende la representación de la abstracción, así
como los mecanismos que conducen al comportamiento deseado.

Formas de encapsular

1. Estándar (Predeterminado)
2. Abierto: Hace que el miembro de la clase pueda ser accedido desde el
exterior de la Clase y cualquier parte del programa.
3. Protegido: Solo es accesible desde la Clase y las clases que heredan
(a cualquier nivel).
4. Semi cerrado : Solo es accesible desde la clase heredada
5. Cerrado: Solo es accesible desde la Clase.

En el encapsulamiento hay analizadores que pueden ser semánticos y


sintácticos.

MODULARIDAD
Además de la abstracción y el encapsulamiento, uno de los principios
fundamentales del diseño orientado a objetos es la modularidad. Como un
motor de automóvil, por ejemplo, los programas modernos se forman por
componentes distintos que deben interactuar en forma correcta, para que
todo el sistema funcione bien. Casa componente debe funcionar
adecuadamente. En la POO, el concepto de modularidad, se refiere a una
organización en la que distintos componentes de un sistema de
programación se dividen en unidades funcionales separadas. Un ejemplo
más esclarecedor, se puede considerar que una casa o un departamento
consisten en varias unidades que interaccionan: las instalaciones eléctricas,
de calefacción y enfriamiento, el servicio sanitario y la estructura. Más que
considerar que esos sistemas son un enredo gigantesco de alambres,
ventilaciones, tubos y tableros, el arquitecto organizado que diseña una casa
o departamento los considera como módulos separados que interactúan en
formas bien definidas. Al hacer esa consideración se aplica la modularidad
para aclarar las ideas, en una forma natural de organizar las funciones en
unidades distintas y manejables. Otra forma que nuestro arquitecto
“organizado” puede usar para ordenar su rompecabezas es el de la
estructura jerárquica, donde cada enlace que va hacia arriba se puede leer
como "es un(a)", como en "una cabaña es una casa es una construcción" En
forma parecida, el uso de la modularidad en un sistema de programación
también puede proporcionar una poderosa estructura organizativa que aporte
claridad a una implementación.
Y volviendo a nuestro ejemplo del motor, podremos tener una clase base
Motor, de allí extendemos Motor
Eléctrico, Combustión Interna, etc.… Por otro laso, el motor de combustión
interna tiene módulos (O componentes, u objetos) tales como Carburador,
Bomba de Inyección, Radiador, etc, etc.… que no pertenecen a la estructura
jerárquica del motor. Casi seguramente pertenecen a otra. Decimos entonces
que la clase Motor necesariamente tiene objetos Carburador, Radiador… a
esta relación la podemos llamar “tiene un”: Un atributo del objeto tiene un
objeto de otra clase. Finalmente, distinguiremos un tercer caso, cuando una
clase necesita transitoriamente, por ejemplo dentro de alguno de sus
métodos, del comportamiento de objetos de otra clase. En este caso, el
objeto de nuestra clase no necesita del objeto de la otra al nivel de atributo, o
sea permanente. Lo necesita transitoriamente. A esta relación la podemos
llamar “usa un”.

RELACIONES ENTRE OBJETOS


En resumen, los tipos de relación que estudiaremos son los siguientes, en
este orden:
Tipo de relación Descripción
“tiene un” El objeto de nuestra clase tiene atributos que son objetos de otras
clases
“usa un” Métodos pertenecientes al objeto de nuestra clase requieren del
comportamiento de otras clases
“es un” El objeto de nuestra clase es una extensión o especialización de la
clase de la cual hereda.

JERARQUÍA
Un lenguaje de programación es una notación para especificar una
secuencia de operaciones a realizar sobre objetos datos. Estos se pueden
agrupar en una jerarquía de árbol, cuyas unidades son comunes y familiares
a la mayoría de los lenguajes.
En el tope de la jerarquía está el programa propiamente tal, que es la unidad
de ejecución básica. Luego viene una entidad que puede ser compilada, y
que se compone de sentencias y expresiones.

HERENCIA

En orientación a objetos la herencia es el mecanismo fundamental para


implementar la reutilización y extensibilidad del software. A través de ella los
diseñadores pueden construir nuevas clases partiendo de una jerarquía de
clases ya existente (comprobadas y verificadas) evitando con ello el
rediseño, la remodificación y verificación de la parte ya implementada. La
herencia facilita la creación de objetos a partir de otros ya existentes,
obteniendo características (métodos y atributos) similares a los ya existentes.

Es la relación entre una clase general y otra clase más especifica. 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.

La herencia es uno de los mecanismos de la programación orientada a


objetos, por medio del cual una clase se deriva de otra, llamada entonces
superclase, de manera que extiende su funcionalidad. Una de sus funciones
más importantes es la de proveer Polimorfismo y late binding.
Ejemplo en Java
public class Mamifero
{

private int patas;


private String nombre;

public void imprimirPatas()


{
System.out.println(nombre + " tiene " + patas + " patas\n");
}

public Mamifero(String nombre, int patas)


{
this.nombre = nombre;
this.patas = patas;
}
}

public class Perro extends Mamifero {


public Perro(String nombre){
super(nombre, 4);
}
}

public class Gato extends Mamifero {


public Gato(String nombre){
super(nombre, 4);
}
}

public class CreaPerro {


public static void main(String [] args) {
Perro bobi = new Perro("Bobi");
bobi.imprimirPatas(); /*Está en la clase mamífero*/
}
}

Clase Abstracta

La herencia permite que existan clases que nunca serán instanciadas


directamente. En el ejemplo anterior, una clase "perro" heredaría los atributos
y métodos de la clase "mamífero", así como también "gato", "delfín" o
cualquier otra subclase; pero, en ejecución, no habrá ningún objeto
"mamífero" que no pertenezca a alguna de las subclases. En ese caso, a una
clase así se la conocería como Clase Abstracta. La ausencia de instancias
específicas es su única particularidad, para todo lo demás es como cualquier
otra clase.

Herencia y ocultación de información

El diseñador puede definir qué variables de instancia y métodos de los


objetos de una clase son visibles. En C++ y java esto se consigue con las
especificaciones private, protected y public. Sólo las variables y métodos
definidos como públicos en un objeto serán visibles por todos los objetos.

En cuanto a las subclases, que heredan las estructuras de las superclases,


el diseñador puede controlar qué miembros de las superclases son visibles
en las subclases. En el caso de java y C++ los especificadores de acceso
(private, protected, public) de los miembros de la superclase afectan también
a la herencia:

 Private: ningún miembro privado de la superclase es visible en la


subclase.

 Protected: los miembros protegidos de la superclase son visibles en


la subclase, pero no visibles para el exterior.

 Public: los miembros públicos de la superclase siguen siendo públicos


en la subclase.

Redefinición de métodos

En la clase derivada se puede redefinir algún método ya definido en la clase


base. Para redefinir un método en la subclase, basta con declarar una
función miembro con el mismo nombre. Si en una clase en particular se
invoca a un método, y el método no está definido en la misma, es buscado
automáticamente en las clases superiores. Sin embargo, si existieran dos
métodos con el mismo nombre y distinto código, uno en la clase y otro en
una superclase, se ejecutaría el de la clase, no el de la superclase.

Por lo general, siempre se puede acceder explícitamente al método de la


clase superior mediante una sintaxis diferente, la cual dependerá del
lenguaje de programación empleado.

Ventajas
 Ayuda a los programadores ahorrar código y tiempo, ya que si tiene
una clase lista es solo de implementarla y listo todo el código de esta
se resume a solo un llamado.

 Los objetos pueden ser construidos a partir de otros similares. Para


ello es necesario que exista una clase base y una jerarquía
(relacionamiento) de clases.

 La clase derivada puede heredar código y datos de la clase base,


añadiendo código o modificando lo heredado.

 Las clases que heredan propiedades de otra clase pueden servir


como clase base de otras.

Estereotipos de herencia

 Herencia simple: Un objeto puede extender las características de otro


objeto y de ningún otro, es decir, que solo puede heredar o tomar
atributos de un solo padre o de una sola clase.

 Herencia múltiple: Un objeto puede extender las características de uno


o más objetos, es decir, puede tener varios padres. En este aspecto
hay discrepancias entre los diseñadores de lenguajes. Algunos de
ellos han preferido no admitir la herencia múltiple por las posibles
coincidencias en nombres de métodos o datos miembros. Por ejemplo
C++, Python permiten herencia múltiple, mientras que Java, Ada y C#
sólo permiten herencia simple.

POLIMORFISMO

En programación orientada a objetos el polimorfismo se refiere a la


posibilidad de definir clases diferentes que tienen métodos o atributos
denominados de forma idéntica, pero que se comportan de manera distinta.

Por ejemplo, podemos crear dos clases distintas: Pez y Ave que heredan de
la superclase Animal. La clase Animal tiene el método abstracto mover que
se implementa de forma distinta en cada una de las subclases (peces y aves
se mueven de forma distinta).

Como se mencionó anteriormente, el concepto de polimorfismo se puede


aplicar tanto a funciones como a tipos de datos. Así nacen los conceptos de
funciones polimórficas y tipos polimórficos. Las primeras son aquellas
funciones que pueden evaluarse o ser aplicadas a diferentes tipos de datos
de forma indistinta; los tipos polimórficos, por su parte, son aquellos tipos de
datos que contienen al menos un elemento cuyo tipo no está especificado.

Clasificación
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.

Otra clasificación agrupa los polimorfismo en dos tipos: Ad-Hoc que incluye
a su vez sobrecarga de operadores y coerción, Universal (inclusión o
controlado por la herencia, paramétrico o genericidad).

Ejemplo de polimorfismo

En este ejemplo haremos uso del lenguaje C++ para mostrar el polimorfismo.
También se hará uso de las funciones virtuales puras de este lenguaje,
aunque para que el polimorfismo funcione no es necesario que las funciones
sean virtuales puras, es decir, perfectamente el código de la clase "superior"
(en nuestro caso Empleado) podría tener código

#include<iostream>
using namespace std;

class figura {
public:
float base;
float altura;
public:
float captura();
virtual unsigned float perimetro()=0;
virtual unsigned float area()=0;
};

class rectangulo: public figura{


public:
void imprime();
unsigned float perimetro(){return 2*(base+altura);}
unsigned float area(){return base*altura;}
};

class triangulo: public figura{


public:
void muestra();
unsigned float perimetro(){return 2*altura+base}
unsigned float area(){return (base*altura)/2;}
};

void figura::captura(){
cout<<"CALCULO DEL AREA Y PERIMETRO DE UN TRIANGULO
ISÓSCELES Y UN RECTANGULO:" <<endl;
cout<<"escribe la altura: ";
cin>>altura;
cout<<"escribe la base: ";
cin>>base;
cout<<"EL PERIMETRO ES:" << perimetro();
cout<<"EL AREA ES:" << area();
};

Polimorfismo desde una interfaz

Aunque el polimorfismo es el mismo se aplique donde se aplique, el modo en


que se aplica desde una interfaz puede resultar un poco más oscuro y difícil
de entender. Se expone un sencillo ejemplo (en VB-NET) comentado para
entender cómo funciona aplicado desde una interfaz, primero se escribe el
código y luego se comenta el funcionamiento. Nota: para no enturbiar el
código en exceso, todo lo que no se declara privado se sobreentiende
público.

' Declaramos una interfaz llamada IOperar y declaramos una función


llamada Operar
' que implementarán las clases deseadas:
Interface IOperar
Function Operar(valor1 as integer, valor2 as integer) as long
End Interface
' Declaramos una clase que trabaja más alejada del usuario y que
contendría funciones comunes
' para las siguiente clase, si no fueran idénticas irían en la interfaz,
' pero al caso de mostrar el polimorfismo se suponen idénticas:
Class Operacion
Function Calcular(clasellamante as Object) as Long
' aquí iría el código común a todas las operaciones.... que llaman a esa
función
' por ejemplo recoger los 2 valores de la operación, chequear que
están en el rango deseado, etc.

' se supone que la función inputValor recoge un valor de algún sitio


valor1 as integer = inputValor()
valor2 as integer = inputValor()

op as New IOperar = clasellamante


Return op.Operar(valor1,valor2) 'AQUÍ es donde se utiliza el
polimorfismo.
End Function
End Class
' Declaramos 2 clases: Sumar y Resta que implementan la interfaz y que
llaman a la clase Operacion:
Class Sumar
Implements IOperar
Private Function Operar(valor1 as Integer, valor2 as Integer) as Long
Implements IOperar.Operar
Return valor1 + valor2
End Function

Function Calcular() as Long


op as New operacion
Return op.Calcular(Me) ' se está llamando a la función 'Calcular' de la
clase 'Operación'
End Function
End Class
' segunda clase....
Class Restar
Implements IOperar
Private Function Operar(valor1 as Integer, valor2 as Integer) as Long
Implements IOperar.Operar
Return valor1 - valor2
End Function

Function Calcular() as Long


op as New operacion
Return op.Calcular(Me) ' se está llamando a la función 'Calcular' de la
clase 'Operación'
End Function
End Class

 Analicemos ahora el código para entender el polimorfismo expuesto


en la interfaz: La interfaz expone un método que puede ser
implementado por las diferentes clases, normalmente relacionadas
entre si. Las clases Sumar y Restar implementan la interfaz pero el
método de la interfaz lo declaramos privado para evitar ser accedido
libremente y además tienen un método llamado Calcular que llama a
la clase Operacion donde tenemos otro método con el mismo nombre.
Es esta clase última la que realiza el polimorfismo y debe fijarse como
es a través de una instancia de la interfaz que llama al método operar.
La interfaz sabe a qué método de qué clase llamar desde el momento
que asignamos un valor a la variable OP en el método Calcular de la
clase Operacion, que a se vez recibió la referencia del método
Calcular desde la clase que la llama, sea está cual sea se identifica a
sí misma, mediante la referencia Me ó This según el lenguaje
empleado. Debe notarse que la instancia de la interfaz accede a sus
métodos aunque en sus clases se hayan declarado privadas.

Diferencias entre polimorfismo y sobrecarga

 El polimorfismo como se muestra en el ejemplo anterior, suele ser


bastante ventajoso aplicado desde las interfaces, ya que permite crear
nuevos tipos sin necesidad de tocar las clases ya existentes
(imaginemos que deseamos añadir una clase Multiplicar), basta con
recompilar todo el código que incluye los nuevos tipos añadidos. Si se
hubiera recurrido a la sobrecarga durante el diseño exigiría retocar la
clase anteriormente creada al añadir la nueva operación Multiplicar,
lo que además podría suponer revisar todo el código donde se
instancia a la clase.

 La sobrecarga se da siempre dentro de una sola clase, mientras que


el polimorfismo se da entre clases distintas.

 Un método está sobrecargado si dentro de una clase existen dos o


más declaraciones de dicho método con el mismo nombre pero con
parámetros distintos, por lo que no hay que confundirlo con
polimorfismo.

 En definitiva: La sobrecarga se resuelve en tiempo de compilación


utilizando los nombres de los métodos y los tipos de sus parámetros;
el polimorfismo se resuelve en tiempo de ejecución del programa, esto
es, mientras se ejecuta, en función de que clase pertenece un objeto.

You might also like