miércoles, 27 de noviembre de 2013

Fuentes

http://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos#Caracter.C3.ADsticas_de_la_POO

http://users.dcc.uchile.cl/~psalinas/uml/img/modelo/ejemplo.jpg

http://case-tools.org/uml.html

Ejemplo


Diseño y planificacion UML


  • Un Diagrama de Estructura Estática (conocido más popularmente como Diagrama de Clases) muestra la estructura estática del modelo del sistema, es decir, todo aquello que “exista” en el sistema,mostrando su estructura interna así como sus relaciones entre los diferentes elementos. 
  • En un diagrama de clases, los elementos que nos vamos a encontrar son: las clases y las relaciones entre clases. 
  • Clase: Nombre + Atributos + Operaciones
  • Interfaces: Representan un conjunto de operaciones que especifican los servicios que puede brindar una clase o componente y nunca debe especificar sus implementaciones. 
  • Las asociaciones pueden estar formadas por un número indeterminado de clases pero las más comunes y utilizadas son las asociaciones binarias, es decir, aquellas relaciones entre dos clases.
  • Agregación (relación del tipo todo/parte) entre clases se expresa mediante un rombo adyacente a la clase que representa la totalidad y de dicho rombo parten las asociaciones al resto de clases que forman dicha agregación. 
  • Composición (relación de pertenencia) es representada de igual forma que la agregación pero con el interior del rombo pintado de negro.
  • Herencia (o generalización) se representa mediante un triángulo unido a la clase padre por un vértice y del cual salen las relaciones a las clases hijas.

Herramientas para diagramas de programacion orientada a objetos

UML Lab
Features
UMLGraph
MetaUML
Web Sequence Diagrams
Chronos Web Modeller
LucidChart
Red Koda Community
SDMetrics
Dzine
GWT UML
Papyrus for UML
Gliffy
Blueprint SM
Creately
Apollo
The UML Designer
Software Ideas Modeler
Gaphor
Cadifra UML Editor
Topcased
Modelio
ArgoUML
AmaterasUML
Jink-uml
ObjectDomain
Visual Paradigm for UML
Smartdraw
Omondo
GModeler
Violet
Astade
Umbrello UML Modeller
UMLet
Rational Rose Modeler
Prosa UML modeler
MacA&D
QuickUML Windows
WinA&D
QuickUML MacOSX
WithClass
Astah*
Visio
Jude
Metamill
Innovator Object
Objecteering
Visual UML
Ideogramic UML
Poseidon
Dia
Fujaba
Together
BOUML
Artiso Visual Case
Artisan Studio
Ameos
UModel
Poseidon
Enterprise Architect
Lenguaje DRP
Scala8

Lenguajes orientados a objetos

ActionScript
ActionScript 3
Ada
C++
C#
Clarion
Clipper1
D
Object Pascal (Embarcadero Delphi)
Gambas
Genie
Harbour
Eiffel
Fortran 90/95
Java
JavaScript2
Lexico3
Objective-C
Ocaml
Oz
R
Perl4
PHP5
PowerBuilder
Python
Ruby
Self
Smalltalk6
Magik (SmallWorld)
Vala
VB.NET
Visual FoxPro7
Visual Basic 6.0
Visual DataFlex
Visual Objects
XBase++

Ventajas

Las ventajas son las siguientes:

- Fomenta la reutilización y extensión del código.

- Relacionar el sistema al mundo real.- Permite crear sistemas más complejos.

- Facilita la creación de programas visuales.

- Construcción de prototipos.

- Agiliza el desarrollo de software.

- Facilita el trabajo en equipo.

- Facilita el mantenimiento del software.

- Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible.

- Los programas son fáciles de diseñar debido a que los objetos reflejan elementos del mundo real.

- Las aplicaciones son más sencillas para los usuarios debido a que los datos innecesarios están ocultos.

- Los objetos son unidades autocontenidas.

- La productividad se incrementa debido a que puede reutilizar el código.

- Los sistemas son fáciles de mantener y se adaptan a las cambiantes necesidades de negocios.

- Es más fácil crear nuevos tipos de objetos a partir de los ya existentes.

- Simplifica los datos complejos.

- Reduce la complejidad de la transacción.

- Confiabilidad.

- Robustez.

- Capacidad de ampliación.

- Permite mostrar la magnitud de los lenguajes de programacion basada en objetos.

- Crea sistemas mas flexibles, que en un futuro son modificables.

Conceptos Basicos y caracteristicas

Objetos

Los objetos son entidades que tienen un determinado estado, comportamiento (método) e identidad

Clases

Una clase es una construcción que se utiliza como un modelo (o plantilla) para crear objetos de ese tipo. El modelo describe el estado y contiene el comportamiento que todos los objetos creados a partir de esa clase tendrán. Un objeto creado a partir de una determinada clase se denomina una instancia de esa clase.

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 revelarcó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 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.

Modularidad

Se denomina modularidad a la propiedad que permite subdividir una aplicación en partes más pequeñas (llamadas módulos), cada una de las cuales debe ser tan independiente como sea posible de la aplicación en sí y de las restantes partes. Estos módulos se pueden compilar por separado, pero tienen conexiones con otros módulos. Al igual que la encapsulación, los lenguajes soportan la modularidad de diversas formas.

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 puedan cambiar el estado interno de un objeto de manera inesperada, 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 expresamente.

Origen

Los conceptos de la programación orientada a objetos tienen origen en Simula 67, un lenguaje diseñado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen Nygaard, del Centro de Cómputo Noruego en Oslo. En este centro se trabajaba en simulaciones de naves, que fueron confundidas por la explosión combinatoria de cómo las diversas cualidades de diferentes naves podían afectar unas a las otras. La idea surgió al agrupar los diversos tipos de naves en diversas clases de objetos, siendo responsable cada clase de objetos de definir sus propios datos y comportamientos. Fueron refinados más tarde en Smalltalk, desarrollado en Simula en Xerox PARC (cuya primera versión fue escrita sobre Basic) pero diseñado para ser un sistema completamente dinámico en el cual los objetos se podrían crear y modificar "sobre la marcha" (en tiempo de ejecución) en lugar de tener un sistema basado en programas estáticos.

La programación orientada a objetos se fue convirtiendo en el estilo de programación dominante a mediados de los años ochenta, en gran parte debido a la influencia de C++, una extensión del lenguaje de programación C. Su dominación fue consolidada gracias al auge de las Interfaces gráficas de usuario, para las cuales la programación orientada a objetos está particularmente bien adaptada. En este caso, se habla también de programación dirigida por eventos.

Las características de orientación a objetos fueron agregadas a muchos lenguajes existentes durante ese tiempo, incluyendo Ada, BASIC, Lisp y Pascal, entre otros. La adición de estas características a los lenguajes que no fueron diseñados inicialmente para ellas condujo a menudo a problemas de compatibilidad y en la capacidad de mantenimiento del código. Los lenguajes orientados a objetos "puros", por su parte, carecían de las características de las cuales muchos programadores habían venido a depender. Para saltar este obstáculo, se hicieron muchas tentativas para crear nuevos lenguajes basados en métodos orientados a objetos, pero permitiendo algunas características imperativas de maneras "seguras". El Eiffel de Bertrand Meyer fue un temprano y moderadamente acertado lenguaje con esos objetivos, pero ahora ha sido esencialmente reemplazado por Java, en gran parte debido a la aparición de Internet y a la implementación de la máquina virtual de Java en la mayoría de navegadores. PHP en su versión 5 se ha modificado; soporta una orientación completa a objetos, cumpliendo todas las características propias de la orientación a objetos.

Definicion

La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa los objetos en sus interacciones, para diseñar aplicaciones y programas informáticos. Está basado en varias técnicas, incluyendo herencia, cohesión, abstracción, polimorfismo, acoplamiento y encapsulamiento.