Programación Orientada a Objetos


¿Qué es la programación orientada a objetos?

Es un paradigma de la programación de computadores que tiene como objetivo el desarrollo computacional basado en una colección de objetos que están interrelacionados y trabajan conjuntamente para resolver un problema. Surge dentro de los paradigmas de la programación como un enfoque diferente al momento de obtener soluciones computacionales.

Historia

La programación orientada a objetos (POO) nace en los años 60's en el Norwegian Computing Center con la implementación de dos lenguajes de programacion de simulacion: Simula 1 y Simula 67, desarrollados por Kristen Nygaard y Ole Johan Dahl. Simula 67 introdujo por primera vez los conceptos de clases, objetos, herencia, subclases, corrutinas y funciones virtuales. Es por esta razón que Simula es considerado el primer lenguaje orientado a objetos.


Photo

Programa "Hola Mundo" en Simula 67:


Photo

El mensaje está codificado en el bloque de código de la clase Saludos. Este bloque de código se ejecuta solamente cuando existe una instancia o variable de tipo Saludos, lo que ocurre efectivamente al crear una instancia por medio de la instrucción New. En Simula, los objetos siempre son manejados por medio de referencias. Existe un recolector de basura que se encarga de eliminar de la memoria los objetos que se han quedado sin referencias a ellos. Una de estas referencias la vemos con variable objeto. Utilizamos el operador :- para asignar referencias. A diferencia de muchos lenguajes modernos, Simula entiende de dos tipos de objetos:

  • Activos: Son aquellos objetos que aún no han completado su bloque asociado begin/end.
  • Inactivos: Son aquellos que han completado su bloque de instrucciones.

  • Tanto de unos como de otros, es posible ejecutar los procedimientos miembro y consultar los atributos en cualquier momento.

    Evolución


    Photo


    Años después del desarrollo de Simula 67 casi todos los lenguajes de programación modernos comenzaron a utilizar los principios de orientación a objetos. Así fue como se popularizaron términos como clases, objetos, instancias, herencia, polimorfismo, etc. Un ejemplo significativo fue el nacimiento del lenguaje Java, uno de los lenguajes orientados a objetos con mayor reconocimiento a nivel mundial.

    Ventajas

    • Una buena abstracción de las clases, objetos y atributos nos brinda una implementación más detallada, puntual y coherente.
    • Reutilización de código: Cuando se han diseñado adecuadamente las clases, se pueden usar en distintas partes del programa y en numerosos proyectos (herencia). Lo cual pemite:
      • Rápido desarrollo.
      • Alta calidad del código.
      • Bajo costo en fases de desarrollo.
    • Modificabilidad: La facilidad de añadir o suprimir nuevos objetos nos permite hacer modificaciones de una forma muy sencilla.
    • Encapsulamiento: Nos permite proteger la integridad de los datos.
    • 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.
    • Bajo acoplamiento y alta cohesión: Las clases son independientes entre sí, y hacen las tareas específicas para las cuales fueron diseñadas.
    • Beneficios de diseño
    • Mantenimiento de software
    • Amplia documentación



    Como se puede visualizar en la imagen, si se hace un buen diseño y una abstracción adecuada, se pueden generar diferentes módulos a partir de una clase base. En este ejemplo, la clase Figura brinda la posibilidad de crear muchas más formas geométricas como el círculo, el rombo, la estrella, el polígono y demás mediante su extensión.

    Desventajas

    • Curva de aprendizaje: La necesidad de utilizar bibliotecas de clases obliga a su aprendizaje y entrenamiento.
    • La ejecución de programas orientados a objetos es más lenta.
    • Se hereda código que no se usa en la clase hija cuando se extiende de una clase padre.
    • Tiempo en fase de diseño.
    • Tamaño del programa.

    Lenguajes de programación

    Un lenguaje de programación es orientado a objetos si cumple con las siguientes condiciones:

    • Soporta objetos que son abstracciones de datos con una interfaz de operaciones con nombre y un estado local oculto.
    • Los objetos tienen un tipo asociado (la clase).
    • Los tipos (clases) pueden heredar atributos de los supertipos (superclases).

    Algunos de los lenguajes que son orientados a objetos son los siguientes:


    • ActionScript: Es el lenguaje de programación de la plataforma Adobe Flash. Fue lanzado públicamente en el año 1997. Ofrece un modelo de programación robusto que resulta familiar a los desarrolladores con conocimientos básicos sobre programación orientada a objetos.

    • C++: Fue diseñado a mediados de los años 1980 por Bjarne Stroustrup con la intención de extender el lenguaje de programación C a mecanismos que permitieran la manipulación de objetos.

    • C#: Fue desarrollado y estandarizado por Microsoft como parte de su plataforma .NET. El nombre C Sharp fue inspirado por la notación musical, donde '#' (sostenido, en inglés sharp). Diseñado por Anders Hejlsberg y un grupo de desarrolladores, surgió en enero de 1999 con el nombre de Cool, pasando un tiempo después al nombre de C# por problemas de marca.

    • Java: Es un lenguaje de programación de propósito general, concurrente y multiplataforma que fue diseñado específicamente para tener pocas dependencias de implementación. Fue originalmente desarrollado por James Gosling de Sun Microsystems y publicado en 1995 como un componente fundamental de la plataforma Java de Sun Microsystems.

    • Objective-C: Fue creado creado como un superconjunto de C para que implementase un modelo de objetos parecido al de Smalltalk. Originalmente fue creado por Brad Cox y la corporación StepStone en 1980. Actualmente se usa como un lenguaje principal de programación para Mac OS X, iOS y GNUstep, además de Swift.

    • Perl: Es un lenguaje de programación diseñado por Larry Wall en 1987. Toma características del lenguaje C, del lenguaje interpretado bourne shell (sh), AWK, sed, Lisp y, en un grado inferior, de muchos otros lenguajes de programación y adicionalmente, soporta herencia múltiple.

    • Lenguaje de programación - Perl

    • PHP: Es un lenguaje de programación de uso general de código del lado del servidor originalmente diseñado para el desarrollo web de contenido dinámico. Fue creado originalmente por Rasmus Lerdorf en el año 1995. Actualmente el lenguaje sigue siendo desarrollado con nuevas funciones por el grupo PHP.

    • Python: Es un lenguaje de programación interpretado cuya filosofía hace hincapié en una sintaxis que favorezca un código legible, usa tipado dinámico, es multiparadigma y multiplataforma. Fue creado a finales de los 80's por Guido van Rossum en el Centro para las Matemáticas y la Informática (CWI, Centrum Wiskunde & Informatica), en los Países Bajos, como un sucesor del lenguaje de programación ABC.

    • Ruby: Lenguaje de programación dinámico y de código abierto enfocado en la simplicidad y productividad. Su elegante sintaxis es cómoda al leerla y fácil al escribirla. Fue creado por el programador japonés Yukihiro "Matz" Matsumoto, quien comenzó a trabajar en Ruby en 1993, y lo presentó públicamente en 1995.

    • Smalltalk: Fue uno de los primeros lenguajes de programación orientado a objetos con tipado dinámico. Es considerado un "mundo virtual de objetos" donde cualquier entidad es modelada como un objeto.

    • SCALA: Scala es un lenguaje de programación orientado a objetos puro, en el sentido de que cada valor es un objeto. El tipo y comportamiento de los objetos se describe por medio de clases y traits. La abstracción de clases se realiza extendiendo otras clases y usando un mecanismo de composición basado en mixins como un reemplazo limpio de la herencia múltiple.

    • Muchos más...