martes, 26 de noviembre de 2013

Programación Orientada a Objeto (POO)

La programación orientada a objetos es un modelo de programación, con su teoría y su metodología, que conviene conocer y estudiar antes de nada la estructura de los programas en torno a los objetos y en la idea natural de la existencia de un mundo lleno de objetos, que la resolución del problema se realiza en términos de objetos, un lenguaje se dice que está basado en objetos si soporta dichos objetos como una característica fundamental del mismo.

Los lenguajes de POO ofrecen medios y herramientas para describir los objetos manipulados por un programa. Más que describir cada objeto individualmente, estos lenguajes proveen una construcción (Clase) que describe a un conjunto de objetos que poseen las mismas propiedades.


Origen de la programacion orientada a objetos

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. 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 pero fue diseñado para ser un sistema completamente dinámico en el cual los objetos se podrían crear y modificar en el 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. 

Características

Alguna de las características fundamentales son:
-         Uniformidad: Ya que es la representación de los objetos lleva implica tanto el análisis como el diseño y la codificación de los mismos.
-   Comprensión: Tanto los datos que componen los objetos, como los procedimientos que los manipulan, están agrupados en clases, que se corresponden con las estructuras de información que el programa trata.
-        Flexibilidad: Al tener relacionados los procedimientos que manipulan los datos con los datos a tratar, cualquier cambio que se realice sobre ellos quedará reflejado automáticamente en cualquier lugar donde estos datos aparezcan.
-    Estabilidad: Dado que permite un tratamiento diferenciado de aquellos objetos que permanecen constantes en el tiempo sobre aquellos que cambian con frecuencia permite aislar las partes del programa que permanecen inalterables en el tiempo.

Ventajas

Las ventajas más importantes de la programación orientada a objetos son las siguientes:
-        Reusabilidad: Cuando hemos diseñado adecuadamente las clases, se pueden usar en distintas partes del programa y en numerosos proyectos.
-         Mantenibilidad: Debido a la sencillez para abstraer el problema, los programas orientados a objetos son más sencillos de leer y comprender, pues nos permiten ocultar detalles de implementación dejando visibles sólo aquellos detalles más relevantes.
-   Modificabilidad: La facilidad de añadir, suprimir o modificar nuevos objetos nos permite hacer modificaciones de una forma muy sencilla.
-   Fiabilidad: Al dividir el problema en partes más pequeñas podemos probarlas de manera independiente y aislar mucho más fácilmente los posibles errores que puedan surgir.

Conceptos Básicos

1.  Objeto: es una entidad caracterizada por sus atributos propios y cuyo comportamiento está determinado por las acciones o funciones que pueden modificarlo, así como también las acciones que requiere de otros objetos. Un objeto tiene identidad e inteligencia y constituye una unidad que oculta tanto datos como la descripción de su manipulación.
2.      Clases: es la unidad de modularidad en el POO. La tendencia natural del individuo es la de clasificar los objetos según sus características comunes (clase). La clase puede definirse como la agrupación o colección de objetos que comparten una estructura común y un comportamiento común.
3.      Método: Son las operaciones que se aplican sobre los objetos y que permiten crearlos, cambiar su estado o consultar el valor de sus atributos. Los métodos constituyen la secuencia de acciones que implementan las operaciones sobre los objetos.
4.      Atributo: Son los datos o variables que caracterizan al objeto y cuyos valores en un momento dado indican su estado. Mediante los atributos se define información oculta dentro de un objeto, la cual es manipulada solamente por los métodos definidos sobre dicho objeto.
5.      Mensaje: Es la petición de un objeto a otro para solicitar la ejecución de alguno de sus métodos o para obtener el valor de un atributo público. Estructuralmente, un mensaje consta de 3 partes:
-          Identidad del receptor: Nombre del objeto que contiene el método a ejecutar.
-          Nombre del método a ejecutar: Solo los métodos declarados públicos.
-          Lista de Parámetros que recibe el método (cero o mas parámetros)



  1. Encapsulamiento: Es la propiedad del POO que permite ocultar al mundo exterior la representación interna del objeto. Esto quiere decir que el objeto puede ser utilizado, pero los datos esenciales del mismo no son conocidos fuera de él. La idea central del encapsulamiento es esconder los detalles y mostrar lo relevante.
  2. Herencia: Es el proceso mediante el cual un objeto de una clase adquiere propiedades definidas en otra clase que lo preceda en una jerarquía de clasificaciones. Permite la definición de un nuevo objeto a partir de otros.
  3. Polimorfismo: Es una propiedad del POO que permite que un método tenga múltiples implementaciones, que se seleccionan en base al tipo objeto indicado al solicitar la ejecución del método. El polimorfismo permite aplicar operaciones con igual nombre a diferentes clases.
Lenguajes de POO 

-          ABAP
-          ABL
-          ActionScript
-          ActionScript 3
-          Ada
-          C++
-          C#
-          Clarion
-          Clipper
-          D
-          Object Pascal
-          Gambas
-          Genie
-          Harbour
-          Eiffel
-          Fortran 90/95
-          Java
-          JavaScript
-          Lexico
-          Objective-C
-          Ocaml
-          Oz
-          R
-          Perl
-          PHP
-          PowerBuilder
-          Python
-          Ruby
-          Self
-          Smalltalk
-          Magik (SmallWorld)
-          Vala
-          VB.NET
-          Visual FoxPro
-          Visual Basic 6.0
-          Visual DataFlex
-          Visual Objects
-          XBase++
-          Lenguaje DRP


Herramientas para diagramar en POO (Diseño y planificación). Notación UML

 En UML, una clase es un  tipo de clasificador cuyas características son  atributos y operaciones.

Un diagrama de clases describe la estructura estática de un sistema en términos de clases y de relaciones entre estas clases, mostrando los atributos y operaciones que caracterizan cada clase de objetos.

-   Un diagrama de objetos representa la estructura estática del sistema Mostrando los objetos (instancias) en el sistema y las relaciones entre los objetos

-          Un diagrama de clases dado corresponde a un conjunto infinito de diagramas de objetos.

Asociación es una conexión entre clases, que implica la existencia de una relación estructural entre objetos de esas clases.

-          Generalización: es una relación entre una clase más general y una más específica o especializada

-          Dependencia: es una relación de uso entre clases.



Diagrama de Clase sobre Alquiler de Carros



Diagrama de Casos de Uso sobre un Restaurante


Diagrama de Contexto sobre Libreria




Fuentes Electrónicas: