Download BALAGURUSAMY - Programación orientada.indb

Document related concepts

Polimorfismo (informática) wikipedia , lookup

Dylan (lenguaje de programación) wikipedia , lookup

Common Lisp wikipedia , lookup

Scala (lenguaje de programación) wikipedia , lookup

Rust (lenguaje de programación) wikipedia , lookup

Transcript
1
Orígenes de la programación
orientada a objetos
Conceptos clave
 Evolución del software
 Programación orientada
a procedimientos
 Programación orientada a objetos
 Objetos
 Clases
 Abstracción de datos
 Encapsulación
 Herencia
 Polimorfismo
 Ligadura dinámica
 Pase de mensajes
 Lenguajes orientados a objetos
 Lenguajes basados en objetos
1.1 Lacrisisdelsoftware
Los avances en la tecnología del software
siguen siendo espectaculares. Se anuncian
nuevas técnicas y herramientas en una
vertiginosa sucesión. Esto ha obligado a los
ingenieros y a la industria del software a
buscar continuamente nuevos enfoques para
el diseño y el desarrollo de software, los cuales
se vuelven cada vez más críticos en aras de
la creciente complejidad de los sistemas de
software así como de la naturaleza altamente
competitiva de la industria. Estos rápidos
avances parece que han creado una situación
de crisis dentro de la industria. Es necesario
dar respuesta a las siguientes cuestiones para
afrontar esta crisis:
 ¿Cómo representar entidades de problemas de la vida real en el diseño de
sistemas?
 ¿Cómo diseñar sistemas con interfaces
abiertos?
 ¿Cómo garantizar la reusabilidad y la
extensibilidad de los módulos?
 ¿Cómo desarrollar módulos que sean
tolerantes a los cambios futuros?
1
BALAGURUSAMY - Programación orie1 1
22/12/2006 13:09:36
Programación orientada a objetos con C++




¿Cómo mejorar la productividad del software y disminuir el coste del software?
¿Cómo mejorar la calidad del software?
¿Cómo gestionar las planificaciones temporales?
¿Cómo industrializar el proceso de desarrollo de software?
Muchos productos software o bien están no terminados, o no se usan o son entregados con
errores importantes. La Figura 1.1 muestra el destino de los proyectos software de defensa
de Estados Unidos acometidos en los años setenta. Alrededor del 50% de los productos
software nunca fueron finalizados, y una tercera parte de los que fueron entregados nunca
se usaron. Es interesante anotar que sólo el 2% fueron usados tal como se entregaron sin
ninguna modificación. Esto ilustra que la industria del software tiene un récord notablemente malo en productos entregados.
Los cambios en los requisitos del usuario han sido siempre el problema principal. Otro
estudio (Fig. 1.2) muestra que más del 50% de los sistemas necesitaron modificaciones
debido a cambios en los requisitos de usuario y en los formatos de los datos. Esto sólo
ilustra que, en un mundo cambiante con un entorno de negocios dinámico, las solicitudes
de cambios son inevitables y por tanto los sistemas deben ser adaptables y tolerantes a
los cambios.
Estos estudios y otros informes sobre implementación de software sugieren que los
productos software deberían ser evaluados cuidadosamente para su calidad antes de que
sean entregados e implementados. Algunos de los problemas de calidad que deben ser
considerados con una evaluación crítica son:
1.
2.
3.
4.
5.
Correctitud.
Mantenibilidad.
Reusabilidad.
Apertura e interoperabilidad.
Portabilidad.
Fig. 1.1
El estado de los proyectos de defensa de Estados Unidos (según datos de su gobierno)
BALAGURUSAMY - Programación orie2 2
22/12/2006 13:09:36
Orígenes de la programación orientada a objetos
Fig. 1.2
Descomposición de los costes de mantenimiento
6. Seguridad.
7. Integridad.
8. Amabilidad con el usuario.
La selección y el uso de herramientas software adecuadas ayudaría a resolver algunos
de estos problemas.
1.2 Evolución del software
Ernest Tello, un escritor de prestigio en el campo de la inteligencia artificial, comparó
la evolución de la tecnología del software con el crecimiento de un árbol. Al igual que un
árbol, la evolución del software tiene distintas fases o “capas” de crecimiento. Estas capas
se construyeron una sobre otra durante las cinco últimas décadas, como se muestra en la
Figura 1.3, en la que cada capa representa una mejora sobre las anteriores. Sin embargo,
la analogía falla si consideramos la vida de estas capas. En los sistemas software, cada
una de las capas continúa siendo funcional, mientras que en el caso de los árboles, sólo la
capa superior es funcional.
Alan Kay, uno de los promotores del paradigma orientado a objetos y el principal diseñador
de Smalltalk, dijo: “Cuando la complejidad aumenta, la arquitectura domina el material
básico”. Para construir software complejo hoy en día no basta con juntar una secuencia de
instrucciones de programación y varios conjuntos de procedimientos y módulos; necesitamos
incorporar técnicas sólidas de construcción y estructuras del programa que sean fáciles de
comprender, implementar y modificar.
Desde la invención de la computadora, se han probado muchos enfoques de programación.
Entre éstos se incluyen técnicas tales como programación modular, programación descendente, programación ascendente y programación estructurada. La principal motivación de
cada una ha sido la preocupación para manipular la complejidad creciente de los programas
BALAGURUSAMY - Programación orie3 3
22/12/2006 13:09:37
Programación orientada a objetos con C++
Fig. 1.3
Capas del software de computadoras
para que éstos sean fiables y de fácil mantenimiento. Estas técnicas se hicieron populares
entre los programadores durante las dos últimas décadas.
Con la aparición de lenguajes tales como C, la programación estructurada se hizo muy
popular y fue la técnica principal de los años ochenta. La programación estructurada era
una herramienta potente que permitió a los programadores escribir programas moderadamente complejos con bastante facilidad. Sin embargo, cuando los programas aumentaron
más su tamaño, incluso el enfoque estructurado fracasó en mostrar los resultados deseados
en términos de programas libres de errores, fáciles de mantener y reutilizables.
La programación orientada a objetos (POO) es un enfoque para la organización y el
desarrollo de programas que intenta eliminar algunos de los escollos de los métodos de programación convencionales al incorporar lo mejor de las características de la programación
estructurada con varios conceptos nuevos y potentes. Es una nueva forma de organizar y
desarrollar programas y no tiene nada que ver con un lenguaje particular. Sin embargo, no
todos los lenguajes son adecuados para implementar fácilmente los conceptos de la POO.
1.3 Introducción a la programación orientada a procedimientos
A la programación convencional, usando lenguajes tales como COBOL, FORTRAN y C, se
conoce comúnmente como programación orientada a procedimientos (POP). En el enfoque
orientado a procedimientos, el problema se visualiza como una secuencia de cosas a realizar
tales como leer, calcular e imprimir. Se escribe una serie de funciones para realizar estas
tareas. Se presta atención principalmente a las funciones. En la Figura 1.4 se muestra
una estructura de programa típica para la programación orientada a procedimientos. Se
BALAGURUSAMY - Programación orie4 4
22/12/2006 13:09:38
Orígenes de la programación orientada a objetos
Fig. 1.4
Estructura típica de los programas orientados a procedimientos
ha usado la técnica de descomposición jerárquica para especificar las tareas que se tienen
que completar para resolver un problema.
La programación orientada a procedimientos básicamente consiste en escribir una
lista de instrucciones (o acciones) para que las realice la computadora, y organizar estas
instrucciones en grupos denominados funciones. Normalmente usamos un diagrama de
flujo para organizar estas acciones y representar el flujo de control de una acción a otra.
Mientras nos concentramos en el desarrollo de funciones, se presta muy poca atención a
los datos que están siendo usados por varias funciones. ¿Qué le ocurre a los datos? ¿Cómo
se ven afectados por las funciones que trabajan sobre ellos?
En un programa que consta de varias funciones, muchos elementos importantes de datos
son declarados como globales de manera que pueden ser accedidos por todas las funciones.
Cada función puede tener sus propios datos locales. La Figura 1.5 muestra la relación entre
los datos y las funciones en un programa orientado a procedimientos.
Los datos globales son más vulnerables a un cambio inadvertido por parte de una función.
En un programa grande es muy difícil identificar qué dato es usado por cada función. En
el caso de que necesitemos revisar una estructura de datos externa, también necesitamos
revisar todas las funciones que acceden a tales datos. Esto proporciona una oportunidad
para que surjan los errores sin enterarnos.
Otro inconveniente serio con el enfoque orientado a procedimientos es que no modela
muy bien los problemas del mundo real. Esto es debido a que las funciones están orientadas
a la acción y no se corresponden realmente con los elementos del problema.
Algunas de las características de la programación orientada a procedimientos son:
 El énfasis se pone en hacer cosas (algoritmos).
 Los programas grandes se dividen en programas más pequeños denominados funciones.
 La mayoría de las funciones comparten datos globales.
BALAGURUSAMY - Programación orie5 5
22/12/2006 13:09:38
Programación orientada a objetos con C++
Fig. 1.5
Relaciones entre datos y funciones en programación orientada a procedimientos
 Los datos se mueven públicamente en el sistema de función en función.
 Las funciones transforman datos de una forma a otra.
 Emplea el enfoque descendente en el diseño del programa.
1.4 Paradigma de programación orientada a objetos
El principal factor que motivó la invención del enfoque orientado a objetos fue eliminar
algunos de los defectos encontrados en el enfoque orientado a procedimientos. POO trata
a los datos como un elemento crítico en el desarrollo del programa y no permite que fluyan
libremente por el sistema. Une los datos con las funciones que operan sobre ellos, y los
protege de modificaciones accidentales por parte de funciones externas. POO permite la
descomposición de un problema en una serie de entidades llamadas objetos y luego construye los datos y las funciones alrededor de estos objetos.
En la Figura 1.6 se muestra la organización de los datos y las funciones en los programas
orientados a objetos. Sólo las funciones asociadas con el objeto pueden acceder a los datos
de un objeto. Sin embargo, las funciones de un objeto pueden acceder a las funciones de
otros objetos.
Algunas de las características llamativas de la programación orientada a objetos son:








El énfasis radica en los datos en lugar de en los procedimientos.
Los programas se dividen en lo que se conoce como objetos.
Las estructuras de datos se diseñan de manera que caracterizan a los objetos.
Las funciones que operan sobre los datos de un objeto se juntan con la estructura
de datos.
Se ocultan los datos y éstos no pueden ser accedidos por funciones externas.
Los objetos se pueden comunicar entre sí a través de las funciones.
Se pueden añadir fácilmente nuevos datos y funciones cuando sea necesario.
Sigue un enfoque ascendente en el diseño del programa.
BALAGURUSAMY - Programación orie6 6
22/12/2006 13:09:38
Orígenes de la programación orientada a objetos
Fig. 1.6
Organización de datos y funciones en POO
La programación orientada a objetos es el concepto más emergente entre los paradigmas
de programación y todavía tiene un significado diferente para distintas personas. Es por
tanto importante disponer de una definición de trabajo de la programación orientada a objetos antes de continuar. Definimos “la programación orientada a objetos como un enfoque
que suministra una forma de modularizar programas por medio de la creación de áreas
de memoria particionadas para tanto datos como funciones que pueden ser usadas como
plantillas para crear bajo demanda copias de tales módulos”. De esta manera, se considera
que un objeto es un área particionada de la memoria de la computadora que almacena datos
y un conjunto de operaciones que pueden acceder a tales datos. Puesto que las particiones
de memoria son independientes, se pueden usar los objetos en varios programas diferentes
sin sufrir modificaciones.
1.5 Conceptos básicos de la programación orientada a objetos
Es necesario comprender algunos de los conceptos usados ampliamente en programación
orientada a objetos. Estos incluyen los siguientes:







Objetos.
Clases.
Abstracción de datos y encapsulación.
Herencia.
Polimorfismo.
Ligadura dinámica.
Pase de mensajes.
En esta sección, discutiremos algunos de estos conceptos con algo de detalle.
BALAGURUSAMY - Programación orie7 7
22/12/2006 13:09:39
Programación orientada a objetos con C++
Objetos
Los objetos son las entidades básicas en tiempo de ejecución en un sistema orientado a objetos. Pueden representar a una persona, un lugar, una cuenta bancaria, una tabla de datos
o cualquier elemento que el programa tenga que manipular. También pueden representar
datos definidos por el usuario tales como vectores, el tiempo y listas. El problema de programación es analizado en términos de objetos y de la naturaleza de la comunicación entre los
mismos. Se deberían elegir los objetos del programa de tal manera que representen lo más
fielmente posible a los objetos del mundo real. Los objetos ocupan espacio en la memoria y
tienen una dirección asociada como un registro en Pascal o una estructura en C.
Cuando se ejecuta un programa, los objetos interactúan entre sí mediante el envío de
mensajes. Por ejemplo, si “cliente” y “cuenta” son dos objetos de un programa, entonces el
objeto cliente puede enviar un mensaje al objeto cuenta solicitando un balance bancario.
Cada objeto contiene datos y código para manipularlos.
Los objetos pueden interaccionar sin tener que conocer los detalles de los datos y del
código de los demás. Es suficiente con conocer el tipo de mensaje aceptado y el tipo de
respuesta devuelto por los objetos. Aunque diferentes autores los representan de manera
distinta, la Figura 1.7 muestra dos notaciones que son popularmente usadas en análisis y
diseño orientado a objetos.
Clases
Ya hemos mencionado que los objetos contienen datos y código para manipular dichos
datos. El conjunto completo de datos y código de un objeto puede constituir un tipo de dato
definido por el usuario con la ayuda de una clase. De hecho, los objetos son variables del
tipo clase. Una vez que se ha definido una clase, podemos crear cualquier número de objetos
pertenecientes a dicha clase.
Cada objeto se asocia con los datos del tipo de la clase con la que está creado. Una clase es
por tanto una colección de objetos del mismo tipo. Por ejemplo, mango, manzana y naranja
son miembros de la clase fruta. Las clases son tipos de datos definidos por el usuario y se
comportan como los tipos intrínsecos de un lenguaje de programación. La sintaxis usada para
crear un objeto no es diferente de la sintaxis usada para crear un objeto entero en C.
Fig. 1.7
BALAGURUSAMY - Programación orie8 8
Dos formas de representar un objeto
22/12/2006 13:09:39
Orígenes de la programación orientada a objetos
Si se ha definido fruta como una clase, entonces la instrucción
fruta mango;
creará un objeto mango perteneciente a la clase fruta.
Abstracción de datos y encapsulación
A la envoltura de datos y funciones en una sola unidad (llamada clase) se conoce como
encapsulación. La encapsulación de datos es la característica más llamativa de una clase.
Los datos no son accesibles al mundo exterior y solamente aquellas funciones que están
envueltas en la clase pueden acceder a ellos. Estas funciones proporcionan la interfaz entre
los datos del objeto y el programa. A este aislamiento de los datos del acceso directo por el
programa se le denomina ocultación de los datos u ocultación de la información.
La abstracción se refiere al acto de representar las características esenciales sin incluir
los detalles de fondo o las explicaciones. Las clases usan el concepto de abstracción y se
definen como una lista de atributos abstractos tales como tamaño, peso y coste, y funciones
para operar sobre estos atributos. Ellas encapsulan todas las propiedades esenciales de
los objetos que van a ser creados. A los atributos se les denomina algunas veces miembros
dato ya que ellos almacenan la información. A las funciones que operan sobre estos datos
se les denomina algunas veces métodos o funciones miembro.
Debido a que las clases usan el concepto de abstracción de datos, también se les conoce
como Tipos Abstractos de Datos (TAD).
Herencia
La herencia es el proceso por el que los objetos de una clase adquieren las propiedades de
los objetos de otra clase. Ello implica el concepto de clasificación jerárquica. Por ejemplo,
el pájaro ‘petirrojo’ forma parte de la clase ‘pájaro volador’ la cual forma parte de nuevo
de la clase ‘pájaro’. El principio que subyace en este tipo de división es que cada clase derivada comparte características comunes con la clase de la cual se deriva como se ilustra
en la Figura 1.8.
En POO, el concepto de herencia suministra la idea de reusabilidad. Esto significa que
podemos añadir características a una clase existente sin modificarla. Ello es posible al derivar una nueva clase a partir de otra existente. La nueva clase tendrá las características
combinadas de ambas clases. El verdadero atractivo y potencia del mecanismo de herencia
es que permite al programador reutilizar una clase que es casi, pero no exactamente, lo que
quiere, y adaptar la clase de tal manera que no introduzca efectos laterales indeseables
en el resto de las clases.
Observe que cada sub-clase define solamente aquellas características que son exclusivas
de la misma. Sin el uso de la clasificación, cada clase tendría que incluir explícitamente
todas sus características.
Polimorfismo
El polimorfismo es otro concepto importante en POO. Polimorfismo, un vocablo griego,
significa la posibilidad de tomar más de una forma. Una operación puede exhibir diferen-
BALAGURUSAMY - Programación orie9 9
22/12/2006 13:09:39
10
Programación orientada a objetos con C++
Fig. 1.8
Propiedad de herencia
tes comportamientos en diferentes situaciones. El comportamiento depende de los tipos
de datos usados en la operación. Por ejemplo, consideremos la operación de adición. Para
dos números, la operación generará su suma. Si los operandos son cadenas de caracteres,
entonces la operación generará una tercera cadena por concatenación. Al proceso de hacer
que un operador exhiba diferentes comportamientos en diferentes situaciones se le conoce
como sobrecarga del operador.
La Figura 1.9 ilustra cómo un solo nombre de función se puede usar para manipular un
número diferente y tipos diferentes de argumentos. Esto es algo similar a que una palabra
concreta tenga varios significados dependiendo del contexto. Al uso de un solo nombre de función para realizar diferentes tipos de tareas se le conoce como sobrecarga de la función.
El polimorfismo juega un papel importante al permitir que los objetos tengan diferentes
estructuras internas para compartir la misma interfaz externa. Esto significa que se puede
acceder de la misma manera a una clase general de operaciones incluso aunque las acciones
específicas asociadas con cada operación puedan diferir. El polimorfismo es ampliamente
usado al implementar la herencia.
Ligadura dinámica
Por ligadura se entiende el enlace de una llamada a un procedimiento con el código a ejecutar
en respuesta a la llamada. Ligadura dinámica (también conocida como última ligadura)
BALAGURUSAMY - Programación orie10 10
22/12/2006 13:09:40
Orígenes de la programación orientada a objetos
Fig. 1.9
11
Polimorfismo
significa que el código asociado con una llamada a un procedimiento dado no es conocido
hasta el instante de la llamada en tiempo de ejecución. Está asociada con el polimorfismo
y la herencia. Una llamada a una función asociada con una referencia polimórfica depende
del tipo dinámico de dicha referencia.
Consideremos el procedimiento “dibujar” de la Figura 1.9. Por herencia, cada objeto
tendrá este procedimiento. Sin embargo, su algoritmo es único para cada objeto y por tanto
el procedimiento dibujar estará redefinido en cada clase que define al objeto. En tiempo de
ejecución, se llamará al código que iguale al objeto bajo la referencia actual.
Pase de mensajes
Un programa orientado a objetos consta de un conjunto de objetos que se comunican entre
sí. El proceso de programar en un lenguaje orientado a objetos, por tanto, involucra los
siguientes pasos básicos:
1. Creación de las clases que definen los objetos y su comportamiento,
2. Creación de los objetos a partir de las definiciones de clase, y
3. Establecimiento de la comunicación entre objetos.
Los objetos se comunican entre sí enviando y recibiendo información de la misma manera que las personas se pasan mensajes entre ellas. El concepto de pase de mensajes lo
hace más fácil que hablar sobre la construcción de sistemas que directamente modelan o
simulan a sus réplicas del mundo real.
Un mensaje para un objeto es una solicitud para la ejecución de un procedimiento, y por
tanto invocará a una función (procedimiento) en el objeto receptor que genere el resultado
deseado. El pase de mensajes implica la especificación del nombre del objeto, el nombre de
la función (mensaje) y la información a enviar.
BALAGURUSAMY - Programación orie11 11
22/12/2006 13:09:40
12
Programación orientada a objetos con C++
Ejemplo:
Los objetos tienen un ciclo de vida. Ellos pueden ser creados y destruidos. La comunicación con un objeto es factible sólo a lo largo de su vida.
1.6 Ventajas de la POO
POO ofrece varias ventajas tanto para el diseñador del programa como para el usuario.
La orientación a objetos contribuye a la solución de muchos problemas asociados con el
desarrollo y la calidad de los productos software. La nueva tecnología promete mayor productividad del programador, mejor calidad del software y menor coste de mantenimiento.
Las principales ventajas son:
 Por medio de la herencia, podemos eliminar código redundante y extender el uso
