Вы находитесь на странице: 1из 13

INTRODUCCION A DELPHI

INTRODUCCIN
QU ES DELPHI?
EL ENTORNO DE DELPHI
La ventana principal
La ventana de programa. Formularios (Forms)
El inspector de objetos (object inspector)
El editor de cdigo fuente
CONCEPTOS BSICOS EN LA PROGRAMACIN CON DELPHI
Objetos
Componentes
Propiedades
Eventos
Mtodos
BASES DE LA PROGRAMACIN ORIENTADA A OBJETOS
TRATAMIENTO DE ERRORES Y EXCEPCIONES
PROGRACIN MDI
ESTRUCTURA DE UN PROYECTO DELPHI
El texto sobre Delphi que vais a leer es parte de mi Proyecto Fin de Carrera (teleco tcnica). Este
consista en un simulador de sistemas mecnicos mediante el anlisis de su circuito elctrico
equivalente. El nombre de programa es ANALOGIA.EXE, por lo que cuando me refiera en el texto a
"ANALOGIA", ya sabeis de qu se trata. De todas formas no te preocupes, no tienes que saber nada
sobre analogas electromecnicas, simplemente puedes aprender algo sobre programacin bajo
Delphi.
El programa ANALOGIA ha sido realizado ntegramente con Delphi 1, para plataformas Windows
de 16 bits o 32 bits, ya que resulta el compilador idneo para realizar potentes aplicaciones con las
facilidades de uso y herramientas que caracterizan a los entornos de programacin modernos. A
continuacin veremos las ventajas de utilizar Delphi en lugar de C++ o Visual Basic, por ejemplo.
Bsicamente decir que Delphi ana la potencia y rapidez de ejecucin de que carece Visual Basic
con la facilidad de la programacin visual de las herramientas tipo RAD (Rapid Application
Development) de que carece C++.
La razn de no haber empleado Delphi 2 (o el novsimo Delphi 3), que realiza una compilacin para
32 bits, es la cantidad de usuarios que todava no disponen de sistemas operativos (Windows) de
32bits (Windows95 y Windows NT). Con delphi 1 el programa se puede ejecutar con cualquier tipo de
Windows disponible.
Delphi es algo ms que el sucesor del famoso Pascal 7.0 de Borland. Dispone no slo de un
compilador muy rpido (ms que la gran mayora de los compiladores de C++, como ya era
tradicional en Turbo Pascal), sino tambin de potentes herramientas para la creacin visual de
aplicaciones, de completas herramientas para la creacin y manejo de bases de datos, aplicaciones
multimedia, enlace DDE, OLE, creacin de DLLs, VBX, etc.
Que es Delphi
Para hacernos una idea de lo que es, y de lo que se puede conseguir con Delphi, vamos a ver de
forma breve las propiedades ms importantes y destacadas de que consta.
Delphi 1 es una potente herramienta de desarrollo de programas que permite la creacin de
aplicaciones para Windows 3.x, Windows95 y Windows NT. De hecho, aunque el programa
ANALOGIA.EXE corre perfectamente en cualquier tipo de Windows, fue desarrollado sobre una
plataforma Windows NT Workstation.

Las aplicaciones pueden colocarse de forma muy sencilla en la pantalla segn el principio de
mdulos. Para ello se dispone de una paleta dotada de una gran variedad de componentes, algo as
como los bloques de construccin de cada programa. Esta paleta es denominada por Borland VCL
(Visual Component Library), o biblioteca de componentes visuales. Tiene un aspecto similar a Visual
Basic, pero aunque el aspecto externo indica la misma facilidad de uso que Visual Basic, el corazn
del sistema Delphi es mucho ms potente.
Esta VCL es mucho ms amplia que la de Turbo Pascal para Windows o la conocida OWL 1.0 (Object
Windows Library) de Borland Pascal, y ofrece adems una abstraccin mucho ms alta del sistema
operativo. El programador es totalmente independiente de las particularidades de Windows, tales
como manejadores (Handlers), punteros y funciones del API de Windows (Application Programming
Interface). La programacin se realiza con los cmodos componentes de Delphi y no con las
complejas llamadas al sistema de Windows. Esto simplifica enormemente la hasta ahora poco clara
programacin bajo Windows.
En realidad el hecho de que no necesitemos (normalmente) usar llamadas al API, no quiere decir que
Delphi no lo permita. En casos muy concretos es necesario y no se puede hacer de otra manera. Un
ejemplo concreto en ANALOGIA.EXE es la rutina que escribe las letras verticales de las etiquetas de
los componentes del sistema mecnico (si el sistema es vertical). Esta rutina hace uso de varias
llamadas al API de Windows puesto que Delphi no admite la posibilidad de escribir en vertical
directamente. Pero como se ve, es un caso muy particular para una necesidad muy concreta.
A diferencia de otras herramientas de desarrollo visuales (Visual Basic, Toolbook, etc) con Delphi es
posible crear nuevos componentes que pueden entonces incorporarse en la paleta con los
componentes ya existentes y que pueden ser utilizados de la misma forma. La VCL puede
estructurarse libremente y as adaptarse totalmente a las situaciones propias de programacin.
Delphi no solo dispone de componentes para la sencilla creacin de entornos de aplicaciones como
cuadros de lista, conmutadores o cuadros de dilogo terminados, sino que cubre con sus
componentes muchos temas de la programacin bajo Windows: se incluye entre los mismos un
completo centro de control para la creacin de aplicaciones multimedia, as como una gran variedad
de componentes que actan "debajo" del entorno, como tipos de listado muy variados y contenedores
generales de datos. Tambin hay herramientas de comunicacin para DDE y OLE a travs de las que
se pueden crear vnculos de datos y comandos con otras aplicaciones. Uno de los aspectos ms
destacados lo constituyen los componentes que Borland ha incluido en Delphi para el desarrollo de
completas aplicaciones de bases de datos. No se est limitado a un formato de datos determinado,
sino que se tiene acceso a 50 formatos de datos diferentes a travs de controladores suministrados
por terceros (IDAPI y ODBC). Entre stos se encuentran todos los estndares importantes de bases
de datos en el rea del PC como XBase, Paradox, Access, etc. Pero tambin es posible acceder de
forma muy cmoda a servidores de bases de datos de otros sistemas (por ejemplo UNIX) por medio
del SQL (Structured Query Language) que constituye un estndar de lenguaje de uso general para
consultar y modificar datos administrados por servidores especiales de bases de datos como Oracle,
Sybase, Informix o Adabas.
Delphi dispone del Object Pascal, un lenguaje de programacin muy poderoso que est sin dudas a
la altura del C++ y que incluso lo supera en algunos aspectos. Este lenguaje surge a partir del
desarrollo del Borland Pascal 7.0, un lenguaje que ocupa un lugar muy importante en la programacin
de ordenadores personales. El Object Pascal es totalmente compatible con el Borland Pascal 7.0, lo
que permite que programas desarrollados con este ltimo puedan ser convertidos a Delphi. Incluso la
biblioteca de clases OWL 1.0 se incluye con el paquete de Delphi. Aspectos nuevos en el Object
Pascal en relacin a sus predecesores son el Exception-Handling (tratamiento y canalizacin de
errores en run-time), un manejo ms sencillo de los punteros con reconocimiento automtico y
referenciacin, las llamadas propiedades de objetos que pueden ser asignadas como las variables,
etc.
Las aplicaciones terminadas quedan disponibles como archivos ejecutables (.EXE) que pueden
utilizarse solos y sin bibliotecas adicionales, tal y como se ha hecho en ANALOGIA.EXE.
Consecuentemente la velocidad con la que pueden ejecutarse los programas creados es muy alta.
Excepcionalmente, si se incluyen llamadas a VBX, o DLLs, stas se deben incluir junto con el

ejecutable. Tambin es necesario incluir el BDE (Borland Database Engine) en las aplicaciones de
bases de datos, por lo cual no se incluye con ANALOGIA.EXE
Delphi es una "Two-Way-Tool", es decir, una herramienta de dos direcciones, porque permite crear el
desarrollo de programas de dos formas: una de forma visual en la pantalla, por medio de las
funciones de Drag & Drop (Arrastrar y colocar) y la otra a travs de la programacin convencional,
escribiendo el cdigo. Ambas tcnicas pueden utilizarse de forma alternativa o simultnea.
El entorno de Delphi
El entorno de programacin tpico consta en Delphi de cuatro ventanas que comparten el espacio
disponible de la pantalla. Cada una de estas ventanas puede modificarse, cerrarse y volverse a abrir
mediante el men View. Estas ventanas fundamentales son:
La ventana principal
El inspector de objetos (object inspector)
El editor de cdigo fuente
La ventana (o ventanas) de programa (Forms)

El entorno de Delphi con el Form principal de ANALOGIA.EXE

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 tambin finalizan su servicio. En la barra de mens de la
ventana principal estn disponibles todas las rdenes relacionadas con el procesamiento de un
proyecto concreto. La carga y almacenamiento de proyectos pertenecen igualmente al men, as
como la presentacin u ocultacin de las distintas ventanas del entorno de desarrollo.
Tambin se encuentran aqu las rdenes para compilar y ejecutar un programa. Finalmente, desde
aqu tambin se puede llamar a una parte de los programas externos suministrados con el paquete de
Delphi: el "Image Editor", el "Database Desktop", y el "BDE Config". El nico utilizado en
ANALOGIA.EXE es el editor de imgenes, ya que es capaz de crear y editar ficheros .BMP (por
ejemplo las imgenes de los componentes mecnicos, etc), .ICO (el icono de la aplicacin), .CUR
(Los distintos cursores que he definido), .RES (Resource File) y .DCR (Component Resource).
El mayor espacio de la ventana principal lo ocupa la paleta de componentes, que se encuentra
dividida en secciones temticas a travs de unas pestaas. Al igual que en el programa
ANALOGIA.EXE, si situamos el cursor sobre cada icono, saldr un mensaje indicando el tipo de
accin que realiza

