Fundamentos del enfoque Orientación
a Objetos
La
orientación a objetos puede describirse como el conjunto de disciplinas que
desarrollan y modelizan software que facilitan la construcción de sistemas
complejos a partir de componentes.
El
atractivo intuitivo de la orientación a objetos es que proporciona conceptos y
herramientas con las cuales se modela y representa el mundo real tan fielmente
como sea posible. Estos conceptos y herramientas orientados a objetos son
tecnologías que permiten que los problemas del mundo real sean expresados de
modo fácil y natural.
Las
técnicas orientadas a objetos proporcionan mejoras y metodologías para
construir sistemas de software complejos a partir de unidades de software
modularizado y reutilizable. Se necesita un nuevo enfoque para construir
software en la actualidad. Este nuevo enfoque debe ser capaz de manipular tanto
sistemas grandes como pequeños y debe crear sistemas fiables que sean
flexibles, mantenibles y capaces de evolucionar para cumplir las necesidades
del cambio.
La
orientación a objetos trata de cubrir las necesidades de los usuarios finales,
así como las propias de los desarrolladores de productos software. Estas tareas
se realizan mediante la modelización del mundo real. El soporte fundamental es
el modelo objeto.
Un
objeto es la instancia de una clase. Una clase es la representación abstracta
de un concepto en el mundo real, y proporciona la base a partir de la cual
creamos instancias de objetos específicos. Como ejemplo, puede crear una clase
que defina a un cliente. Después puede crear una nueva instancia de la clase
cliente para tener un objeto utilizable de Cliente. Para poder crear un objeto
de la clase cliente, debe crear una nueva instancia basada en esa clase.
Por
ejemplo:
Private
Objeto Customer? as Clase Customer?
Objeto
Customer = New Clase Customer()
Cada
objeto es un elemento único de la clase en la que se basa. Si una clase es como
un molde, entonces un objeto es lo que se crea a partir del molde. La clase es
la definición de un elemento; el objeto es el elemento. El molde para una
figura de cerámica en particular, es como una clase; la figura es el objeto.
Todos
los objetos están compuestos de tres cosas:
Interfaz
La
Interfaz es el conjunto de métodos, propiedades, eventos y atributos que se
declaran como públicos en su alcance y que pueden invocar los programas
escritos para usar nuestro objeto.
Implementación
Al
código dentro de los métodos se le llama Implementación. Algunas veces también
se le llama comportamiento, ya que este código es el que efectivamente logra
que el objeto haga un trabajo útil. Es importante entender que las aplicaciones
del cliente pueden utilizar nuestro objeto aunque cambiemos la implementación,
siempre que no cambiemos la interfaz. Siempre que se mantengan sin cambio
nuestro nombre de método, su lista de parámetro y el tipo de datos de
devolución, podremos cambiar la implementación totalmente.
Estado
El
estado o los datos de un objeto es lo que lo hace diferente de otros objetos de
la misma clase. El estado se describe a través de las variables del Miembro o
de la Instancia. Las variables del miembro son aquellas declaradas, de tal
manera que están disponibles para todo el código dentro de la clase. Por lo
general, las variables del miembro son Privadas en su alcance. Algunas veces, se
les conoce como variables de la instancia o como atributos. Observe que las
propiedades no son variables del Miembro, ya que son un tipo de método que
funciona para recuperar y establecer valores.
La notación que se usa
para los distintos modelos, tal y como se ha dicho anteriormente, es la
proporcionada por UML, que se ha convertido en el estándar de facto en cuanto a
notación orientada a objetos. El uso de UML permite integrar con mayor
facilidad en el equipo de desarrollo a nuevos miembros y compartir con otros
equipos la documentación, pues es de esperar que cualquier desarrollador
versado en orientación a objetos conozca y use UML (o se esté planteando su
uso).Se va a abarcar todo el ciclo de vida, empezando por los requisitos y
acabando en el sistema funcionando, proporcionando así una visión completa y
coherente de la producción de sistemas software. El enfoque que toma es el de
un ciclo de vida iterativo incremental, el cual permite una gran flexibilidad a
la hora de adaptarlo a un proyecto y a
un equipo de desarrollo específicos. El ciclo de vida está dirigido por casos
de uso, es decir, por la funcionalidad que ofrece el sistema a los futuros
usuarios del mismo. Así no se pierde de vista la motivación principal que
debería estar en cualquier proceso de construcción de software: el resolver una
necesidad del usuario/cliente
Caracteristicas.
Hay un cierto desacuerdo sobre exactamente qué características de un método de programación o lenguaje le definen como “orientado a objetos”, pero hay un consenso general en que las características siguientes son las más importantes (para más información, seguir los enlaces respectivos):
Abstracción: Cada objeto en el sistema sirve como modelo de un “agente” abstracto que puede realizar trabajo, informar y cambiar su estado, y “comunicarse” con otros objetos en el sistema sin revelar cómo se implementan estas características. Los procesos, las funciones o los métodos pueden también ser abstraídos y cuando lo están, una variedad de técnicas son requeridas para ampliar una abstracción.
Encapsulamiento: Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente.
Principio de ocultación: Cada objeto está aislado del exterior, es un módulo natural, y cada tipo de objeto expone una interfaz a otros objetos que especifica cómo pueden interactuar con los objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su modificación por quien no tenga derecho a acceder a ellas, solamente los propios métodos internos del objeto pueden acceder a su estado. Esto asegura que otros objetos no pueden cambiar el estado interno de un objeto de maneras inesperadas, eliminando efectos secundarios e interacciones inesperadas. Algunos lenguajes relajan esto, permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstracción. La aplicación entera se reduce a un agregado o rompecabezas de objetos.
Polimorfismo: comportamientos diferentes, asociados a objetos distintos, pueden compartir el mismo nombre, al llamarlos por ese nombre se utilizará el comportamiento correspondiente al objeto que se esté usando. O dicho de otro modo, las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos, y la invocación de un comportamiento en una referencia producirá el comportamiento correcto para el tipo real del objeto referenciado. Cuando esto ocurre en “tiempo de ejecución”, esta última característica se llama asignación tardía o asignación dinámica. Algunos lenguajes proporcionan medios más estáticos (en “tiempo de compilación”) de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++.
Herencia: las clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía de clasificación. Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes. Estos pueden compartir (y extender) su comportamiento sin tener que reimplementar su comportamiento. Esto suele hacerse habitualmente agrupando los objetos en clases y estas en árboles o enrejados que reflejan un comportamiento común. Cuando un objeto hereda de más de una clase se dice que hay herencia múltiple; esta característica no está soportada por algunos lenguajes (como Java).
Desarrollo de componentes
Proceso de Desarrollo
Cuando se va a construir un sistema software es necesario
conocer un lenguaje de programación, pero con eso no basta. Si se quiere que el
sistema sea robusto y mantenible es
necesario que el problema sea analizado y la solución sea cuidadosamente
diseñada. Se debe seguir un proceso robusto, que incluya las actividades
principales. Si se sigue un proceso de desarrollo que se ocupa de plantear cómo
se realiza el análisis y el diseño, y cómo se relacionan los productos de ambos,
entonces la construcción de sistemas software va a poder ser planificable y
repetible, y la probabilidad de obtener un sistema de mejor calidad al final
del proceso aumenta considerablemente, especialmente cuando se trata de un
equipo de desarrollo formado por varias personas.
Para este curso se va a seguir el método de desarrollo
orientado a objetos que propone Craig Larman [Larman99]. Este proceso no fija
una metodología estricta, sino que define una serie de actividades que pueden
realizarse en cada fase, las cuales deben adaptarse según las condiciones del
proyecto que se esté llevando a cabo. Se ha escogido seguir este proceso debido
a que aplica los últimos avances en Ingeniería del Software, y a que adopta un
enfoque eminentemente práctico, aportando soluciones a las principales dudas
y/o problemas con los que se enfrenta el desarrollador. Su mayor aportación
consiste en atar los cabos sueltos que anteriores métodos dejan.
Tipos de componentes.
Componentes
Los componentes pertenecen al mundo físico, es decir,
representan un bloque de construcción al modelar aspectos físicos de un
sistema.Una característica básica de un componente es que:“debe definir una
abstracción precisa con una interfaz bien definida, y permitiendoreemplazar
fácilmente los componentes másviejos con otros más nuevos y compatibles.”
En UML todos los elementos físicos se modelan como
componentes. UML proporciona una representación gráfica.
Cada componente debe tener un nombre que lo distinga de
los demás. Al igual que las clases los componentes pueden enriquecerse con
compartimentos adicionales que muestran sus detalles, Modelado Físico De Un
Sistema OODesarrollo Orientado a Objetos con UML Xavier Ferré Grau, María
Isabel Sánchez Segura
Vamos a ver con más detalle cuáles son los parecidos y
las diferencias entre los componentes y las clases.
PARECIDOS
Ambos tienen nombre
Ambos pueden realizar un conjunto de interfaces.
Pueden participar en relaciones de dependencia,
generalización y
Asociación.
Ambos pueden anidarse
Ambos pueden tener instancias
Ambos pueden participar en interacciones
DIFERENCIAS
Las Clases Los Componentes
Representan abstracciones lógicas Representan elementos
físicos
Es decir los componentes pueden estar en nodos y las
clases no
Pueden tener atributos y operaciones directamente
accesibles.
Sólo tienen operaciones y estas son alcanzables a través
de la interfaz del componente.
No hay comentarios:
Publicar un comentario