Buscar este blog

jueves, 18 de febrero de 2016

1.2 lenguaje de modelado unificado: diagrama de clases.

1.2.1¿Qué es el UML?

            UML (Unified Modeling Language) es un lenguaje que permite modelar, construir y documentar los elementos que forman un sistema software orientado a objetos. ¿Qué quiere decir esto exactamente. Muy sencillo: Para realizar un proyecto debemos antes realizar un esquema del mismo. El UML nos permite mediante diagramas, plasmar de una forma detallada e inteligible la solución al problema planteado. Pero no solo eso, tenemos que organizar el proceso de diseño de tal forma que los analista, clientes, desarrolladores y otras personas involucradas en el desarrollo del sistema lo comprendan y convengan con él. El UML proporciona esta organización.

1.2.2 Diagramas del UML

            El UML está compuesto por diversos elementos gráficos que se combinan para conformar diagramas. También existen unas reglas que combinan esto elementos pero de momento, vamos a ver los diagramas. Los diagramas tienen como objetivo presentar diversas perspectivas de un sistema. A esto se le llama Modelo. El modelo UML de un sistema es similar a un modelo a escala de un edificio junto con la interpretación del artista del edificio. Tenemos que tener en cuenta que un modelo UML describe lo que supuestamente hará un sistema, pero no dice como implementar dicho sistema.

1.2.3 Diagrama de clases

            Pensar en las cosas que tenemos a nuestro alrededor. La mayoría de los que nos rodea tienen atributos o propiedades y seguramente realizaran unas determinadas acciones que podemos agrupar como conjunto de tareas.
Hasta aquí todo correcto ¿no?. Pues avancemos un poquito más recordando algunos conceptos de la programación orientada a objetos.
 Estas cosas que tenemos a nuestro alrededor se distribuyen en categorías (coches, lavadoras, muebles…). Y a estas categorías las llamamos clases. Una clase es una categoría o grupo de cosas que tienen atributos y acciones similares. Por ejemplo: cualquier cosa dentro de la clase “lavadoras” tiene atributos como, la marca, el modelo, el número de serie y la capacidad. También podemos observar que entre las acciones de esta clase se encuentra: “agregar ropa”, “agregar detergente”, “activarse” y “sacar ropa”.
 El área superior contiene el nombre, en el área central ponemos los atributos y en el área inferior las acciones u operaciones. Un diagrama de clases está formado por varios rectángulos de este tipo conectados por líneas que muestran la manera en que las clases se relacionan entre sí.

Es más sencillo desarrollar aplicaciones cuando el software representa clases de Justo Fuentes 4 Programador de Aplicaciones Orientadas a Objetos cosas reales. Los diagramas de clases facilitan las representaciones a partir de las cuales los desarrolladores podrán trabajar. Además también permiten al analista hablarles a los clientes en su propia terminología.
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".