La diversificación de los campos de aplicación de la programación, dio origen a variados tipos de lenguajes. En este artículo descubriremos qué es la programación orientada a objetos y cuáles son los tipos de lenguajes de programación orientada a objetos que existen. ¡Atrévete a ampliar tu conocimiento!

programación-orientada-a-objetos

Programación orientada a objetos

En general, la programación requiere del conocimiento de un lenguaje encargado de transmitir las órdenes a la computadora, y un algoritmo convertido a programa, pero ¿qué es la programación?

La programación es un conjunto de acciones que conllevan a la escritura de un código, capaz de cumplir con el objetivo para el cual fue creado. Por su parte, un código fuente es la representación interna de un programa o software, y un programa es un grupo de órdenes que rigen el funcionamiento de las computadoras.

Básicamente, un programa pasa por tres etapas: la edición del programa en un lenguaje adecuado, la transformación del código fuente en instrucciones para la máquina, y el enlazado entre los códigos objetos y las librerías de funciones, dando lugar, finalmente, a lo que se conoce como un código ejecutable.

Un programa debe estar escrito en un lenguaje de programación que sea entendible para el usuario. Para que esto suceda, el programador debe adoptar uno de los tantos paradigmas de programación existentes, los cuales determinan la visión y, por ende, la escogencia de los métodos a seguir en la construcción del mismo.

Paradigmas de programación

Los avances de la programación y la tecnología, han dado origen a diversas metodologías o paradigmas de programación. Estos a su vez, han conllevado a diversos estilos de programación y diferentes formas de resolución de problemas. A continuación, los paradigmas existentes:

Paradigma imperativo

Establece que los programas son una secuencia estricta de instrucciones de arriba hacia abajo, la cual sólo se ve interrumpida por la inclusión de un subprograma en alguna parte de la misma.

Paradigma estructurado

Impone estructuras de códigos agrupadas por bloques de procedimientos y funciones. El código se reproduce en forma de ciclo, dominado por una razón lógica.

Paradigma declarativo

No establece el orden a seguir en la realización de las acciones necesarias para resolver un problema. Dentro de él se distinguen dos tipos: el paradigma funcional, donde el problema y la solución se describen como funciones, y el paradigma lógico, basado en un predicado lógico.

Paradigma de programación por eventos

Se basa en la iteración infinita para detectar el problema y establecer la forma de resolverlo.

Paradigmas paralelo, distribuido y concurrente

La realización del programa requiere varias unidades de cálculo. Las rutinas se ejecutan de forma independiente sobre otras unidades de cómputo.

Paradigma orientado a objetos

programación-orientada-a-objetos

Este tipo de programación se basa en tres principios básicos: el encapsulamiento de los datos, la abstracción del objeto y la comprobación del tipo según la jerarquía de las clases.

Es importante destacar que un lenguaje de programación suele no responder únicamente a un paradigma, sino que puede ser el resultado de la combinación de varios tipos de ellos. Sin embargo, a continuación nos dedicaremos en detalle únicamente a definir qué es la programación orientada a objetos y cuáles son los distintos lenguajes de programación orientada a objetos que existen.

Cualidades

Es el paradigma más extendido en la actualidad, debido a que permite un mejor manejo de la complejidad a un costo razonable. Mediante él se plantea la posibilidad de construir por partes, es decir, dividir el trabajo en base a componentes, lo cual da como resultado aplicaciones robustas, portables y reutilizables, con beneficios a largo plazo.

A diferencia de otros tipos de programación, la programación orientada a objetos busca las partes en las entidades que surgen del dominio del problema, y no dentro de la misma solución del problema. El requisito primordial es que cada componente se comporte de una manera esperada, tal que nuestro desarrollo no se vea afectado por la forma en que éste esté implementado, y que podamos conocer a priori las condiciones que ofrece cada componente, así como la forma de conectarnos con él.

programación-orientada-a-objetos

Desde otro punto de vista, podemos mencionar que la programación orientada a objetos está relacionada con la teoría del conocimiento, la cual afirma que el hombre almacena la información de acuerdo con esquemas predeterminados, producto de sus experiencias como persona. De esta forma, este tipo de programación permite representar el conocimiento de forma heurística o de manera teórica, a través de los esquemas mentales del individuo, haciendo uso de los conocimientos previos almacenados en unidades de información.

Origen

https://youtu.be/aESIbDclIzw?t=5

La programación orientada a objetos es una técnica, estilo o metodología desarrollada en la década de 1960, como resultado de la crisis generada por la imposibilidad de cambiar o modificar programas complejos. Situación que se agravaba cada vez más por la falta de personal especializado, dispuesto a darle mantenimiento a los programas.

La solución momentánea a dicha crisis estuvo en manos de la programación estructurada, la cual consistió en descomponer los programas en procedimientos individuales, que realizaran tareas específicas por separado. Esto trajo consigo otros inconvenientes, generados principalmente por lo difícil que era lograr la coordinación entre los tantos desarrolladores que se encontraban involucrados en un proyecto, pues a mayor cantidad de tareas involucradas, mayor cantidad de programadores.

Sin duda, la principal desventaja de este tipo de programación era la necesidad de separar conceptualmente los datos de los códigos. Situación que empeoraba directamente con el tamaño y la complejidad del programa.

Así pues, con la finalidad de reducir la complejidad de los programas, nació la programación orientada a objetos. Su principal ventaja es que hace posible la construcción de programas complejos mediante objetos más simples. Estos objetos conforman las entidades de los software orientados bajo esta metodología. La posibilidad de heredar, tanto datos como códigos de aplicaciones existentes, mejora la productividad del programador. De igual manera, facilita la extensión y la reutilización de clases en otras aplicaciones, sin tener que modificar en gran medida el código original.

Características

La programación orientada a objetos presenta múltiples cualidades, a continuación las principales:

  • La base de la programación orientada a objetos son las clases, y no los algoritmos. Estos conforman bloques lógicos de construcción.
  • Cada objeto es una instancia de una clase.
  • Un programa es percibido como un medio para enviar y recibir mensajes, a través de un conjunto de objetos que reaccionan entre sí.
  • Cada objeto debe procurar la mejor forma de responder a cada mensaje recibido.
  • Es posible que cada objeto responda a los mensajes de maneras diferentes.
  • Facilita el cambio del software debido a que los componentes son intercambiables.
  • Los cambios parciales e internos no afectan el comportamiento del resto del sistema.
  • Si se siguen los principios básicos de la programación orientada a objetos, el costo de la construcción del sistema será menor que en casos en los cuales las partes son interdependientes.
  • Es posible que las clases derivadas de otras, hereden el conocimiento y las habilidades de sus antecesoras. Por medio de la herencia, las clases se relacionan unas con otras, y se aprovecha la forma de trabajar sin necesidad de reescribir el código.
  • Los métodos de una clase pueden hacer cosas distintas, aún cuando mantengan el mismo nombre. Es decir, a través del polimorfismo, el programador puede implementar varias formas de un mismo método, dependiendo de la clase sobre la cual se realice la implementación. Lo que significa que se puede acceder a varios métodos mediante el mismo nombre o medio de acceso.

Diferencias: programación estructurada vs. programación orientada a objetos

Como ya hemos mencionado, la programación orientada a objetos representa la evolución de la programación estructurada, lo cual no quiere decir que sea mejor que ella, ya que cada una tiene su utilidad dependiendo del tipo de sistema que se desarrollará. A continuación se establecen las diferencias básicas que existen entre ambas:

La programación estructurada resuelve problemas de tipo algorítmico, partiendo de la introducción de unos datos, se genera una salida. La programación orientada a objetos se basa en el modelado de objetos, de gran utilidad en el desarrollo de aplicaciones web.

La primera se centra en una estructura de datos, mientras que la segunda se basa en objetos, con estado y comportamiento propios.

La información dentro de la programación estructurada fluye mediante estructuras y llamados a funciones, en la programación orientada a objetos es el resultado de la interacción entre ellos, mediante el envío y la recepción de mensajes.

Principios básicos

Como consecuencia del concepto de programación orientada a objetos, surgen tres principios básicos de este paradigma. Estos son:

Encapsulamiento de los datos

Como ya hemos mencionado, se espera que los objetos sepan responder a los mensajes que recibe, mostrando un comportamiento específico. Sin embargo, lo que no deseamos es que quien envía el mensaje conozca cómo lo hace. El logro de este objetivo es lo que se conoce como encapsulamiento de los datos. Es decir, lo que se quiere es que cada parte del programa sepa sólo lo que le interesa, evitando así los efectos colaterales relacionados con otros objetos.

