Un lenguaje orientado a objetos es un lenguaje de programación que gira en torno al concepto de objeto. Se desarrollaron lenguajes orientados a objetos para que sea más fácil desarrollar, depurar, reutilizar y mantener el software de lo que es posible con lenguajes anteriores. Comprender los objetos y los lenguajes orientados a objetos requiere conocer la evolución de los lenguajes de programación y las estructuras de datos.
- Evolución de los lenguajes de Programación de Computadoras
- Lenguaje ensamblador.
- Idiomas de alta calidad.
- Lenguajes Estructurados.
- Lenguajes Orientados a objetos.
- Características de la programación Orientada a objetos
- Encapsulación y Ocultación de datos.
- Herencia.
- .
- Lenguajes comunes orientados a objetos
- Smalltalk.
- C++.
- Java.
- Otros Idiomas.
- Bibliografía
Evolución de los lenguajes de Programación de Computadoras
Los lenguajes de programación de computadoras han evolucionado continuamente a lo largo de los años. Esta evolución se detalla en los siguientes ejemplos.
Lenguaje ensamblador.
Los primeros programas de computadora fueron escritos en lenguaje ensamblador. Este es un tipo primitivo de lenguaje en el que cada instrucción corresponde a una sola instrucción de máquina; es la operación de computadora más básica posible. Lograr cualquier cosa útil requiere muchas instrucciones de la máquina. El lenguaje ensamblador es específico para un tipo particular de computadora; mover el programa a un tipo diferente de computadora requiere escribir un programa completamente nuevo. Los programas de lenguaje ensamblador son difíciles de escribir, depurar y mantener. Aunque ahora se utilizan otros lenguajes para la mayoría de las aplicaciones informáticas, el lenguaje ensamblador todavía se usa hoy en día como el primer lenguaje cuando se desarrolla un nuevo chip.
Idiomas de alta calidad.
Después del lenguaje ensamblador, se desarrollaron lenguajes de orden superior; entre los primeros se encontraban FORTRAN y BASIC. Una declaración en un idioma de alto orden corresponde a una oración en inglés. Un programa llamado compilador lee las instrucciones de un archivo fuente y genera un archivo que contiene instrucciones de máquina, que se llama archivo objeto. El archivo de objeto puede ser cargado y ejecutado por el ordenador. Un lenguaje de alto orden es más portátil que un programa de lenguaje ensamblador; el mismo archivo fuente se puede compilar para cualquier computadora siempre que exista un compilador adecuado.
Los primeros lenguajes de alto orden solo permitían tipos de datos simples como enteros, números en coma flotante o cadenas (una secuencia de letras). La única estructura de datos disponible era la matriz. Una matriz es una lista de elementos que son todos del mismo tipo de datos; por ejemplo, una lista de números o una lista de cadenas. Se creó una base de datos utilizando un grupo de matrices. Por ejemplo, una base de datos de productos puede contener tres matrices llamadas Número de producto, Descripción del producto y Precio del producto. Dependía del programador mantener las matrices alineadas; por ejemplo, asegurarse de que el tercer elemento de cada matriz correspondiera al mismo producto.
Lenguajes Estructurados.
El siguiente paso en la evolución de los lenguajes de programación fue el desarrollo de lenguajes estructurados, como C y PASCAL, y la introducción de estructuras de datos. Una estructura de datos es un conjunto de tipos de datos más simples en un solo registro. Por ejemplo, una base de datos de productos podría construirse como una matriz de registros de productos, cada registro contiene el Número de Producto, la Descripción del producto y los campos de Precio del Producto. Ahora un solo registro podría contener toda la información necesaria sobre un solo elemento. Las estructuras también se definieron más en la parte procedimental del lenguaje. Una función o procedimiento es una pequeña parte de un programa más grande que podría escribirse para proporcionar alguna operación básica en una estructura de datos, como un registro.
Lenguajes Orientados a objetos.
El siguiente paso en la evolución de los lenguajes de programación, la orientación a objetos, se introdujo en el lenguaje Smalltalk. La orientación a objetos lleva los conceptos de programación estructurada un paso más allá. Ahora, en lugar de estructuras de datos y estructuras de programa separadas, los elementos de datos y de programa se combinan en una estructura llamada objeto. Los elementos de datos de objeto se denominan atributos, mientras que los elementos de programa de objeto se denominan métodos. Colectivamente, los atributos y métodos se denominan miembros del objeto. Por lo general, los métodos de un objeto son los únicos programas capaces de operar en los atributos del objeto.
Con la orientación a objetos, se produjo un cambio fundamental en la forma en que se ven los programas. La visión anterior era que los datos debían manipularse de alguna manera para lograr un resultado final, y un programa se veía como un medio secuencial para realizar las manipulaciones. Desde una perspectiva de orientación de objetos, un programa se ve como un grupo de objetos que reaccionan a mensajes del usuario, otros programas u otros objetos. Este punto de vista llevó a la idea de la programación basada en eventos; i. e. cuando ocurre el evento A, este objeto realiza la acción B. Se envía un mensaje a un objeto llamando a uno de sus métodos.
Características de la programación Orientada a objetos
Las características clave de la programación orientada a objetos incluyen encapsulación y ocultación de datos, herencia y polimorfismo.
Encapsulación y Ocultación de datos.
La idea central en la programación orientada a objetos (OOP) es que los atributos del objeto y los métodos que operan en los atributos están unidos, o encapsulados, en el objeto. Los métodos del objeto proporcionan las únicas interfaces entre el objeto y otras partes del programa. Esto es diferente de los lenguajes anteriores, donde cualquier parte de un programa podía operar en cualquier pieza de datos en cualquier momento. Aunque esto parece restrictivo, las restricciones dan como resultado un programa más modular que es más fácil de desarrollar y menos probable que contenga errores. También significa que es más fácil mover un objeto a un entorno diferente y seguir funcionando correctamente.
Un objeto de software es algo similar a un objeto físico. Por ejemplo, un motor se puede usar para alimentar un automóvil. Tiene componentes internos, correspondientes a atributos, pero uno no tiene que preocuparse por lo que son o cómo funcionan. El motor deberá interactuar con el acelerador, el sistema de combustible, la transmisión, la admisión y los colectores de escape, todos los cuales corresponden a los métodos. Es inconcebible que el combustible entre en el motor por cualquier medio que no sea el sistema de combustible. Mientras se mantengan las interfaces correctas, el motor funcionará. Lo mismo ocurre con los objetos. Los atributos del objeto están ocultos desde el exterior. El objeto interactúa con su entorno a través de sus métodos.
Herencia.
Otro concepto importante para la programación orientada a objetos es la herencia. Una clase de objeto se define en una jerarquía, y se dice que hereda el comportamiento de sus ancestros (aquellos objetos por encima de ella en la jerarquía). Por ejemplo, un programa de dibujo puede incluir tres clases de objetos: Forma, Rectángulo y Círculo. Se podrían definir de manera que el Rectángulo y el Círculo sean descendientes de Forma.La forma
incluye atributos comunes a cualquier forma, como la ubicación de la forma en una superficie de dibujo. Shape también proporciona métodos para manipular esos atributos. Por ejemplo, un método de movimiento cambiaría la ubicación de la forma. Además, proporcionaría una definición de métodos a los que todas las formas deben ser capaces de responder, por ejemplo, un método de dibujo para mostrar la forma en una superficie de dibujo. El método de dibujo en este caso se dice que es abstracto; no hace otra cosa que crear un requisito para que las clases descendientes lo implementen.
Dado que el rectángulo es un descendiente de Forma, hereda atributos (ubicación) y métodos (movimiento) de Forma. Proporciona los atributos adicionales que necesita (ancho y alto) y nuevos métodos que manipulan esos atributos (setWidth, setHeight). Rectángulo también debe proporcionar un método de dibujo que pinta un rectángulo en la superficie de dibujo, porque cada descendiente de Forma debe implementar un método de dibujo. Del mismo modo, Circle proporciona un nuevo atributo (radius), métodos para manipularlo (setRadius) y un método de dibujo propio.
Con este tipo de disposición, el programa gestor de dibujos tendría una lista de formas en la superficie de dibujo. Para mover un objeto, llamaría al método move del objeto. Para dibujar un objeto, el administrador llama al método de dibujo del objeto. El gerente no sabe ni le importa cómo se mueve o dibuja el objeto, siempre y cuando se haga el trabajo. De hecho, puede que ni siquiera sepa qué tipo de forma es realmente un objeto en particular. Podría ser un Rectángulo, un Círculo o cualquier otro objeto que descienda de la Forma. Solo necesita saber que es descendiente de la Forma, para que pueda enviarle cualquier mensaje que una Forma pueda recibir.
La capacidad de herencia de un lenguaje orientado a objetos añadió una nueva dimensión a la programación. El aprendizaje de un lenguaje de alto orden anterior estaba relacionado principalmente con el aprendizaje de la sintaxis del lenguaje (cómo se construyen las declaraciones del lenguaje), lo cual no es tan difícil. En un lenguaje orientado a objetos, todavía es necesario aprender la sintaxis, pero familiarizarse con las jerarquías de clases estándar, que pueden incluir miles de clases, cada clase con sus propios métodos, es una tarea mucho más grande. Sin embargo, vale la pena porque un objeto hereda los atributos y el comportamiento de su padre. Un programador puede evitar el trabajo innecesario encontrando un objeto existente que ya hace la mayor parte de lo que se necesita. Luego, se puede agregar una nueva capacidad de forma incremental. El resultado es un software de menor costo y mayor calidad.
Esta característica también llevó a la inclusión de funciones de documentación automática en varios lenguajes orientados a objetos. En idiomas anteriores, la documentación, si se generaba, se hacía por separado, casi como una idea tardía. Ahora la información de la documentación se puede incluir en el código fuente del objeto y se puede usar para generar un documento de Lenguaje de Marcado de Hipertexto (HTML) automáticamente, completo con hipervínculos hacia arriba y hacia abajo de las jerarquías de clases, que se pueden ver con un navegador de Internet. Esto hace que sea mucho más fácil mantener una documentación precisa y actualizada.Polimorfismo
.
La siguiente característica importante del lenguaje orientado a objetos es el polimorfismo, lo que significa que un objeto descendiente no tiene que responder a un mensaje exactamente como lo hace su ancestro. Un objeto nuevo puede anular los métodos de su padre, lo que hace que el nuevo objeto reaccione a un mensaje de forma diferente. Por ejemplo, una clase común en un sistema de ventanas es un componente, que representa un objeto visible. Un componente es una clase antecesora para cada objeto visible en la pantalla: iconos, botones, menús, barras deslizantes, casillas de verificación, botones de opción, incluso ventanas. Todas estas clases descendentes anulan algunos de los métodos de los componentes para cambiar el comportamiento. Por ejemplo, un objeto Icono debe mostrarse a sí mismo como una imagen pequeña. Icon anula el método de dibujo del componente para mostrar la imagen.
Lenguajes comunes orientados a objetos
Los lenguajes comunes orientados a objetos incluyen Smalltalk, C, Java y otros lenguajes como BASIC y PASCAL.
Smalltalk.
Smalltalk fue el lenguaje original orientado a objetos, desarrollado a principios de la década de 1970 por Xerox. Desde entonces, se han introducido varias variaciones. Se sigue utilizando, pero su aceptación generalizada se ha visto obstaculizada por la falta de una norma universal.
C++.
C + + es una extensión del lenguaje C que proporciona capacidades de OOP. Es probablemente el lenguaje orientado a objetos más extendido actualmente en uso. C es un lenguaje híbrido porque compila programas C estándar; no requiere el uso de objetos. Esto le permite aprovechar el software C existente, mientras utiliza la orientación de objetos para el software nuevo. C está controlado por estándares ANSI.
Java.
Java es el lenguaje orientado a objetos puro más ampliamente aceptado. Fue desarrollado por Sun Microsystems originalmente como un lenguaje de control para pequeños electrodomésticos. Sin embargo, resultó ideal para su uso con Internet. Un applet de Java se puede incrustar en una página web. Cuando un navegador carga la página web, también carga y muestra el applet. Sun todavía mantiene un control estricto del estándar de idioma.
Para facilitar la operatividad multiplataforma (trabajar en tipos de computadoras completamente diferentes sin recompilar), Java se implementa en dos partes. El compilador produce un archivo objeto que solo puede ser ejecutado por una máquina Virtual Java (JVM). Hay disponible una JVM independiente para cada sistema operativo compatible (Windows, Unix / Linux o Solaris). Esto hace que los programas Java puedan ejecutarse en cualquiera de esos sistemas sin recompilarse.
Otros Idiomas.
La mayoría de los lenguajes comúnmente utilizados en la actualidad permiten alguna forma de orientación de objetos. BASIC se ha convertido en Visual BASIC orientado a objetos; PASCAL en DELPHI orientado a objetos. Generalmente se trata de lenguajes híbridos, como C, que admiten la orientación a objetos sin necesidad de ella.
véase también Compiladores; Ratón; Lenguajes de procedimiento.
Donald M. McIver
Bibliografía
Deitel, Harvey M., and Paul J. Deitel. Java: How to Program, 2nd ed. Upper Saddle River, NJ: Prentice Hall, 1998.
Voss, Greg. Programación Orientada A Objetos, Una Introducción. Nueva York: Osborne McGraw-Hill, 1991.