ScholarGate
Asistente

Programación Imperativa y Orientada a Objetos

La programación imperativa expresa la computación como secuencias de comandos que cambian de estado; la programación orientada a objetos organiza ese estado y comportamiento en objetos encapsulados que se comunican mediante el paso de mensajes.

Encontrar tema con PaperMindPróximamenteFind papers & topics
Tools & resources
Descargar diapositivas
Learn & explore
VídeoPróximamente

Definition

La programación imperativa describe la computación como una secuencia de sentencias que cambian el estado del programa a través de la asignación y el flujo de control; la programación orientada a objetos es una disciplina de estructuración en la que el estado y las operaciones se agrupan en objetos que interactúan invocando métodos.

Scope

Este tema abarca el modelo imperativo de computación construido sobre variables mutables, asignación y flujo de control explícito, y la disciplina orientada a objetos que estructura los programas imperativos en torno a objetos, clases, herencia, encapsulación y despacho dinámico. Incluye el subtipo y la sustituibilidad conductual, los patrones de diseño y la relación entre objetos y tipos de datos abstractos.

Core questions

  • ¿Cómo controla la encapsulación la complejidad del estado mutable?
  • ¿Qué significa que un tipo sea un subtipo conductual de otro?
  • ¿Cuándo ayuda la herencia y cuándo crea un acoplamiento frágil?
  • ¿Cómo se relacionan los objetos con los tipos de datos abstractos y los módulos?

Key theories

Subtipado conductual (Principio de Sustitución de Liskov)
Liskov y Wing formalizan cuándo los objetos de un subtipo pueden sustituir de forma segura a los objetos de un supertipo, exigiendo que los subtipos preserven el comportamiento observable y las invariantes esperadas del supertipo.
Programación estructurada
Dahl, Dijkstra y Hoare establecieron el flujo de control disciplinado y el refinamiento paso a paso como la base para programas imperativos comprensibles, desplazando el control irrestricto basado en goto.
Patrones de diseño
Gamma y sus colegas catalogaron soluciones recurrentes a problemas de diseño orientado a objetos, proporcionando un vocabulario compartido para organizar objetos colaboradores.

Clinical relevance

El diseño orientado a objetos sustenta gran parte del software industrial porque la encapsulación y el polimorfismo apoyan el desarrollo modular y la reutilización de código a escala. El Principio de Sustitución de Liskov y los patrones de diseño siguen siendo guías prácticas para construir jerarquías de clases e interfaces mantenibles.

History

La programación imperativa se originó con las primeras máquinas de programa almacenado y lenguajes como Fortran y Algol. Simula 67 introdujo las clases y la herencia; Smalltalk popularizó la orientación a objetos pura y el paso de mensajes en las décadas de 1970 y 1980. C++ y, posteriormente, Java llevaron la orientación a objetos a la industria principal, mientras que el trabajo de Liskov sobre la abstracción de datos y el libro de 1994 Design Patterns sistematizaron la metodología orientada a objetos.

Debates

Herencia versus composición
Los diseñadores debaten si la herencia de implementación o la composición de objetos promueven mejor la reutilización y la flexibilidad, con gran parte de la práctica posterior favoreciendo la composición y el diseño basado en interfaces.

Key figures

  • Barbara Liskov
  • Ole-Johan Dahl
  • Kristen Nygaard
  • Alan Kay
  • Edsger Dijkstra

Related topics

Seminal works

  • goldberg1983
  • liskov1994
  • dahl1972
  • gamma1994

Frequently asked questions

¿Qué es el Principio de Sustitución de Liskov?
Establece que los objetos de un subtipo deben poder usarse en cualquier lugar donde se esperen objetos del supertipo sin romper la corrección del programa, lo que restringe cómo las subclases pueden anular el comportamiento.
¿La programación orientada a objetos es inherentemente imperativa?
La programación orientada a objetos clásica se basa en el estado mutable de los objetos y, por lo tanto, es una forma de programación imperativa, aunque las características orientadas a objetos también se pueden combinar con estilos funcionales e inmutables.

Methods for this concept

Related concepts