En definitiva, con el encapsulamiento de los datos se imposibilita el acceso a los componentes de los objetos, es decir, estos se resguardan dentro de un sola unidad de programación bien definida, debido a que cada uno de ellos poseen especificaciones de diseño que los hace independientes unos de otros.

La razón principal por la cual podemos desear que el objeto cliente desconozca la forma de implementación es que, generalmente, pueden haber varias alternativas para una misma operación. Además, en el futuro, nosotros pudiéramos decidir cambiar de una alternativa a otra, sin que el cliente lo sepa  o vea afectada la prestación del servicio.

Abstracción del objeto

Una característica esencial de la programación orientada a objetos es que ésta busca atacar el problema por partes. De esta manera, lo primero que hace es encontrar los objetos, para luego determinar cómo deben interactuar y, finalmente, implementar el comportamiento de los mismos. En consecuencia, tenemos que los objetos que encontremos son los que nos van a ayudar a resolver el problema.

La abstracción conlleva dos tipos de conocimientos, los datos o variables, que constituyen el esquema mental, y los métodos, funciones o procedimientos, que relacionan dicho esquema con otros esquemas predeterminados. Es decir, gracias a la abstracción de datos, se puede definir el dominio y la estructura de los datos, así como también se pueden establecer los métodos para acceder a ellos. Finalmente, la abstracción se convierte en un nuevo tipo de dato definido por el programador, conformado por atributos y métodos que se aplican sobre los primeros.

Debido a la existencia de múltiples esquemas mentales para un mismo problema, cada programador puede organizar las clases de diferentes maneras, según su percepción personal. Lo que quiere decir que la abstracción del objeto es la capacidad dentro del diseño del programa de crear datos definidos por el usuario.

Comprobación del tipo según la jerarquía de las clases

Se trata del momento que elige el lenguaje para hacer comprobaciones de tipo. Hay lenguajes que deciden hacerlo durante la compilación, y otros durante la ejecución. Otros lenguajes ni siquiera compilan, lo que no da la oportunidad de hacer comprobaciones de ningún tipo, sino hasta el tiempo de ejecución.

Cuando la comprobación se hace en tiempo de ejecución, se denomina comprobación dinámica. Por el contrario, cuando se realiza en tiempo de compilación, se llama comprobación estática.

Debido a que en la comprobación estática los errores surgen de entrada, sin llegar al momento de la ejecución, suele decirse que este tipo de comprobación es más segura. Sin embargo, la comprobación dinámica permite realizar implementaciones parciales, sin la necesidad de reescribir el código recurridamente.

¿Cómo funciona?

El primer paso para resolver un problema bajo este paradigma es hallar los objetos o entidades del dominio del problema. Luego es necesario encontrar la forma cómo estas entidades interactúan para resolver el problema, estableciendo los mensajes que los objetos se envían, en qué orden y bajo qué condiciones lo hacen. Finalmente, hay que implementar el comportamiento de los objetos, referente a la respuesta que ellos dan con respecto a los mensajes.

En resumen, cuando se ejecuta un programa bajo el paradigma de la programación orientada a objetos, suceden tres cosas: se crean los objetos según se necesiten, los mensajes circulan de un objeto a otro paralelo al procesamiento de la información por parte del programa, y cuando los objetos ya no son requeridos, se borran para liberar memoria en el sistema.

Conceptos claves

Para poder entender un poco más sobre qué es la programación orientada a objetos, es necesario que mencionemos los siguientes conceptos básicos:

  • Objeto: Se refiere a la entidad que puede ser receptora de mensajes, a la vez que puede responder a ellos y enviar mensajes a otros objetos. Es la entidad que tiene comportamiento.
  • Identidad: Es el aspecto que distingue a un objeto de otro.
  • Mensaje: Se trata de la interacción resultante entre una entidad que solicita un servicio y otra que lo proporciona.
  • Objeto cliente: Es quien envía el mensaje.
  • Objeto receptor: Es el objeto que recibe el mensaje.
  • Delegación: Referido al envío de mensajes desde un objeto hacia otros objetos. Cuando un objeto necesita la colaboración de otros para poder responder a los mensajes.
  • Comportamiento: Son las respuestas a los mensajes recibidos por un objeto receptor.
  • Estado: Referido a la situación actual de cada objeto.
  • Responsabilidad: Es la interacción entre el estado y el comportamiento de un objeto.
  • Método: Se refiere a la implementación de la respuesta dada por un objeto a un mensaje recibido.
  • Polimorfismo: Se trata de la capacidad que poseen algunos objetos de responder a un mismo mensaje, pero de varias formas distintas.
  • Clases: Son conjuntos de objetos que se comportan de la misma manera. Pueden ser definidas por el programador. Son esquemas mentales que permiten abstraer los objetos y determinar la forma de relacionarse entre ellos.
  • Atributo: Se refiere a una variable interna del objeto creada para almacenar parte del estado del mismo.
  • Contrato: Referido al conocimiento de lo que ofrece cada componente y la manera de conectarnos con él.

