• No se han encontrado resultados

Orígenes de la programación orientada a objetos

N/A
N/A
Protected

Academic year: 2021

Share "Orígenes de la programación orientada a objetos"

Copied!
17
0
0

Texto completo

(1)

1

Orígenes de la programación

orientada a objetos

1.1 La crisis del software

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 pro-blemas 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?

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  Polimorfi smo  Ligadura dinámica  Pase de mensajes

 Lenguajes orientados a objetos  Lenguajes basados en objetos

(2)

 ¿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 notable-mente 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. Correctitud. 2. Mantenibilidad. 3. Reusabilidad.

4. Apertura e interoperabilidad. 5. Portabilidad.

(3)

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 programa-ción.

Entre éstos se incluyen técnicas tales como programación modular, programación

descen-dente, 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

(4)

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 moderada-mente 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 pro-gramación convencionales al incorporar lo mejor de las características de la propro-gramació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

(5)

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 fun-ciones.

 La mayoría de las funciones comparten datos globales.

(6)

 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 cons-truye 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.

(7)

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 ob-jetos antes de continuar. Definimos “la programación orientada a obob-jetos 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.

(8)

Objetos

Los objetos son las entidades básicas en tiempo de ejecución en un sistema orientado a obje-tos. 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 progra-mació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.

(9)

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 de-rivada 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 de-rivar 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

(10)

diferen-tes comportamientos en diferendiferen-tes 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 fun-ción para realizar diferentes tipos de tareas se le conoce como sobrecarga de la funfun-ció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)

(11)

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 ma-nera 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.

(12)

Ejemplo:

Los objetos tienen un ciclo de vida. Ellos pueden ser creados y destruidos. La comunica-ció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 pro-ductividad 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 comu-nican 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

interfe-rencia.

 Es posible transformar objetos del dominio del problema a otros en los progra-mas.

 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 estableci-dos 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

(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 principal-mente 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 pro-gramació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 programa-ció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, Ob-ject 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 oculta-ció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

(14)

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 apli-cació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 Aplicaciones de la POO

La POO se ha convertido en la actualidad en una de las palabras pegadizas de la progra-mació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 desarro-llado cientos de sistemas de ventanas usando las técnicas de POO.

Tabla 1.1 Características de algunos lenguajes POO

Características Simula Smalltalk Objective C++ Ada Object Turbo Eiffel Java * * C ** Pascal Pascal * *

Ligadura Ambas Última Ambas Ambas Primera Última Primera Primera Ambas (primera o última)          Polimorfi smo          Ocultación de datos          Concurrencia  Pobre Pobre Pobre Difícil No No Prometida  Herencia     No     Herencia No    No — —  No múltiple Recogida     No     de residuos Como Algo de

Persistencia No Prometida No No L3G No No soporte  Genericidad No No No   No No  No Bibliotecas de objetos     No    

mucho

* Auténticos lenguajes orientados a objetos ** Lenguajes basados en 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 las cinco últimas décadas.

La fase más popular hasta hace poco fue la programación orientada a procedimientos (POP).

POP emplea el enfoque de programación descendente donde un problema se visualiza 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 in-convenientes 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

oculta-ción de los datos.

La abstracción de datos se refiere a juntar características esenciales sin incluir detalles de fondo.

(16)

La herencia es el proceso por el cual los objetos de una clase adquieren propiedades de objetos de otra clase.

Polimorfismo significa un nombre, múltiples formas. Nos permite tener más de una 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 pro-gramació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.

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

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

Términos clave

(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

pro-cedimientos.

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 compar-tidos 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 ob-jetos es la división de los programas en obob-jetos 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.

Referencias

Documento similar

Where possible, the EU IG and more specifically the data fields and associated business rules present in Chapter 2 –Data elements for the electronic submission of information

The 'On-boarding of users to Substance, Product, Organisation and Referentials (SPOR) data services' document must be considered the reference guidance, as this document includes the

In medicinal products containing more than one manufactured item (e.g., contraceptive having different strengths and fixed dose combination as part of the same medicinal

Products Management Services (PMS) - Implementation of International Organization for Standardization (ISO) standards for the identification of medicinal products (IDMP) in

Products Management Services (PMS) - Implementation of International Organization for Standardization (ISO) standards for the identification of medicinal products (IDMP) in

This section provides guidance with examples on encoding medicinal product packaging information, together with the relationship between Pack Size, Package Item (container)

Package Item (Container) Type : Vial (100000073563) Quantity Operator: equal to (100000000049) Package Item (Container) Quantity : 1 Material : Glass type I (200000003204)

Entre nosotros anda un escritor de cosas de filología, paisano de Costa, que no deja de tener ingenio y garbo; pero cuyas obras tienen de todo menos de ciencia, y aun