¿Cuáles son las ventajas y desventajas de la programación procedimental y la programación orientada a objetos?

Programación orientada a objetos

Autor: anónimo Fuente del artículo: desconocido Clics: 11677 Hora de actualización: 2005-10-14

Autor: Ramchandra Garg

Crisis de software ( Crisis de software)

La tecnología del software siempre está en un estado de constante desarrollo y cambio, con nuevas herramientas y tecnologías surgiendo una tras otra. Esto requiere que la industria del software y los ingenieros de software busquen constantemente nuevas formas de diseño y desarrollo de software. Este requisito se ha vuelto más urgente debido a la creciente complejidad de los sistemas de software y la competencia cada vez más feroz dentro de la industria del software. Para superar la crisis de software provocada por este requisito, se deben resolver los siguientes problemas:

1. ¿Cómo representar la entidad real del problema en el diseño del sistema?

2. ¿Cómo diseñar un sistema con interfaces abiertas?

3. ¿Cómo garantizar la reutilización y escalabilidad de los módulos?

4. ¿Cómo desarrollar módulos que puedan tolerar los cambios que puedan ocurrir en el futuro?

5. ¿Cómo mejorar la productividad del software y reducir la sobrecarga del software?

6. ¿Cómo gestionar el horario?

7. ¿Cómo mejorar la calidad del software?

8. ¿Cómo industrializar el proceso de desarrollo de software?

Los problemas surgen cuando los productos de software no se completan, no se utilizan o se lanzan con diversos errores. Además, los cambios en las necesidades de los usuarios también se han convertido en un tema importante. Muchos informes sobre implementación de software indican que la calidad de un producto de software debe evaluarse cuidadosamente antes de su lanzamiento y uso. En términos generales, los factores de calidad que deben considerarse en la evaluación del estado incluyen:

1. Corrección (corrección)

2. Mantenibilidad (mantenimiento)

3. Capacidad de reutilización

4. Apertura e interpretabilidad.

5. Portabilidad

6. Seguridad (seguridad)

7. Integridad (Integridad)

8. amistad)

Evolución del software (evolución del software)

Ernest Taylor, un famoso escritor en el campo de la inteligencia artificial, comparó el desarrollo de la tecnología del software con el crecimiento de los árboles. Como un árbol, el software evoluciona en distintas etapas, llamadas capas. Durante los últimos cuarenta años, estas capas se han ido acumulando gradualmente, y cada capa se ha desarrollado a partir de la anterior. La figura 1 muestra este proceso. Pero cuando se trata de la longevidad de las ponedoras, la analogía del árbol se rompe. En un sistema de software, cada capa funciona constantemente, mientras que en un árbol, sólo la capa superior es útil.

La programación orientada a objetos es un nuevo método de programación. Desde la invención de las computadoras, los métodos de programación han sufrido enormes cambios para adaptarse a programas cada vez más complejos. Después de la invención del lenguaje ensamblador, los programadores finalmente pudieron usar símbolos para representar esas instrucciones de la máquina, de modo que pudieran escribir programas más largos y complejos. A medida que los programas crecieron en tamaño, se introdujeron lenguajes de alto nivel, lo que brindó a los programadores más herramientas para manejar la creciente complejidad. El primer lenguaje de uso común fue FORTRAN. Sin embargo, aunque FORTRAN fue un primer paso importante, el código escrito en él rara vez era claro y comprensible.

La idea de la programación estructurada nació en 1960. Lenguajes como C y Pascal fomentan fuertemente este estilo de programación. Los lenguajes de programación estructurados facilitan la escritura de programas más complejos. Sin embargo, una vez que un proyecto alcanza cierto tamaño, incluso con métodos de programación estructurados, las cosas pueden volverse incontrolables.

En la evolución de los métodos de programación, cada gran avance ha permitido a los programadores lidiar con una mayor complejidad. En cada paso del camino, se utilizaron nuevos métodos y se desarrollaron las mejores ideas de los métodos anteriores. Hoy en día, muchos proyectos han crecido aún más en escala. Para resolver este problema, surgió el método de programación orientada a objetos.