Vista general de la ventana principal


Las reas en que se divide la paleta de componentes son:
Area
Descripcin
Standard

Contiene todos los elementos de control que Windows pone a disposicin


normalmente, empaquetados en la estructura clara de un componente. En
ANALOGIA.EXE los ms usados son, los botones, cuadros de lista, men, paneles,
etiquetas, RadioButtons y CheckBoxes.

Additional

Contiene todos los componentes que Windows no pone a disposicin como elementos
de control estndar, pero han resultado tiles con el paso del tiempo en varios
programas. Principalmente se ha usado en ANALOGIA.EXE los botones de grficos, el
TabbedNoteBook, las tablas (TStringGrid), el visor de grficos (Timage), y el
TScrollBox.

Aqu se encuentran los componentes desarrollados especialmente para una captura


cmoda y rpida de las bases de datos. Se puede tratar tanto de bases de datos
Data Acces
locales, como de sistemas repartidos (con importancia especial en la versin ClientServer de Delphi).
Data
Controls

Dispone de componentes variados para el procesado de datos, trabajando en


conjuncin con los elementos del rea "Data Access".

Dialogs

Contiene todos los dilogos estndar de Windows, empaquetados como componentes,


tales como dilogos de open/save, impresin, etc. Los dilogos de archivo e impresin
son usados en ANALOGIA.EXE

System

Contiene varios componentes que ofrecen determinados servicios de sistema en


Windows, como reloj, barras de archivos, funciones multimedia, DDE y OLE 2.0, etc.

VBX

Contiene algunos elementos VBX visualizados como si fuesen componentes, tales


como un visor de grficos, un generador de diagramas, etc.

Samples

Este ltimo rea contiene algunos otros componentes tiles cuyo cdigo fuente se
adjunta, tales como barras de progresin, calendario, etc. ANALOGIA.EXE hace uso de
la barra de progresin y del botn con flechas.

La ventana de programa. Formularios (Forms)


Delphi hace fcil precisamente las tareas rutinarias, dejando para el programador la tarea
realmente importante de codificar el programa, no el entorno.
El entorno (ventanas, colocacin de botones, listas, etc) se crea de forma puramente visual, es decir,
simplemente se coge con el ratn el componente deseado de la barra de herramientas de la ventana
principal y lo sita en la ventana sobre la que se desarrolla el programa (Form).
En el Form se puede reproducir el aspecto y el comportamiento de todo tipo de ventanas,
simplemente especificando las propiedades correspondientes y/o escribiendo ampliaciones propias.
De esta forma se caracteriza a la ventana a travs de sus propiedades: anchura, altura, coordenadas,
estilo de los bordes, colores, eventos ante los que reacciona, etc.
El inspector de objetos (object inspector)
Como se ha mencionado, los componentes vienen definidos por sus propiedades, y los eventos
ante los que reaccionan (aparte de los "mtodos" de que disponga, que son parecidos a los
procedimientos).
El inspector de objetos es una ventana desde la cual se pueden ver y modificar la mayora de las
propiedades y eventos del componente, ya que se listan en dicha ventana tanto las propiedades
como los eventos por orden alfabtico.

