1. HERENCIA: La
herencia es uno de los mecanismos de los lenguajes de programación orientada a objetos basados
en clases, por medio del cual una clase se deriva de
otra de manera que extiende su funcionalidad. 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).
Dependiendo del lenguaje que se utilice, el diseñador
también 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.
- Herencia simple: Una
clase sólo puede heredar de una clase base y de ninguna otra.
- Herencia múltiple: Una clase puede heredar
las características de varias clases base, 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 debido a que los
potenciales conflictos entre métodos y variables con igual nombre, y
eventualmente con comportamientos diferentes crea un desajuste cognitivo que va
en contra de los principio de la programación orientada a objetos.
EJEMPLO: programación
en Java
import javax.*;
import javax.swing.JOptionPane;
public class Mamifero{
private
int patas;
private
String nombre;
public
void imprimirPatas(){
JOptionPane.showMessageDialog(null," Tiene " +
patas + "
patas\n", "Mamifero", JOptionPane.INFORMATION_MESSAGE);
}
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 CrearPerro {
public
static void main(String[] args) {
Perro perrito =
new Perro("Pantaleon");
perrito.imprimirPatas(); /*Está en la
clase mamífero*/
}
}
2. POLIMORFISMO:
En programación orientada a objetos el
polimorfismo se refiere a la posibilidad de enviar un mensaje a un grupo de
objetos cuya naturaleza puede ser heterogénea. 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.
La apariencia del código puede ser muy diferente
dependiendo del lenguaje que se utilice, más allá de las obvias diferencias
sintácticas.
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
explícitos y declarados uno por uno antes de poder ser utilizados.
EJEMPLO:
3. ENCAPSULAMIENTO:
se denomina encapsulamiento al ocultamiento del estado, es decir, de
los datos miembro de un objeto de manera que sólo se pueda 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 de 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.
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.
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.
EJEMPLO:
4. ABSTRACCION:
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).
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 tienen cabida en nuestro sistema.
Se define como un método por el cual se rescatan los datos relevantes y se
ignoran los irrelevantes.
EJEMPLO:
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.
5. INTERFAZ: Esta
noción se utiliza para nombrar a la conexión física y funcional entre dos
sistemas o dispositivos de cualquier tipo dando una comunicación entre
distintos niveles.
Además, la palabra interfaz se utiliza en distintos
contextos:
1.
Interfaz
como instrumento: desde esta perspectiva la interfaz es una
"prótesis" o "extensión" (McLuhan)
de nuestro cuerpo. El ratón es un instrumento que extiende las funciones
de nuestra mano y las lleva a la pantalla bajo forma de cursor. Así, por ejemplo, la pantalla de
una computadora es una interfaz entre el usuario y el disco duro de la misma.
2.
Interfaz
como superficie: algunos consideran que la interfaz nos trasmite
instrucciones ("affordances") que nos informan sobre su uso. La
superficie de un objeto (real o virtual) nos habla por medio de sus formas,
texturas, colores,
etc.
3.
Interfaz
como espacio: desde esta perspectiva la interfaz es el lugar de la
interacción, el espacio donde se desarrollan los intercambios y sus
manualidades.
EJEMPLO:
6. CLASE: Es
una construcción que se utiliza como un modelo (o plantilla) para crear objetos de ese tipo. El modelo describe el
estado y contiene el comportamiento que todos los objetos creados a partir de
esa clase tendrán. Un objeto creado a partir de una determinada clase se
denomina una instancia de esa clase.
Es un conjunto coherente que consiste en un tipo
particular de metadatos. Una clase tiene una interfaz y una estructura. La
interfaz describe cómo interactuar con la clase y sus instancias con métodos,
mientras que la estructura describe cómo los datos se dividen en atributos
dentro de una instancia. Una clase también puede tener una representación
(metaobjeto) en tiempo de ejecución, que proporciona apoyo en tiempo de
ejecución para la manipulación de los metadatos relacionados con la clase. En
el diseño orientado a objetos, una clase es el tipo más específico de un objeto
en relación con una capa específica.
EJEMPLO:
7. ATRIBUTOS: Un
atributo es una característica de la clase.
EJEMPLO:
Clase cliente.
Atributos nombre, apellido.
-En java creas los atributos de la siguiente forma: Tipo de dato nombre Atributo.
EJEMPLO:
String nombre, String Apellido.
El atributo debe tener una forma de asignar valor y de obtener valor.
EJEMPLO:
AsignarNombre(), ObtieneNombre()
AsignarApellido(), ObteneApellido()
Eso es lo único que hace el atributo, asignar un valor u obtenerlo.
En síntesis, el Atributo o propiedad, son las
características de las clases.
8. METODO: Un
método por su parte. Es un conjunto de sentencias que hacen algo específico en
la clase.
EJEMPLO:
Insertar cliente();
Para definir un método en Java: Ámbito TipoDeDato NombreMetodo().
EJEMPLO:
Public void insertaCliente()
El cuerpo del método hace cosas con los atributos, los inserta en una base de
datos, los muestra por pantalla, los pasa a otro método para ser procesados y
demás.
Los métodos son como pequeños programas que pertenecen a
una misma clase,
En síntesis, Los métodos, son las instrucciones que manejan los atributos o
propiedades.
9. INSTANCIA: Se
refiere a una realización específica de una clase o prototipo determinados.
En general, cuando se ejecuta un programa en un
computador, se dice que éste se instancia. En lenguajes que crean objetos a partir
de clases, un objeto es una instancia de una clase. Esto es, es un miembro de
una clase que tiene atributos en lugar de variables.
En un contexto del mundo real, podríamos pensar en
"Perro" como una clase y en un perro concreto en una instancia de
esta clase.
EJEMPLO:
10. AGREGACION: Es una relación que se derivó de la asociación, por
ser igualmente estructural, es decir que contiene un atributo, que en todos los
casos, será una colección, es decir un Array, Vector, Collections, etc, y
además de ello la clase que contiene la colección debe tener un método que
agregue los elementos a la colección.
11. CONCURRENCIA:
Es la propiedad de los sistemas que permiten que múltiples procesos sean ejecutados al mismo
tiempo, y que potencialmente puedan interactuar entre sí.
Los procesos concurrentes pueden ser ejecutados realmente de forma simultánea,
sólo cuando cada uno es ejecutado en diferentes procesadores. En cambio, la
concurrencia es simulada si sólo existe un procesador encargado
de ejecutar los procesos concurrentes, simulando la concurrencia, ocupándose de
forma alternada en uno y otro proceso a pequeñísimos intervalos de tiempo. De
esta manera simula que se están ejecutando a la vez.
EJEMPLO:
12. PERSISTENCIA: Es
la capacidad del programador para conseguir que sus datos sobrevivan a la ejecución
del proceso que los creo, de forma que puedan ser reutilizados en otro proceso.
Cada objeto, independiente de su tipo, debería poder llegar a ser persistente
sin traducción explicita. También, debería ser implícito que el usuario no
tuviera que mover o copiar los datos expresamente para ser persistentes.
EJEMPLO: