Object Pascal
Object Pascal
Object Pascal Es un lenguaje muy similar al Turbo Pascal tradicional, con sintaxis similar, algunos cambios para estructuras los programas y mayores prestaciones para instanciar objetos y acceder a mtodos definidos en clases. Es la mayor diferencia y mejora con respecto a versiones anteriores de Pascal, sin embargo, mantiene algunas instrucciones que desmejoran la legibilidad de cdigo y potencian la posibilidad de terminar en la llamada programacin espagueti, enredada e ineficiente con el uso de los saltos. A continuacin vase lo ms resaltante de dicho lenguaje:
Comentarios. Los comentarios en Object Pascal de varias lneas se hacen anteponindoles un parntesis y un asterisco para abrir y su inverso para cerrar. Tambin se aceptan llaves. Para el caso de los comentarios de una sola lnea se coloca barra doble.
program programa1; { este comentario tiene ms de dos lneas y es ignorado por el compilador} begin //abre el programa comentario de una sola lnea WriteLn('Hola mundo!'); (* comentario que puede ser de ms de una lnea *) end.
Estructura de los programas. En Pascal se comienza con un identificador antecedido de la palabra program, luego la declaracin de variables, constantes, estructuras y mtodos (opcional), luego el cuerpo principal encerrado entre las palabras begin y end terminando toda sentencia en punto y coma.
program programa1; //variables, constantess, estructuras y mtodos. begin //inicio bloque principal //instrucciones o cuerpo del programa end. //fin bloque principal1
Declaracin de variables. Las variables en Object Pascal se adecan a la cantidad de bits que se estn manejando en otros lenguajes, afortunadamente esto le hace compatible con las plataformas actuales e interoperable cuando es implementado en componentes.
program DefiniendoVariables; variable: tipo; //de esa manera se crean las variables Nombre: ShortString; //hasta 255 caracteres Edad: Byte; //de 0 hasta 255 Sueldo: Single; //coma flotante hasta 3.4 x 1038 //... as con todas las variables procedure ImprimirListado(); //y dems mtodos... begin //abre el programa comentario de una sola lnea WriteLn('Hola mundo!'); (* comentario que puede ser de ms de una lnea *) end. //Aqu se desarrollan los mtodos definidos arriba
Asignacin a variables. La asignacin de valores iniciales en la definicin es diferente a la empleada en el resto del programa. En la definicin se hace igual que en la comparacin con una igualdad simple, y por el lado de la asignacin en el cuerpo del programa a la igualdad se le anteponen dos puntos.
//... Nombre: ShortString=Pedro Perez; Edad: Byte =20; Sueldo: Single = 1920.25; //Arriba = Abajo := begin Sueldo:=Sueldo*2; Edad:=25; //...
Salida en pantalla. Imprimir mensajes en la pantalla se hace fcilmente con la instruccin Write() o su variante con salto de lnea Writeln(). Ya eso estaba en versiones anteriores de Pascal,
sin embargo, se aade el objeto TObject con su biblioteca llena de mtodos tiles entre los cuales resalta ShowMessage(),
//... Nombre: ShortString=Pedro Perez; Medida: Byte =20; begin Writeln(Hola,Nombre);//muestra Hola Pedro Perez ShowMessage(Medida: + Medida); //muestra Medida:20 poo //...
Entrada de datos desde el teclado. Ingresar valores para guardarlos en memoria es fcil gracias a los mtodos Read() y Readln() presentes en Pascal.
//... Writeln(Escriba el nuevo nombre: ); Readln(Nombre); //igual que el Pascal tradicional //...
Operaciones aritmticas y expresiones. Las operaciones se realizan igual que en versiones anteriores con la asignacin ya vista, es decir: variable:=valor(o variable) operador valor(o variable). La jerarqua de los operadores se mantiene igual, prevaleciendo el parntesis y en el mismo orden.
Operadores aritmticos. Operador + * / mod Operacin Suma Resta Multiplicacin Divisin Residuo
Operadores relacionales. Operador < > <= >= <> = Operacin Menor que Mayor que Menor o igual que Mayor o igual que Diferente de Igual a
Prioridad de Operadores () . not inc() dec() * / Mod + < <= > >= = <> and or exp :=
Tambin se permite la sobrecarga de operadores.
Sentencias de control (IF). Permanece igual a las versiones anteriores con la forma: If then else end. En caso de haber ms de una instruccin en cualquiera de los bloques (sea cuando se cumpla la condicin o no) hay que colocar begin [instr1;instr2;]end;
//... if <condicin> then <sentencia>; if <condicin> then <sentencia1> else <sentencia2>; if <condicin> then begin <sentencia1>; <sentencia2>; <sentencia3>[;] end else <sentencia4>; if <condicin> then begin <sentencia1>; <sentencia2>; <sentencia3>[;] end else begin <sentencia4>; <sentencia5>[;] end; //...
Sentencias de control (CASE). Es la evaluacin mltiple de una variable, similar a versiones anteriores.
//... case <selector> of <listacaso1>: <sentencia1>; ... <listacasoN>: <sentenciaN>; [else <sentencia>;] end; //...
Ciclos (sentencia for). Cuando se conoce la cantidad de iteraciones de un bloque de sentencias y slo se puede interrumpir por condiciones no frecuentes, se emplea la sentencia for para hacer bucles. La sintaxis es similar a la de versiones anteriores, con to incrementa 1 y con downto decrementa 1. Al finalizar el for la variable no tiene definido un valor.
//... for <variable> := <ini> to/downto <fin> do <sentencia>; for i:=10 downto 0 do begin writeln(Faltan , i , segundos para evento.); sleep(1000); end; //...
Ciclos (sentencia while). Se emplea cuando se requiere el cumplimiento de una condicin previo a su ejecucin.
Ciclos (sentencia repeat). Se emplea cuando no se requiere el cumplimiento de una condicin previo a su ejecucin mas s para su terminacin.
Sentencia especial (goto). Su empleo debe ser minimizado, sirve para interrumpir la secuencia de ejecucin de un bloque de cdigo, est o no en un ciclo repetitivo. Su uso estuvo relegado a la programacin convencional y estructurada, en los lenguajes nuevos se ha eliminado por los inconvenientes que trae el implementarlos de forma indiscriminada. Para probarlo, solo hay que definir una etiqueta y en la lnea que se quiera saltar el orden se coloca goto etiqueta; No se permite para entrar o salir de bloques de excepcin, procedimientos ni funciones y no se recomienda para entrar de manera abrupta a ciclos por su comportamiento impredecible.
//... Label ErrorX; repeat inc(Alumnos); Writeln(Van , Alumnos, aprobados.); If (Alumnos<1) goto ErrorX; until (alumnos>max); Exit; ErrorX: Writeln(Se dio el salto por la etiqueta); //...
Funciones. Para trabajar las funciones en el lenguaje hay que definirlas y darles un tipo. En el cuerpo de la funcin la variable result le otorga el valor a la funcin. Es sencillo su uso y muy similar al de las versiones anteriores. Slo en caso de la poo difiere en cuanto a su sintaxis por el posible retorno de variables tipo objeto. //... function HallarLetra(char c, string s): boolean; var i, n: Integer; begin n := Length(s); for i := 1 to n do if s[i] = c then Result :=True; Result := False; end; //...
Procedimientos. Los procedimientos son bloques de sentencias que no devuelven ningn valor, se usa para tareas concretas como inicializar posiciones, vectores, etc., operaciones de las cuales se est en seguridad de su completacin. //... procedure inicializar(integer valor); var i: Integer; begin for i := 1 to 100 do arreglo[i]:= valor; end; //...
Arreglos y matrices. Ya se ha visto como se usan las estructuras de datos unidimensionales (vectores) y ahora se ver la combinacin con las multidimensionales. Se establece la declaracin de un vector y una matriz para su completacin con ceros. //... vector: Array[1..20] of Integer; matriz: Array[1..20,1..5] of Integer; for i:=1 to 20 do begin vector[i]:= valor; for j:=1 to 5 do matriz[i,j]:=0; end; //...
. Palabras reservadas. Para cualquier lenguaje existen ciertos trminos que no se pueden emplear en la declaracin de variables porque implican un tratamiento especial para las mismas por parte del compilador. As como no se puede utilizar una llave como smbolo de agrupacin porque representa un comentario, la palabra begin no puede ser una
variable, tampoco integer ni array,, por lo que se presenta un listado con las limitaciones al programador. Begin Program String Smallint Array Procedure Dec Case Goto Single ShortString Record Private Destructor Free End Writeln Boolean Byte Var Repeat Unit For Label Double AnsiString File Protected Bytebool Assign And Const Char Word If Readln Function While Result Extended WideString Class Published Wordbool Close Not Type Shortint AnsiChar Then Uses Interface Do Break Comp Set Property Public Longbool Reset Or Integer Longint Widechar Else Inc Initialization Until Real Currency Of ShowMessage Constructor Cardinal Destroy
Programacin orientada a objetos. Ciertamente son notables las mejoras a los tipos en Object Pascal adems del refrescamiento a sus instrucciones. A diferencia de Delphi ste contiene una programacin orientada exclusivamente al tratamiento de clases y su instanciacin en objetos por orden explcita. Vase el ejemplo presentado en clase:
type TRectangulo = class X1, Y1, X2, Y2: single; function getAncho: single; function getAltura: single; procedure setAncho(Ancho: single); procedure setAltura(Altura: single); end;
Como se puede observar, se crea una clase TRectngulo con una serie de mtodos que se declaran all y se desarrollan fuera del procedimiento.
function TRectangulo.getAltura: single; begin Result := Y2 - Y1; end; function TRectangulo.getAncho: single; begin Result := X2 - X1; end; procedure TRectangulo.setAltura(Altura: single); begin Y2 := Y1 + Altura; end; procedure TRectangulo.setAncho(Ancho: single); begin X2 := X1 + Ancho; end;
Se declaran igual que el resto de variables, slo que si se le pone TRectngulo se est indicando que la variable es de tipo objeto y con las propiedades y mtodos que se haya indicado en el tipo clase. Se destruyen manualmente todos los objetos al no utilizarse,