de clases existentes.
 Podemos construir programas a partir de módulos de trabajo estándar que se comunican entre sí, en lugar de tener que empezar desde cero la escritura del código. Esto
conduce a un ahorro en el tiempo de desarrollo y a una productividad mayor.
 El principio de ocultación de los datos ayuda al programador a construir programas
seguros que no pueden ser invadidos por código de otras partes del programa.
 Es posible tener múltiples copias de un objeto que coexisten sin ninguna interferencia.
 Es posible transformar objetos del dominio del problema a otros en los programas.
 Es fácil dividir el trabajo de un proyecto basado en objetos.
 El enfoque del diseño centrado en los datos nos permite capturar más detalles de
un modelo de forma que se puedan implementar.
 Se pueden mejorar y actualizar fácilmente los sistemas orientados a objetos desde
los pequeños hasta los grandes sistemas.
 Las técnicas de pase de mensajes para la comunicación entre objetos simplifican
mucho las descripciones de las interfaces con sistemas externos.
 Se puede gestionar fácilmente la complejidad del software.
Mientras sea posible incorporar todas estas características en un sistema orientado a
objetos, su importancia depende del tipo de proyecto y la preferencia del programador. Hay
una serie de cuestiones que necesitan ser abordadas para recoger los beneficios establecidos anteriormente. Por ejemplo, las bibliotecas de objetos deben de estar disponibles para
su reutilización. La tecnología está aún en desarrollo y los productos actuales pueden ser
BALAGURUSAMY - Programación orie12 12
22/12/2006 13:09:41
Orígenes de la programación orientada a objetos
13
rápidamente sustituidos. Es necesario desarrollar controles y protocolos estrictos si no se
quiere comprometer la reutilización. Desarrollar un software que sea fácil de usar lo hace
difícil de construir. Se espera que las herramientas de la programación orientada a objetos
ayudarán a gestionar este problema.
1.7 Lenguajes orientados a objetos
La programación orientada a objetos no es lo que hace falta en un lenguaje particular. Lo
mismo que la programación estructurada, los conceptos de POO se pueden implementar
usando lenguajes tales como C y Pascal, Sin embargo, la programación se hace pesada y
puede generar confusión cuando los programas crecen de tamaño. Un lenguaje que esté
especialmente diseñado para soportar los conceptos de POO se vuelve más adecuado para
implementarlos.
Los lenguajes deberían soportar varios de los conceptos de POO para proclamar que están
orientados a objetos. Dependiendo de las características que soportan, se pueden clasificar
en las dos categorías siguientes:
1. Lenguajes de programación basados en objetos.
2. Lenguajes de programación orientados a objetos.
La programación basada en objetos es el estilo de programación que soporta principalmente encapsulación e identidad de objetos. Las características principales que se requieren
para la programación basada en objetos son:




Encapsulación de datos.
Ocultación de datos y mecanismos de acceso.
Inicialización automática y aclarado de objetos.
Sobrecarga de operadores.
Se dice que los lenguajes que soportan programación con objetos son lenguajes de programación basados en objetos. No soportan la herencia ni la ligadura dinámica. Ada es un
típico lenguaje de programación basado en objetos.
La programación orientada a objetos incorpora todas las características de la programación basada en objetos junto con dos características adicionales, a saber, herencia y ligadura
dinámica. La programación orientada a objetos puede por tanto estar caracterizada por la
siguiente sentencia:
Características basadas en objetos + herencia + ligadura dinámica
Entre los lenguajes que soportan estas características se incluyen C++, Smalltalk, Object Pascal y Java. Hay un gran número de lenguajes de programación basados en objetos
y orientados a objetos. La Tabla 1.1 lista algunos lenguajes POO populares de propósito
general y sus características.
Como se aprecia en la Tabla 1.1, todos los lenguajes proporcionan polimorfismo y ocultación de datos. Sin embargo, muchos de ellos no proporcionan facilidades para concurrencia,
persistencia y genericidad. Eiffel, Ada y C++ proporcionan facilidad genérica, la cual es
una construcción importante para soportar reutilización. Sin embargo, persistencia (un
BALAGURUSAMY - Programación orie13 13
22/12/2006 13:09:41
1
Programación orientada a objetos con C++
Tabla 1.1 Características de algunos lenguajes POO
Características
Simula
*
Smalltalk
*
Objective
C
C++
Ada
**
Ligadura
(primera o última)
Ambas

Última

Ambas

Polimorfismo



Ocultación de datos







Concurrencia

Pobre
Pobre
Pobre
Difícil
No
No
Herencia




No




Herencia
múltiple
No



No
—
—

No
Recogida
de residuos




No




Persistencia
No
Prometida
No
No
Como
L3G
No
No
Algo de
soporte

Genericidad
No
No
No


No
No

No
Bibliotecas de objetos 



No
mucho




Ambas Primera




Object
Pascal
Turbo
Pascal
Última

Primera Primera Ambas





Eiffel
*
Java
*




Prometida 
* Auténticos lenguajes orientados a objetos
** Lenguajes basados en objetos
Otros son extensiones de lenguajes convencionales
proceso de almacenamiento de objetos) no está totalmente soportada por ninguno de ellos.
En Smalltalk, aunque se puede grabar en disco todo el estado actual de ejecución, aún los
objetos individuales no se pueden almacenar en un archivo externo.
Comercialmente, C++ tiene solo 10 años de antigüedad, Smalltalk y Objetive C 13 años
y Java sólo 5 años. Aunque Simula ha existido durante más de dos décadas, ha pasado
la mayor parte de su vida en un entorno de investigación. Sin embargo, el campo es tan
reciente que no debería ser juzgado tan severamente.
El uso de un lenguaje concreto depende de las características y requisitos de una aplicación, del impacto de la elección en la organización y de la reutilización de los programas
existentes. C++ se ha convertido en la actualidad en el lenguaje POO de propósito general
más elegido, más práctico y más ampliamente usado en la industria.
1.8 AplicacionesdelaPOO
La POO se ha convertido en la actualidad en una de las palabras pegadizas de la programación. Aparece una gran cantidad de excitación e interés entre los ingenieros de software
en usar POO. Las aplicaciones de la POO están empezando a ganar importancia en muchas
áreas. La aplicación más popular de la programación orientada a objetos, hasta ahora, ha
sido en el área del diseño de interfaces de usuario tales como “Windows”. Se han desarrollado cientos de sistemas de ventanas usando las técnicas de POO.
BALAGURUSAMY - Programación orie14 14
22/12/2006 13:09:42
Orígenes de la programación orientada a objetos
15
Los sistemas reales de las empresas son a menudo mucho más complejos y contienen
más objetos con atributos y métodos complicados. POO es útil en estos tipos de aplicaciones
ya que puede simplificar un problema complejo. Entre las áreas que auguran en el futuro
la aplicación de la POO se incluyen:








