Академический Документы
Профессиональный Документы
Культура Документы
Propiedades:
Características
– Es uno de los métodos fundamentales para enfrentarse a la complejidad inherente al software (ya
visto en los TADs).
Hay una alta gama de abstracciones que existen desde los objetos que modelan muy cerca
de entidades, a objetos que no tienen razón para existir.
Abstracción de entidades: Es un objeto que representa un modelo útil de una entidad que
se desea.
Abstracción de máquinas virtuales: Un objeto que agrupa operaciones, todas ellas virtuales,
utilizadas por algún nivel superior de control u operaciones.
Niveles de encapsulamiento:
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.
Ventajas:
- Java
• La encapsulación se consigue a través del concepto de clase combinado
con los especificadores de acceso que limitan la visibilidad de los atributos y
métodos.
Ejemplos
- Una operación es vista por sus usuarios como si fuera una simple entidad,
aunque está formada por una secuencia de operaciones a bajo nivel.
- Un objeto es visto como un simple objeto en vez de como una composición
de sus partes individuales.
Polimorfismo: Es la habilidad que poseen los objetos para reaccionar de modo
diferente ante los mismos mensajes.
Beneficios:
- Simplicidad
Si se necesita escribir código que trata con una familia de subtipos, el código puede
ignorar los detalles específicos de tipo y solo interactuar con el tipo base de la familia.
Aun cuando el código piense que está usando un objeto de la clase base, la clase
del objeto podría ser la clase base o cualquiera de sus subclases.
- Extensibilidad:
Se pueden añadir subclases posteriormente a la familia de tipos, y los objetos de
estas nuevas subclases, podría trabajar con el código existente.
Tipos de Polimorfismos:
Polimorfismo de sobrecarga: Ocurre cuando las funciones del mismo nombre existen, con
funcionalidad similar, en clases que son completamente independientes una de otra (éstas
no tienen que ser clases secundarias de la clase objeto). Por ejemplo, la clase complex,
la clase image y la clase link pueden todas tener la función "display". Esto significa que no
necesitamos preocuparnos sobre el tipo de objeto con el que estamos trabajando si todo lo
que deseamos es verlo en la pantalla.
Por lo tanto, podemos por ejemplo, definir varios métodos homónimos de addition()
efectuando una suma de valores.
Una signature es el nombre y tipo (estático) que se da a los argumentos de una función.
Por esto, una firma de método determina qué elemento se va a llamar.
Polimorfismo de inclusión: Es la habilidad para redefinir un método en clases que
se hereda de una clase base se llama especialización. Por lo tanto, se puede llamar un
método de objeto sin tener que conocer su tipo intrínseco: esto es polimorfismo de
subtipado. Permite no tomar en cuenta detalles de las clases especializadas de una familia
de objetos, enmascarándolos con una interfaz común (siendo esta la clase básica).
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<stdio.h>;
#include<conio.h>;
#include<iostream>;
class figuras {
public:
float base;
float altura;
public:
float captura();
};
public:
void imprime();
};
public:
void muestra();
};
void figura::captura(){
cin>>altura;
cin>>base;
};
Herencia:
La herencia expresa en general una especialización o una generalización de una clase sobre
la otra.
Beneficios:
Tipos de herencia:
Hay dos tipos de herencia: Herencia Simple y Herencia Múltiple. La primera indica que se
pueden definir nuevas clases solamente a partir de una clase inicial mientras que la segunda
indica que se pueden definir nuevas clases a partir de dos o más clases iniciales. Java sólo
permite herencia simple.
Dado que una clase puede ser una clase base indirecta de una clase derivada más de una
vez, C++ proporciona una manera de optimizar el funcionamiento de esas clases base. Las
clases base virtuales proporcionan una manera de ahorrar espacio y evitar la ambigüedad
en las jerarquías de clases que usan la herencia múltiple.
Cada objeto no virtual contiene una copia de los miembros de datos definidos en la clase
base. Esta duplicación desperdicia espacio y requiere especificar qué copia de los miembros
de la clase base se desea siempre que se accede a ellos.
Cuando una clase base se especifica como base virtual, puede actuar como base indirecta
más de una vez sin la duplicación de sus miembros de datos.Todas las clases base que
utilizan una clase base como base virtual comparten una única copia de sus miembros de
datos.
Al declarar una clase base virtual, la palabra clave de virtual aparece en las listas base de
las clases derivadas.
En C++ podemos definir clases abstractas. Son clases pensadas para definir un
comportamiento, es decir, un conjunto de métodos sin implementación. Sus clases
derivadas están obligadas a implementar estos métodos, siempre i cuando queramos que
sean clases concretas instánciales. Los métodos sin implementación de las clases abstractas
reciben el nombre de métodos virtuales.3
Constructores:
Se utiliza para crear tablas de métodos virtuales y poder así desarrollar el polimorfismo, una
de las herramientas de la programación orientada a objetos (POO). Al utilizar un constructor,
el compilador determina cual de los objetos va a responder al mensaje (virtual) que hemos
creado.
Tiene un tipo de acceso, un nombre y un paréntesis.
En java es un método especial dentro de una clase, que se llama automáticamente cada vez
que se crea un objeto de esa clase.
Posee el mismo nombre de la clase a la cual pertenece y no puede regresar ningún valor
(ni siquiera se puede especificar la palabra reservada void). Por ejemplo si añadiéramos a
la clase Suma un constructor, tendríamos que llamarlo también Suma. Cuando en una clase
no se escribe propiamente un constructor, java asume uno por defecto (que es el
Constructor vacío, es decir sin parámetros).
Un constructor por defecto es un constructor sin parámetros que no hace nada. Sin embargo
será invocado cada vez que se construya un objeto sin especificar ningún argumento, en
cuyo caso el objeto será iniciado con los valores predeterminados por el sistema (los
atributos numéricos a ceros, los alfanuméricos a nulos, y las referencias a objetos a null).
Un constructor con Parámetros siempre debe especificar algún argumento, en cuyo caso el
objeto será iniciado con los valores indicados por el usuario, y realizará también las acciones
programadas al ejecutarse.
Destructor:
http://www.dccia.ua.es/dccia/inf/asignaturas/LPP/2007-2008/tema-11.html
http://quegrande.org/apuntes/EI/OPT/POO/teoria/08-09/tema_3_-
_propiedades_basicas.pdf
http://www.itnuevolaredo.edu.mx/takeyas/Apuntes/POO/Apuntes/04.-
Polimorfismo.pdf
https://sites.google.com/site/contenidospoo/definicionybeneficios
https://jadsuafu.wordpress.com/2012/08/23/clases-abstractas-con-metodos-
virtuales-y-clases-concretas-derivadas/
https://sites.google.com/site/wwwprogramacionorientadacom/35-
constructores-y-destructores-en-clases-derivadas