Antes de presentar en detalle la programación orientada a objetos, primero comprendamos brevemente el método de programación orientada a procesos. En un enfoque de programación orientado a procesos, un problema se ve como una secuencia de tareas a realizar, como lectura, computación e impresión. Se utilizan muchas funciones para realizar estas tareas. El foco del problema está en las funciones. La Figura 2 muestra una estructura típica de un programa orientado a procesos. La técnica de descomposición jerárquica se utiliza para identificar una secuencia de tareas que deben completarse para resolver un problema específico.

La tarea básica de la programación orientada a procesos es escribir una secuencia de instrucciones para su ejecución por computadora y organizar estas instrucciones de manera funcional. Normalmente utilizamos diagramas de flujo para organizar estas acciones y describir el flujo de control de una acción a otra.

Cuando nos centramos en desarrollar funciones, rara vez prestamos atención a los datos utilizados por múltiples funciones. ¿Qué pasó con estos datos? ¿Qué efecto tienen sobre ellos las funciones que utilizan estos datos?

En un programa multifuncional, muchos datos importantes se colocan en el área de datos globales para que todas las funciones puedan acceder a ellos. Cada función puede tener sus propios datos locales. La Figura 3 muestra la relación entre funciones y datos en un programa orientado a procesos.

Modelo de programación orientada a objetos

El principal punto de partida para inventar métodos de programación orientados a objetos es compensar algunas deficiencias de los métodos de programación orientados a procesos. La programación orientada a objetos trata los datos como un elemento básico del desarrollo del programa y no permite que los datos fluyan libremente en el sistema. Vincula estrechamente los datos con las funciones que operan en ellos y protege los datos de cambios inesperados realizados por funciones externas. La programación orientada a objetos nos permite dividir un problema en una serie de entidades (estas entidades se denominan objetos) y luego crear datos y funcionalidades en torno a estas entidades. La estructura organizativa de datos y funciones en la programación orientada a objetos se muestra en la Figura 4.

Los datos de un objeto no pueden acceder a las funciones de otros objetos, pero las funciones de un objeto pueden acceder a las funciones de otros objetos.

Algunas de las características más destacadas de la programación orientada a objetos incluyen:

La programación se centra en datos en lugar de procesos;

Los programas se dividen en los llamados objetos;

La estructura de datos está diseñada para expresar las características del objeto;

Las funciones, como operaciones sobre los datos del objeto, están estrechamente integradas con la estructura de datos;

Los datos están ocultos y no pueden ser utilizados por funciones externas. Acceso;

Los objetos pueden comunicarse a través de funciones;

Se pueden agregar fácilmente nuevos datos y funciones cuando sea necesario;

Seguir el método de diseño del proceso de programación de abajo hacia arriba.

La programación orientada a objetos es un concepto nuevo en los patrones de programación y puede tener diferentes significados para diferentes personas. Por lo tanto, antes de continuar a continuación, lo mejor es dar una definición de programación orientada a objetos. Nuestra definición de programación orientada a objetos es "La programación orientada a objetos es un método para proporcionar espacios de memoria separados para datos y funciones que pueden usarse como plantillas para crear copias de módulos similares cuando sea necesario". Este método de programación se llama programación orientada a objetos. "

Como se puede ver en la definición anterior, un objeto se considera como un intervalo independiente en la memoria de la computadora, en el que se almacenan datos y un conjunto de operaciones que pueden acceder a los datos. Porque el intervalo de memoria es Independientes entre sí, por lo que el objeto se puede utilizar en muchos programas diferentes sin modificaciones.

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

La tecnología de programación orientada a objetos (POO) proviene de la estructurada. La programación tomar buenas ideas y combinarlas con algunas ideas nuevas y poderosas proporciona un enfoque completamente nuevo para su trabajo de programación. Normalmente, en el estilo de programación orientada a objetos, se divide un problema en algunos subconjuntos relacionados, cada subconjunto contiene datos relacionados y. funciones Al mismo tiempo, dividirá estos subconjuntos en diferentes niveles de alguna manera. Un objeto es una variable definida de un determinado tipo

Conceptos básicos de programación orientada a objetos

Como término, la explicación "orientada a objetos" difiere de persona a persona. Por lo tanto, es necesario comprender algunos conceptos que se utilizan ampliamente en la programación orientada a objetos. En esta sección, discutiremos lo siguiente:

1. Objetos

2.