La mitad derecha de la ventana contiene el valor actual de cada propiedad. Puede tratarse de
nmeros, cadenas de caracteres, constantes determinadas, grficos, textos, punteros, etc.
En el caso de estar visualizando la parte correspondiente a eventos, vemos que sale una lista con
muchos de los eventos ante los cuales el componente reacciona (no todos, algunos no son
accesibles a travs del inspector de objetos y hay que definirlos mediante cdigo). Si por ejemplo
queremos colocar (en ANALOGIA.EXE) un componente mecnico cuando el usuario haga click con el
ratn, debemos hacer que el "Lienzo" (en realidad un TScrollBox) reaccione ante el evento OnClick.
Para ello efectuamos un doble click sobre el campo situado a la derecha de "OnClick" en el inspector
de objetos (inspeccionado el TScrollBox) con lo cual se nos escribe directamente el siguiente cdigo
en la ventana de edicin de cdigo:
procedure TForm1.LienzoClick (Sender: TObject);
begin
end;
Lo que se pone dentro del procedimiento ser lo que se ejecute cuando se produzca el evento
OnClick sobre el TScrollBox. En nuestro caso de ejemplo dibujar un componente mecnico.
Naturalmente, las rutinas de eventos pueden agregarse repetidas veces. Por ejemplo (en
ANALOGIA.EXE) si se ha vinculado la opcin del men "Cerrar" con una rutina OnClick que se
encarga de cerrar la ventana activa, y disponemos tambin de el icono con la llave (un
TSpeedButton), no es necesario escribir otra vez el mismo cdigo. Basta con indicar el nombre de la
rutina existente en el evento OnClick en el botn.
El editor de cdigo fuente
Como se indic al principio, Delphi es una "Two-Way-Tool", de forma que lo que se va
programando visualmente, va apareciendo en forma de cdigo en el editor de cdigo fuente. De la
misma forma, si no queremos hacer uso de las capacidades de programacin visual, podemos
limitarnos a escribir el cdigo (incluida la creacin de ventanas, etc.) que se ejecutar.
El editor dispone de una ventana distinta por cada Unit de que disponga el programa,
seleccionndose una ventana u otra por medio de pestaas. En concreto, el programa ANALOGIA
dispone de once units (de las cuales nueve tienen su form adjunto), cada una de las cuales se
selecciona en el editor con su pestaa correspondiente.
Adicionalmente dispone de posibilidad de copia al portapapeles, resaltado de palabras clave,
insercin de puntos de ruptura, ndices, bsquedas, etc
Conceptos bsicos en la programacin con Delphi
No es el objeto del presente proyecto hacer un repaso exhaustivo de la programacin en Pascal, por
eso vamos a ver de forma somera solo algunas de las caractersticas de que dispone Delphi,
principalmente aquellas que le diferencian ms del Pascal estndar. Para ello, vamos a introducir una
serie de conceptos:
Objetos
Componentes
Propiedades
Eventos
Mtodos
Objetos
Como su propio nombre indica, el Object Pascal (usado por Delphi) es un lenguaje totalmente
orientado a objetos. Prcticamente todos los elementos del entorno Delphi son objetos, que unas
veces se encuentran definidos de antemano (los forms, los componentes de la paleta, objetos no
visuales, etc), y otras se definen en nuestra propia aplicacin (por ejemplo el componente TPostIt de
ANALOGIA.EXE definido en la unit U_Misc).

Todo el desarrollo de aplicaciones en Delphi est ntimamente ligado con la definicin y uso de
objetos, por lo que es fundamental conocer la mecnica que Object Pascal utiliza para describir un
objeto, sus caractersticas y su funcionamiento, sobre todo a la hora de que el programador cree sus
propios componentes. En muchos casos no es necesario conocer el funcionamiento de la
programacin orientada a objetos para programar con Delphi, puesto que en la mayora de los casos
existen controles ya creados sin necesidad de tener que programarlos. Por ejemplo en
ANALOGIA.EXE la mayora de los objetos forman parte de la VCL de Delphi y otros dos componentes
han sido escritos por terceros (RChart y TFormulaParser), sin embargo ha sido til desarrollar un
componente propio (TPostIt) para mostrar la tabla de valores de los componentes en el programa.
La propia programacin visual de Delphi, que escribe parte del cdigo automticamente, hace
posible utilizar objetos de forma prctica sin tener por qu comprender al cien por cien su
funcionamiento.
Componentes
Un componente es cualquiera de los elementos que podemos insertar en una ficha, tanto si su
funcin es visual como si no lo es (por supuesto un componente es tambin un objeto). Un ejemplo
de componente puede ser RChart, usado en ANALOGIA.EXE para dibujar las grficas. Sin conocer
exactamente el cmo realiza su funcin, el programador manipula una serie de propiedades, mtodos
y eventos que caracterizan al componente, a travs de los cuales se "maneja" el componente en la
forma deseada. Por supuesto el usuario puede crear sus propios componentes y usarlos en distintas
aplicaciones, de forma que la reusabilidad del cdigo es mxima. A los componentes que cuentan con
una parte visual, como puede ser un botn, se les denomina controles.
Propiedades
Los componentes, y de hecho todos los objetos de Delphi son de uso general, por lo que a la hora
de usarlos de alguna forma deberemos adecuarlos a nuestras necesidades. Para ello nos serviremos
de las propiedades de cada objeto, mediante las cuales podremos establecer el ttulo de una ventana,
el tipo de letra de una etiqueta de texto o el color en el que aparecen los distintos controles.
Se puede pensar en las propiedades como si fuesen variables pertenecientes a un objeto (veremos
que no es as exactamente), de tal forma que para acceder a ellas generalmente habr que indicar no
slo el nombre de la propiedad, sino tambin a qu objeto pertenece.
La modificacin o consulta del valor de una propiedad puede diferir segn intentemos acceder a
ella mientras estamos diseando un form, en tiempo de diseo, o bien mediante el cdigo del
programa, en tiempo de ejecucin. Ciertas propiedades estn slo accesibles en tiempo de ejecucin,
por lo que mientras estamos diseando la ficha no aparecern. Adems hay algunas propiedades que
son de slo lectura, por lo que su valor puede ser consultado, pero no modificado, y otras que son
slo de escritura.
Aunque a primera vista si usamos un componente prefabricado, las propiedades pueden parecer
simples variables, en la mayora de las ocasiones una propiedad no es una variable, y la modificacin
o consulta de su valor puede conllevar que internamente el componente ejecute un cierto cdigo. Si
por ejemplo tuvisemos un componente para comunicaciones serie que se encargase de enviar
mensajes a un ordenador remoto, podramos tal vez asignar una cadena de caracteres a una
hipottica propiedad "Envia". De esta forma, con una simple asignacin (Envia:='Mensaje a mandar')
se pondra en marcha todo el mecanismo implcito en el componente para enviar el mensaje al
ordenador remoto. Esta propiedad podra ser un ejemplo de propiedad de slo escritura, ya que slo
interesa mandar el mensaje al ordenador remoto, sin conservar informacin acerca del mensaje, por
lo que sera inapropiada su lectura.
Eventos
Como dije anteriormente, la programacin en el entorno Windows se caracteriza por estar dirigida
por eventos, de tal forma que un programa no tiene por qu ejecutarse necesariamente de forma
secuencial, sino que ciertas porciones de cdigo se ejecutarn cuando ocurra un cierto evento.

Los eventos son seales que el entorno recibe desde distintos elementos, como puedan ser el
ratn, el teclado o un temporizador. Estos eventos son redirigidos a las aplicaciones, que en caso de
aceptarlos debern responder adecuadamente de ellos. Ciertos eventos pueden ser gestionados por
el propio Windows, otros quedarn a cargo del propio lenguaje que estemos usando, y un tercer
grupo sern los que lleguen hasta nuestro programa. En Delphi prcticamente todo el cdigo que
escribimos ir asociado a algn evento. Si retomamos el ejemplo del componente para
comunicaciones serie, podra interesarnos que se ejecutara un evento cada vez que se recibiese un
carcter por el puerto serie, de forma que podramos escribir el cdigo necesario para guardar el
carcter en un archivo cada vez que se produjese el evento. Normalmente los eventos a los que
reaccionarn los componentes sern las pulsaciones del teclado o el ratn, activaciones de los
componentes, etc.
Mtodos
Los componentes Delphi adems de disponer de propiedades y poder responder a ciertos
eventos, habitualmente tambin disponen de mtodos. Un mtodo es un procedimiento o funcin que
nos permite realizar una determinada accin en el componente, pudiendo necesitar o no el paso de
algn parmetro.
Al igual que ocurre en las propiedades, a la hora de usar un cierto mtodo normalmente tendremos
que indicar primero el objeto o componente al que pertenece, de tal forma que la accin del mtodo
recaiga sobre l, y no sobre cualquier otro. El hecho de que cada objeto sea propietario de una serie
de propiedades y mtodos, variables y cdigo, que no son accesibles a ningn otro objeto externo,
recibe el nombre de encapsulacin, aunque tambin es posible definirlos de tal modo que sean
accesibles a otros objetos
Bases de la programacin orientada a objetos
A medida que las aplicaciones se van haciendo cada vez ms complejas, el mantenimiento del cdigo
tambin se hace ms difcil, a pesar de que est correctamente estructurado en funciones y
procedimientos y dividido en mltiples mdulos. En un programa complejo, (solo la programacin del
entorno bajo Windows ya hace de cualquier programa un programa complejo) es fcil perderse entre
la cantidad de procedimientos, funciones y distintas variables distribuidas en multitud de unidades,
con lo que hay grandes probabilidades de errores al pasar parmetros incorrectos, modificar variables
indebidas, etc.
Muchos de estos problemas encuentran su solucin en la programacin orientada a objetos (POO,
u OOP en ingls), que no es ms que una evolucin de los lenguajes estructurados hacia una
simplificacin del mantenimiento del cdigo y unas mayores posibilidades de reutilizacin de ste.
Object Pascal cuenta con todas las caractersticas de un lenguaje orientado a objetos, como son la
encapsulacin, la herencia y el polimorfismo.
Un objeto es parecido a un registro (record), pero se caracteriza porque adems de contener
miembros de distintos tipos, como nmeros, cadenas, punteros, etc., tambin es capaz de contener
definiciones de procedimientos y funciones.
Para definir un nuevo tipo de objetos utilizamos una estructura similar a la de un registro, con la
diferencia de que cambiaremos la palabra Record por Class (como en C++). Tras esta cabecera
dispondremos los miembros que formarn parte del tipo, que adems de variables pueden ser
funciones y procedimientos. A los procedimientos y funciones que forman parte de la definicin de un
objeto se les llama genricamente mtodos. Una clase lo ms simple posible podra definirse como:
TPunto = Class {Objeto TPunto}
x, y: Integer; {Coordenadas y color del punto}
Color: Byte;
Procedure DibujaPto; {Mtodo que dibujar el punto}
End;
Para utilizar el objeto anterior, definimos una variable de tipo TPunto:

Var
Punto: TPunto;
Pero en realidad Punto es una referencia al tipo de objeto (un puntero), por lo que deberemos crear
el objeto dinmicamente y liberarlo despus de usado:
new (Punto) {Crea objeto}
Punto.x:=25; {Uso del objeto}
Punto.y:=33;
Punto.color:=0;
Punto.DibujaPto;
dispose (Punto) {Libera objeto}
Normalmente, los objetos ya llevan sus propios mtodos de creacin y liberacin. Los mtodos
denominados "Constructores" (Objeto.Create) y "Destructores" (Objeto.Free) sirven para crear e
inicializar el objeto, y para liberarlo, por lo que no se suele usar new y dispose (o getmem y freemem,
o similares).
Si tenemos un componente correctamente diseado, los datos que se declaren en el interior del
objeto slo sern manipulados por los mtodos de ese objeto, que estarn precisamente
especializados en la manipulacin de los miembros del objeto. A esta caracterstica se le conoce
como encapsulacin.
Para gestionar de forma correcta la encapsulacin, se pueden dividir los miembros del objeto en
partes pblicas (Public), privadas (Private) y protegidas (Protected). Las declaraciones
existentes en el grupo Public sern pblicas, y por lo tanto otros programas o mdulos podrn
acceder a los miembros. En el apartado Private podemos incluir la declaracin de todos aquellos
miembros que no deseamos poner a disposicin de terceros. Todas las variables y mtodos que
incluyamos en esta parte sern accesibles slo desde el propio objeto, es decir, desde los mtodos
del objeto. Por ltimo tenemos el apartado Protected, que da paso a la parte protegida del objeto, que
es un paso intermedio de las dos anteriores. Los identificadores creados en la parte protegida no
sern accesibles desde otros programas o mdulos, pero s tendrn acceso a ellos aquellos objetos
que sean derivados del nuestro.
Un ejemplo de como podramos dividir el objeto TPunto en partes pblicas y privadas podra ser:
TPunto = Class {Objeto TPunto}
Private {Parte privada}
x, y: Integer; {Coordenadas y color del punto}
Color: Byte;
Public {Parte pblica}
Procedure Inicializa (PX, PY: Integer; PColor: Byte);
Procedure DibujaPto; {Mtodo que dibujar el punto}
End;
De esta forma no podemos acceder directamente a las coordenadas y al color, sino que hacemos
la asignacin mediante el mtodo "Inicializa", que sera el encargado de asignar las coordenadas y el
color al objeto a travs de los parmetros pasados.
Otro de los pilares de la OOP es la herencia. Esta caracterstica nos permitir no tener que escribir
completamente el cdigo del componente que necesitemos, sino derivarlo de otro componente que
tenga las caractersticas bsicas que necesitemos, y adaptarlo a nuestra necesidad concreta
aadindole slo las caractersticas adicionales que necesitemos. Adems es posible ir ampliando en
sucesivas derivaciones un objeto hacindolo cada vez ms complejo y adecuado a una utilidad
particular.

