OO POO

Orientación a Objeto

poo.jpg

Es una metodología para desarrollar sistemas mediante clases y objetos.
Son conceptos, herramientas, métodos para resolver un problema de un campo en particular identificando identidades principales, basándose en análisis y diseño del problema.
Programación orientada a objeto
Es un paradigma de programación que usa objetos y sus interacciones, para diseñar aplicaciones y programas informáticos. Está basado en varias técnicas, incluyendo herencia, abstracción, polimorfismo y encapsulamiento.
Qué relación existe entre OO y POO
La orientación es una forma de ver las cosas o es una forma de entender un problema identificando sus entidades principales que se encuentran en él y la programación orientada a objeto es la forma en cómo desarrollamos un sistema pensando en las entidades principales del problema que dicho sistema pretende resolver.C:\Documents
La relación que existe entre OO y POO es que ambos buscan resolver un problema basándose en las entidades principales del campo o ámbito involucradas realizando, análisis y diseños del mimo. La POO se fundamenta en la OO.
Glosario de la orientación a objetos
ORIENTACIÓN A OBJETOS CONCEPTOS, TERMINOLOGÍA LENGUAJES (PARTE 1), Versión 2.0, Miguel Ángel Abián
Análisis: Proceso que genera el modelo conceptual de un dominio de interés. Cuando se desea construir un sistema (sea de software o no) para un dominio, el análisis también “captura” los requisitos que el sistema debe cumplir.

Sorry, no match for the embedded content.

Clase (de objetos): En un modelo de dominio, define un conjunto de propiedades compartido por un determinado grupo de entidades (cosas materiales, conceptos, ideas, sucesos); es una abstracción de los objetos similares de un dominio. Por ejemplo, una clase Compra representa el conjunto de las transacciones comerciales que son compras, y tiene propiedades o atributos como fecha y hora.
En la programación orientada a objetos (POO), una clase es un fragmento de código que describe los atributos y operaciones de los objetos (instancias) que pueden generarse a partir de ella. Por ejemplo, en una clase Cliente, los atributos podrían ser nombre y dirección, y las operaciones podrían ser añadir(), borrar() y actualizar(). Las clases puede entenderse como plantillas para “fabricar” objetos.
Diseño: Proceso que usa los resultados del análisis para generar una especificación de la implementación de un sistema o producto. Los diseños suelen usar dibujos, iconos, modelos o planos. A menudo, la palabra diseño se utiliza también para referirse a la descripción lógica del funcionamiento del sistema o producto.
Dominio: Parte del mundo real bajo estudio. Cuando consideramos sistemas de software, el dominio es el campo o ámbito para el cual se construye el sistema. Por ejemplo, una aplicación de contabilidad cae dentro del dominio financiero.
Ingeniería del software: Disciplina cuyo propósito es la producción de software libre de fallos, dentro del plazo previsto, cumpliendo el presupuesto inicial, y que satisfaga las necesidades del usuario o cliente.
Ingeniero/a de software: Persona que aplica las técnicas de la ingeniería del software y que a menudo tiene que afrontar con tranquilidad de espíritu, mirada resignada y autocontrol Zen las reducciones de los plazos de entrega, los recortes en el presupuesto original y las modificaciones sustanciales y sin previo aviso de los requisitos iniciales.
Instancia: Materialización de un objeto durante el tiempo de ejecución de un programa. En términos computacionales, una instancia corresponde directamente a un bloque contiguo de memoria, que comienza en una dirección de memoria y ocupa cierto espacio. Las instancias de una misma clase se diferencian entre sí porque cada una tiene su propio bloque de memoria. Por lo general, los términos instancia (de una clase) y objeto se usan indistintamente.
Mensaje: Estímulo enviado a un objeto con un nombre y unos argumentos adecuados, que provoca que el objeto comience cierto comportamiento al activarse la operación asociada al mensaje. Los mensajes modifican el estado del objeto o devuelven información sobre su estado. Por ejemplo, un mensaje devolverAltura enviado a un objeto Persona devuelve la altura del objeto.
Metodología: Colección de técnicas repetibles para resolver una familia de problemas. Por ejemplo, un libro de bricolaje contiene una metodología para hacer, en la propia vivienda, obras de carpintería, fontanería y electricidad. En software, el análisis y el diseño suelen realizarse siguiendo una determinada metodología. Tradicionalmente, en francés, inglés y español siempre había existido la diferencia entre metodología (“conjunto de métodos que se siguen en una investigación científica o en una exposición doctrinal”) y paradigma (“modelo, patrón”). Actualmente, en informática se ha perdido esa diferencia: los ingenieros de software usan “paradigma” y “metodología” en el sentido de “colección de técnicas para resolver problemas”. En este trabajo mantendré la diferencia entre ambos términos.
Metodología de desarrollo de sistemas: Metodología para producir sistemas de forma organizada, empleando una colección predefinida de técnicas y convenciones de notación. En el caso de los sistemas de software se usan metodologías de desarrollo de software (también llamadas metodologías de ingeniería del software).
Modelo: Esquema teórico de un sistema o de una realidad compleja, que se elabora para facilitar su comprensión y el estudio de su comportamiento. Un modelo suele representarse mediante diagramas más los textos, notaciones o aclaraciones necesarias para entenderlos. Por ejemplo, en arquitectura, el plano de un edificio es un modelo.
Modelo de dominio o conceptual: Representación de los conceptos presentes en un dominio de interés. Por ejemplo, en un dominio empresarial, el modelo de dominio incluye conceptos como “compra”, “venta”, “gestión de almacenes”, etc., así como las relaciones entre ellos. El modelo de dominio suele incluir aclaraciones y explicaciones sobre los conceptos. En ocasiones comprende un glosario.
Modelo de software: Representación de un componente de software (una clase o un módulo, por ejemplo) o un sistema de software. Los modelos de software suelen representarse en UML.
Objeto: En un modelo de dominio, abstracción de alguna entidad presente en el dominio de interés. Por ejemplo, el objeto compra101, con atributos o propiedades fecha=15/01/2006 y hora=12:30, corresponde a la abstracción de una operación de compra realizada en esa fecha y hora. Los objetos y las clases se hallan muy relacionados: una clase abstrae el conjunto de propiedades que comparte un grupo de cosas tangibles, conceptos, ideas o sucesos. Preguntarse qué viene antes, si el objeto o la clase, es similar a preguntarse qué fue antes, si el huevo o la gallina. En la POO, estructura de datos encapsulada con un conjunto de operaciones que operan sobre los datos. Todo objeto tiene identidad propia, comportamiento (conjunto de operaciones) y estado (definido por los valores de sus atributos o propiedades y por sus relaciones con otros objetos). Para activar una operación de un objeto, basta enviarle un mensaje.
Operación: Descripción de la habilidad de un objeto para responder a un mensaje, así como de los requisitos de éste. La implementación de una operación para una clase (es decir, el código que define la acción asociada al mensaje) se denomina método o función. Las operaciones válidas para un objeto se definen en la clase de la que procede.
Orientación a objetos (OO): Metodología para desarrollar sistemas mediante clases y objetos. En el campo del software, la OO es una metodología de ingeniería del software que se basa en estos fundamentos: abstracción (clases), encapsulación (clases), modularidad (clases) y jerarquía (herencia y polimorfismo).
Paradigma: Estrategia o punto de vista para realizar tareas o resolver problemas. Marco conceptual.
Programación orientada a objetos (POO): Metodología de programación basada en objetos y en el envío de mensajes entre éstos. Los fundamentos de la POO son los de la OO.
Relación o asociación: Abstracción de un conjunto de interrelaciones semánticas concretas que se dan sistemáticamente entre distintos tipos de objetos. Por ejemplo, si se abstrae el hecho de que todos los automóviles tienen ruedas, se obtiene una relación lleva entre lasclases Automóvil y Rueda. Las relaciones o asociaciones describen un conjunto de posibles interrelaciones, del mismo modo que las clases describen un conjunto de posibles objetos.
Requisito: Descripción de lo que debe hacer un sistema o producto (requisito funcional) o de cómo debe implementarse (requisito no funcional o técnico). Verbigracia, en un sistema de software empresarial, un requisito podría ser éste: “Las compras que excedan los 1.000 € se guardarán en la base de datos de mejores clientes”.
Sistema: Grupo de elementos, componentes o dispositivos que se integran para conseguir ciertos propósitos o funciones. Por ejemplo, un sistema informático se compone de hardware y software.
UML: Lenguaje gráfico que se usa principalmente para visualizar, especificar, construir y documentar componentes de software (una clase de Java, por ejemplo) y sistemas de software (una aplicación de gestión empresarial, p. ej.). Aunque UML se ha convertido en el lenguaje estándar para los modelos de software OO, es un lenguaje de modelado de propósito general: puede usarse para modelar sistemas que no son de OO ni de software (por ejemplo, empresas).
Características de la POO
http://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos#Conceptos_fundamentales
Existe un acuerdo acerca de qué características contempla la "orientación a objetos", las características siguientes son las más importantes:
• Abstracción: denota las características esenciales de un objeto, donde se capturan sus comportamientos.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.El proceso de abstracción permite seleccionar las características relevantes dentro de un conjunto e identificar comportamientos comunes para definir nuevos tipos de entidades en el mundo real. La abstracción es clave en el proceso de análisis y diseño orientado a objetos, ya que mediante ella podemos llegar a armar un conjunto de clases que permitan modelar la realidad o el problema que se quiere atacar.
• 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 volver a implementarlo. 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.

• Recolección de basura: la recolección de basura o garbage collector es la técnica por la cual el entorno de objetos se encarga de destruir automáticamente, y por tanto desvincular la memoria asociada, los objetos que hayan quedado sin ninguna referencia a ellos. Esto significa que el programador no debe preocuparse por la asignación o liberación de memoria, ya que el entorno la asignará al crear un nuevo objeto y la liberará cuando nadie lo esté usando. En la mayoría de los lenguajes híbridos que se extendieron para soportar el Paradigma de Programación Orientada a Objetos como C++ u Object Pascal, esta característica no existe y la memoria debe desasignarse manualmente.