Sistemas de tiempo real.
Simulación y modelado.
Bases de datos orientadas a objetos.
Hipertexto, hipermedia y expertexto.
IA y sistemas expertos.
Redes neuronales y programación paralela.
Soporte de decisión y sistemas de automatización de oficinas.
Sistemas CIM/CAM/CAD.
La riqueza del entorno POO ha permitido a la industria del software mejorar no sólo la
calidad de los sistemas software sino también su productividad. La tecnología orientada a
objetos está desde luego cambiando la forma de pensar, analizar, diseñar e implementar
de los ingenieros del software.
RESUMEN
 La tecnología del software ha evolucionado a lo largo de una serie de fases durante
 La fase más popular hasta hace poco fue la programación orientada a procedimientos
 POP emplea el enfoque de programación descendente donde un problema se visualiza
las cinco últimas décadas.
(POP).





como una secuencia de tareas a realizar. Se escribe una serie de funciones para
implementar dichas tareas.
POP tiene dos inconvenientes principales, (1) los datos se mueven libremente en
el programa y son por tanto vulnerables a cambios causados por cualquier función
del programa, y (2) no modela muy bien los problemas del mundo real.
La programación orientada a objetos (POO) fue inventada para superar los inconvenientes de la POP. Emplea el enfoque de programación ascendente. Trata a
los datos como un elemento crítico en el desarrollo del programa y no permite que
fluyan libremente por el sistema. Une los datos con las funciones que operan sobre
ellos en una estructura de datos llamada clase. A esta característica se le denomina
encapsulación de datos.
En POO, un problema es considerado como una colección de entidades llamadas
objetos. Los objetos son instancias de las clases.
Al aislamiento de los datos del acceso directo por el programa se denomina ocultación de los datos.
La abstracción de datos se refiere a juntar características esenciales sin incluir
detalles de fondo.
BALAGURUSAMY - Programación orie15 15
22/12/2006 13:09:43
1
Programación orientada a objetos con C++
 La herencia es el proceso por el cual los objetos de una clase adquieren propiedades
 Polimorfismo significa un nombre, múltiples formas. Nos permite tener más de una
de objetos de otra clase.