Por ejemplo podemos crear un objeto TRectangulo derivado del TPunto ya definido, que se ocupe
de dibujar un rectngulo (lo har dibujando sucesivos puntos con los miembros heredados):
TRectangulo = Class(TPunto) {derivado de TPunto}
Private {Dimensiones y color del rectngulo}
left, top, width, height, color: integer;
Public
Procedure Ini(izda,arriba,ancho,alto,colorR: integer);
Procedure DibujaRectangulo;
End;
Para implementar el mtodo DibujaRectangulo podemos usar los mtodos y miembros de la clase
ancestro TPunto porque ya son parte del propio objeto TRectangulo:
Procedure TRectangulo.DibujaRectangulo;
var
cont,cont2:integer;
begin
for cont:=left to left+width do {Dibuja rectangulo}
for cont2:=top to top+height do
begin
Inicializa(cont,cont2,100); {Dibuja punto}
DibujaPto;
end;
end;
Si un objeto no se deriva de ningn otro (como el objeto TPunto del ejemplo), en Object Pascal se
derivar por defecto del tipo TObject, con lo cual podemos usar en cualquier objeto los mtodos
Create, Free, etc. y adems al tener una raz comn, podemos tratar a los objetos polimrficamente.
Polimorfismo es la capacidad de un objeto de corresponder a distintos tipos, esto es, por
ejemplo un objeto TPunto podra apuntar a un TRectangulo, o a un TCirculo (si lo hubisemos
definido como derivado de TPunto), de forma que podemos tratar objetos de distinto tipo
genricamente. Por ejemplo podramos tener un array del tipo TPunto que contuviese objetos
TRectangulo y TCirculo
Tratamiento de errores y excepciones
El tratamiento de errores (exception handling) es una tcnica recin incorporada al Object Pascal
proveniente de C++, por lo que la voy a comentar por su novedad y la seguridad que aporta. En
ANALOGIA.EXE se ha intentado preservar la seguridad en la ejecucin, por lo que todas las
operaciones de alojamiento dinmico de memoria, gestin de ficheros, etc. se realizan como medida
de seguridad entre bloques TRY..EXCEPT o TRY..FINALLY, que veremos a continuacin.
Los errores se pueden dividir en dos grupos: errores en tiempo de compilacin (corregibles antes
de hacer funcionar el programa), y errores en tiempo de ejecucin, ms complicados de encontrar,
puesto que el error puede depender de las acciones del usuario y manifestarse solo ocasionalmente.
Una excepcin es una seal provocada por un error, tal como pueda ser una divisin por cero, el
sobrepasar los lmites de un array, o el intento de acceso a los datos apuntados por un puntero nulo,
por ejemplo.
La excepcin generalmente dispone de la informacin necesaria para conocer la causa del error.
Dicha informacin la podemos aprovechar en nuestro cdigo si interceptamos la excepcin, o bien

ser mostrada en un mensaje antes de que el programa se interrumpa, si no la interceptamos (no


deseable).
Para interceptar los errores, trataremos de aislar el bloque a proteger entre la palabra Try y la
palabra Except, de forma que si vemos en ANALOGIA.EXE el siguiente cdigo:
try
num:=StrToFloat(Value);
for cont:=0 to PanelL.ComponentCount-1 do
if PanelL.Components[cont] is TCompMecanico then
begin
.....................
end
Except {Excepcin si es un valor numrico invlido}
PanelL.Pan1.Strg1.Cells[1,ARow]:='';
end;
se ejecutar lo que hay despus de la asignacin num:=StrToFloat(Value) solo si se ha producido
esta asignacin correctamente y no ha habido problemas en el procedimiento StrToFloat. En caso de
tener en Value un valor incorrecto, se generar una excepcin (que no se muestra al usuario), y se
salta directamente al cdigo que hay despus de la palabra clave Except. Este cdigo se ha utilizado
por ejemplo para evitar que el usuario de valores incorrectos (letras, etc) a los valores de los
componentes.
Si en cambio observamos este otro trozo de cdigo correspondiente a la escritura de un fichero
.MEC en disco:
Try Rewrite(Fich);
for cont:=0 to FormDibu.PanelL.ComponentCount-1 do
if FormDibu.PanelL.Components[cont] is TCompMecanico then
begin
Aux:=FormDibu.PanelL.Components[cont] as TCompMecanico;
Reg.left:=Aux.left;
..................
write (Fich,Reg); {Escribe componente en el fichero}
end;
Finally
CloseFile(Fich);
{Cierra en cualquier caso el fichero}
end;
Ocurre lo siguiente: Si la apertura/creacin (Rewrite(Fich)) del fichero es correcta, se ejecutar el
bucle for cont... y despus se ejecutar lo que hay despus de Finally (se cerrar el fichero). Sin
embargo, si el Rewrite(Fich) provoca un error por cualquier causa (disco lleno, etc.), se saltar
directamente al cdigo que hay detrs de Finally, puesto que nos interesar siempre no dejar ficheros
abiertos.
Como vemos, con Finally se ejecuta siempre el cdigo que hay a continuacin, mientras que con
Except se ejecuta solo si se ha producido una excepcin. En cualquier caso lo que hay detrs de
Try... solo se ejecuta si no se ha producido ningn error.