3. Abstracción de datos

4. Patrimonio

5. p>

6. Encapsulación de datos

7. Polimorfismo

8. Transferencia de información

Objetivo

En un entorno orientado a objetos. En el sistema, el objeto es la entidad básica en tiempo de ejecución. Se puede usar para representar una persona o una cuenta bancaria, una tabla de datos o cualquier cosa que deba ser procesada por el programa. datos, como vectores, tiempos o listas. En la programación orientada a objetos, el análisis de problemas generalmente se basa en objetos y las relaciones naturales entre objetos.

Como se mencionó anteriormente, un objeto ocupa un cierto espacio en la memoria y tiene una dirección asociada, al igual que la estructura registrada en Pascal y C.

Cuando un programa se está ejecutando, los objetos interactúan enviándose mensajes entre sí. Por ejemplo, un programa contiene un objeto "Cliente" y un objeto "Cuenta", y el objeto Cliente puede enviar mensajes al objeto Cuenta para consultar su cuenta bancaria. Cada objeto contiene datos y código para manipular los datos. Los objetos aún pueden interactuar entre sí incluso sin conocer los detalles de los datos y códigos de cada uno. Sólo necesita saber los tipos de mensajes que el objeto puede aceptar y los tipos de respuestas que devuelve, aunque diferentes personas los implementan de diferentes maneras.

Tipos

Como mencionamos anteriormente, los objetos contienen datos y el código para manipularlos. Todos los datos y el código contenidos en un objeto se pueden formar en un tipo de datos definido por el usuario a través de clases. De hecho, el objeto es una variable de tipo clase. Una vez que se define una clase, podemos crear múltiples objetos de esta clase, cada objeto está relacionado con un conjunto de datos y el tipo de este conjunto de datos se define en la clase. Por tanto, una clase es una abstracción de objetos del mismo tipo. Por ejemplo, los mangos, las manzanas y las naranjas son todos objetos de la clase de frutas. Una clase es un tipo de datos definido por el usuario, pero en un lenguaje de programación se comporta igual que un tipo de datos integrado. Por ejemplo, la sintaxis para crear un objeto de clase es exactamente la misma que para crear un objeto entero. Si Fruit se define como una clase, la declaración

Fruit Mango;

crea un objeto de la clase Fruit, mango.

Abstracción y encapsulación de datos

El acto de empaquetar datos y funcionalidades en una unidad (llamada clase) se llama encapsulación. La encapsulación de datos es la característica más típica de una clase. El mundo exterior no puede acceder a los datos y solo se puede acceder a ellos mediante funciones encapsuladas en la misma clase. Estas funciones proporcionan la interfaz entre los datos del objeto y los programas. El concepto de evitar que un programa acceda directamente a los datos se denomina "ocultación de datos".

La abstracción se refiere al acto de expresar sólo características centrales sin describir detalles de fondo. Las clases utilizan conceptos abstractos y se definen como un conjunto de propiedades abstractas, como tamaño, peso y precio, y funciones que manipulan estas propiedades. Las clases encapsulan todas las propiedades principales del objeto que se está creando. Debido a que las clases utilizan el concepto de abstracción de datos, se denominan tipos de datos abstractos (ADT).

Embalaje

El mecanismo de empaquetado une datos y código para evitar interferencias externas e incertidumbre. También permite la creación de objetos. En pocas palabras, un objeto es una entidad lógica que encapsula datos y código que opera sobre los datos.

En un objeto, parte del código y/o algunos datos pueden ser privados y el mundo exterior no puede acceder a ellos. De esta manera, los objetos proporcionan distintos niveles de protección para los datos internos, evitando que partes no relacionadas del programa cambien accidentalmente o hagan un mal uso de las partes privadas del objeto.

Herencia

La herencia es un método que permite que un objeto de un tipo obtenga las propiedades de un objeto de otro tipo. Apoya el concepto de clasificación jerárquica. Por ejemplo, el petirrojo es a la vez un pájaro y un pájaro. Como se muestra en la Figura 5, el principio de esta clasificación es que cada subclase tiene características comunes de la clase principal.

