1.1 Elementos del modelo de objetos:
clases, objetos, abstracción, modularidad, encapsulamiento, herencia y
polimorfismo.
1.1.1 Clase
Es una descripción abstracta de un
grupo de objetos, que comparten varias características. Es una plantilla a
partir de la cual se generan objetos, llamados instancias de una clase. Una
clase puede tener muchas instancias y cada una es un objeto independiente. Es
un TDA pero además, dentro de la clase residen los datos de los lenguajes de
programación tradicionales ( números arreglos, cadenas y registros) así como
funciones y subrutinas que operan sobre ellos. Las funciones definidas en la
clase ( métodos) son el único medio de acceder a los datos privados de los
objetos instanciados de la clase. No se puede acceder a los datos
directamente.. Los datos están ocultos y eso asegura que no se pueden modificar
accidentalmente por funciones extremas al objeto.
Los
datos y funciones asociados se dicen que están encapsulados en una única
entidad o módulo. Si se desea modificar los datos de un objeto, se conoce
exactamente cuáles son las funciones que interactúan con el mismo. Esto
simplifica la escritura, depuración y mantenimiento del programa.
Una clase tiene:
Atributos: datos o variables que se caracterizan el estado de un objeto.
Métodos: Procedimientos o acciones que cambian el estado de un objeto. Los objetos se comunican unos con otros llamando a métodos.
1.1.2 Objeto
El elemento fundamental de la Programación Orientada a
Objetos es el objeto. Podemos definir un objeto como un conjunto complejo de
datos y programas que poseen estructura y forman parte de una organización.
Objeto es todo aquello distinguible dentro del universo de observación; es una
entidad que contiene los atributos que describen el estado de un objeto del mundo
real y las acciones que se asocian con el objeto del objeto del mundo real.
Objeto es combinar en una sola entidad datos y funciones que operan sobre esos
datos. Los objetos son entidades que existen en el tiempo, por ello deben ser
creados o instanciados ( normalmente a través de otros objetos ). Esta
operación se hace a través de operaciones especiales llamadas constructores o
inicializadores. Estas operaciones se ejecutarán implícitamente por el
compilador o explícitamente por el programador, mediante invocación a los
citados constructores.
1.1.3 Abstracción
La abstracción se basa en el
reconocimiento de las similitudes entre los objetos, situaciones o procesos en
el mundo real, y la decisión de concentrarse en éstas similitudes e ignorar por
un momento las diferencias. Un concepto califica como una abstracción si y solo
si puede ser descrito, comprendido y analizado independientemente del mecanismo
que será usado para realizarlo.
Definición:
Una abstracción describe las características esenciales de un objeto que lo
distingue de otro tipo de objetos, y por lo tanto proporciona límites conceptuales,
con respecto a la perspectiva del observador.
En
el proceso de abstracción se ignoran los detalles no esenciales, tratando en su
lugar con el modelo ideal y centrándose en el estudio de sus aspectos
esenciales. Una abstracción se enfoca en la vista exterior de un objeto y por
lo tanto sirve para separar el comportamiento esencial del objeto de su
implantación. Esto da lugar a la división comportamiento / implantación
(barrera de la abstracción). Por el principio de menor infiltración, la interface
del objeto proporciona el comportamiento esencial del objeto y nada más. Por el
principio de la menor sorpresa, a través de la cual una abstracción captura el
comportamiento completo de un objeto; y que no ofrece sorpresas o efectos
laterales que vayan más allá del alcance de la abstracción.
1.1.4 Modularidad
Es el acto de
dividir un programa en componentes individuales. Puede reducir su complejidad
en algún grado. Aunque dividir un programa ayuda, una justificación más
poderosa para dividir un programa es que crea un número de límites bien
definidos y documentados en el programa. Estos límites, o interfaces, son
invaluables en la comprensión del programa. La modularización consiste en
dividir un programa en módulos los cuales pueden ser compilados separadamente,
pero tienen conexiones con otros módulos. Las conexiones entre módulos son las
suposiciones que los módulos hacen acerca de otros módulos. La mayoría de los
lenguajes que soportan módulos como un concepto separado también distinguen
entre la interfase de un módulo y su implantación ( por ejemplo en C++). Los
módulos sirven como contenedores físicos en los cuales declaramos las clases y
los objetos de nuestro diseño lógico.
1.1.5 Encapsulación
La abstracción
y la encapsulación son conceptos que se complementan: la abstracción se enfoca
en observar el comportamiento de un objeto, la encapsulación se enfoca en la
implantación que nace de ese comportamiento. La encapsulación se mejora a
través de la ocultación de la información, la cual consiste en ocultar todos
los secretos de un objeto que no contribuyen a sus características esenciales;
la estructura de un objeto se oculta, así como la implantación de sus métodos.
La encapsulación proporciona barreras explícitas entre abstracciones
diferentes. Por lo tanto una clase debe tener 2 partes: una interfase y una
implantación . La interfase de una clase captura sólo su vista externa. La
implantación de un clase comprende la representación de la abstracción así como
los mecanismos que realiza el comportamiento deseado. La encapsulación permite
incluir en una sola entidad ( el módulo u objeto ) la información ( los datos o
atributos ) y las operaciones ( los métodos o funciones ) que operan sobre esa
información.
Definición
de Encapsulación: es el proceso de dividir los elementos de una abstracción que
está formada por su estructura y su comportamiento; sirve para separar la
interfase de una abstracción y su implantación.
1.1.6 Herencia
La herencia es
el mecanismo para compartir automáticamente métodos y datos entre clases, en
esencia la herencia es una relación entre clases , en donde una clase comparte
como se mencionó la estructura o comportamiento definida en una clase o en
varias clases. La herencia supone una clase base y una jerarquía de clases que
contienen las clases derivadas de la clase base. Por ejemplo: supongamos la
clase Persona y las subclases Empleado y Doctor.
La
clase base es Persona y las clases Empleado y Doctor son clase derivadas ya que
Persona les hereda características comunes como nombre, edad, sexo, etc. Y
estas a su vez tienen características propias como título, ingresos, etc.
1.1.7 Polimorfismo
Una de las características
fundamentales de la OOP es el polimorfismo, que no es otra cosa que la
posibilidad de construir varios métodos con el mismo nombre, pero con relación
a la clase a la que pertenece cada uno, con comportamientos diferentes. Esto
conlleva la habilidad de enviar un mismo mensaje a objetos de clases
diferentes. Estos objetos recibirían el mismo mensaje global pero responderían
a él de formas diferentes; por ejemplo, un mensaje "+" a un objeto
ENTERO significaría suma, mientras que para un objeto STRING significaría
concatenación ("pegar" strings uno seguido al otro) Polimorfismo es
una característica que permite que objetos diferentes puedan responder de modo
diferente al mismo mensaje. En su expresión más simple, es el uso de un nombre
o símbolo para representar o significar más de una acción.
Y
nos da la posibilidad de construir varios métodos con el mismo nombre, pero con
relación a la clase a la que pertenece cada uno, con comportamientos
diferentes. Esto conlleva la habilidad de enviar un mismo mensaje a objetos de
clases diferentes. Estos objetos recibirían el mismo mensaje global pero responderían
a él de formas diferentes; por ejemplo, un mensaje "+" a un objeto
ENTERO significaría suma, mientras que para un objeto STRING significaría
concatenación ("pegar" strings uno seguido al otro) Formalmente el
polimorfismo puede definirse como: "el mecanismo que permite definir e
Invocar funciones idénticas en denominación e interfaz, pero con implementaron
diferente".
No hay comentarios:
Publicar un comentario