Tambin es til un ejemplo de gestin de los errores de memoria que nos muestra tambin como
anidar estructuras Try..Except y Try..Finally:
Try
Try
New (PNumero);
{Asignar memoria dinmica}
PNumero:=Dividendo div Divisor;
Finally
Dispose (PNumero);
{Liberar siempre recursos}
end;
Except
{Ejecutar si se produjo una excepcin}
Writeln ('Se produjo una excepcin');
end;
Estas son las principales herramientas de gestin de excepciones, pero no las nicas (gestin de
excepciones segn su tipo, creacin de excepciones propias, etc.), sin embargo una discusin ms
amplia del tema se escapa de los lmites del proyecto
Progracin MDI
Se denomina tecnologa MDI (Multiple Document Interface) al conjunto de servicios de Windows que
posibilita la construccin de aplicaciones capaces de trabajar con mltiples documentos
simultneamente, disponindose de una ventana principal o marco, en cuyo interior aparecen las
ventanas hijas que pueden ser redimensionadas, minimizadas y maximizadas ajustndose siempre a
los lmites de la ventana padre.
Precisamente ANALOGIA.EXE hace uso de esta tcnica, de forma que cuando se ejecuta el
programa, lo nico que aparece es la ventana padre, y segn vamos creando ventanas (de esquemas
mecnicos, elctricos y grficas de resultados) estas aparecen dentro de los lmites de la ventana
padre (donde hay un fondo verde oscuro inicialmente). Por tanto, aunque cambiemos las dimensiones
de la ventana padre, las hijas siempre quedarn dentro de los lmites de dicha ventana.
La ventana principal de el programa (Main) se distingue de cualquier otra por el valor de la
propiedad FormStyle, que debe ser fsMDIForm, no pudiendo existir en el mismo proyecto ms de una
ventana con ste atributo.
Las fichas hijas (FormDibu, FormElect y FormGraph) se caracterizan por tener el valor fsMDIChild
en la propiedad FormStyle, lo que asegura su correcta asociacin con la ventana principal. Como
vemos, en nuestra aplicacin MDI no todas las ventanas tienen que ser hijas, las ventanas de
dilogo, de funciones de las fuerzas, etc. no lo son, ni tienen por qu serlo puesto que son ventanas
que se ejecutan y desaparecen, y no nos interesa tenerlas presentes simultneamente con las dems
ventanas hijas.
Con el fin de facilitar la gestin de las ventanas hijas que se pueden encontrar abiertas en un
momento dado, existen una serie de propiedades y mtodos que nos servirn para establecer su
posicin y dimensiones, acceder individualmente a ellas, etc. Entre las ms significativas se
encuentran (son propiedades y mtodos que se aplican a la ventana padre y afectan a las hijas):
Propiedades:
MDIChildCount: indica el nmero de ventanas hijas abiertas.
MDIChildren: Array dinmico de punteros que apuntan a cada una de las ventanas hijas (indexa
desde 0 a MDIChildCount-1).
ActiveMDIChild: Puntero que apunta a la ventana hija activa en ese momento (solo una puede estar
activa en cada momento).

Mtodos:
Previous: Activa la ventana hija anterior.
Next: Activa la siguiente ventana hija.
Cascade: Presenta las ventanas hijas en cascada.
Tile: Presenta las ventanas hijas en mosaico
Estructura de un proyecto Delphi
Un proyecto Delphi es el conjunto de todos los archivos que, una vez compilados, constituyen un
programa ejecutable.
En el caso de ANALOGIA.EXE solo es necesario este archivo (exceptuando ANALOGIA.INI y
ANALOGIA.HLP que ofrecen prestaciones adicionales), pero en otros casos es necesario aadir otros
ficheros: DLLs, VBXs, BDE, etc.
Los fuentes de ANALOGIA.EXE se componen de un archivo ANALOGIA.DPR (DPR = Delphi
Project) que es el programa principal (no la unit Main, sino el archivo que nicamente crea todos los
forms y los lanza, siendo el archivo ms pequeo de todos) y una serie de units (once en nuestro
caso) que suelen llevar extensin .PAS. Generalmente esta unidades se encuentran asociados con
fichas, aunque no tiene por qu ser as en todos los casos (en ANALOGIA.EXE las unidades U_Misc
y U_Math no estn asociadas a ningn form)
Cuando se compila el proyecto, se crean una serie de mdulos de cdigo objeto (.DCU), que el
linker utiliza para crear el archivo .EXE.
Otro tipo de archivos muy importante en la programacin bajo Windows son los archivos de
recursos (.RES), generados tanto por Delphi como por otros compiladores y herramientas (C++, etc).
Estos ficheros pueden contener mapas de bits, listas de strings, etc. De hecho, un form es tambin
del tipo Ressource (pero con extensin .DFM, o sea Delphi Form). Para la vinculacin en un mdulo
del programa se utiliza la instruccin de compilacin {$R <NombreArchivo.RES>}, que podemos ver
al principio del programa. De hecho, los dibujos de los cursores, los dibujos de los componentes
elctricos y mecnicos y otra serie de elementos los he creado en archivos .RES independientes e
importado posteriormente al programa.
Aunque no son muy utilizados, tambin se pueden incluir archivos .INC (Include) que contienen
clases, rutinas, variables, etc. y archivos .OBJ (Objeto), generados por ejemplo por un ensamblador o
un compilador de C

Вам также может понравиться