¡De TurboPascal a Delphi!

Grouse

Entré en contacto con Pascal cuando era estudiante de primer año en la escuela secundaria. Como necesitaba participar en NOI, naturalmente usé Turbo Pascal para escribir programas. Medio año después, comencé a pensar en cómo escribir programas para Windows y, naturalmente, encontré Delphi. Cuando vi Delphi por primera vez, me sorprendió la sintaxis orientada a objetos agregada en Object Pascal, además del principio y el final con los que estaba muy familiarizado. La adición de sintaxis orientada a objetos en Object Pascal me dejó atónito. En ese momento, no sabía nada sobre procedimientos y orientación a objetos. Lo peor es que los educadores chinos parecen haber hecho poco trabajo sustancial excepto leer los libros de texto de Pascal de Tsinghua. Falta el legendario "Libro de Turbo Pascal" y no encuentro ninguna información al respecto. Como no puedo encontrar el legendario "Libro completo de Turbo Pascal", no entiendo las palabras clave "unidad" e "interfaz" que se pueden ver en todas partes en Delphi. Afortunadamente, no mucho después, obtuve un libro llamado "Tecnología antivirus informática", que estaba lleno de código fuente escrito en Turbo Pascal. A través de este libro, entendí rápidamente "unidad" y "El significado de palabras clave como" interfaz. ", que ya existen en Turbo Pascal.

En mi impresión, los autores nacionales de Delphi parecen preferir libros técnicos con ejemplos. Incluso si tienen que hablar de gramática, no mucha gente está dispuesta a tocar la gramática. El mejor y más autorizado libro sobre la sintaxis de Object Pascal es la "Guía de desarrollo de Delphi", que todavía goza de gran prestigio hoy en día, pero Delphi todavía palidece en comparación con la avalancha de libros de C++ actuales. No es de extrañar que muchos principiantes, especialmente aquellos que nunca han estado expuestos al lenguaje Pascal, encuentren dificultades al aprender Object Pascal. Mi propia sensación es que en el proceso de transición de Turbo Pascal a Delphi, tomamos muchos desvíos debido a la falta de una guía correcta y tuvimos que avanzar a pasos agigantados debido a la falta de un puente adecuado. Por lo tanto, aquí me gustaría exponer los obstáculos que he encontrado, resumir mi comprensión y espero poder ayudar a mis amigos que están comenzando. No entraré en detalles de la sintaxis, asumiré que ya tienes algunos conocimientos de pascal y lenguajes orientados a objetos. No voy a entrar en detalles sobre la sintaxis y asumiré que ya tienes algunos conocimientos básicos de pascal y conceptos orientados a objetos. Para obtener más información sobre esto, recomiendo leer los capítulos relevantes en la Guía del desarrollador de Delphi y la documentación de ayuda de Delphi.

Grabar Cuerpos y Clases

Siempre he estado acostumbrado a escribir todo el código procedimental en un único módulo de programa, y ​​en módulos que no son unitarios no he podido entender completamente el código durante varios días. Hubo días en los que no podía entender bien la sintaxis de los marcos de clases personalizados no heredados en módulos que no eran unitarios.

Aunque el código fuente de VCL es clásico, es demasiado complejo y no puedo comprender sus principios básicos. Lo que necesito es el código más simple, más descriptivo, más completo y ejecutable. He estado buscando la respuesta, así que tuve que hacerlo. Yo mismo, explorando el mapeo, se nos ocurrieron los siguientes dos fragmentos de código

Programa TP.; {Este código se compila en Turbo Pascal} tipo MyRecord = record{ } end ;

var MR: MyRecord; procedimiento Procedimiento; comenzar {Código de procedimiento} finalizar {=========== principal = ===========} {Este código es el primero en ser. ==========} comenzar {Este inicio marca el inicio del programa principal, que es equivalente a la función principal en C/C++} Procedimiento final

Lo anterior es un fragmento de código muy simple que contiene una declaración de tipo de registro y una declaración de procedimiento almacenado. Los procedimientos y funciones almacenados deben colocarse en la sección de código que comienza con la palabra reservada var. La última sección de código entre el inicio y el final es el comienzo del programa principal y la entrada a todo el programa. Tenga en cuenta que el comienzo y el final del segmento de código solo se pueden utilizar como entradas de programa si comienzan con programa.

Además, Turbo Pascal ya admite la palabra clave de declaración original orientada a objetos en lugar de Clase. La sintaxis de este último es Campo; > El método permite el siguiente procedimiento de formulario NombreMétodo(:tipo);

o función NombreMétodo(:tipo):tipo

o constructor NombreMétodo(: tipo [;:tipo]); [ virtual];

