Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Uses en Interface e Implementation (https://www.clubdelphi.com/foros/showthread.php?t=14030)

bumiga 08-09-2004 00:32:27

Uses en Interface e Implementation
 
Amigos, buenas tardes, mi pregunta es: Cual es la diferencia de usar por ejemplo "SysUtils", declarada en el Uses de la parte Interface o en el Uses de la parte Implementation.

De antemano agradezco las respuesta que me puedan dar.

roman 08-09-2004 02:53:08

Para lo que concierne a la unidad donde esté declarada no hay diferencia como no sea la obvia de no poder usar elementos de la otra unidad antes de su inclusión.

La utilidad radica en que las unidades no pueden referirse circularmente una a la otra en la sección interface; por lo menos una de ellas debe poner la referencia en la sección implementation.

La verdad es que si bien tengo una vaga idea de por qué esto es así no lo sé cabalmente. Me parece que tiene que ver con el hecho de que en Delphi el compilador es de "un sólo paso", es decir, sólo recorre el código una vez para compilarlo. Admitir referencias circulares me parece que obligaría al compilador a dar dos vueltas como mínimo. Según alguna vez leí esto es lo que hace la gran diferencia en tiempo de compilación entre Delphi y, por ejemplo, C.

Sin embargo me encantaría que alguien más versado diera luz sobre el asunto.

// Saludos

passmaker 30-07-2012 22:24:58

Tarde pero seguro, explicacion muy sencilla del Sr. Marcus Cantu
" La cláusula uses, al principio de la sección de interfaz, indica a qué otras unidades tenemos que acceder en la porción de interfaz de la unidad. Esto incluye las unidades que definen los tipos de datos a que nos referimos en la definición de otros tipos de datos, como las componentes dentro de un formulario que estemos definiendo. La segunda cláusula uses, al principio de la sección de implementación, indica otras unidades, a que necesitamos acceder sólo en el código de implementación. Cuando necesite referirse a otras unidades del código de las rutinas y métodos, deberá añadir elementos en esta segunda cláusula uses, en vez de hacerlo en la primera. Todas las unidades a que se refiera deben estar presentes en el directorio del proyecto o un directorio de la ruta de búsqueda (puede establecer la ruta de búsqueda de un proyecto en la página Directories/Conditionals del cuadro de diálogo Options del proyecto)."

Dejo enlace:
http://www.marcocantu.com/epascal/Spanish/ch11unit.htm


Cita:

Empezado por roman (Mensaje 61564)
Para lo que concierne a la unidad donde esté declarada no hay diferencia como no sea la obvia de no poder usar elementos de la otra unidad antes de su inclusión.

La utilidad radica en que las unidades no pueden referirse circularmente una a la otra en la sección interface; por lo menos una de ellas debe poner la referencia en la sección implementation.

La verdad es que si bien tengo una vaga idea de por qué esto es así no lo sé cabalmente. Me parece que tiene que ver con el hecho de que en Delphi el compilador es de "un sólo paso", es decir, sólo recorre el código una vez para compilarlo. Admitir referencias circulares me parece que obligaría al compilador a dar dos vueltas como mínimo. Según alguna vez leí esto es lo que hace la gran diferencia en tiempo de compilación entre Delphi y, por ejemplo, C.

Sin embargo me encantaría que alguien más versado diera luz sobre el asunto.

// Saludos


ecfisa 31-07-2012 02:21:50

Hola.
Cita:

La utilidad radica en que las unidades no pueden referirse circularmente una a la otra en la sección interface; por lo menos una de ellas debe poner la referencia en la sección implementation.
Eso es así desde Turbo Pascal, aunque nunca conocí el motivo.


Estuve investigando el por qué de la limitante sin resultado. No obstante, me parece muy razonable la explicación de roman:
Cita:

Me parece que tiene que ver con el hecho de que en Delphi el compilador es de "un sólo paso", es decir, sólo recorre el código una vez para compilarlo. Admitir referencias circulares me parece que obligaría al compilador a dar dos vueltas como mínimo. Según alguna vez leí esto es lo que hace la gran diferencia en tiempo de compilación entre Delphi y, por ejemplo, C.
Así que con esa me quedo hasta que se demuestre lo contrario... :)

Saludos.

roman 31-07-2012 02:44:00

Y es que lo que comenta Marco Cantú realmente se refiere al buen uso de las cláusulas uses, mas no da una explicación de porqué es así.

// Saludos

Casimiro Notevi 31-07-2012 09:32:58

Algunas veces me he puesto a investigar eso y siempre lo he dejado sin averiguar nada. Quedará como una leyenda para la historia.


La franja horaria es GMT +2. Ahora son las 23:03:17.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi