Buscar este blog

jueves, 18 de febrero de 2016

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