o destructor NombreDeMétodo[(: tipo)];[virtual];

No está mal. Tanto los constructores como los destructores admiten virtual. Otra característica útil de los constructores es la función Fail, que se puede utilizar para liberar recursos asignados cuando falla la inicialización del constructor. Desafortunadamente, no hay distinción entre sexo privado en Object. El siguiente fragmento de código es una demostración de la función Fallar en el documento de ayuda de Turbo Pascal. A través de este fragmento de código, puede comprender mejor Turbo Pascal.

TBase = objeto(TObject)?TBase = objeto(TObject) {El objeto ya está aquí, ¿no es genial? Constructor Init(FailMe: Boolean); fin;

PDerived = ^TDerived; objeto(TBase) Constructor Init(FailMe: Boolean); : Boolean); comienza el Init heredado; si FailMe entonces falla; finaliza el constructor TDerived Init(FailMe: Boolean); comienza si no se hereda Init(FailMe) entonces {determina si la inicialización de la clase principal fue exitosa} si la inicialización de la clase principal falla. , comenzamos a construir la clase padre. {La clase principal no se pudo compilar, también debemos fallar}Fail; {de lo contrario, continuar con la compilación} fin; var P.PObject; X: Boolean; si P <> nil, entonces comience a escribir (el objeto se construyó con éxito). ); Dispose(P Listo); fin else writeln( El objeto no pudo construirse); fin Regrese a Delphi y vea el siguiente código Delphi; clase (TObject) constructor público Crear; procedimiento Imprimir Nombre de clase: = TMyClass fin; ==== ====== principal ===========} comenzar MiClase := TMyClass Crear; MyClass PrintClassFree; El tipo de datos definido, la declaración de una clase, las funciones miembro y los procedimientos almacenados se llevan a cabo de acuerdo con las reglas correspondientes. La única diferencia es que las palabras reservadas han cambiado de registros a clases (compare la estructura del código y las reglas de sintaxis en detalle), lo que significa que Object Pascal es una extensión sintáctica del contenido clásico orientado a objetos de Pascal. Por supuesto, los aspectos internos no son tan simples como la expansión de sintaxis en la superficie, pero eso es una cuestión del compilador. Casi me olvido de decirles a los lectores cómo depurar el código anterior. Seleccione Archivo | Nuevo | Otros en el menú principal del entorno de desarrollo integrado y seleccione Aplicación de consola en el elemento Nuevo. Aparece el cuadro de edición de código, luego pegue el código anterior en F. {$APPTYPE CONSOLE} en el código es un modificador de compilación, que le dice al compilador que se trata de una aplicación de consola. La diferencia de formato entre esto y un comentario es el signo $.

TMyClass = class(TObject) se puede abreviar como

TMyClass = class significa que la clase TMyClass hereda de la clase TObject. En Delphi, TObject es el antepasado de todos los objetos, por eso no declaré el procedimiento almacenado Destroy en mi código, pero aún así funciona. La construcción de clases en Delphi es muy interesante. Para obtener más detalles, consulte la "Guía de desarrollo de Delphi".

Los dos fragmentos de código anteriores se corresponden entre sí. Aunque son muy simples, creo que ayudan a los estudiantes a descubrir algunas de las transiciones del Pascal clásico. objetar el método Pascal hasta cierto punto. Si pudiera ver estos dos fragmentos de código, perdería mucho tiempo

Módulo de unidad

En el documento de ayuda de Turbo Pascal, la función de la unidad se describe así La unidad es Borland Los conceptos básicos de la programación modular. Tradicionalmente, guardamos todo nuestro código en un módulo de programa, pero para códigos funcionales más complejos, la división correcta de funciones es primordial. La encapsulación funcional juega un papel importante en la gestión y el mantenimiento del código, y el uso de módulos de unidad puede resolver estos problemas. La sintaxis es la siguiente

identificador de unidad;?{título} interfaz?{símbolo público}: usos. ?{Utiliza suboración} const?{const}tipo?{tipo} var?{variable} procedimiento {proceso} función?{función} implementación?función} implementación? {Símbolo privado}: ¿utiliza?tipo?{ Tipos } var{ Variables } procedimiento?{ Procedimientos } función?comenzar?{ Inicialización } declaración;?{declaración}fin de declaración

La parte de la interfaz se utiliza para declarar la interfaz externa, es decir, funciones y procedimientos que pueden ser utilizados por programas que hacen referencia a archivos desde fuera. La parte de implementación contiene el código que implementa las funciones declaradas en la parte de la interfaz. La sección de inicialización se puede utilizar para inicializar variables, procedimientos, funciones y funciones dentro de esta unidad. Si no hay nada que inicializar, entonces se puede omitir el inicio, pero el final debe estar presente.