función con el mismo nombre en un programa. También permite la sobrecarga de
operadores de manera que una operación pueda exhibir diferentes comportamientos
en diferentes situaciones.
Ligadura dinámica significa que el código asociado con un procedimiento dado no
se conoce hasta el instante de la llamada en tiempo de ejecución.
El pase de mensajes implica especificar el nombre del objeto, el nombre de la función
(mensaje) y la información a enviar.
La tecnología orientada a objetos ofrece varias ventajas sobre los métodos de programación convencionales, la más importante es la reusabilidad.
Las aplicaciones de la tecnología POO han adquirido importancia en casi todas las
áreas de computación incluyendo los sistemas de negocios en tiempo real.
Hay una serie de lenguajes que soportan el paradigma de la programación orientada
a objetos. Son populares entre ellos C++, Smalltalk y Java. C++ se ha convertido
en la actualidad en un lenguaje estándar de la industria.
Términos clave
























abstracción de datos
Ada
bibliotecas de objetos
C++
clases
clasificación jerárquica
concurrencia
datos globales
datos locales
diagramas de flujo
Eiffel
encapsulación de datos
funciones
funciones miembro
herencia
herencia múltiple
Java
lenguaje ensamblador
lenguaje máquina
lenguajes orientados a objetos
ligadura dinámica
ligadura primera
ligadura última
métodos
BALAGURUSAMY - Programación orie16 16






















miembros dato
Object Pascal
Objective C
objetos
ocultación de datos
pase de mensajes
persistencia
polimorfismo
programación ascendente
programación basada en objetos
programación descendente
programación estructurada
programación modular
programación orientada
a objetos
programación orientada
a procedimientos
recogida de residuos
reusabilidad
Simula
Smalltalk
sobrecarga de función
sobrecarga de operador
Turbo Pascal
22/12/2006 13:09:44
Orígenes de la programación orientada a objetos
17
Preguntas de repaso
1.1 ¿Cuáles piensa que son los principales retos a los que se enfrenta la industria
del software en la actualidad?
1.2 Discuta brevemente la evolución del software durante el periodo 1950–1990.
1.3 ¿Qué es la programación orientada a procedimientos? ¿Cuáles son sus principales
características?
1.4 Discuta un enfoque para el desarrollo de programas orientados a procedimientos.
1.5 Describa cómo comparten datos las funciones en un programa orientado a procedimientos.
1.6 ¿Qué es la programación orientada a objetos? ¿En qué difiere de la programación
orientada a procedimientos?
1.7 ¿Cómo se organizan las funciones y los datos en un programa orientado a objetos?
1.8 ¿Cuáles son las ventajas exclusivas de un paradigma de programación orientada
a objetos?
1.9 Distinga entre los siguientes términos:
(b) Objetos y clases.
(c) Abstracción de datos y encapsulación de datos.
(d) Herencia y polimorfismo.
(e) Ligadura dinámica y pase de mensajes.
1.10 ¿Qué clases de cosas se pueden convertir en objetos en POO?
1.11 Describa la herencia cuando se aplica a la POO.
1.12 ¿Qué entiende por ligadura dinámica? ¿Qué utilidad tiene en POO?
1.13 ¿En que difiere el enfoque orientado a objetos del enfoque basado en objetos?
1.14 Liste algunas áreas de aplicación de la tecnología POO.
1.15 Determine si las siguientes sentencias son VERDADERO o FALSO.
(a) En programación orientada a procedimientos, todos los datos son compartidos por todas las funciones.
(b) En programación orientada a procedimientos, se pone especial énfasis en
los algoritmos en lugar de en los datos.
(c) Una de las características destacables de la programación orientada a objetos es la división de los programas en objetos que representan entidades
del mundo real.
(d) La envoltura de datos de diferentes tipos en una sola unidad se conoce como
encapsulación.
(e) Un problema de la programación orientada a objetos es que una vez que se
crea una clase, ésta nunca se puede modificar.
(f) La herencia significa la posibilidad de reutilizar los valores de los datos de
un objeto.
(g) El polimorfismo se utiliza ampliamente al implementar la herencia.
(h) Los programas orientados a objetos se ejecutan mucho más rápido que los
programas convencionales.
(i) Los sistemas orientados a objetos se pueden escalar mejor desde los pequeños hasta los grandes.
(j) El enfoque orientado a objetos no se puede usar para crear bases de datos.
BALAGURUSAMY - Programación orie17 17
22/12/2006 13:09:44