Programación en Ada/Visibilidad
Una entidad es visible en un punto dado si se puede utilizar su identificador para referirse a ella en dicho punto. La diferencia con el ámbito es que éste es la región de texto donde una determinada entidad es visible.
En el caso de una declaración de una variable, no se puede utilizar el identificador hasta que no se haya terminado su declaración (por ejemplo, sería ilegal la declaración I: Integer := I +1;) ya que no es visible hasta que no se haya terminado de declarar.
Como ejemplo, en el caso de un bloque:
declare
-- Ámbito de I externa.
I, J: Integer;-- Visibilidad de I externa.
begin
-- ...
declare
-- Ámbito de I interna.
I: Integer := 0;-- Visibilidad de I interna, oculta la visibilidad de I externa.
begin
-- ...
end
;-- Fin visibilidad de I interna, oculta la visibilidad de I externa.
-- Fin ámbito de I interna.
end
;-- Fin visibilidad de I externa.
-- Fin ámbito de I externa.
En este caso, la visibilidad de la I externa se ve ocultada cuando se hace visible a la I interna. Sin embargo, si se dota de nombre al bloque, se puede hacer referencia a una variable supuestamente ocultada con la notación punto:
Externo:declare
I, J: Integer;-- I externa.
begin
-- ...
declare
I, K: Integer;-- I interna.
begin
K := J + Externo.I;-- Se hace referencia a la I externa.
end
;end
Externo;
Igualmente se puede hacer con bucles y, por supuesto, con subprogramas y paquetes, pues deben poseer un identificador.
En el caso de una entidad declarada en la parte no privada de la especificación de un paquete, se aplican las mismas reglas dentro del paquete pero, fuera del mismo, la entidad no es visible a menos que se escriba el nombre del paquete mediante la notación punto o, alternativamente, se escriba una cláusula use.
Reglas de visibilidad
[editar]Una declaración es directamente visible en un lugar determinado cuando su nombre, sin notación punto, es suficiente para referenciarla. La visibilidad puede ser inmediata o mediante una cláusula use.
Los identificadores visibles en un punto son aquellos visibles antes de considerar ninguna cláusula use más aquellos que se hacen visibles debido a las cláusulas use.
La regla básica es que un identificador de un paquete se hace visible mediante una cláusula use si el mismo identificador no está también en otro paquete con otra cláusula use, por supuesto, siempre que el identificador no sea ya visible. Si no se cumple, hay que recurrir a la notación punto.
Se aplica una regla ligeramente diferente cuando todos los identificadores son subprogramas o literales enumeración. En este caso, un identificador que se hace visible mediante una cláusula use no puede ocultar nunca otro identificador, aunque sí puede sobrecargarlo.