stringtranslate.com

Objeto Pascal

Object Pascal es una extensión del lenguaje de programación Pascal que proporciona características de programación orientada a objetos (OOP) como clases y métodos .

El lenguaje fue desarrollado originalmente por Apple Computer como Clascal para el sistema de desarrollo Lisa Workshop. Cuando Lisa dio paso a Macintosh , Apple colaboró ​​con Niklaus Wirth , el autor de Pascal, para desarrollar una versión oficialmente estandarizada de Clascal. Esta se renombró Object Pascal. Hasta mediados de la década de 1980, Object Pascal fue el lenguaje de programación principal para las primeras versiones del marco de aplicaciones MacApp . El lenguaje perdió su lugar como el principal lenguaje de desarrollo en Mac en 1991 con el lanzamiento de MacApp 3.0 basado en C++ . El soporte oficial finalizó en 1996.

Symantec también desarrolló un compilador para Object Pascal para su producto Think Pascal, que podía compilar programas mucho más rápido que el Macintosh Programmer's Workshop (MPW) de Apple. Symantec luego desarrolló la Think Class Library (TCL), basada en conceptos de MacApp, que podía ser invocada tanto desde Object Pascal como desde THINK C. La suite Think desplazó en gran medida a MPW como la principal plataforma de desarrollo en Mac a fines de la década de 1980.

Symantec adaptó Object Pascal a la PC y desarrolló un marco de trabajo de objetos similar en esa plataforma. A diferencia de TCL, que finalmente migró a C++, las bibliotecas de PC siguieron basándose principalmente en Pascal.

Borland agregó soporte para programación orientada a objetos a Turbo Pascal 5.5, que eventualmente se convertiría en la base del dialecto Object Pascal utilizado en Delphi creado por Anders Hejlsberg . Delphi siguió siendo la opción principal para aplicaciones comerciales en PC hasta principios de la década de 2000 y fue parcialmente reemplazado en la década de 2000 con la introducción de .NET Framework que incluía C# de Hejlsberg .

Historia

Manzana Pascal

Pascal se convirtió en un lenguaje importante en el mundo de la programación en la década de 1970, con implementaciones de alta calidad en la mayoría de las plataformas de minicomputadoras y microcomputadoras . Entre estas últimas se encontraba el sistema UCSD Pascal , que compilaba a un formato de código p-System intermedio que luego podía ejecutarse en múltiples plataformas. Apple licenció UCSD y lo utilizó como base para su sistema Apple Pascal para Apple II y Apple III .

Pascal se convirtió en uno de los principales lenguajes de programación de la empresa en este período. Con el inicio del proyecto Apple Lisa , Pascal fue seleccionado como el lenguaje de programación principal de la plataforma, aunque esta vez como compilador en contraposición al intérprete p-System .

Clascal y el primer Object Pascal de Apple

Object Pascal es una extensión del lenguaje Pascal que fue desarrollado en Apple Computer por un equipo dirigido por Larry Tesler en consulta con Niklaus Wirth , el inventor de Pascal. [2] Desciende de una versión orientada a objetos anterior de Pascal llamada Clascal , que estaba disponible en la computadora Lisa .

Object Pascal era necesario para soportar MacApp , un marco de trabajo de aplicaciones Macintosh expandible que ahora se denominaría biblioteca de clases . Las extensiones de Object Pascal y MacApp fueron desarrolladas por Barry Haynes, Ken Doyle y Larry Rosenstein, y fueron probadas por Dan Allen. Larry Tesler supervisó el proyecto, que comenzó a principios de 1985 y se convirtió en un producto en 1986.

También se implementó una extensión de Object Pascal en el entorno de desarrollo integrado (IDE) de Think Pascal. El IDE incluye el compilador y un editor con resaltado y verificación de sintaxis, un potente depurador y una biblioteca de clases. [3] Muchos desarrolladores prefirieron Think Pascal a la implementación de Object Pascal de Apple porque Think Pascal ofrecía un ciclo de compilación , enlace y depuración mucho más rápido y una estrecha integración de sus herramientas. La última versión oficial de Think Pascal fue la 4.01, en 1992. Symantec lanzó más tarde una versión no oficial 4.5d4 sin cargo.

Apple abandonó el soporte para Object Pascal cuando pasó de los chips de la serie 68000 de Motorola a la arquitectura PowerPC de IBM en 1994. MacApp 3.0 ya había sido reescrito en C++ y portado a esta plataforma.

Metrowerks ofreció con CodeWarrior un compilador Object Pascal para Macintosh que apuntaba tanto a 68k como a PowerPC , tanto en su IDE como en herramientas MPW. Los desarrolladores de Macintosh que usaban Object Pascal tenían un camino para migrar a la arquitectura PowerPC , incluso después de que tanto Apple como Symantec dejaran de brindar soporte. MacApp 2.0, escrita en Object Pascal, fue migrada a PowerPC usando CodeWarrior . [4] [5]

Años de Borland, Inprise, CodeGear y Embarcadero

En 1986, Borland introdujo extensiones similares, también llamadas Object Pascal, para el producto Turbo Pascal para Macintosh, y en 1989 para Turbo Pascal 5.5 para DOS. Cuando Borland cambió su enfoque de DOS a Windows en 1994, creó un sucesor de Turbo Pascal, llamado Delphi , e introdujo un nuevo conjunto de extensiones para crear lo que ahora se conoce como el lenguaje Delphi.

El desarrollo de Delphi comenzó en 1993 y Delphi 1.0 se lanzó oficialmente en los Estados Unidos el 14 de febrero de 1995. Si bien el código que utilizaba el modelo de objetos de Turbo Pascal aún se podía compilar, Delphi presentó una nueva sintaxis que utilizaba la palabra clave classen lugar de object, el constructor Create y un destructor virtual Destroy (y que negaba la necesidad de llamar a los procedimientos Newy Dispose), propiedades, punteros de método y algunas otras cosas. Estas se inspiraron en el borrador de trabajo de ISO para extensiones orientadas a objetos, pero se ignoraron muchas de las diferencias con el dialecto de Turbo Pascal (como el requisito del borrador de que todos los métodos fueran virtuales ).

El lenguaje Delphi ha seguido evolucionando a lo largo de los años para admitir construcciones como matrices dinámicas , genéricos y métodos anónimos . La antigua sintaxis de objetos introducida por Apple ("Tipos de objetos de estilo antiguo") todavía se admite. [6]

Versiones

Compiladores

Los compiladores Object Pascal están disponibles para una amplia gama de sistemas operativos y arquitecturas.

Productos heredados

Intérpretes

Pascal Script (anteriormente InnerFuse ) y DWScript (Delphi Web Script) son intérpretes de Object Pascal y motores de scripting de código abierto escritos en Delphi. Admiten subconjuntos de Object Pascal. DWScript también puede compilar código Object Pascal en código JavaScript (Smart Pascal) y admite la compilación en tiempo real (JIT). Modern Pascal proporciona 3 intérpretes diferentes: una interfaz de línea de comandos (CLI), un módulo Apache (Celerity) y CodeRunner (una solución similar a node.js capaz de manejar diferentes scripts por puerto), además de la capacidad de compilar y proteger el código fuente de un script . [15]

Ejemplos de programas de "Hola mundo"

Aquí hay varios programas "Hola Mundo" en diferentes versiones de Object Pascal.

Versión de Apple

programa ObjetoPascalEjemplo ;  tipo THelloWorld = objeto procedimiento Put ; fin ;       var HolaMundo : HolaMundo ;   procedimiento THelloWorld . Put ; begin ShowMessage ( '¡Hola, mundo!' ) ; end ;    comenzar Nuevo ( HolaMundo ) ; HolaMundo . Poner ; Disponer ( HolaMundo ) ; fin .   

Versión de Turbo Pascal

Todavía se admite en Delphi y Free Pascal. FPC también incluye sus propios sustitutos para las bibliotecas/unidades. Delphi no lo hace. La serie Free Pascal 1.0 y el IDE de modo texto de FPC son las bases de código abiertas más grandes en este dialecto. Free Pascal 2.0 se reescribió en un dialecto más parecido a Delphi, y el IDE de modo texto y los marcos relacionados (Free Vision) son las únicas partes en la versión TP de Object Pascal.

Asignación basada en pila

programa ObjetoPascalEjemplo ;  tipo THelloWorld = objeto procedimiento Put ; fin ;       procedimiento THelloWorld . Put ; begin WriteLn ( '¡Hola, mundo!' ) ; end ;    var HelloWorld : THelloWorld ; { asignado en la pila y se puede usar sin asignación explícita. } begin HelloWorld . Put ; end .    

Asignación basada en montón

programa ObjetoPascalEjemplo ;  tipo PHelloWorld = ^ THelloWorld ; THelloWorld = objeto procedimiento Put ; fin ;          procedimiento THelloWorld . Put ; begin WriteLn ( '¡Hola, mundo!' ) ; end ;    var HelloWorld : PHelloWorld ; { este es un puntero tipado a un THelloWorld }   comenzar Nuevo ( HolaMundo ) ; HolaMundo ^. Poner ; Disponer ( HolaMundo ) ; fin .   

Otro ejemplo:

programa ObjetoPascalEjemplo ;  tipo PHelloWorld = ^ THelloWorld ; THelloWorld = objeto procedimiento Put ; fin ;          procedimiento THelloWorld . Put ; begin WriteLn ( '¡Hola, mundo!' ) ; end ;    var HelloWorld : PHelloWorld ; { este es un puntero tipado a un THelloWorld } HelloWorld2 : ^ THelloWorld ; { esto es exactamente lo mismo con una sintaxis diferente } HelloWorld3 : ^ THelloWorld ; HelloWorld4 : PHelloWorld ; begin { Esto funciona de manera similar al código anterior, tenga en cuenta la asignación y desasignación, aunque  muchas personas se confunden. En el pasado hubo un ejemplo incorrecto con comentarios incorrectos aquí... }               New ( HelloWorld ) ; { una instancia } HelloWorld4 := HelloWorld ; { esto es válido - una copia de puntero } HelloWorld2 := HelloWorld ; { esto es válido - una copia de puntero } New ( HelloWorld3 ) ; { una segunda instancia } HelloWorld4 := HelloWorld3 ; { esto es válido - una copia de puntero } HelloWorld2 := HelloWorld3 ; { esto es válido - una copia de puntero } Dispose ( HelloWorld ) ; { asigna solo dos instancias } Dispose ( HelloWorld3 ) ; { por lo que debe liberar solo dos instancias } fin .                       

Esto funciona según la copia del puntero, a menos que haya una asignación específica para una copia más profunda.

Versión de Delphi y Free Pascal

programa ObjetoPascalEjemplo ; tipo THelloWorld = clase procedimiento Put ; fin ;      procedimiento THelloWorld . Put ; begin Writeln ( '¡Hola, mundo!' ) ; end ;  var HelloWorld : THelloWorld ; { este es un puntero implícito }   begin HelloWorld := THelloWorld . Create ; { el constructor devuelve un puntero a un objeto de tipo THelloWorld } HelloWorld . Put ; HelloWorld . Free ; { esta línea desasigna el objeto THelloWorld al que apunta HelloWorld } end .       

Tenga en cuenta que la construcción de objetos todavía está disponible en Delphi y Free Pascal.

Versión de oxígeno

espacio de nombres ObjectPascalExample ;  interfaz tipo ConsoleApp = clase método de clase Principal ; fin ;        THelloWorld = método de clase Put ; fin ;      implementación método THelloWorld . Put ; comienzo Console . WriteLine ( '¡Hola, mundo!' ) ; fin ;     método de clase ConsoleApp . Main ; begin var HelloWorld := new THelloWorld ; HelloWorld . Put ; end ;          fin .

Versión de DWScript (Smart Pascal)

tipo THelloWorld = clase procedimiento Put ; begin PrintLn ( '¡Hola, mundo!' ) ; end end ;         var HolaMundo := THelloWorld . Crear ; HolaMundo . Poner ;   

La implementación del método también se puede realizar en una ubicación distinta como en otros dialectos de Object Pascal.

Desarrollo

Se han introducido continuamente muchas características en Object Pascal con extensiones a Delphi y extensiones a FreePascal. En reacción a las críticas, Free Pascal ha adoptado genéricos con la misma sintaxis que Delphi, siempre que se seleccione el modo de compatibilidad con Delphi, y tanto Delphi (parcial) como Free Pascal (más extenso) admitan la sobrecarga de operadores . Delphi también ha introducido muchas otras características desde la versión 7, [16] incluyendo genéricos. Mientras que FreePascal intenta ser compatible con Delphi en el modo de compatibilidad con Delphi, también suele introducir muchas características nuevas al lenguaje que no siempre están disponibles en Delphi.

Referencias

  1. ^ ab Gibson, Steve (8 de mayo de 1989). «Borland y Microsoft entran en el círculo de Pascal orientado a objetos». InfoWorld . Vol. 11, núm. 19. pág. 28. Archivado desde el original el 29 de febrero de 2024 . Consultado el 18 de septiembre de 2021 .
  2. ^ Tesler, Larry (1985). "Informe de Object Pascal". Structured Language World . 9 (3): 10–7.
  3. ^ Seiter, Charles (noviembre de 1990). "Think Pascal 3". Macworld . Vol. 7, núm. 11. pág. 236.
  4. ^ Arnold, Brian; McCarthy, Guy (noviembre de 1995). "MacApp Pascal vuelve a la carga". MacTech . Vol. 11, núm. 11. págs. 30–31.
  5. ^ Arnold, Brian (febrero de 1996). "MacApp 2 para PowerPC en Object Pascal". MacTech . Vol. 12, núm. 2. págs. 25–32.
  6. ^ Lischner, Ray (2000). Delphi en pocas palabras: una referencia rápida para el escritorio (1.ª ed.). Sebastopol, CA: O'Reilly and Associates. ISBN 1565926595.
  7. ^ Carta de la comunidad: Embarcadero Technologies acuerda adquirir CodeGear de Borland Archivado el 2 de marzo de 2018 en Wayback Machine . edn.embarcadero.com. Consultado el 21 de julio de 2013.
  8. ^ "Desarrollo de iPhone/iPod". Equipo de desarrollo de Free Pascal. Archivado desde el original el 28 de abril de 2009. Consultado el 13 de abril de 2009 .
  9. ^ A Smart Book. Leanpub. 18 de mayo de 2012. Archivado desde el original el 25 de mayo de 2013. Consultado el 19 de junio de 2013 .
  10. ^ Funa, Igor (2021). «Turbo51: compilador Turbo Pascal para microcontroladores 8051». Archivado desde el original el 25 de septiembre de 2018.
  11. ^ Draxler, Wolfgang. "WDSibyl: entorno de desarrollo visual". Archivado desde el original el 12 de febrero de 2020.
  12. ^ "EDM/2: WDSibyl". Archivado desde el original el 24 de marzo de 2021.
  13. ^ "EDM/2: Lista de herramientas". Archivado desde el original el 21 de agosto de 2022.
  14. ^ "eCSoft/2: La enciclopedia completa del software OS/2: WDSibyl". Archivado desde el original el 17 de octubre de 2021.
  15. ^ "Pascal moderno". Archivado desde el original el 11 de diciembre de 2018. Consultado el 22 de octubre de 2018 .
  16. ^ "Nuevas características del lenguaje Delphi desde Delphi 7". CodeGear. Archivado desde el original el 2008-07-02 . Consultado el 2008-07-06 .

Enlaces externos

Delfos