En POO, el concepto de herencia admite la reutilización del código, es decir, podemos agregar nuevas características a las clases existentes sin cambiar la clase. Esto se puede lograr derivando una nueva clase a partir de esta clase existente. Esta nueva clase tendrá las características de la clase original, así como nuevas características. La belleza y el poder del mecanismo de herencia es que permite a los programadores tomar clases existentes (clases que están cerca de las necesidades, pero que no las satisfacen completamente) y modificarlas de alguna manera sin afectar otras cosas.

Tenga en cuenta que cada subclase define solo las características exclusivas de esa clase. Sin clasificación jerárquica, cada clase debe tener todas sus características claramente definidas.

Polimórfico

El polimorfismo es otro concepto importante de la programación orientada a objetos. Polimorfismo significa la capacidad de algo de tomar diferentes formas. Por ejemplo, las operaciones pueden comportarse de forma diferente en distintas instancias. Este comportamiento depende del tipo de datos con los que se opera. Por ejemplo, en la operación de suma, si los datos que se operan son un número, se sumarán dos números. Si los datos con los que se opera es una cadena, concatenará las dos cadenas.

La Figura 6 muestra una función que maneja diferentes números y tipos de argumentos. Al igual que una palabra tiene diferentes significados en diferentes contextos.

El mecanismo polimórfico permite que objetos con diferentes estructuras internas disfruten de la misma interfaz externa. Esto significa que aunque las operaciones específicas de diferentes objetos son diferentes, (esas operaciones) se pueden llamar de la misma manera a través de la clase pública. El polimorfismo se usa ampliamente en la implementación de la herencia.

Los lenguajes de programación orientados a objetos admiten el polimorfismo, que se denomina "una interfaz con múltiples métodos". En pocas palabras, el polimorfismo permite activar un conjunto de acciones relacionadas pero distintas a través de la misma interfaz, lo que puede reducir la complejidad del código. Depende del compilador decidir qué acción tomar en una situación particular sin la intervención manual del programador.

En los programas multifuncionales, muchos datos importantes se declaran como variables globales para que todas las funciones puedan acceder a ellos. Cada función puede tener sus propias variables locales. Las funciones pueden cambiar fácilmente las variables globales sin darse cuenta. En programas grandes, puede resultar difícil distinguir qué variables se utilizan en cada función. Si necesitamos modificar la estructura de datos externos, debemos modificar todas las funciones que acceden a estos datos. Esto puede provocar fácilmente errores.

Otro defecto grave de la programación estructurada es que no simula bien el mundo real. Esto se debe a que las funciones están orientadas a procesos en lugar de corresponder realmente a cada elemento del problema.

Algunas características de la programación orientada a procesos son las siguientes:

Énfasis en hacer (algoritmo);

Los programas grandes se dividen en muchos programas pequeños, llamados funciones. ;

La mayoría de las funciones * * * disfrutan de datos globales;

Los datos abiertos fluyen de una función a otra. Las funciones convierten datos de un formulario a otro.

Adopte el método de programación de arriba hacia abajo.

Enlace dinámico

El enlace se refiere al acto de vincular llamadas a procedimientos con el código correspondiente. El enlace dinámico significa que el código asociado con una llamada a un procedimiento determinado sólo se conoce en tiempo de ejecución. Está estrechamente relacionado con el polimorfismo y la herencia. Las llamadas a funciones para referencias polimórficas dependen del tipo dinámico de la referencia.

Considere el método "dibujar" en la Figura 6. A través de la herencia, cada objeto tiene este proceso. Pero su algoritmo es diferente para diferentes objetos, por lo que el proceso de dibujo debe redefinirse en cada clase. En tiempo de ejecución, se llama al código correspondiente al objeto al que se hace referencia actualmente.

Transferencia de información

Un programa orientado a objetos consta de muchos objetos que necesitan comunicarse entre sí. Por tanto, en los lenguajes de programación orientados a objetos, los principales pasos de la programación son los siguientes:

1. Crear una clase que defina el objeto y su comportamiento

2. a través de la definición de clase;

p>

3. Establecer comunicación entre objetos.

Los objetos se comunican enviando y recibiendo información, de forma similar a la transmisión de información entre personas. El concepto de transferencia de información facilita la simulación directa del mundo real y el establecimiento de comunicación del sistema.

