Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Lenguaje Delphi
Lenguaje Delphi
Delphi es un entorno de desarrollo de software diseado para la programacin de propsito general con nfasis en la programacin visual. En Delphi se utiliza como lenguaje de programacin una versin moderna de Pascal llamada Object Pascal.
Historia
Es producido comercialmente por la empresa estadounidense aberform, adquirida en Mayo de 2008 por Embarcadero Technologies, una empresa del grupo Thoma Cressey Bravo, en una suma que ronda los 30 millones de dlares. En sus diferentes variantes, permite producir archivos ejecutables para Windows, Linux y la plataforma .NET. CodeGear ha sido escindida de la empresa Borland, donde Delphi se cre originalmente, tras un proceso que pretenda en principio la venta del departamento de herramientas para desarrollo. Un uso habitual de Delphi (aunque no el nico) es el desarrollo de aplicaciones visuales y de bases de datos cliente-servidor y multicapas. Debido a que es una herramienta de propsito mltiple, se usa tambin para proyectos de casi cualquier tipo, incluyendo aplicaciones de consola, aplicaciones de web, servicios COM y DCOM, y servicios del sistema operativo. Delphi inicialmente slo produca ejecutables binarios para Windows: Delphi 1 para Win16 y con Delphi 2 se introdujo Win32. En la actualidad da ms posibilidades.
Lenguaje Delphi
Lenguaje Delphi
es
asm
begin
Case
constructor destructor dispinterface Div else finally end for inherited library or raise shr type with except function exports Goto
initialization Inline mod out record string unit Xor Nil Packed repeat then Until
En adicin a las palabras de arriba, private, protected, public, published, y automated actan como palabras reservadas dentro las declaraciones de tipos de objetos, pero en otra forma son tratadas como directrices. Tambin las palabras at y on tienen significados especiales.
Smbolos especiales
Los smbolos especiales son caracteres no alfabticos, o pares de estos caracteres, que tienen significados fijos. Los siguientes caracteres son smbolos especiales: # $ & ' ( ) * + , . / : ; < = > @ [ ] ^ { } Los siguientes pares de caracteres tambin son smbolos: (* (. *) .) .. // := <= >= < > Se puede ver claramente que !, , %, \,?,_, |, y ~ no son caracteres especiales.
Un comentario que contenga un signo de $ es una directriz de compilacin. Por ejemplo, {$WARNINGS OFF} indica al compilador que no genere avisos.
Lenguaje Delphi
Lenguaje Delphi
.Caption .Caption :=
Pero hay que aclarar que los mtodos de entrada y salidas de Label y Edit(Caja de Texto) reciben o envan String o cadena de caracteres as que para problemas que requieran de entradas numricas o salidas numricas se usan los siguientes mtodos de conversin.
Mtodo IntToStr(variable:Integer) StrToInt(variable:String) FloatToStr(variable:Float) Convierte de Convierte a Integer String Real String Integer String Real
StrToFloat(Variable:String) String
Lenguaje Delphi
Orden de Precedencia 1 2 3 4 5 Las operaciones entre parntesis Races o Potencias Multiplicaciones o Divisiones Sumas o Restas
Operadores
Si hay 2 o ms operadores del mismo Orden entonces se usa la asociatividad por la izquierda
Hay que tener claro que la diferencia entre = y := es, que el primero compara dos variables y el segundo es una asignacin de valores. A continuacin se presenta una tabla con los operadores para cuando hay ms de una condicin a evaluar.
Lenguaje Delphi
Decisin Uso del If If Condicin(es) then Begin Bloque de Instrucciones; End Else Begin Bloque de Instrucciones; End Uso del Case Case <Variable> of Constante1: Begin Instrucciones; End; Constante2: Begin Instrucciones; End; Constante3: Begin Instrucciones; End; Else Begin Instrucciones; End; <Variable>, generalmente si es un Integer, cada Constante sera 1, 2, 3, hasta donde sea necesario, y si es un Char, cada constante a evaluar sera a, b, c,etc. Iteracin Ciclo For For <variable> := valor inicial To valor final Do Begin Instrucciones; End Ciclo While While (Condicin) Do Begin Instrucciones; *Instruccin de salida del Ciclo;
Lenguaje Delphi End Ciclo Repeat Until Repeat Instrucciones; *Instruccin de salida del Ciclo; Until (Condicin); Dependiendo de la condicin, la instruccin puede variar pero esta instruccin es vital para evitar ciclos infinitos.
Este esquema de la definicin y declaracin se hace en la seccin de VAR del programa principal. Uso. Simplemente en el programa principal se hace el llamado a funcin.
Lenguaje Delphi
Lenguaje Delphi end; La definicin de las funciones y procedimientos se hace en la seccin var del main y la diferencia est en que el nombre de la funcin o del procedimiento siempre es precedido por el Nombre del objeto ms punto. Ejemplo: Persona.setApellido Persona.nombreCompleto Otro aspecto a destacar es que tanto las funciones como los procedimientos, en el momento de definirlos no es necesario copiar la lista de parmetros que necesiten y en el caso de las funciones no es necesario escribe : <tipo que retornan> porque ya estn encapsulados en el type. Ahora para las herencias sencillamente donde se crea es esqueleto en el Type se hace lo siguiente: Type Padre = Object {esqueleto de la clase Padre}; end; Hijo = Object (Padre) {esqueleto de la clase Hijo}; end; Var {definiciones de los procedimientos y funciones de Padre}; {definiciones de los procedimientos y funciones de Hijo}; Una recomendacin es que los mtodos comunes entre el padre y el hijo se deben declarar y definir en el padre, porque esos mtodos se heredan de manera implcita en el hijo, dejando solamente la tarea de declarar y definir los mtodos nicos del hijo. Por ltimo falta mencionar la declaracin del polimorfismo, bsicamente es una herencia mltiple de un padre a varios hijos, ac se usa la palabra reservada virtual. Este hace que los mtodos (procedimientos y funciones) comunes entre el padre y el hijo puedan sobrescribirse. Bsicamente permite que si hay un padre que hereda a varios hijos un mtodo en comn pero que cada mtodo segn el hijo funciona de manera diferente, puedan ser definidos en cada hijo usando siempre el mismo nombre.
10
Manejo de Excepciones
El manejo de excepciones en Delphi no vara mucho de los dems lenguajes de hoy en da y su siguiente estructura es la siguiente. TRY {Bloque de instrucciones} EXCEPT ON Exception DO BEGIN {Bloque de Instrucciones} END; END;Fin del Try Este bloque captura errores de manera genrica, pero tambin se puede disear bloques de excepciones con indicaciones ms especficas.
Lenguaje Delphi Por ejemplo del Bloque anterior se pueden puede cambiar de la siguiente manera para que slo intente el Try-Except con errores especficos. TRY {Bloque de instrucciones} EXCEPT ON TipoException1 DO BEGIN {Bloque de Instrucciones} END; ON TipoException2 DO BEGIN {Bloque de Instrucciones} END; ON TipoException3 DO BEGIN {Bloque de Instrucciones} END; END;Fin del Try En Tipo de Excepciones tenemos las siguientes: EAbort: Finaliza la secuencia de eventos sin mostrar el mensaje de error. EAccessViolation: Comprueba errores de acceso a memoria invlidos. EBitsError: Previene intentos para acceder a arrays de elementos booleanos. EComponentError: Nos informa de un intento invlido de registrar o renombrar un componente. EConvertError: Muestra un error al convertir objetos o cadenas de texto string. EDatabaseError: Especifica un error de acceso a bases de datos. EDBEditError: Error al introducir datos incompatibles con una mscara de texto. EDivByZero: Errores de divisin por cero. EExternalException: Significa que no reconoce el tipo de excepcin (viene de fuera). EIntOutError: Representa un error de entrada/salida a archivos. EIntOverflow: Especifica que se ha provocado un desbordamiento de un tipo de dato. EInvalidCast: Comprueba un error de conversin de tipos. EInvalidGraphic: Indica un intento de trabajar con grficos que tienen un formato desconocido. EInvalidOperation: Ocurre cuando se ha intentado realizar una operacin invlida sobre un componente. EInvalidPointer: Se produce en operaciones con punteros invlidos. EMenuError: Controla todos los errores relacionados con componentes de men. EOleCtrlError: Detecta problemas con controles ActiveX. EOleError: Especifica errores de automatizacin de objetos OLE. EPrinterError: Errores al imprimir. EPropertyError: Ocurre cuando se intenta asignar un valor errneo a una propiedad del omponente. ERangeError: Indica si se intenta asignar un nmero entero demasiado grande a una propiedad. ERegistryExcepcion: Controla los errores en el registro. EZeroDivide: Controla los errores de divisin para valores reales.
11
Lenguaje Delphi
12
term__= factor__ { ('*' | '/' | DIV | MOD | AND | SHR | SHL ) factor__ } . factor__= NUMBER | STRING_LITTERAL | NIL | variable_access | NOT factor__ | '@' factor__ | set_factor | '^' NAME | '(' constant_expression ')'. typed_constant= simple_expression_ [ ('=' | '<>' | '<' | '<=' | '>' | '>=' | IN simple_expression_ ] . simple_expression_= [ '+' | '-' ] term_ { ('+' | '-' | OR | XOR ) term_ } . term_= factor_ { ('*' | '/' | DIV | MOD | AND | SHR | SHL ) factor_ } . factor_= NUMBER | STRING_LITTERAL | NIL // -- id or field "(f1: v1; f2: v2)" | variable_access [ ':' typed_constant { ';' variable_access ':' typed_constant } ] | NOT factor_ | '@' factor_ | '^' NAME | '(' [ typed_constant_] | set_factor . // -- array "(1, 2, 3)" or "fn(p1, p2") typed_constant_= typed_constant { ',' typed_constant } . formal_parameters= '(' formal_parameter { ';' formal_parameter } ')' . formal_parameter= [ parameter | var_parameter | const_parameter | out_parameter | in_parameter ] . parameter_name_list= PARAMETER_NAME { ',' PARAMETER_NAME } . array_or_name_type= ARRAY OF ( CONST | unit_qualified_type_name ) | unit_qualified_type_name . parameter= parameter_name_list ':' array_or_name_type ')' )
Lenguaje Delphi
['=' constant_expression ] .
13
var_parameter= VAR parameter_name_list [ ':' array_or_name_type ] . const_parameter= CONST parameter_name_list [ ':' array_or_name_type ['=' constant_expression ] ] . out_parameter= OUT parameter_name_list [ ':' array_or_name_type ] . in_parameter= IN parameter . dos_directives= NEAR | FAR | EXPORT | ASSEMBLER . calling_directives= CDECL | PASCAL | REGISTER | SAFECALL | STDCALL . overload_directive= OVERLOAD . method_directives= ABSTRACT | VIRTUAL | DYNAMIC | OVERRIDE | REINTRODUCE | MESSAGE constant_expression . const_type_var_declarations= constant_definitions | resource_defintions | type_definitions | variable_declarations . type= keyed_types | type_0 . // -- called by i_type enumeration_type= '(' identifier_list ')' . expression_t= simple_expression_t [ ( ('=' | '<>' | '<' | '<=' | '>' | '>=' | IN | '..' end_range_type ) ] . simple_expression_t= [ '+' | '-' ] term_t { ('+' | '-' | OR | XOR ) term_t } . term_t= factor_t { ('*' | '/' | DIV | MOD | AND | SHR | SHL ) factor_t } . factor_t= NUMBER | STRING_LITTERAL | NIL | variable_access | NOT factor_t | '@' factor_t | '^' NAME | '(' expression_t ')' | set_factor . end_range_type= simple_expression_t . type_0= ( NUMBER | STRING_LITTERAL | NIL | NOT | '+' | '-' | '@' | '(' | '[' | NAME ) $i_type . keyed_types= string_type | structured_type | pointer_type | procedural_type . // -- handle STRING as array[index_type] string_type= STRING [ '[' constant_expression ']' ] . structured_type= [ PACKED ] ( array_type | record_type | set_type | file_type array_type= ARRAY [ '[' index_type { ',' index_type } ']' ] OF type . index_type= constant_expression [ '..' constant_expression ] . record_type= RECORD field_list END . field_list= { common_field ';' } [ variant_fields ] . common_field= identifier_list ':' type . variant_fields= CASE tag OF cases { cases } . tag= VARIANT_TAG_NAME [ ':' unit_qualified_type_name ] . cases= constant_expression { ',' constant_expression } ':' one_case . one_case= '(' [ common_field { ';' [ ( common_field | variant_fields ) ] } | variant_fields ] ')' [ ';' ] . set_type= SET OF type . ) . ) simple_expression_t
Lenguaje Delphi
file_type= FILE [ OF type ] . pointer_type= '^' POINTED_NAME . procedural_type= ( PROCEDURE [ formal_parameters ] | FUNCTION [ formal_parameters ] ':' function_result_type ) $<dir( [ OF OBJECT ] | i_procedural_type_directives ) $>dir procedural_type_directives= calling_directives i_procedural_type_directives= ( ';' . .
14
| CDECL | PASCAL | REGISTER | SAFECALL | STDCALL ) $i_directives . constant_definitions= CONST constant_definition { constant_definition constant_definition= CONST_NAME [ ':' type ] '=' typed_constant ';' . resource_defintions= RESOURCESTRING resource_definition { resource_definition } . resource_definition= RESOURCE_NAME '=' string_expression ';' . type_definitions= TYPE type_definition { type_definition } . } .
type_definition= TYPE_NAME '=' [ TYPE ] ( class_type | interface_type | type ) ';' . // -- used in INTERFACE also property= PROPERTY $>priv PROPERTY_NAME [ property_type ] property_specifiers . property_type= [ property_indexes ] ':' unit_qualified_type_name . property_indexes= '[' property_index { ';' property_index } ']' . property_index= [ CONST ] INDEX_NAME { ',' INDEX_NAME } ':' unit_qualified_type_name . property_specifiers= $<prop [ INDEX constant_expression ] $>prop // -- "READ FTabSize.Y" $<prop [ READ variable_access | READONLY ] [ WRITE WRITE_NAME | WRITEONLY ] $>prop // -- some params called "dispid" $<prop [ DISPID constant_expression ] [ ';' ] $>prop $<prop { storage_specifier [';' ] } $>prop [ IMPLEMENTS unit_qualified_identifier { ',' unit_qualified_identifier } ';' ] . storage_specifier= storage_stored | storage_default storage_stored= STORED [ constant_expression ] . | storage_no_default .
storage_default= DEFAULT [ constant_expression ] . storage_no_default= NODEFAULT . // -- the ; is in the type_definitions class_type= CLASS [ class_reference | class_definition ] . class_reference= OF unit_qualified_type_name . // -- class_definition : can be foward with inheritance class_definition= [ inheritance ] [ class_body ] . inheritance= '(' unit_qualified_type_name { ',' unit_qualified_type_name } ')' . class_body= fields_and_procs_section { fields_and_procs_section } END . fields_and_procs_section= $<priv protection fields_and_procs $>priv . protection= [ PRIVATE | PROTECTED | PUBLIC | PUBLISHED ] .
fields_and_procs= { class_field } { class_methods | property $<priv } . class_field= identifier_list $>priv ':' type ';' $<priv . class_methods= constructor | destructor | [ CLASS ] ( class_procedure | class_function ) . method_directives_= $<dir { (method_directives | overload_directive | calling_directives)
Lenguaje Delphi
[ ';'] } $>dir . // -- if interfaces : "FUNCTION i_xxx.yyy = zzz;" rename_method= '.' NAME '=' NAME ';' . constructor= CONSTRUCTOR $>priv PR_NAME [ formal_parameters ] ';' method_directives_ $<priv . destructor= DESTRUCTOR $>priv PR_NAME [ formal_parameters ] ';' method_directives_ $<priv . class_procedure= PROCEDURE $>priv PR_NAME ( rename_method | [ formal_parameters ] ';' method_directives_ ) $<priv . class_function= FUNCTION $>priv FN_NAME ( rename_method | [ formal_parameters ] ':' function_result_type ';' method_directives_ ) $<priv . interface_type= ( INTERFACE | DISPINTERFACE ) [ interface_definition ] . interface_definition= [ interface_heritage] [interface_g_u_i_d ] interface_member_list END . interface_heritage= '(' identifier_list ')' . interface_g_u_i_d= '[' string_expression ']' . interface_member_list= { class_procedure_ | class_function_ | property } . interface_directives_= $<dir { (method_directives | overload_directive | calling_directives | dispid ) [ ';'] } $>dir . dispid= DISPID constant_expression . // -- redefinition "PROCEDURE x.y= z;" (axctrls) class_procedure_= ( PROCEDURE | CONSTRUCTOR | DESTRUCTOR ) PR_NAME [ formal_parameters ] ';' interface_directives_ . class_function_= FUNCTION FN_NAME interface_directives_ . variable_declarations= (THREADVAR | VAR) variable_declaration { variable_declaration } . // -- has separated in 2 because of initialization // -- absolute can be after a list, but not with initialization variable_declaration= ID_NAME ( ':' type [ '=' typed_constant | absolute ] ';' ':' type [ absolute ] ';' ) . [ formal_parameters ] ':' function_result_type ';'
15
| { ',' ID_NAME }
absolute= ABSOLUTE OTHER_VAR_NAME . // -- code expression= simple_expression [ ('=' | '<>' | '<' | '<=' | '>' | '>=' | IN | IS ) simple_expression ] . simple_expression= [ '+' | '-' ] term { ('+' | '-' | OR | XOR ) term } . term= factor { ('*' | '/' | DIV | MOD | AND | SHR | SHL ) factor } . // -- called by $i_access_or_expression // -- can be empty if fn call "fn()" parenthized_expression= '(' [ expression { ',' expression } ] ')' . factor= NUMBER | STRING_LITTERAL | NIL | NOT factor | '@' factor | INHERITED [ factor ] | '^' NAME | set_factor
Lenguaje Delphi
// -- x= (Sender AS tButton).Caption // -- the AS is only for the level 0 | ( NAME | STRING ) { parenthized_expression | end_access } | parenthized_expression { end_access } . end_access= { array_access | record_access | '^' | as_access array_access= '[' expression { ',' expression } ']' . record_access= '.' expression . as_access= AS NAME . // -- instructions asm= ASM { asm_statement } END . // -- for pasting in i_asm asm_statement_= { NAME | NUMBER | STRING_LITTERAL | '[' | ']' | '.' | ':' | '+' | '-' | '*' | '/' | NOT label_= | AND | OR | XOR | SHR | SHL | DIV } . | ',' } .
16
asm_statement= ( NAME | NUMBER | STRING_LITTERAL | '[' | ']' | '.' | '@' | ':' | '+' | '-' | '*' | '/' | NOT | AND | OR | XOR | SHR | SHL | DIV ) $i_asm . | ','
composed_instruction= F . // -- allows empty ";" instruction instruction_list= [ instruction ] { ';' [ instruction ] } . instruction= { assignment_or_call | structured_instruction } . // -- this covers "x[3].z:= u;" or "my_proc(3+ zz)"; // -- acces or (pchar+ 1)^ := ... assignment_or_call= expression [ end_assignment ] . // -- "(Sender As tButton).Caption:= xxx" end_assignment= ':=' expression . structured_instruction= composed_instruction | test | repetition | with | try | inherited_call | raise_statement | asm . test= if | case . if= IF expression THEN instruction [ ELSE instruction ] . // -- D5: ';' after last instr or before ELSE optional ! case= CASE expression OF case_element { ';' [ ELSE $NOREAD | END $NOREAD | case_element ] } [ ELSE instruction_list ] END . case_element= case_label ':' instruction . // -- a general constant constant_expression, but no set [], // -unless in a function call
case_label= constant_expression { ( ',' constant_expression | '..' constant_expression ) } . repetition= while | repeat | for . while= WHILE expression DO instruction .
Lenguaje Delphi
repeat= REPEAT instruction_list UNTIL expression . for= FOR unit_qualified_identifier ':=' expression [ TO | DOWNTO ] expression DO instruction . // -- "with xxx AS" with= WITH expression { ',' expression } DO instruction . try= TRY instruction_list ( EXCEPT except_block | FINALLY instruction_list ) END . except_block= on [ ELSE instruction_list ] | instruction_list . // -- can have "ON ezero DO ELSE xxx ;" or "ON xxx DO ;" on= handle_instruction { ';' [ handle_instruction ] } . exception_identifier= unit_qualified_identifier [ ':' unit_qualified_identifier ] . handle_instruction= ON exception_identifier DO [ instruction ';' ] . // -- "Inherited Items[Index]:= " inherited_call= INHERITED [ instruction ] . // inline_statement= INLINE '(' INTEGERCONST {'/' INTEGERCONST } ')' . raise_statement= $<at RAISE [ variable_access ] [ AT constant_expression ] $>at . composed_instruction= BEGIN instruction_list END . // -- bloc // -- VIRTUAL etc only in CLASS routine_header= class_methods_header | constructor_header | destructor_header | procedure_header | function_header . // -- methods have no directives in implementation class_methods_header= CLASS (class_procedure_method | class_function_method ) . class_procedure_method= PROCEDURE CLASS_NAME '.' PR_NAME [ formal_parameters ] ';' . // -- repeating the result is optional class_function_method= FUNCTION CLASS_NAME [ '.' FN_NAME ] [ formal_parameters ] [ ':' function_result_type ] ';' . constructor_header= CONSTRUCTOR CLASS_NAME '.' PR_NAME [ formal_parameters ] ';' . destructor_header= DESTRUCTOR CLASS_NAME '.' PR_NAME [ formal_parameters ] ';' . // -- always ; before directives (for procedural cdecl is without ? ) code_procedure_directives= $<dir { (dos_directives | calling_directives | overload_directive) [ ';'] } $>dir . procedure_header= PROCEDURE CLASS_OR_PR_NAME [ '.' PR_NAME ] [ formal_parameters ] ';' code_procedure_directives . // -- for the functions, STDCALL does not require ; "fn xxx: yyy STDCALL;" function_header= FUNCTION CLASS_OR_FN_NAME [ '.' FN_NAME ] [ formal_parameters ] [ ':' function_result_type ] [ ';' ] code_procedure_directives [ ';' ] . bloc= F . main_declarations= const_type_var_declarations | procedure_declarations_and_body . procedure_declarations_and_body= { procedure_declaration } . procedure_declaration= routine_header $<dir ( FORWARD $>dir | EXTERNAL $>dir end_external | $>dir bloc ) ';' .
17
Lenguaje Delphi
// "procedure xxx; external xxx;" // "procedure xxx; external xxx NAME 'MessageBoxA';" // "procedure xxx; external xxx 'MessageBoxA' INDEX 31;" end_external= [ constant_expression $<index [ index ] $>index ] '.' . index= INDEX constant_expression . bloc= { main_declarations } ( composed_instruction | asm ) . main_uses= USES uses_in { ',' uses_in } ';' . uses_in= UNIT_NAME [ IN constant_expression ] . // -- program / units / library / packages program= PROGRAM NAME ';' [ main_uses ] bloc '.' . unit= UNIT UNIT_NAME ';' unit_interface unit_implementation unit_end '.' . uses= USES identifier_list ';' . unit_interface= INTERFACE [ uses ] { const_type_var_declarations | routine_header } . unit_implementation= IMPLEMENTATION [ uses ] { main_declarations } . unit_end= ( BEGIN instruction_list | initialization ) END . initialization= [ INITIALIZATION instruction_list [ FINALIZATION instruction_list ]] . library= LIBRARY LIBRARY_NAME main_uses bloc '.' . package= PACKAGE PACKAGE_NAME ';' $<pack [ requires_clause ] [ contains_clause ] $>pack END '.' . requires_clause= REQUIRES REQUIRES_NAME {',' REQUIRES_NAME } ';' . contains_clause= CONTAINS contains_statement {',' contains_statement } ';' . contains_statement= CONTAINS_NAME [ IN constant_expression ] .
18
Lenguaje Delphi
19
Fuentes Bibliogrficas
delphiallimite.blogspot.com [1] programacionfacil.com [2] es.wikipedia.org geocities.com [3]
Referencias
[1] http:/ / delphiallimite. blogspot. com [2] http:/ / www. programacionfacil. com/ borland_delphi/ start [3] http:/ / www. geocities. com/ v. iniestra/ delphi/ index. html
20
Licencia
Creative Commons Attribution-Share Alike 3.0 //creativecommons.org/licenses/by-sa/3.0/