lunes, 11 de febrero de 2013

Abstraccion


La abstracción es el proceso en el cual separamos las propiedades más importantes de un objeto, de las que no lo son. Es decir, por medio de la abstracción definimos las características esenciales de un objeto del mundo real, los atributos y comportamientos que lo definen como tal, para después modelarlo en un objeto de software.

En el proceso de abstracción no debemos preocuparnos por la implementación de cada método o atributo, solamente debemos definirlo de forma general. Visualizar las entidades que deseamos trasladar a nuestros programas, en términos abstractos, resulta de gran utilidad para un diseño optimo de nuestro software, ya que nos permite comprender más fácilmente la programación requerida.

En la tecnología orientada a objetos la herramienta principal para soportar la abstracción es la clase. Podemos definir a una clase como una descripción genérica de un grupo de objetos que comparten características comunes, dichas características se especificadas en sus atributos y comportamientos. En otras palabras, una clase es un molde o modelo en donde se especifican las características que definen a un objeto de manera general, a partir de una clase podemos definir objetos particulares. En programación orientada a objetos se dice que un objeto es una instancia de la clase, es decir un objeto, es un caso particular del conjunto de objetos que comparten características similares, definidas en la clase.

Hay que tener cuidado de no confundir un objeto con una clase, una gelatina de fresa y una gelatina de limón son objetos de la misma clase (o del mismo molde), pero con atributos (o sabores) diferentes.

Ejemplo de abstracción

Cuando vamos a aplicar la POO, lo primero que debemos hacer es cumplir con una vieja máxima de guerra:Divide y Vencerás. Es decir, lo que hacemos es seccionar nuestro código en grupos de código más pequeño que, al unirlos, hacen el trabajo. Un buen ejemplo de abstracción es el cuerpo humano, aunque el cuerpo es una unidad, está dividido en lo que conocemos por sistemas (el sistema respiratorio, el sistema linfático, cardiovascular, etc., etc.). Estos sistemas, a su vez están compuestos por otros más pequeños: los órganos, y así sucesivamente. La abstracción nos permite dividir nuestro programa en distintos objetos que se agrupan para formar cosas más complejas.






UML diseño de agregación y composición

 El diseño de agregación es la forma de representar que un objeto tiene como contenido a otro, en un sentido abstracto de posesión, por ejemplo un objeto de tipo ciudad tiene una lista de objetos de tipo aeropuerto  esto quiere decir, que una ciudad tiene un número de aeropuertos, cabe destacar, que el rombo esta vacío, ahí va un ejemplo:
DIAGRAMA DE AGREGACIÓN


En la misma linea, la composición es una relación más fuerte de los objetos, así como la agregación, es el hecho de que un objeto posea a otro, la composición es cuando la relación entre ambos objetos es tal, que el agregado es una parte importante del agregador, de tal forma que el primero no tiene sentido suelto, y el segundo, necesita definir al primero para ampliar su significado, en este caso el rombo va lleno, con un ejemplo se ve mejor:
DIAGRAMA DE COMPOSICIÓN


DEPENDENCIA Y ASOCIACION


DEPENDENCIA

DEFINICIÓN


Es la relación menos importante, debido a que simplemente refleja que la implementacion de una clase depende de otra. Y si esta ultima se altera, la anterior se puede ver afectada.

Una dependencia puede indicar la utilización de un objeto de una clase como argumento de una operación de otra o en su implementacion.


REPRESENTACIÓN UML



Se representa con una flecha discontinua que parte desde una clase y apunta a otra. El sentido de la flecha nos indica quien usa a quien.

Del diagrama anterior podemos observar que:
  • La ClaseA usa a la ClaseB.
  • La ClaseA depende de la ClaseB.
  • Dada la dependencia, todo cambio en la ClaseB podrá afectar a la ClaseA.
  • La ClaseA conoce la existencia de la ClaseB pero la ClaseB desconoce que existe la ClaseA.

ASOCIACIÓN

DEFINICIÓN

Generalmente se le conoce a la asociación como una relación estructural que describe una conexión entre objetos.

NOTACIÓN DE LAS ASOCIACIONES EN UML


Una asociación se representa como una línea entre clases, la asociación es inherentemente bidireccional, lo que significa que desde las instancias de 
cualquiera de las dos clases, es posible el recorrido lógico hacia la  otra.



GUÍAS PARA LA ASOCIACIONES
  • Es conveniente centrarse en aquellas asociaciones para las que se necesita conservar el conocimiento de la relación durante algún tiempo (asociaciones "necesito-conocer").
  • Es mas importante identificar clases conceptuales que identificar asociaciones.
  • Demasiadas asociaciones tienden a confundir un modelo del dominio en lugar de aclararlo. Su descubrimiento puede llevar tiempo, con beneficio marginal.
  • Se debe evitar mostrar asociaciones redundantes o derivadas.
NAVEGACIÓN DE LAS ASOCIACIONES

Aunque las asociaciones suelen ser bidireccionales (se pueden recorrer en ambos sentidos), en ocasiones es deseable hacerlas unidireccionales (restringir su navegación en un único sentido).

Muchas líneas en un diagrama añadirán "ruido visual" y lo hará menos 
comprensible. Por tanto, se debe ser cuidadoso al añadir líneas de asociación. Se recomienda utilizar como criterio las guías que se sugieren en esta sección.

MULTIPLICIDAD DE LAS ASOCIACIONES

La multiplicidad de una asociación determina cuantos objetos de cada tipo intervienen en la asociación.
  • Cada asociación tiene dos multiplicidades (una para cada extremo de la asociación).
  • Para especificar la multiplicidad de un a asociación hay que indicar la multiplicidad mínima y la multiplicidad máxima(mínima..máxima).
         Multiplicidad                     Significado
                  1                               Uno y solo uno
                0..1                               Cero o uno
               N..M                            Desde N hasta M
                  *                                       Varios
                0..*                                Cero o varios
                1..*                                 Uno o varios
  • Cuando la  multiplicidad mínima es cero, la relación es opcional. 
  • Una multiplicidad mínima mayor o igual que 1 establece una relación obligatoria.







domingo, 10 de febrero de 2013

HERENCIA - POO


La herencia es específica de la programación orientada a objetos, donde una clase nueva se crea a partir de una clase existente. La herencia (a la que habitualmente se denomina subclases) proviene del hecho de que la subclase (la nueva clase creada) contiene las atributos y métodos de la clase primaria. La principal ventaja de la herencia es la capacidad para definir atributos y métodos nuevos para la subclase, que luego se aplican a los atributos y métodos heredados. 
Esta particularidad permite crear una estructura jerárquica de clases cada vez más especializada. La gran ventaja es que uno ya no debe comenzar desde cero cuando desea especializar una clase existente. 

La relación primaria-secundaria entre clases puede representarse desde un punto de vista jerárquico, denominado vista de clases en árbol. La vista en árbol comienza con una clase general llamada superclase (a la que algunas veces se hace referencia como clase primariaclase padreclase principal, o clase madre; existen muchas metáforas genealógicas). Las clases derivadas (clase secundaria osubclase) se vuelven cada vez más especializadas a medida que van descendiendo el árbol.






HERENCIA MÚLTIPLE

Algunos lenguajes orientados a objetos, como C++ permiten herencias múltiples, lo que significa que una clase puede heredar los atributos de otras dos superclases. Este método puede utilizarse para agrupar atributos y métodos desde varias clases dentro de una sola.