En Pascal clásico bajo Delphi, la sección de unidades ha sido modificada. usa { La lista de unidades va aquí } usa { la lista de unidades va aquí } la parte de la interfaz va aquí } implementa { la parte de la interfaz va aquí } implementa los usos { la lista de unidades va aquí } { inicialización { aquí está la parte de inicialización. Inicialización {Esta es la parte de inicialización} Finalización {Esta es la parte de finalización} end Como puede ver, la palabra clave comenzar en la parte de inicialización ha sido reemplazada por "inicialización". La parte de inicialización fue reemplazada por Inicialización y se agregó la parte de finalización. El código en la parte de inicialización se puede escribir así: inicialización comenzar {hacer algo...} terminar; o así: inicialización {hacer algo...} La función de la parte final es un poco como un destructor. la parte de inicialización inicializada en el módulo de la unidad. Los recursos se liberan al final del programa. Si el programa finaliza con un procedimiento almacenado Detener, los recursos se liberarán al final del programa.

A primera vista, las palabras clave y las estructuras (como interfaz) en el módulo de la unidad parecen limitar la libertad del programador, pero es esta sintaxis la que hace que el lenguaje Pascal sea tan riguroso y hermoso, y garantiza que el programa Menos propenso a errores de programa. El programa es un resumen del texto y la unidad es un párrafo. En Delphi, los módulos de programa están contenidos en archivos prj, mientras que los módulos de unidad están contenidos en archivos pas tradicionales.

Es por eso que en Delphi a menudo nos enfrentamos a módulos unitarios que sirven a una sola ventana en lugar de escribir todo el código en un programa, pero leí en la ayuda de Delphi que en la programación Pascal tradicional, todos los programas de código fuente están incluidos, mientras que los módulos unitarios están incluidos en archivos pas. No sé si es una forma diferente de pensar o un error, pero esta sintaxis no es exclusiva de Delphi, los programadores de Turbo Pascal siempre han usado esta sintaxis para organizar sus programas. Los programadores de Turbo Pascal también han estado utilizando este método para organizar estructuras de programas. Como ejemplo simple de inicialización, seleccione Archivo | Nuevo | Aplicación en el menú, luego coloque un botón en el formulario y haga doble clic en el botón para escribir su controlador de eventos Click. El código completo es el siguiente

Unidad La interfaz utiliza Windows Mensajes SysUtils Variantes Clases Gráficos Controles Formularios Diálogos StdCtrls; Tipo TForm = class(TForm) Botón: TButton; Haga clic en el botón (Remitente: TObject); comience ShowMessage(Msg); Msg:= second; inicialize Msg:= first

Los anteriores son dos temas básicos e importantes en la transición. Comprenderlos es el primer paso para comprender por qué escribe código de la forma en que lo hace, dónde lo escribe y cómo puede ampliarlo. El uso del lenguaje Pascal no puede evitar hacer que la gente se sienta escalofriante. Nadie ha hecho nada en la educación de la iluminación. Todo esto pone a Delphi en una situación embarazosa entre los estudiantes. En el foro nacional de Delphi, a menudo vemos a muchos programadores a medias hablando. Sobre Delphi mientras disfrutaban del rápido desarrollo, se quejaron de que Delphi era demasiado débil para desarrollar lenguajes de bajo nivel e incluso culparon directamente al lenguaje Pascal. Me pregunto cuántos programas famosos se desarrollaron utilizando Pascal en la era Dos y cuántos programas de control de bajo nivel tienen la sombra de Pascal. Ahora todavía tengo código de virus, código antivirus y código de control de chip IC escritos en Pascal.

Quizás sea la función RAD de Delphi la que ha reducido el umbral para el desarrollo de programas y ha permitido que muchas personas poco entusiastas. Entra en el mundo de la programación. El desarrollo de RAD ha engañado a muchos programadores a medias (llamarlos programadores puede ser una exageración), pero el sector educativo chino también debería asumir cierta responsabilidad en la enseñanza del lenguaje VB en cursos optativos. Pero el sector educativo de China también tiene responsabilidades ineludibles. Hay muchos cursos optativos en VB, pero muy pocos en Delphi. Una vez conocí a un maestro que menospreciaba a Delphi desde el fondo de su corazón. Hablando de eso, de hecho, nunca había usado Delphi. A menudo visito sitios web extranjeros y descubro que los temas que se debaten en China se han tratado desde hace mucho tiempo en el extranjero, y se tratan muy bien. lishixinzhi/Artículo /programa/Delphi/201311/24962

>