Solución de problemas según la programación orientada a objetos

Una vez identificado el problema y se tiene el planteamiento de la posible solución, se requiere transcribirla a un lenguaje de programación para que la misma pueda ser ejecutada por una computadora, mediante el uso de un programa. Bajo la metodología de la programación orientada a objetos, se definen las siguientes etapas:

  • Definición del programa: Trata de la descripción esquemática del problema, de forma clara, entendible y bien definida. Conlleva la identificación del origen y el aspecto de los datos a procesar, así como la descripción de los resultados y la forma en la cual serán presentados.
  • Análisis y diseño orientado a objetos: Se refiere a la identificación y descripción de los objetos en el dominio del problema. Luego de lo cual, se establecen los atributos, relaciones y métodos a seguir, esto con la finalidad de definir las clases que serán implementadas en un lenguaje de programación específico.
  • Programación: Básicamente, se refiere a la transcripción del programa, lo cual incluye redactar correctamente el código en un lenguaje de programación, utilizando un estilo de desarrollo capaz de garantizar la calidad del producto, la cual ocasionará la debida resolución del problema. Esta etapa implica la construcción de algoritmos, la elaboración de diagramas de flujo y la programación final, pasando por las pruebas de escritorio, la codificación, compilación y ejecución del programa.
  • Documentación: Conlleva la descripción de la secuencia de pasos necesarios para llegar a la resolución de un problema. Implica la incorporación de líneas de comentarios que aclaren o expliquen el significado de las líneas de códigos que pudieran resultar confusas, sobre todo las referentes a los identificadores y las estructuras de datos declaradas, las estructuras de control y los métodos y sus parámetros. Esta etapa es esencial para el éxito del producto final, por cuanto si falla la documentación los programas resultan difíciles de leer y de depurar, más aún se hace casi imposible su modificación y mantenimiento.

En otro orden de ideas, podemos decir que la funcionalidad de los lenguajes de programación ha aumentado con los años, debido principalmente a la aparición de nuevos y variados campos de aplicación. Si bien es cierto que al principio estos lenguajes eran empleados, básicamente, para manejar grandes cantidades de datos y realizar determinados cálculos numéricos.

Ahora los lenguajes de programación son utilizados casi en cualquier campo de la sociedad que incluya el manejo de bases de datos, la generación de imágenes e, incluso, la inteligencia artificial, entre muchos otros aspectos.

Principalmente, el nacimiento de nuevas tecnologías de ingeniería de software ha ocasionado el auge de los lenguajes de programación que veremos a continuación.

Lenguajes de programación orientada a objetos

Son lenguajes diseñados para integrar los datos y los subprogramas en clases. Éstas pueden heredar propiedades de otros códigos transformados y dar lugar a nuevas características, que conlleven también a una nueva metodología de programación.

Clasificación

Como veremos más adelante, existen múltiples lenguajes de programación que responden al paradigma de orientación a objetos. De acuerdo con su manera de implementación, se clasifican en:

  • Según implementan el comportamiento: Abarca los lenguajes que se encuentran basados en clases y en prototipos o ejemplos.
  • Según implementan la creación de objetos: Se basan en el tiempo de ejecución en el área de memoria dinámica o en el tiempo de compilación de la pila.
  • Según la verificación de tipos: Referidos a la verificación en tiempo de compilación o en la verificación en tiempo de ejecución.

Dentro de los principales lenguajes orientados a objetos tenemos:

qué-es-la-programación-orientada-a-objetos

Smalltalk

