Homonimia de operadores / Sobrecarga:
tutoelectro.wikispaces.com/file/view/HOMONIMIA.docx
Al igual que C++, C# permite sobrecargar operadores para utilizarlos en clases propias. Esto hace posible que utilizar un tipo de datos definido por el usuario parezca tan natural y lógico como utilizar un tipo de datos fundamental. Por ejemplo, podría crear un nuevo tipo de datos denominado ComplexNumber para representar un número complejo y proporcionar métodos que realicen operaciones matemáticas en esos números mediante operadores aritméticos estándar, como utilizar el operador + para sumar dos números complejos.
Para sobrecargar un operador, se escribe una función que tenga el nombre del operador seguido del símbolo del operador que se va a sobrecargar. Por ejemplo, a continuación se muestra cómo sobrecargar el operador +:
Ver ejemplo:
Java no admite la sobrecarga de operadores, aunque internamente sobrecarga el operador + para la concatenación de cadenas. La homonimia consiste en la definición de nuevos operadores usando operadores existentes, de tal forma que estos sean usados con objetos de clase, teniendo los operadores un significado apropiado a los nuevos tipos.
entendiendo: homonimia == sobrecarga
Herencia simple:
A través de ella los diseñadores pueden crear nuevas clases partiendo de una clase o de una jerarquía de clases preexistente (ya comprobadas y verificadas) evitando con ello el rediseño, la modificación y verificación de la parte ya implementada. La herencia facilita la creación de objetos a partir de otros ya existentes e implica que una subclase obtiene todo el comportamiento (métodos) y eventualmente los atributos (variables) de su superclase.
Herencia Multiple:
Herencia múltiple hace referencia a la característica de los lenguajes de programación orientada a objetos en la que una clase puede heredar comportamientos y características de más de una superclase. Esto contrasta con la herencia simple, donde una clase sólo puede heredar de una superclase.
Lenguajes que soportan herencia múltiple en su mayor parte son: C++, Centura SQL Windows, CLOS, Eiffel, Object REXX, Perl y Python.
La herencia múltiple permite a una clase tomar funcionalidades de otras clases, como permitir a una clase llamada MusicoEstudiante heredar de una clase llamada Persona, una clase llamada Músico, y una clase llamada Trabajador. Esto puede ser abreviado como MusicoEstudiante : Persona, Músico, Trabajador.
Java, Nemerle, Delphi, C# y Objective-C no permiten herencia múltiple; esto hace que no haya ambigüedad. Sin embargo, permiten a las clases implementar múltiples interfaces.
Clase base:
La clase de la que se hereda se suele denominar clase base, clase padre, superclase, clase ancestro (el vocabulario que se utiliza suele depender en gran medida del lenguaje de programación).
Clase derivada:
En la clase derivada se puede redefinir algún método existente en la clase base, con el objeto de proveer una implementación diferente. Para redefinir un método en la subclase, basta con declararlo nuevamente con la misma signatura (nombre y parámetros). Si se invoca un cierto método de un objeto que no está definido en su propia clase, se dispara la búsqueda hacia arriba en la jerarquía a la que dicha clase pertenece. Sin embargo, si existieran dos métodos con la misma signatura, uno en la clase y otro en una superclase, se ejecutaría el de la clase, no el de la superclase.
Cuando se redefine un método en una clase es posible acceder explícitamente al método original de su superclase, mediante una sintaxis específica que depende del lenguaje de programación empleado (en muchos lenguajes se trata de la palabra clave super).
Función virtual:
En programación orientada a objetos (POO), una función virtual o método virtual es una función cuyo comportamiento, al ser declarado "virtual", es determinado por la definición de una función con la misma cabecera en alguna de sus subclases. Este concepto es una parte muy importante del polimorfismo en la POO.
El concepto de función virtual soluciona los siguientes problemas:
En POO, cuando una clase derivada hereda de una clase base, un objeto de la clase derivada puede ser referido (o coercionado) tanto como del tipo de la clase base como del tipo de la clase derivada. Si hay funciones de la clase base redefinidas por la clase derivada, aparece un problema cuando un objeto derivado ha sido coercionado como del tipo de la clase base. Cuando un objeto derivado es referido como del tipo de la base, el comportamiento de la llamada a la función deseado es ambiguo.
Distinguir entre virtual y no virtual sirve para resolver este problema. Si la función en cuestión es designada "virtual", se llamará a la función de la clase derivada (si existe). Si no es virtual, se llamará a la función de la clase base.
Nota: todas las funciones en Java son consideradas virtuales, a menos que sean estáticas (static) o privadas. su modificación se hace en las sub clases con @override.
Clases abstractas:
En C++ es posible definir clases abstractas. Una clase abstracta, o clase base abstracta (ABC), es una que está diseñada sólo como clase padre de las cuales se deben derivar clases hijas. Una clase abstracta se usa para representar aquellas entidades o métodos que después se implementarán en las clases derivadas, pero la clase abstracta en sí no contiene ninguna implementación -- solamente representa los métodos que se deben implementar. Por ello, no es posible instanciar una clase abstracta, pero sí una clase concreta que implemente los métodos definidos en ella.
Las clases abstractas son útiles para definir interfaces, es decir, un conjunto de métodos que definen el comportamiento de un módulo determinado. Estas definiciones pueden utilizarse sin tener en cuenta la implementación que se hará de ellos.
Polimorfismo:
En programación orientada a objetos, el polimorfismo se refiere a la propiedad por la que es posible enviar mensajes sintácticamente iguales a objetos de tipos distintos. El único requisito que deben cumplir los objetos que se utilizan de manera polimórfica es saber responder al mensaje que se les envía.
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.
A diferencia de la sobrecarga (homonimia), ya que 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.
-
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 la clase a la que pertenece el objeto.
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 la clase a la que pertenece el objeto.
---------------------------------- Fin de la Clase --------------------------------------------------
Ir a la ultima actualización de la clase: http://adf.ly/11350999/clase-05-de-poo-java
REVISA AQUÍ!!!! la descripción del vídeo para mas INFORMACIÓN y HERRAMIENTAS
Sus-Cri-Be-Te a este canal. o visitalo para ver las "listas de reproducción"
https://www.youtube.com/channel/UCJ70FExIXtnRE5cPI-P03vw
Recuerda seguirme en mis redes sociales:
twitter: @cusattic
Blogger: http://cusattic-java.blogspot.com/
comenta tus dudas, dime que te pareció y ¿que temas crees debería explicar?.
Gracias por ver el vídeo...
Espero hayas encontrado y aprendido lo que buscabas...
compártelo ya que "esto es para todos!!"
Sus-Cri-Be-Te a este canal. o visitalo para ver las "listas de reproducción"
https://www.youtube.com/channel/UCJ70FExIXtnRE5cPI-P03vw
Recuerda seguirme en mis redes sociales:
twitter: @cusattic
Blogger: http://cusattic-java.blogspot.com/
comenta tus dudas, dime que te pareció y ¿que temas crees debería explicar?.
Gracias por ver el vídeo...
Espero hayas encontrado y aprendido lo que buscabas...
compártelo ya que "esto es para todos!!"