Para un objeto específico, un mensaje es una solicitud para ejecutar un determinado proceso, por lo que el objeto receptor del mensaje llamará a una función (proceso) para producir el resultado esperado. El contenido del mensaje pasado incluye el nombre del objeto que recibe el mensaje, el nombre de la función que se llamará y la información necesaria.

Un objeto tiene un ciclo de vida. Se pueden crear y destruir. Puedes comunicarte con un objeto mientras esté vivo.

Ventajas de la Orientación a Objetos

La POO tiene muchas ventajas, tanto para los programadores como para los usuarios. La orientación a objetos proporciona soluciones a muchos problemas en la expansión de productos de software y el aseguramiento de la calidad. Esta tecnología puede mejorar en gran medida la eficiencia del trabajo de los programadores, mejorar la calidad del software y reducir sus costos de mantenimiento. Sus principales ventajas son las siguientes:

1. A través de la herencia, el código redundante se puede reducir en gran medida y se puede ampliar el uso del código existente.

2. Módulo estándar (aquí llamado "estándar" se refiere a un acuerdo entre programadores) sobre el que construir nuestros programas sin tener que empezar desde cero.

Esto puede reducir el tiempo de desarrollo de software y mejorar la productividad;

3. El concepto de ocultación de datos ayuda a los programadores a proteger los programas de ataques de código externo;

4. los objetos existen al mismo tiempo sin interferir entre sí;

5. Permite que los objetos en el espacio del problema se mapeen directamente al programa;

6. Dividido en partes independientes;

7. Los métodos de diseño centrados en datos nos permiten dominar más detalles del modelo implementable;

8. Los sistemas orientados a objetos pueden actualizarse fácilmente de pequeños a grandes.

9. La descripción de la tecnología de paso de mensajes utilizada en la comunicación entre objetos y interfaces del sistema externo es más sencilla.

10 Es más fácil controlar la complejidad del software.

Si bien todas las características mencionadas anteriormente deben combinarse en un sistema orientado a objetos, su importancia relativa depende del tipo de proyecto y de la preferencia del programador. Para poder obtener algunas de las ventajas mencionadas anteriormente, se deben considerar muchas cosas. Por ejemplo, las bibliotecas de objetos deben ser reutilizables. La tecnología evoluciona constantemente y los productos existentes se actualizarán rápidamente. Si no se implementa la reutilización, se requiere un control y una gestión estrictos.

El software de desarrollo que es fácil de usar suele ser difícil de escribir. Las herramientas de programación orientada a objetos prometen resolver este problema.

Lenguajes de programación orientados a objetos

La tecnología orientada a objetos no es prerrogativa de un lenguaje específico. Al igual que la programación estructurada, los conceptos de programación orientada a objetos se pueden implementar en muchos lenguajes, como C y Pascal. Pero a medida que el programa crece, el trabajo de programación se vuelve engorroso y confuso. Y un lenguaje de programación que admita el concepto de programación orientada a objetos puede simplificar todo.

Un lenguaje debe admitir varios conceptos importantes de programación orientada a objetos antes de que pueda denominarse orientado a objetos. Según las funciones de programación orientada a objetos admitidas, los lenguajes se pueden dividir en las dos categorías siguientes:

1. Lenguajes de programación basados ​​en objetos

2.

Los lenguajes de programación basados ​​en objetos solo admiten encapsulación e identificación de objetos.

Las características importantes admitidas por los lenguajes de programación orientados a objetos son las siguientes:

Encapsulación de datos

Mecanismo de acceso y ocultación de datos

Inicialización automática y eliminación

Sobrecarga del operador

Los lenguajes que admiten programación basada en objetos se denominan lenguajes de programación basados ​​en objetos. No admiten herencia ni enlace dinámico.

Ada es un típico lenguaje de programación basado en objetos.

La programación orientada a objetos no solo incluye las características de la programación basada en objetos, sino que también admite la herencia y el enlace dinámico.

Aplicaciones orientadas a objetos

Las áreas de aplicación más prometedoras de la programación orientada a objetos son las siguientes:

1. 2. Simulación y Modelado;

3. Base de datos de objetos;

4. Hipertexto, hipermedia y texto extendido;

5. /p>

p>

6. Red neuronal y programación paralela;

7. Sistema de soporte a la decisión y ofimática;

8.Sistema CIM/CAM/CAD.