Beruflich Dokumente
Kultur Dokumente
Indice
Titulo Pagina
Introducción 3
Encapsulación 4
Herencia 4
Polimorfismo 5
¿Que es Delphi? 7
Memoria Principal 8
El entorno Delphi 9
La Ventana Principal 10
La Ventana de Programa 10
El Object Inspector 11
Declaración de Variables 15
La Instrucción IF 19
La Instrucción CASE 21
1
La Instrucción REPEAT 23
La Instrucción WHILE 25
La Instrucción FOR 27
Glosario de Términos 30
Bibliografía 32
Conclusión 33
Introducción
Inprise es una firma sobradamente conocida por la calidad de sus herramientas de desarrollo entre las que
cabe destacar Borland C++, Borland C++ Builder, Borland Intrabuilder, Borland Jbuilder y sobretodo
Borland Delphi.
Borland Delphi que represento la primera apuesta de Inprise por un entorno de desarrollo netamente visual,
sigue evolucionando y lo hace convirtiéndose en una herramienta de ultima generación sumamente avanzada.
El entorno de desarrollo de Borland Delphi es simple, flexible y potente al mismo tiempo, contando con un
gran numero de componentes prefabricados que simplificarán de forma notable la creación de cualquier
aplicación. El lenguaje de base de Borland Delphi es Object Pascal, una potente versión de Pascal que hereda
toda la experiencia que Inprise ha adquirido durante mas de una década de desarrollo de compiladores de este
lenguaje.
Algo que diferencia a Delphi de muchos otros competidores es el echo de tratarse de un compilador altamente
optimizado, que genera código directamente ejecutable, no pseudo − código que debe ser interpretado
posteriormente en tiempo de ejecución. Esto tiene básicamente dos consecuencias: el ejecutable es más
rápido, al no tener que ser interpretado en tiempo de ejecución y el tamaño total final de la aplicación suele ser
inferior ya que no es necesaria la distribución adicional del programa que interpreta y ejecuta el código al que
se suele denominar Runtime.
La programación orientada al objeto no es mas que una evolución de los lenguajes estructurados hacia una
simplificación del mantenimiento del código, así como mayores posibilidades de reutilización de este.
Generalmente la POO se asocia rápidamente con lenguajes como C++, pero Object Pascal, de ahí su nombre
cuenta con todos los componentes básicos de un lenguaje orientado a objetos con la encapsulación, la herencia
y el polimorfismo.
Encapsulación
Generalmente partiendo de un correcto diseño de los tipos de objetos, los datos que se declaren en el interior
del objeto solo serán manipulados por los métodos de ese objeto.
A esta característica de los objetos se la conoce como encapsulación, ya que en cierta forma aísla los datos y
2
métodos de un objeto, como si se tratase de una cápsula, impidiendo así que sean usados unos parámetros
erróneos al llamar a un método o que un determinado procedimiento manipule las variables que no son.
La encapsulación es uno de los pilares de la POO, usada correctamente facilitara en gran medida el
mantenimiento del código, ya que tomada la definición de un objeto y la implementación de los métodos
podemos trabajar sobre ellos sabiendo de antemano que forman una entidad totalmente independiente del
resto de la aplicación.
Herencia
La encapsulación es la característica de la POO que permite asociar código y datos formando objetos
autosuficientes y, por lo tanto, constituye uno de los puntos principales de los lenguajes orientados a objetos.
Otra de las características es la reutilización del código para lo cual tenemos que utilizar la herencia.
A la acción de crear un tipo de objeto a partir de otro ya existente se le llama derivación. Al tipo original se le
conoce como tipo base o ascendente, mientras que al nuevo tipo, que hereda las características del anterior, se
le llama tipo derivado o descendente. Al hacer que un tipo derivado herede todos los miembros del tipo base
será heredado también los miembros de datos y los métodos.
Polimorfismo
La propia palabra, polimorfismo, nos indica que se trata de algo capaz de presentarse o adoptar diversas
formas, lo que traducido a un lenguaje orientado a objetos le corresponde con un objeto que puede
corresponder a distintos tipos.
Suponga que hemos creado un tipo Tvehiculo que vamos a utilizar como base para derivar tres descendientes:
Tbicicleta, Tciclomotor y Tautomovil, de las cuales a su vez se van a derivar otros tipos, constituyéndose la
jerarquía de tipos que se muestra:
Aunque un deportivo, un turismo y un coche de competición son obviamente distintos, tienen muchas cosas
en común: dos ejes, cuatro ruedas, etc. En realidad, todos son coches. Lo mismo ocurre con un camión, un
autobús o un coche, que a pesar de ser distintos siguen teniendo muchas cosas en común y se caracterizan
todos por ser automóviles. Tanto un automóvil como una bicicleta o un ciclomotor pertenecen a una misma
familia, la de los vehículos, a la que podríamos añadir múltiples medios mas, como puede ser el tren, barco,
avión o el carro de caballos.
Analice detalladamente esta jerarquía, vera que si el tipo Tvehiculo incorpora un cierto miembro, este será
heredado por todos los demás tipos, ya que Tvehiculo es la base de todos ellos. Los miembros de Tautomovil,
sin embargo son solo herederos por sus descendientes directos e indirectos y no por el tipo Tbicicleta y sus
derivados. Por lo tanto, una variable del tipo Tvehiculo podría apuntar a un objeto cualquiera de esta jerarquía,
ya que todos ellos contienen en su interior un Tvehiculo.
Una variable del tipo Tautomovil podría apuntar a un Tcamion, Tautobus o Tcoche, incluso a un Tturismo o
Tberlina, por el contrario no podrá apuntar a un objeto Tbicicleta.
Al utilizar una variable de un cierto tipo que apunte a un objeto de otro tipo, permite manipular objetos de
distintos tipos de una genérica, ahorrando mucho código.
¿Qué es Delphi?
3
• Las aplicaciones pueden colocarse de forma muy sencilla en la pantalla según el principio de
módulos. Para ello se dispone de una paleta dotada de una gran variedad de componentes, algo así
como los bloques de construcción de cada programa, esta paleta es denominada por Borland VCL*.
• Esta VCL es mucho más poderosa que la de Turbo Pascal o las conocidas OWL* 1.0 de Borland
Pascal 1.0, y ofrece una abstracción mucho mas alta del sistema operativo. El programador es
totalmente independiente de las particularidades de Windows como manejadores, punteros y
funciones API*. La programación se hace con los cómodos componentes de Delphi y no con las
complejas llamadas al sistema de Windows. Esto simplifica enormemente la hasta ahora poco clara
programación bajo Windows.
• A diferencia de otras herramientas de desarrollo programables (Visual Basic, Toolbook, etc.), con
Delphi es posible crear de forma sencilla nuevos componentes que pueden entonces incorporarse a en
la paleta de los componentes ya existentes y que pueden utilizarse de la misma forma. La VCL puede
estructurarse libremente y así adaptarse totalmente a las situaciones de programación.
• Delphi no solo dispone de componentes para la sencilla creación de entornos como cuadros de lista,
conmutadores o cuadro de dialogo terminados, sino que cubre con sus componentes muchos temas de
programación bajo Windows: se incluye entre los mismos un complejo centro de control para la
creación de aplicaciones multimedia así como una gran variedad de componentes que actúan debajo
del entorno, como tipos de listado muy variados y contenedores generales de datos. También hay
herramientas de comunicación DDE y OLE a través de las que se pueden crear vínculos de datos y
comandos con otras aplicaciones. Uno de los aspectos mas destacados lo constituyen los componentes
que Borland ha incluido en Delphi para el desarrollo rápido y sencillo de aplicaciones muy poderosas
de bases de datos. No se esta limitado a un formato de datos determinado, sino que se tiene acceso a
de 50 tipos de formatos de datos diferentes a través de controladores suministrados por terceros
(IDAPI y ODBC*). Entre estos se encuentran todos los estándares importantes de bases de datos en el
área del PC como XBase, Paradox, Access, etc. Pero también es posible de acceder en forma muy
cómoda a servidores de bases de datos de otros sistemas (por ejemplo UNIX) por medio de SQL*.
• Delphi dispone del Object Pascal, un lenguaje de programación muy poderoso que esta sin dudas a la
altura del C++ y que incluso lo supera en algunos aspectos. Este lenguaje surge a partir del desarrollo
de Borland Pascal 7.0, un lenguaje que ocupa un lugar muy importante en la programación de
ordenadores personales. El Object Pascal es totalmente compatible con Borland Pascal 7.0, lo que
permite que programas que sean desarrollados en este ultimo puedan ser convertidos a Delphi.
• Las aplicaciones terminadas quedan disponibles como archivos ejecutables (EXE) que pueden
utilizarse solos y sin bibliotecas adicionales. Consecuentemente, la velocidad con la que pueden
ejecutarse los programas creados es muy alta.
• Delphi es una Two−Way−Tool, es decir una herramienta de dos direcciones, porque permite crear
herramientas de dos formas: una de forma visual en la pantalla por medio de la función de arrastrar y
colocar (Drag & Drop), la otra es a través de la programación convencional, escribiendo el código.
Ambas técnicas pueden utilizarse de forma alternativa o simultanea.
Memoria principal
También la dotación de memoria es un factor que no puede dejar de tenerse en cuenta en un producto como
Delphi, que utiliza la memoria de forma tan intensiva.
Con 4 MB casi no se podrá trabajar. Si con esa memoria logra iniciar Delphi (lo cual no siempre esta
garantizado) el sistema estará ocupado la mayor parte del tiempo colocando datos y partes del programa en el
4
disco duro y leyéndolos entonces de nuevo desde el mismo. Mientras más grandes sean sus proyectos, mas se
incrementará el tiempo de espera. Con 8 MB debe ser posible trabajar de forma aceptable con Delphi. Para
grandes proyectos con muchas imágenes será mejor trabajar con 12 MB. Pero si además de trabajar con
Delphi quiere hacerlo simultáneamente con otros programas (por ejemplo, su programa preferido de dibujos
para desarrollar sus imágenes propias) entonces se necesitaran16 MB o más de memoria.
Delphi necesita por lo menos Windows 3.1. El modo real de su procesador, Windows 3.0, no resulta adecuado
con él, Delphi no realizará su trabajo. También puede ejecutarse Delphi bajo Windows 95, Windows 98 y
Windows NT.
No debe olvidar que Windows también necesita constantemente espacio en el disco duro para el intercambio
de datos y programas. Después de la instalación de Delphi debe disponerse al menos de 30 Mb para el archivo
de intercambio e Windows, si no quiere que el trabajo se convierta en un reto a la paciencia. Si Delphi se
coloca en la misma unidad que la del archivo de intercambio, entonces debe tener en cuenta esta necesidad.
Al menos 10 MB tienen que reservarse para textos fuente y proyectos propios que se desean desarrollar con
Delphi. Debido a la orientación gráfica del trabajo, se requieren grandes volúmenes de datos para imágenes de
fondo, conmutadores gráficos, etc. lo que hace que un proyecto pueda alcanzar fácilmente 400 KB o más.
En total si se pretende instalar una versión completa de Delphi, será necesario disponer de 120 MB de espacio
libre en el disco duro.
El entorno de Delphi
La eficacia de la VCL, es una de las bases en que se apoya el programador en el trabajo con Delphi. Pero
¿para qué sirve la mejor biblioteca si no se dispone de ningún entorno adecuado para su utilización?
Afortunadamente Borland ha procurado una segunda base sólida en forma de un entorno de trabajo de alto
rendimiento, diseñado únicamente con la ayuda de una biblioteca de clase moderna, es decir, la VCL misma.
El entorno de programación típico consta en Delphi de cuatro ventanas que comparten el espacio disponible
en la pantalla. Cada una de estas ventanas puede modificarse, cerrarse y volverse a abrir mediante el menú
view. Se trata aquí de la ventana principal, el Object inspector, el editor de código fuente y, finalmente de una
o varias ventanas de programa, que representan el entorno de un programa desarrollado por uno mismo.
La ventana principal
La barra de programa del margen superior de la pantalla representa la ventana principal de Delphi. Si se
cierra, todas las otras ventanas también finalizan su servicio. En la barra de menús de la ventana principal
están disponibles todas las ordenes relacionadas con el procesamiento de un proyecto concreto. La carga y
almacenamiento de proyectos pertenecen igualmente al menú, así como la ocultación de todas las ventanas y
ventanas adicionales (de ayuda) que están a disposición del programador en el entorno de desarrollo. También
se encuentran aquí las ordenes para compilar y ejecutar un programa escrito por uno mismo.
5
La barra de herramientas −extensamente equipada− ocupa, con mucho, el área mayor de la ventana principal,
en su mitad izquierda encontramos, de nuevo las funciones más importantes del sistema de menú, como
botones de herramientas.
Toda la parte derecha esta reservada para la representación de cada componente. Se simbolizan mediante
varios botones gráficos. La interpretación de cada gráfico se simplifica con un pequeño texto, que aparecerá
siempre que el puntero del ratón se sitúe sobre alguno de los botones. Para aumentar aun la claridad, los
componentes se han dividido en otras paginas y ordenado temáticamente en las secciones estándar, adicional,
captura de datos, manejo de datos, diálogo, sistema, VBX y ejemplos. Se puede alternar de una sección a otra
con la ayuda de las pestañas con inscripciones que aparecen en la parte inferior de las barras de herramientas.
La ventana de programa
La creación de entornos de programa, así como un parte significativa de la programación, tienen lugar en
Delphi de forma puramente visual, es decir, uno simplemente toma el componente deseado de la barra de
herramientas de la ventana principal y lo sitúa en una ventana especialmente destinada para ello, llamado
formulario formular. Naturalmente, en un programa se puede crear y utilizar cualquiera de dichos formularios.
Tampoco hay ninguna diferencia entre diseñar una ventana principal o un dialogo.
Con un formulario se pueden reproducir el aspecto y comportamiento de todo tipo de ventanas, simplemente
con especificar las propiedades correspondientes y/o escribir ampliaciones propias. Evidentemente aquí se
encuentra el ajuste de tamaño y posición: con este fin, cada formulario posee, mientras se representa en el
entorno de desarrollo (no necesariamente en el programa ejecutado), un borde que permite modificar la
posición y el tamaño por los cuatro lados.
Mientras que el formulario representa solamente el marco de un programa, los componentes contenidos en el,
se encargan de la interacción con el usuario. Los componentes que se utilizan mas a menudo son los cuadros
de texto, las listas de selección, o los botones de alternar, aunque también las barras de menú o de estado
cuentan entre los posibles candidatos, solo por nombrar algunos ejemplos.
Una vez seleccionados e introducidos en el formulario, los componentes, como es natural, también se podrán
modificar a voluntad posteriormente. Como propiedades principales cabría mencionar −del mismo modo que
antes para el formulario− el tamaño y la posición. Con este fin muchos componentes poseen un borde que se
hace visible mediante la pulsación del botón izquierdo del ratón y con cuya ayuda puede adaptarse a voluntad
el tamaño en todas direcciones. La modificación de la posición se realiza con un simple Drag & Drop
(arrastrar y colocar).
El Object Inspector
No obstante, malo seria para la eficacia del VCL que el tamaño y la posición fueran las únicas propiedades
que admitieran modificaciones. Afortunadamente, cada componente dispone de un gran numero de
parámetros modificables, de modo que para su procesamiento, incluso con una sola ventana propia, basta: el
Object Inspector.
En el Object Inspector se indican en orden alfabético todas las propiedades y eventos del componente
seleccionado en ese momento. Si se selecciona otro componente (por ejemplo, con la ayuda de la lista
desplegable en la primera línea del Object Inspector, o bien mediante la pulsación directa sobre otro
6
componente del formulario), el contenido del Object Inspector se adapta al instante.
Las propiedades y eventos se representan en el Object Inspector en distintas paginas de la ventana con la
ayuda de las pestañas de la parte inferior de la ventana (o bien mediante CTRL + TAB) se puede escoger la
pagina deseada. Cada pagina esta subdividida en dos mitades.
Consideremos primero la pagina de propiedades. Allí se encuentran, en la mitad izquierda, los nombres de
todas las propiedades. Como ejemplo sirve aquí una propiedad presente en muchos componentes: Caption
(título).
La mitad derecha contiene el valor actual de cada propiedad. Puede tratase de números, cadenas de caracteres,
constantes determinadas, así como de gráficos y textos enteros. En caso de que la propiedad mencionada
arriba Caption, sea una cadena de caracteres se podría haber introducido, por ejemplo, la palabra Acerca de....
Suponiendo que se estén manejando ahora las propiedades de un formulario, aparecerá el texto introducido en
la barra de título de la ventana, mientras que en el caso de un botón de alternar, el texto aparecerá en forma de
inscripción.
Como ya se ha mencionado, a la pagina de eventos del Object inspector se accede mediante la pulsación de la
pestaña correspondiente en la parte inferior de la ventana o bien por medio del teclado CTRL + TAB.
En su mitad izquierda. La ventana contiene los nombres de todos los lugares de corte en los que se puede
añadir una rutina propia, como en el caso de las propiedades, esta lista de componentes también es distinta.
Un evento que puede producirse en todos los componentes visibles es, por ejemplo, OnClick. Si se añade una
rutina en ese lugar de corte de eventos, se producirá una llamada siempre que el usuario del programa pulse el
botón izquierdo del ratón sobre dicho componente.
Dentro de ese formato de código fuente debe escribirse el código del programa deseado. El nombre de la
rutina representa la conexión entre el evento del componente y el código fuente. Si se modifica el nombre de
un evento en el Object Inspector, el nombre que le pertenece se adapta automáticamente en el código fuente.
Naturalmente, las rutinas de eventos pueden agregarse repetidas veces. Si se ha vinculado, por ejemplo, una
opción de menú con una rutina OnClick que se encarga de la apertura de un archivo, y se quiere disponer de la
misma función en un botón de alternar en la barra de símbolos, no es necesario escribir dos veces el código de
7
programa correspondiente. Basta con indicar asimismo el nombre de la rutina ya existente en el evento
OnClick del botón de alternar.
Como se ha indicado anteriormente, en el editor de código fuente se encuentra el entorno creado por uno
mismo. También se integran aquí todas las rutinas de eventos definidas.
Delphi coloca para cada ventana diseñada un archivo de código fuente propio. Por lo tanto un proyecto consta
como mínimo de tantos archivos de código fuente como ventanas existan, mas el archivo de proyecto (con el
que normalmente no debe hacerse nada). En programas grandes pueden aparecer fácilmente varias docenas de
ellos.
Por esta razón, el editor dispone de un administrador de paginas, realizado totalmente al estilo del resto del
producto con la ayuda de pestañas. Cada pagina contiene su propio archivo. Los archivos innecesarios pueden
cerrarse mediante la opción de menú File/Close file. Igual que en el Object Inspector, puede accederse a una
pagina en concreto mediante la pulsación de la pestaña correspondiente, o bien con la combinación de teclas
CTRL + TAB.
Naturalmente, el editor ofrece toda una serie de otras funciones que han sido desarrolladas especialmente para
las necesidades de los programadores.
Delphi aplica su nuevo concepto de desarrollo. Combina las ventajas de una enorme biblioteca de clase
orientada al objeto con una programabilidad extremadamente sencilla − ya que es visual −. Borland designa su
nueva biblioteca de clase como VCL. Todo el entorno de una aplicación puede diseñarse con ella en solo una
fracción de tiempo y sin conocimientos preliminares avanzados.
Ofrece una abstracción no conocida hasta la fecha de todas las singularidades especificas de Windows. Con el
propio sistema operativo prácticamente no se entra en contacto, a no ser que se programe a propósito para
ello.
El núcleo de la VCL, son los ya mencionados componentes, todos los elementos de entorno y de programas
listos para el uso, que pueden insertarse fácilmente en la ventana correspondiente mediante Drag & Drop.
Con ello se aprovecha el principio que se emplea desde hace tiempo en el llamado Case − Tools*, es decir, el
desarrollo de programas a partir de módulos prefabricados, que deben enlazarse solo de una manera
determinada. El tipo de enlace determina el desarrollo del programa.
En cuanto al procesamiento de programas creados de este modo, existen algunas diferencias. Unos ejecutan el
programa directamente mediante el intérprete en pasos individuales. Estos programas no son aptos para la
ejecución por si mismos, sino solo dentro del programa en que fueron desarrollados. La ejecución es muy
larga. Por otra parte, otros crean un tipo de código intermedio comprendido y ejecutado por una biblioteca
Runtime desarrollada para ello. Visual Basic es un conocido ejemplo de esto. Desgraciadamente las
aplicaciones mas complejas también padecen aquí de falta de velocidad de ejecución.
En Delphi, por el contrario, se crea durante la compilación, un autentico código de programa legible para la
maquina, que puede ser procesado directamente por el procesador. La velocidad de los archivos EXE creados
es por consiguiente, alta, y puede competir perfectamente con programas escritos en C o en C++.
8
¿Qué son los identificadores?
Cualquier nombre que aparece en una aplicación Delphi y que no corresponde a palabras reservadas
(denominadas palabras clave) es un identificador. Pueden ser nombres de variables, tipos de datos,
procedimientos, funciones u objetos. En general puede seguirse la regla de que los identificadores se declaran
en código de programa antes de su utilización, es decir, se informa al compilador sobre su presencia. El
compilador verifica literalmente la sintaxis del programa antes de su ejecución, e informa al programador de
la presencia de posibles errores. En caso de error el proceso de compilación se interrumpe inmediatamente. De
esta manera el programador puede corregir el error aparecido y efectuar de nuevo el proceso de compilación.
Los identificadores no pueden tener el mismo nombre que las palabras claves en el sistema y que posean
funciones determinadas. Esta función es necesaria para permitir al compilador la identificación inequívoca de
palabras clave e identificadores introducidos por el programador. Si se salta esta regla, el compilador
comunica el mensaje de error correspondiente.
Declaración de Variables
Una variable es un identificador definido por el usuario, declarado antes del código del programa. El
contenido de una variable depende, entre otros factores, del tipo de datos asignado, y se almacena en la
memoria del ordenador. El valor de la variable puede modificarse de forma arbitraria durante la ejecución del
programa. Esta circunstancia se produce por la asignación de valores.
Al declarar una variable hay que tener en cuenta la elección del nombre, que debe hacerse de forma que la
utilización de la variable sea identificada en el programa. Este procedimiento es imprescindible para facilitar
la lectura del programa y su comprensión.
Al declarar una variable o cualquier otro tipo de identificador (por ejemplo constantes o tipos de datos) es
preciso seguir determinadas reglas referidas a la sintaxis. En primer lugar hay que tener en cuenta que los
nombres de la variables no pueden tener mas de 63 caracteres, ya que el compilador solo toma en cuenta los
primeros 63 caracteres. Por otra parte los nombres de las variables, lo mismo que de los demás
identificadores, deben empezar con una letra o con un trazo de subrayado. No pueden contener diéresis ni
caracteres como, por ejemplo, & o %. En un programa, las denominadas variables globales o publicas pueden
declararse una sola vez. En caso de una declaración duplicada, el compilador da un mensaje de error. Las
denominadas locales o privadas no pueden declararse dos veces dentro de una misma rutina. Por el contrario,
se admite la declaración de la misma variable dentro de diversas rutinas.
El ámbito de aplicación de las variables globales abarca todo el módulo del programa en el que se declara la
variable en cuestión. Para conseguir esta condición, la declaración debe encontrarse al comienzo del módulo;
por ejemplo en una UNIT. Las variables locales, en contraste, solamente son válidas dentro de la rutina en que
están declaradas. Es imposible el empleo de las variables fuera de esa rutina. En la declaración propiamente
dicha, las variables globales no se diferencian de las locales.
A continuación se especifica la forma de declaración de las variables en una aplicación Delphi. En primer
lugar se representa la palabra reservada VAR de la declaración de variable. A continuación es posible la
definición e prácticamente cualquier variable. En cada declaración debe figurar el nombre de la variable y el
tipo de datos. Las dos partes de la variable se dividen mediante el carácter de dos puntos. La indicación de
tipo de datos debe ir seguida de un símbolo de punto y coma que permita al compilador identificar
inequívocamente el final de la declaración de una o de más variables (y otras condiciones).
Var
Valor1:integer;
9
Valor2:integer;
Valor3:byte;
Valor4:byte;
En el ejemplo anterior, las variables Valor1 y Valor2 son del tipo integer (números enteros comprendidos
desde el −32768 y el 32767) y las variables Valor3 y Valor4, del tipo byte (numero comprendidos desde el 0
al 255). Para simplificar la declaración es posible agrupar las variables del mismo tipo, separándolas por una
coma. El carácter de dos puntos solo se coloca tras la ultima denominación de variable, en un bloque de
variables, y al carácter de dos puntos le siguen generalmente la indicación del mismo tipo de datos aplicable a
todas las variables dentro del bloque. El resultado es el siguiente.
Var
Una vez conocida la forma en que se declaran las variables en los programas Delphi, procede analizar la
forma en que estas actúan en el programa y el funcionamiento de cada asignación de valor. Antes de dar un
ejemplo concreto, cabe señalar que los valores susceptibles de admisión por las diferentes variables dependen
del tipo de datos asignado a las variables en cuestión. Así por ejemplo a la variable Valor4 no se le puede
asignar el valor 1000, ya que queda fuera del rango definido para el tipo de datos estándar byte. En este caso
solo son validos los valores comprendidos desde 0 hasta 255. Si se asigna a una variable un valor que queda
fuera del rango valido para el tipo en cuestión, el compilador proporciona inmediatamente un mensaje de
error.
Var
String1: string;
Char1: char;
Boolean1: boolean;
Begin
Valor1:= 1000;
Valor2:= 20000;
Valor3:=10;
10
Valor4:=40;
Char1:= `c';
Boolean1:= true;
End.
Como puede verse, en Object Pascal, la asignación siempre se realiza con la ayuda de los caracteres :=. A la
izquierda de la asignación aparece la variable, y a la derecha, el valor asignado a la variable en cuestión. La
terminación se realiza con un carácter de punto y coma. Para aumentar la legibilidad del código fuente es
recomendable emplear comillas como en el ejemplo anterior. Además, en cada línea solamente debe escribirse
una instrucción.
A continuación se exponen en forma de tabla los tipos de datos disponibles en condiciones estándar en el
lenguaje Object Pascal. Las variables de los tipos previamente definidos pueden generarse directamente.
11
cada uno en la memoria
Números de coma flotante de 19 a 20 cifras delante
y detrás de la coma; solo es posible si está activada
Comp
la opción de compilador {$N+}; ocupan 8 bytes
cada uno en la memoria
Secuencia de símbolos con una longitud máxima de
String
255 caracteres ASCII*
Char Caracteres ASCII simples
Pchar Puntero a una cadena terminada en carácter nulo
Punteros que pueden apuntar a cualquier estructura
Pointer de datos; sin enlace con un tipo
concreto(denominados punteros sin tipo)
Tipo de Datos Booleano, cuyas variables pueden
Boolean
tomar los valores True (verdadero) o False (falso)
Las instrucciones se cuentan entre los elementos más importantes del código de programa. Controlan,
literalmente, la ejecución del programa. Existen instrucciones de bifurcación, como IF y CASE, y de iteración,
como REPEAT, WHILE y FOR. A continuación se describen detalladamente cinco de estas instrucciones, que
se emplean en todos los casos de escritura de aplicaciones Delphi.
La instrucción IF
Esta condición se genera con la palabra reservada IF. A continuación sigue la condición, es decir, una
expresión, de cuyo resultado depende el camino de ejecución del programa. Si la condición es verdadera, el
código de programa se bifurca tras al palabra clave THEN. Si la expresión es falsa, se ejecuta el código de
programa que aparece a continuación del bloque THEN o tras la palabra clave ELSE.
Else
Si en el ejemplo anterior, la variable Suma no tiene el valor 100, el cuadro de mensaje aparece con el texto
Suma es 100. Si el valor es distinto de 100, la ventana de mensajes aparece con el texto Suma no es 100. Para
comprender mejor la instrucción IF esta construcción se denomina si −entonces −sino− instrucción".
El bloque ELSE es opcional y no tiene por que aparecer siempre. Cuando existe, y el valor booleano de la
condición es False, el código de programa se ejecuta a continuación del bloque THEN.
12
Independientemente de lo expuesto, tanto si la suma es 100 como si no, en el presente ejemplo, el cuadro de
mensaje aparece con el texto Este cuadro de mensaje aparece siempre. Ello es debido a que la instrucción no
forma parte del bloque IF.
Tanto el bloque THEN como el ELSE, en una condición IF, pueden estar formados por varias instrucciones.
Para que se ejecuten todas las instrucciones, deben estar encerradas con una instrucción BEGIN END.
Begin
End
Else
Begin
End;
La condición de la instrucción IF puede estar formada por varias condiciones parciales enlazadas entre si
mediante los operadores booleanos tales como AND (tratamiento Y) u OR (tratamiento O). Además, pude
utilizarse completamente la negación NOT. Cuando esta activada la opción {$B+} del compilador, este valora
totalmente las expresiones. Si dicha opción no está activada, el compilador genera un código de valoración
conforme al procedimiento denominado parcial, en el que las expresiones parciales (condiciones parciales)
van valorándose secuencialmente conformemente aparecen. La valoración se interrumpe cuando el resultado
persiste, es decir, cuando el valor de la expresión completa ya no puede variar.
Else
En este caso, el resultado de la condición IF es True cuando se cumple una de las dos condiciones. Esto ocurre
porque se utiliza el operador OR para el tratamiento de las condiciones. Si en lugar de dicho operador se
aplica el operado AND, el valor de la expresión en conjunto de la instrucción IF, nunca podrá ser True. Ello es
debido a que una variable como la variable suma utilizada en el ejemplo, siempre tiene que tener un único
valor. Dos valores de la misma variable simultáneamente son imposibles en la regla de la lógica.
La instrucción CASE
13
A través de la instrucción CASE pueden establecerse varias condiciones en un bloque. Cuando se cumple una
de las condiciones expuestas en el bloque CASE, el código de programa que aparece a continuación de la
condición en cuestión se ramifica.
Case suma of
100:
200:
500:
1000:
End;
A continuación de la palabra CASE se expresa la referencia de las condiciones siguientes. A esta información
le sigue la palabra reservada OF. En la línea siguiente comienza el bloque, que contiene las condiciones y las
correspondientes ramificaciones código. El final del bloque se reconoce por el compilador gracias a la palabra
clave END. Opcionalmente, en un bloque CASE también es posible una sección ELSE, de forma análoga a
como ocurre con una condición IF.
Case suma of
100:
200:
500:
1000:
Else
14
`ni tampoco 1000', mtinformation, [mbOK], 0);
End;
La instrucción CASE no siempre es posible. El compilador proporciona un mensaje de error, por ejemplo, si
durante el tratamiento de un programa, aparece la creación de un bloque CASE con una variable, partiendo de
un tipo String. Tampoco es posible la instrucción CASE cuando el tipo de variables de referencia es
estructurado (por ejemplo array o record). Sin embargo es preferible a la instrucción IF cuando el tipo de
variables a las que se refiere el bloque CASE son Integer o del tipo subrango. La instrucción CASE debe
utilizarse sobre todo cuando se necesitan varias condiciones y ramificaciones, como es el caso del ejemplo
anterior. Es mucho más eficaz que la condición con varias instrucciones IF. Para aclarar estas condiciones, las
condiciones del bloque CASE del ejemplo anterior se han convertido a IF.
Else
Else
Else
Else
Como puede comprobarse, la estructura del código del bloque de condiciones preparado con ayuda de la
instrucción CASE es mas claro que el correspondiente a la estructura en base a condiciones IF del ejemplo
anterior.
Un inconveniente de las condiciones en el bloque CASE es que no cabe la posibilidad de enlazar condiciones
entre sí a base de operadores booleanos tales como AND y OR. Por lo tanto definen una condición única.
Si varias condiciones conducen a la misma ramificación de código, en el bloque CASE pueden enumerarse
separadas por comas, a fin de reducir la longitud del código fuente. En el siguiente ejemplo se muestra como
funciona esta condición.
15
Case suma of
Else
La instrucción REPEAT
En los apartados anteriores se han visto las instrucciones IF y CASE para generar condiciones en un programa
Delphi. Ahora se describen las instrucciones de bucle que se utilizan para ejecuciones repetidas de partes del
código de programa. En primer lugar se describe detalladamente la instrucción REPEAT,
Con la instrucción REPEAT se crean repeticiones de instrucciones en el programa Delphi, hasta que se cumple
una condición de interrupción que aparece a continuación de la palabra clave UNTIL. La condición de
interrupción es una expresión booleana, y de forma análoga a como ocurre con la condición IF, se compone
de varias condiciones parciales. La condición de interrupción se cumple cuando el resultado de expresión total
es True.
Antes del bucle REPEAT... UNTIL se establece en 0 el valor de la variable suma. Cada vez que se cumpla la
condición de bucle se aumenta en 1 el valor de suma, lo que puede realizarse de una forma de una forma muy
sencilla con el operador +. El bloque REPEAT− UNTIL se repite una y otra vez hasta que la variable suma
alcanza el valor 100, que es la condición de término de bucle.
Suma := 0;
Repeat
Suma := Suma + 1;
Para probar de inmediato en la practica la instrucción REPEAT, puede realizarse primero un nuevo proyecto
en Delphi. A continuación, se ha de insertar en el proyecto una nueva UNIT generada al pulsar el botón del
ratón en la opción NEW UNIT (menú File). En el código fuente del nuevo archivo UNIT que contiene el
nombre de UNIT2, se ha de insertar la instrucción USES en la que se indica que debe utilizarse la UNIT
estándar WinCrt. Esta condición es necesaria para la visualización de texto por medio de una de las rutinas
estándar WRITE o WRITELN.
Una vez realizadas las operaciones descritas, se declara en la sección interface de la UNIT el procedimiento
ShowRepeatLoop. En la sección de implementación se escribe el código de la rutina en cuestión, de forma que
el listado de la unidad en conjunto tenga la forma siguiente:
unit Unit2;
16
interface
uses
WinCrt
Procedure ShowRepeatLoop;
Var
Suma : integer;
Begin
Suma := 0;
Repeat
Suma := suma + 1;
Writeln(suma);
End;
End.
Una vez escrito el código fuente de la unidad, en el formulario que se genera al realizar un proyecto nuevo, se
ha de insertar un botón y programar la rutina Tform.Button1Click, tal y como se muestra en el listado
siguiente:
Begin
ShowRepeatLoop
End;
Antes de ejecutar el programa (pulsando la tecla F9), en la instrucción USES del archivo UNIT, enlazado con
el formulario donde se encuentra el botón Button1, se inserta la entrada UNIT2, de forma que el compilador
pueda enlazar esta UNIT con la del formulario. Esta opción es necesaria para que no se produzcan mensajes
de error al compilar el proyecto, debido a que la rutina ShowRepeatLoop es desconocida.
Tras ejecutar el programa y pulsar el botón del ratón sobre el botón insertado en el formulario en el modo de
desarrollo, se abre una ventana y se muestran en ella los diferentes pasos de la ejecución del bucle REPEAT...
UNTIL. Van apareciendo los valores de la variable suma creados por la rutina ShowRepeatLoop al llamar al
procedimiento estándar WRITELN.
La instrucción WHILE
17
Aparte de la instrucción REPEAT, el lenguaje Object Pascal de Delphi tiene otras dos funciones mas de bucle,
se trata de las instrucciones WHILE y FOR. En este apartado se analizan las propiedades de la WHILE − DO.
En primer lugar conviene decir que la diferencia entre las instrucciones REPEAT y WHILE radica en que la
condición de la instrucción WHILE... DO se expresa al principio, directamente después de la palabra clave
WHILE. El bucle WHILE... DO se ejecuta mientras la citada condición es True. Sin embargo en la instrucción
REPEAT, se trata de una condición de interrupción y la condición de la instrucción WHILE puede tomarse
como condición para la ejecución del bucle.
De forma análoga a como ocurre con la condición de interrupción de la instrucción REPEAT, también en la
instrucción WHILE, la condición para la ejecución del bucle puede estar formada por varias condiciones
parciales que se someten a tratamiento lógico de cualquier tipo con la ayuda de los operadores AND y OR. La
condición se cumple cuando el resultado de la expresión completa es True. En estos casos, la ramificación
hacia el código de programa tiene lugar dentro de la instrucción WHILE − DO. Cuando el resultado de la
expresión completa es False, se tiene criterio de interrupción de la ejecución reiterada del código. En este
caso, las instrucciones en el bloque WHILE... DO se saltan, y la ejecución del programa continúa con la
siguiente instrucción, directamente después del bloque.
Para comprender mejor la instrucción WHILE, se presenta un ejemplo de código que facilite la comprensión
de esta instrucción, recurriendo a la suma que se ha utilizado en el apartado anterior.
Como consecuencia de las propiedades de la instrucción WHILE, la condición en el bucle WHILE− DO debe
ser modificada ligeramente, en comparación con la condición del bucle REPEAT−UNTIL. El código de
programa del bloque WHILE−DO solo puede ejecutarse cuando el valor de suma sea inferior a 100, por lo que
es necesario modificar la formulación de la condición.
Suma := 0;
Suma := suma + 1;
Conviene no olvidar que el valor de suma antes de la instrucción WHILE de ponerse a 0. Para que la ejecución
del bucle WHILE−DO en el programa pueda seguirse paso a paso, la UNIT UNIT2 se amplía con un nuevo
procedimiento que recibe el nombre de ShowWhileLoop. De forma análoga a como ocurre con el
procedimiento ShowRepeatLoop, para presentar el texto en pantalla se utiliza en esta rutina la instrucción
estándar Writeln.
Procedure ShowWhileLoop;
Var
Suma : integer;
Begin
Suma := 0;
Begin
18
Suma := suma + 1;
Writeln (suma);
End;
End;
En total, en el bucle ShowWhileLoop pueden ejecutarse dos instrucciones, por lo que el principio del bloque
completo debe marcarse con la palabra reservada Begin, y el final, con End.
Para comprobar las diferencias entre la ejecución de las rutinas ShowRepeatLoop y ShowWhileLoop, puede
recurrirse a insertar un segundo botón en le formulario del programa. El correspondiente control toma
automáticamente el nombre Button2, en el caso que se utilicen componentes Button. Pulsando dos veces el
botón del ratón sobre la columna de valores del evento OnClick (en el inspector de objetos) se genera una
rutina de tratamiento para el evento. Pero antes de realizar estas operaciones no hay que olvidarse de
seleccionar Button2 pulsando el botón de ratón. En la rutina de tratamiento generada por Delphi, provista del
nombre Tform1.Button2Click, llamar al procedimiento ShowWhileLoop.
Una vez arrancado el programa, se ha de pulsar una vez el botón del ratón sobre el botón Button1, con lo que
llamara a la rutina ShowRepeatLoop (instrucción Repeat). Obsérvese los valores que se muestran en la
ventana y, una vez terminada la salida de texto, ciérrese la ventana y púlsese el botón del ratón sobre el botón
Button2 en el formulario para llamar a la segunda rutina, la rutina ShowWhileLoop (instrucción While). Al
pulsar el botón del ratón sobre el control activo, se abrirá igualmente una ventana y se mostraran los valores
actuales que la variable suma va tomando durante la ejecución del bucle. Si se ha observado detenidamente la
salida de texto anterior, en la primera ventana, podrá comprobar que ambas rutinas ShowRepeatLoop y
ShowWhileLoop hacen lo mismo, a pesar de que utilizan diferentes tipos de bucles.
La instrucción FOR
Hasta aquí se ha hablado de dos tipos de bucles, que se ejecutan cuando la condición definida es True (bucle
While... do) o False (Bucle Repeat... Until). En el presente apartado se presenta el tercer tipo de bucle,
denominado FOR... DO, en el que no se necesita ninguna condición para la interrupción o para la ejecución
del código del programa. En los bucles FOR... DO se define exactamente con anterioridad cuantas veces se
repetirá la ejecución del código.
Para la implementación de un bucle FOR... DO es imprescindible declarar previamente una variable numérica,
por ejemplo del tipo Integer o Byte. La instrucción FOR introduce la denominada iteración a intervalos, que se
ejecuta hasta que el contador alcanza un determinado valor, partiendo del valor inicial. En la instrucción FOR
se indica tanto el valor inicial del contador como el final. De esta forma se define la cantidad de repeticiones
para el código del bucle FOR... DO. Entre los valores inicial y final del contador debe aparecer la palabra
clave TO (incremento del contador o la DOWNTO (decremento del contador).
El empleo de bucles es particularmente recomendable para cumplimentar los campos de las variables de
matriz con valores crecientes o decrecientes, o para ponerlos a 0. Para acceder a todos los campos de matriz,
basta con escribir a continuación de la denominación ARRAY, entre corchetes, la variable numérica que
aumenta (incremento) o disminuye (decremento) en 1 con cada repetición del código.
Var
19
Count : integer;
Begin
Array1[count] := count;
End;
En el presente ejemplo se recorren todos los campos de la matriz de 1 a 100 y a cada campo se le asigna su
índice. Para recorrer los campos de matriz en sentido inverso es preciso cambiar la palabra clave TO de la
instrucción FOR por DOWNTO. Además es preciso cambiar entre si los valores de comienzo y de final del
contador.
Array1[count] := count;
Los bucles FOR... DO también pueden anidarse. El anidamiento es necesario, por ejemplo, cuando es
necesario rellenar una matriz multidimensional. Por lo demás para cada bucle aisladamente considerado debe
utilizarse una variable contadora por separado.
Var
Begin
For count1 := 1 to 10 do
For count3 := 1 to 5 do
End;
En el ejemplo anterior se recorren todos los campos de la matriz tridimensional y se pone 0 a su valor.
En los bucles FOR... DO también es posible definir criterios de interrupción, pero dado que no está previsto
inicialmente, para esta finalidad se recurre a la condición IF. Para abandonar un bucle FOR... DO se utiliza la
instrucción estándar EXIT.
Var
Arrat3:array[10..1000] of integer;
Count3: integer;
20
Begin
Begin
Array3[count3] := 0
End;
End;
Un programador de Delphi debe ser consciente de la gran rapidez de los bucles, por lo que la aplicación debe
realizarse siempre que se conozcan los números de repeticiones y se desee ejecutar el código con rapidez.
• Delphi produce aplicaciones en código máquina, mientras que Visual Basic produce código para ser
interpretado. Esto quiere decir que las aplicaciones Delphi son mucho más rápidas que las
equivalentes escritas en Visual Basic (de 10 a 20 veces, según los datos lo Borland). Pero también
significa que nos ahorramos la instalación del intérprete que necesitan los programas de Visual Basic.
• En cualquiera de las versiones de Delphi podemos programar DLLs, para poder comunicarnos con
otros lenguajes de programación.
• Los componentes visuales de Delphi tienden, por lo general, a ser más eficientes que los
correspondientes controles VBXs ya que forman parte del propio programa ejecutable final y no de
una biblioteca dinámica. Un control definido en una DLL, por ejemplo, duplica inevitablemente parte
del entorno de tiempo de ejecución del sistema en que fue programado, ocupa más memoria y
provoca un mayor intercambio de páginas de memoria virtual con el disco.
• En Delphi podemos programar directamente los componentes visuales. En cambio, Visual Basic no
permite programar controles VBX ni OCX. Utilizando Delphi incluso podemos crear nuevos controles
que hereden características de controles ya existentes.
• Por último, los componentes visuales de Visual Basic pueden utilizarse desde Delphi, ya sean los
obsoletos VBX para la versión de 16 bits, o los nuevos OCX en la versión de 32.
• Delphi utiliza Object Pascal desde sus primeras versiones, un lenguaje Orientado a Objetos, lo que
produce que podemos beneficiarnos de características tan importantes como son el encapsulamiento,
el polimorfismo y la herencia.
Glosario de Términos
21
• ASCII : American Standard Code for Information Interchange (código americano estándar de
intercambio de información), es un formato de archivo que no contiene formato de texto, por lo que se
puede transferir en distintos sistemas operativos y programas. Los archivos ASCII se usan
universalmente para intercambiar información entre equipos.
• CASE − TOOLS : Computer Aided Software Engineering (desarrollo de software asistido por
ordenador)
• ODBC : Open Database Conectivity. Es una interfaz de programación que permite a las aplicaciones
tener acceso a datos en sistemas de administración de bases de datos que utilizan el SQL como
estándar de acceso a datos.
Este presente trabajo se lo queremos dedicar a toda la gente que hay tras nosotros, partiendo primeramente por
nuestras familias quienes gracias a su gran esfuerzo nos han ayudado en este difícil camino, creyendo en
nosotros y apoyándonos, a nuestros abuelos, tíos, hermanos, amigos, nuestras(os) novias(os), my lovin' guitar,
por su inspiración, al gato amarillo y al Félix, en fin todos aquellos que en poca o gran medida han hecho que
nuestro sueño de apoco se convierta en realidad. A todos ustedes quienes siempre recordaremos.
Extra gracias : Al señor Luis Galdames Bert y al señor Jorge Fuentes por su gran ayuda, apoyo y
conocimientos entregados sin fines de lucro alguno. (ya nos veremos pronto las caras)
Los autores.
Julio de 2001.
Bibliografía
Para la realización de este trabajo se utilizaron los siguientes textos como referencia.
Editorial : McGraw−Hill
22
Autor : Michael Halvorson
Editorial : McGraw−Hill
Conclusión
32
Vehículo
Ciclomotor
Bicicleta
Automóvil
Montaña
Paseo
Camión
Autobús
Coche
Competición
Deportivo
Turismo
Berlina
Familiar
23