Sólo puede ser programado bajo el paradigma de la programación orientada a objetos. Es un lenguaje basado en clases, que diseña objetos en el área de memoria dinámica en tiempo de ejecución. Sólo hace verificaciones de tipo en tiempo de ejecución, es decir, es un lenguaje de comprobación dinámica.

Java

Es uno de los lenguajes más usados en la actualidad, está completamente orientado a objetos, con sintaxis similar a C y C++. Es independiente de la plataforma.

Al igual que Smalltalk es un lenguaje basado en clases, que crea los objetos en el área de memoria dinámica en tiempo de ejecución, pero no hace chequeos de tipo en tiempo de ejecución, sino en tiempo de compilación, con la diferencia de que crea un código intermedio no ejecutable, proveniente de una precompilación. Esto lo convierte en un lenguaje de comprobación estática.

La programación orientada a objetos Java corren sobre una máquina virtual especializada en este tipo de lenguaje, el cual funciona como si fuera una computadora y, por lo tanto, permite la ejecución de los mismos sin que sea necesaria la modificación de ellos. Este tipo de máquinas es lo que se denomina un intérprete.

programación-orientada-a-objetos

JavaScript

A diferencia de Smalltalk y Java, es un lenguaje que se basa en la creación de prototipos o ejemplos. Es interpretado y sin tipos, es decir, no realiza chequeos de tipos ni en tiempo de ejecución ni en tiempo de compilación. Crea objetos en el área de la memoria dinámica en tiempo de ejecución. Como carece de compilación, se convierte en un lenguaje con comprobación dinámica.

Es un lenguaje de alto alcance, gracias a su portabilidad e integración, así como a sus técnicas de programación estándares y sencillas. En otras palabras, JavaScript es un código que se encuentra inmerso en una página web, cuya finalidad es mejorar el dinamismo de dicha página.

C++

Constituye un incremento al tradicional lenguaje C, mediante la absorción de las bondades de este lenguaje y la incorporación de soportes para objetos. Aunque abarca tres paradigmas de programación distintos, como lo son: la programación estructurada, la programación genérica y la programación orientada a objetos, fue él quien propició el paso del paradigma estructurado al paradigma orientado a objetos.

Es un lenguaje vérsatil, usado muy frecuentemente entre los programadores de aplicaciones, tanto en Windows como en GNU Linux. Crea objetos en la memoria dinámica en tiempo de ejecución. Se centra básicamente en el desempeño, la portabilidad y la abstracción. Su principal desventaja es que al compilar, se genera un fichero ejecutable cuyo código es válido únicamente para la plataforma donde se realizó la compilación. Por otra parte, al ser un lenguaje ejecutable, no es independiente de la plataforma.

C#

Es un lenguaje de programación que corre en tiempo de ejecución y se encuentra incluido dentro de la plataforma .NET, lo cual le permite compartir y reconocer sus librerías. Es totalmente orientado a objetos, permite la creación de todo tipo de aplicaciones.

Constituye una evolución de los lenguajes C y C++, eliminando la complejidad de este último, pues es más fácil de utilizar y disminuye el margen de error durante su funcionamiento, debido a la aceptación de la precompilación.

programación-orientada-a-objetos

Python

Es un lenguaje multiplataforma, principalmente orientado a objetos, pero abarca otros paradigmas como la programación imperativa, la programación funcional y la programación orientada a aspectos.

Su sintaxis limpia, muy cercana al lenguaje natural, favorece la lectura de su código. Es altamente recomendado para iniciarse en el mundo de la programación.

Se ejecuta mediante un programa intermedio, es decir, a través de un intérprete. Por tratarse de un lenguaje semi interpretado es flexible y portable. Es de tipado dinámico, lo que quiere decir que el tipo de dato se determina en tiempo de ejecución.

Pascal

En la actualidad, es el lenguaje usado por excelencia en la enseñanza de la programación. Es de sintaxis sencilla, con un lenguaje muy estructurado, lo que facilita la lectura e interpretación de los programas. Su compilación puede hacerse en cualquier máquina que posea un compilador Pascal.

A pesar de ser un lenguaje estructurado, permite la programación orientada a objetos mediante su versión Turbo Pascal. Éste posee un entorno integrado, desde el cual es posible escribir los programas y probarlos. En definitiva, Pascal es un lenguaje de propósito general.

Si el tema que te interesa está relacionado con programación, te invito a leer ¿Qué es un algoritmo en programación?