PDA

Ver la Versión Completa : Declaración de Procedimientos


Chandra
18-06-2007, 12:04:38
Llevo años haciendo mal una cosa básica, y me acabo de dar cuenta ahora... :eek:

Siempre he declarado mis procedimientos y funciones bajo el resto de declaraciones de procedures correspondientes a los eventos de los objetos (es decir, al final del evento OnClick de un Button, por ejemplo). No sé... supongo que cuando empecé hace años, vi allí las declaraciones de los procedimientos de los eventos, y supuse que ahí era donde tenía que declarar los mios. Un vicio adquirido y no revisado.

Ejemplo:


type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure MiProcedimiento;


Luego, en el cuerpo del código, anteponía "TFormX."... y listo.

Ejemplo:


implementation

{...}

procedure TForm1.MiProcedimiento;
begin
//bla, bla, bla...
end;


Pero me he dado cuenta, con gran estupor, de que NO hay por qué declararlos, que se escribe el cuerpo en la sección implementation (sin el TFormX. delante, claro) y se acabó. He vivido engañado todo este tiempo :D. Con razón me extrañaba no encontrar nunca en los manuales la "acrobacia" que yo "perpetraba". Aunque... tampo he encontrado nunca la forma correcta de hacerlo, lo dan por supuesto...:confused:

Ahora bien, al darme cuenta de mi tremenda laguna, me he puesto a buscar y he visto que hay autores (como Charte) que sí que declaran los procedimientos en la sección public, por ejemplo. ¿Por qué? ¿Cuál es la forma correcta de hacerlo?

Gracias

dec
18-06-2007, 12:21:33
Hola,

En realidad no creo que pueda hablarse del lugar correcto para declarar un procedimiento, a no ser que con esto nos queramos referir al lugar adecuado para hacerlo.

Un procedimiento puede ser público para otras unidades si se declara en la cláusula "interfaz" de una unidad. Si sólo se implementa el procedimiento en la cláusula "implementation" el mismo no estará disponible sino para la unidad en que se implementa.

Si un procedimiento (o función) pertenece a una clase decimos que se trata de un método de dicha clase. Aquí ya hay que decidirse no por el lugar de la declaración sino por el "alcanze" del ya método de la clase.

Un método puede declararse dentro de una clase como privado, protegido o público. En las últimas versiones de Delphi también puede declararse como "privado estrictamente" o "protegido estrictamente".

Si se declara público el método estará disponible para todo aquel que use la clase. Si se declara protegido sólo podrá accederse a él desde la clase en cuestión o clases derivadas de esta. Si se declara privado el método será accesible sólo desde la clase en que se declara.

En Delphi hay un "problema" que se soluciona en las últimas versiones. Si un método se declara "privado estrictamente" no podrá accederse al mismo sino desde el interior de la clase en que se declare, incluso si se trata de hacerlo desde la misma unidad en que se encuentra declara la clase que contiene el método.

Y esto es... más o menos (más menos que más) y en pocas palabras, lo que puedo decir sobre lo que planteas.

Chandra
18-06-2007, 13:05:46
Muy interesante e instructivo todo lo que cuentas, dec.

El caso es que aunque tengo clara la teoría sobre clases, partes privadas, públicas y protegidas (tanto en Delphi como en Java), no he tenido (no me ha hecho falta, la verdad) demasiado interés por comprender la estructura de las units de delphi. De ahí el lío y mi confusión. Por eso, aunque tengo bastante claro como construir y usar clases, no termino de entender el por qué de la estructura de una unit normal y corriente :o.

Voy a tener que hacer un alto y ponerme a repasar ese tipo de conceptos básicos. Este es el peligro de los IDEs, que a veces avanzas pasando por alto cosas básicas. Ahora comprendo por qué la gente de Java prefiere usar bloc de notas y no dejar que un eclipse o un netbeans les meta el esqueleto.

Pero en fin, que me salgo del tema y lo que me interesa ahora es Delphi. :D

Gracias por tu aclaración

dec
18-06-2007, 13:41:14
Hola,

Tú tranquilo, hombre. En mi opinión los IDEs son unos programas fantásticos. Y lo que has aprendido con ellos no quita que sigas aprendiendo después: lo que sea. La verdad, no me imagino construyendo un programa complejo (espero que me entiendas... tal vez esta no sea la palabra más adecuada) con el bloc de notas... puede ser curioso, interesante, incluso sí, llevarse a cabo... pero tiene muchas posibilidades de convertirse en algo tedioso y de aburrida realización.

Pero bueno, para los gustos están los colores. :)

Chandra
18-06-2007, 19:25:00
Hola,

Tú tranquilo, hombre. En mi opinión los IDEs son unos programas fantásticos. Y lo que has aprendido con ellos no quita que sigas aprendiendo después: lo que sea. La verdad, no me imagino construyendo un programa complejo (espero que me entiendas... tal vez esta no sea la palabra más adecuada) con el bloc de notas... puede ser curioso, interesante, incluso sí, llevarse a cabo... pero tiene muchas posibilidades de convertirse en algo tedioso y de aburrida realización.

Pero bueno, para los gustos están los colores. :)
Te entiendo perfectamente, y tienes mucha razón :). Es un placer encontrarse a gente como tú, que domina un área del conocimiento, pero no necesita de alardes frikis (el bloc de notas, por ejemplo ;)) para demostrarlo.

Gracias por tu tiempo y por tu amabilidad compartiendo tus conocimientos conmigo :)