Mediante el Análisis realizado se puede decir que actualmente una de las áreas más candentes en la industria y en el ámbito académico es la orientación a objetos. La orientación a objetos promete mejoras de amplio alcance en la forma de diseño, desarrollo y mantenimiento del software ofreciendo una solución a largo plazo a los problemas y preocupaciones que han existido desde el comienzo en el desarrollo de software: la falta de portabilidad del código y reusabilidad, código que es difícil de modificar, ciclos de desarrollo largos y técnicas de codificación no intuitivas.
Un lenguaje orientado a objetos ataca estos problemas. Tiene tres características básicas: debe estar basado en objetos, basado en clases y capaz de tener herencia de clases. Muchos lenguajes cumplen uno o dos de estos puntos; muchos menos cumplen los tres. La barrera más difícil de sortear es usualmente la herencia.
El concepto de programación orientada a objetos (OOP) no es nuevo, lenguajes clásicos como SmallTalk se basan en ella. Dado que la OOP. Se basa en la idea natural de la existencia de un mundo lleno de objetos y que la resolución del problema se realiza en términos de objetos, un lenguaje se dice que está basado en objetos si soporta objetos como una característica fundamental del mismo. El elemento fundamental de la OOP es, como su nombre lo indica, el objeto. Podemos definir un objeto como un conjunto complejo de datos y programas que poseen estructura y forman parte de una organización.
Esta definición especifica varias propiedades importantes de los objetos. En primer lugar, un objeto no es un dato simple, sino que contiene en su interior cierto número de componentes bien estructurados. En segundo lugar, cada objeto no es un ente aislado, sino que forma parte de una organización jerárquica o de otro tipo.
Programación orientada a objetos (p.o.o.).
Un proyecto de software es complejo. Las gui, acceso transparente a datos y capacidad de trabajo En red, lo hacen más complejo aun. Para enfrentarse a esta complejidad nace la poo.
¿Que es la poo?.
Es una técnica o estilo de programación que utiliza objetos como bloque fundamental de Construcción.
Herencia
Es la propiedad que permite a los objetos construirse a partir de otros objetos.La clase base contiene todas las caracteristicas comunes.
Polimorfismo
Literalmente significa "cualidad de tener mas de una forma". En poo, se refiere al hecho que una misma operación puede tener diferente comportamiento en diferentes objetos.
Una de las características fundamentales de la OOP es el polimorfísmo, 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)
Distintos tipos de herencia.
Una de las características fundamentales de la OOP es el polimorfísmo, 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)
Distintos tipos de herencia.
A) Especialización.
Es la forma de herencia mas común y cumple en forma directa la regla es-un.
B) Especificación.
Se trata de un caso especial de sub-clasificaion por especializacion, excepto que las sub-clases no son refinamientos de un tipo existente, sino más bien realizaciones de una especificacion incompleta. Es decir, que la superclase describe un comportamiento que sera implantado solo por las sub-clases.
C) Construcción.
Se da cuando la sub-clase ha heredado casi completamente su comportamiento de la superclase y solo tiene que modificar algunos metodos o los argumentos de cierta manera.
D) Generalización.
Esta es la opuesta a la creacion de sub-clases por especializacion. Se debe evitar; solo deben aplicarse cuando no se pueden modificar las clases existentes o se deben anular metodos de las mismas.
E) Extensión.
Agrega una capacidad totalmente nueva a un objeto existente. Se distingue de la generalizacion, ya que esta debe anular al menos un metodo de la clase base, mientras que la extension solo agrega metodos nuevos.
F) Limitacion.
Es una variante de la especificacion en donde el comportamiento de la sub-clase es mas reducido o esta mas restringido que que el comportamiento de la superclase. Tambien se da en situaciones en las que las clases existentes no pueden modificarse.
G) Variación.
Se da cuando do o mas clases tienen implantaciones similares, pero no parece haber ninguna relacion jerarquica entre los conceptos representados por las clases. Ej: codigo del mouse y de la placa de video.
H) Combinación.
Se da cuando una sub-clase resulta de la combinacion de caracteristicas de dos o mas clases.
Estructura de un objeto
Un objeto puede considerarse como una especie de cápsula dividida en tres partes:1 - Relaciones2 - Propiedades3 - Métodos
Cada uno de estos componentes desempeña un papel totalmente independiente:
Las relaciones permiten que el objeto se inserte en la organización y están formadas esencialmente por punteros a otros objetos.Las propiedades distinguen un objeto determinado de los restantes que forman parte de la misma organización y tiene valores que dependen de la propiedad de que se trate. Las propiedades de un objeto pueden ser heredadas a sus descendientes en la organización.
Los métodos son las operaciones que pueden realizarse sobre el objeto, que normalmente estarán incorporados en forma de programas (código) que el objeto es capaz de ejecutar y que también pone a disposición de sus descendientes a través de la herencia.
Organización de los objetos
En principio, los objetos forman siempre una organización jerárquica, en el sentido de que ciertos objetos son superiores a otros de cierto modo.Existen varios tipos de jerarquías: serán simples cuando su estructura pueda ser representada por medio de un "árbol". En otros casos puede ser más compleja.
Notación de Elementos:
Análisis y diseño orientado a objetos (ADOO): Es un enfoque de la ingeniería de software que modela un sistema como un grupo de objetos que interactúan entre sí. Este enfoque representa un dominio en términos de conceptos compuestos por verbos y sustantivos, clasificados de acuerdo a su dependencia funcional.
En éste método de análisis y diseño se crea un conjunto de modelos utilizando una notación acordada como, por ejemplo, el lenguaje únificado de modelado (UML). ADOO aplica técnicas de modelado de objetos para analizar los requerimientos para un contexto - por ejemplo, un sistema de negocio, un conjunto de módulos de software - y para diseñar una solución para mejorar los procesos involucrados. No está restringido al diseño de programas de computadora, sino que cubre sistemas enteros de distinto tipo. Las metodologías de análisis y diseño más modernas son casos de uso guiados a través de requerimientos, diseño, implementación, pruebas, y despliegue.
El lenguaje unificado de modelado se ha vuelto el lenguaje de modelado estándar usado en análisis y diseño orientado a objetos.
El análisis orientado a objetos esta basado en un modelo de cinco capas:
1. Capa clase/objeto.
2. Capa de estructura.
3. Capa de atributos.
4. Capa de servicios
5. Capa de tema.
Capa Clase/Objeto. Esta capa indica las clase y objetos.
Capa de Estructura. Esta capa captura diversas estructuras de clase y objetos, tales como las relaciones uno a muchos y la herencia.
Capa de Atributos. Esta capa detalla los atributos de las clases.
Capa de Servicios. Esta capa indica los mensajes y comportamientos del objeto (servicios y métodos).
Capa de Tema. Esta capa divide el diseño en unidades de implementación o asignaciones de equipos.
ANÁLISIS Y CLASES DE OBJETOS.
Objeto: es una abstracción de algo en un dominio de un problema que refleja las capacidades de un sistema para llevar información acerca de ello, interactuar con ello a ambas cosas.
Es una representación en computadora de alguna cosa o evento del mundo real. Pueden tener tanto atributos y comportamientos.
Clase. Es una categoría de objetos similares. Los objetos se agrupan en clases. Una clase define el conjunto de atributos y comportamientos compartidos que se encuentran a cada objeto de la clase.
Clase y objeto. Un término que se refiere tanto a clase como a los objetos que ocurren en la clase.
Hay cinco tipos generales de objetos que pueden descubrirse durante el análisis. Los objetos a veces representan cosas tangibles como vehículos, dispositivos y libros. Algunas veces los objetos representan papeles actuados por personas u organizaciones. Los objetos también pueden ser derivados de incidentes o eventos. Otros objetos pueden indicar interacciones tales como una venta o un matrimonio. Las interacciones tienen una cualidad de transacción o contrato. Los objetos también pueden detallar especificaciones. Las especificaciones tienen estándares o una cualidad de definición y, por lo general, implican que otros objetos representaran ocurrencias de cosas tangibles.
Las clases son representadas por cuadros rectangulares redondeados (bubtángulos) divididos en tres partes. El nombre de la clase se muestra en la división superior del cuadro. Las otras dos divisiones se usan para las capas de atributo y servicio. Cuando una clase aparece sin objetos, puede ser solamente una clase base, debido a que la única razón para tal clase "sin objetos" es que sea un medio para agrupar atributos y servicios que serán heredados por varias otras clases.
Los objetos que tienen ocurrencia de una clase son representados por un cuadro sombreados rodeado por la clase. Debido a que los objetos tiene ocurrencias de una clase.
Criterios que podemos usar para que nos ayuden a determinar si se justifica una nueva clase de objetos:
Hay una necesidad de recordar el objeto. Esto es, el objeto puede ser descrito en un sentido definido y sus atributos son relevantes para el problema.
Hay una necesidad de determinados comportamientos del objeto. Esto es, aunque un objeto no tenga atributos, hay servicios que debe proporcionar o estados de objeto que deben ser llamados.
Usualmente un objeto tendrá varios atributos. Los objetos que tienen solamente uno o dos atributos sugieren diseños sobreanalizados.
Usualmente una clase tendrá mas de una instancia de objeto, a menos de que sea una clase base.
Usualmente los atributos tendrán siempre un valor significativo para cada objeto de la clase. Los objetos que producen valor NULO para un atributo, o para los que no es aplicable un atributo, por lo general implican una estructura generalización-especificación. o.
COMO PASAR DEL ANALISIS AL DISEÑO
El análisis es el proceso de determinar qué se necesita hacer, antes de decidir cómo debe hacerse. El diseño escoge un cómo especifico para aplicarlo al qué.
Una vez que se ha analizado el problema, es preciso decidir la forma de aproximarse al diseño. El diseño del sistema es la estrategia de alto nivel para resolver el problema y construir una solución. Este incluye decisiones acerca de la organización del sistema en subsistemas, la asignación de subsistemas a componentes hardware y software, y decisiones fundamentales conceptuales y de política que son las que constituyen un marco de trabajo para el diseño detallado.
Durante el análisis, lo fundamental es lo que necesita hacerse, independientemente de la forma de hacerlo. Durante el diseño, se toman decisiones acerca de la forma en que se resolverá el problema, primero desde un nivel un nivel elevado y después empleando niveles cada vez más detallados.
El diseño de sistemas es la primera fase de diseño en la cual se selecciona la aproximación básica para resolver el problema. Durante el diseño del sistema, se decide la estructura y el estilo global. La arquitectura del sistema es la organización global del mismo en componentes llamados subsistemas. La arquitectura proporciona el contexto en el cual se toman decisiones más detalladas en una fase posterior del diseño. Al tomar decisiones de alto nivel que se apliquen a todo el sistema, el diseñador desglosa el problema en subsistemas, de tal manera que sea posible realizar más trabajo por parte de varios diseñadores que trabajaran independientemente en distintos subsistemas.
El diseñador de sistemas debe tomar decisiones siguientes:
Organizar el sistema en subsistemas.
Identificar la concurrencia inherente al problema.
Asignar los subsistemas a los procesadores y tareas.
Seleccionar una aproximación para la administración de almacenes de datos.
Manejar el acceso a recursos globales.
Seleccionar la implementación de control en software.
Manejar las condiciones de contorno.
Establecer la compensación de prioridades.
Organizar el sistema en subsistemas.
Identificar la concurrencia inherente al problema.
Asignar los subsistemas a los procesadores y tareas.
Seleccionar una aproximación para la administración de almacenes de datos.
Manejar el acceso a recursos globales.
Seleccionar la implementación de control en software.
Manejar las condiciones de contorno.
Establecer la compensación de prioridades.
Con frecuencia, la arquitectura global de un sistema se puede se puede seleccionar basándose en su similitud con otros sistemas anteriores. Alguna clase de arquitectura de sistemas son útiles para resolver una amplia gama de problemas. Aunque no todos los problemas se pueden resolver empleando una de estas arquitecturas. Otras muchas arquitecturas se pueden construir combinando estas formas.
DISEÑO ORIENTADO A OBJETOS
En vez de desarrollar el diseño de un sistema software por medio de una descomposición funcional descendiente, se ha mencionado que la mejor metodología es el diseño orientado al objeto. En este diseño los componentes del software se ven mas como objetos que como funciones. Cada objeto tiene una conjunto asociado de operaciones permitidas, y los objetos se comunican mediante el paso de mensajes que, por lo general, incluyen una instrucción para activar una instrucción para activar una función determinada.
El diseño orientado a objetos se basa en la idea de utilizar ocultamiento de información como principal criterio de descomposición y en la noción de los tipos de datos abstractos. Esta metodología ha sido adoptada de manera entusiasta de algunos desarrolladores y educadores. Abbot ha llegado a decir que "los programas bien escritos en ada suelen ser orientados al objeto", no esta bien escrito. Tales generalizaciones sin comprobar no son de ayuda, y es poco probable que haya alguna metodología de diseño que sea superior a todas las circunstancias. Para situar estos comentarios en perspectiva, se han construido muchos sistemas grandes utilizando el diseño ascendente.
Consideraciones del Análisis Orientado a Objetos.
Beneficios que se obtienen del desarrollo con OOP.
Día a día los costos del Hardware decrecen. Así surgen nuevas áreas de aplicación cotidianamente: procesamiento de imágenes y sonido, bases de datos multimediales, automatización de oficinas, ambientes de ingeniería de software, etc. Aún en las aplicaciones tradicionales encontramos que definir interfaces hombre-máquina "a-la-Windows" suele ser bastante conveniente.Lamentablemente, los costos de producción de software siguen aumentando; el mantenimiento y la modificación de sistemas complejos suele ser una tarea trabajosa; cada aplicación, (aunque tenga aspectos similares a otra) suele encararse como un proyecto nuevo, etc.
Día a día los costos del Hardware decrecen. Así surgen nuevas áreas de aplicación cotidianamente: procesamiento de imágenes y sonido, bases de datos multimediales, automatización de oficinas, ambientes de ingeniería de software, etc. Aún en las aplicaciones tradicionales encontramos que definir interfaces hombre-máquina "a-la-Windows" suele ser bastante conveniente.Lamentablemente, los costos de producción de software siguen aumentando; el mantenimiento y la modificación de sistemas complejos suele ser una tarea trabajosa; cada aplicación, (aunque tenga aspectos similares a otra) suele encararse como un proyecto nuevo, etc.
El objetivo del análisis orientado a objetos es desarrollar una serie de modelos que describan al SW de computadoras al trabajar para satisfacer un conjunto de requisitos definidos por el cliente. El modelo de análisis ilustra información, funcionamiento y comportamiento dentro del contexto de los elementos del modelo de objetos.
Para cumplir con el propósito del análisis orientado a objetos se debe hacer lo siguiente:
Los requisitos básicos del usuario deben comunicarse entre el cliente y el ingeniero del SW.
Identificación de las clases (definir atributos y operaciones).
Especificación de una jerarquía de clases.
Representación de las relaciones de objeto a objeto (conexiones).
Modelación del comportamiento del objeto.
Repetir iterativamente las tareas anteriores hasta terminar el modelo.