Portata e visibilità vs tempo di vita vs Accessibilità vs ecc

1

Ho cercato di capire cosa significhi dire "scope of a named entity". Nella lettura dell'ambito, ci sono termini come visibilità, durata, accessibilità e altro ancora. Ciò che confonde è il fatto che i termini sono a tempi usati distintamente ea volte in modo intercambiabile.

Citando da questo Articolo IBM :

scope is... the largest region in which the name potentially is valid.

Giusto abbastanza. Ma allora cosa significa -

The visibility of an identifier is the region of program text from which the object associated with the identifier can be legally accessed.

La visibilità è correlata all'accessibilità?

Inoltre continua dicendo

Scope exceeds visibility when a duplicate identifier is used in an inner declarative region, thereby hiding the object declared in the outer declarative region. The original identifier cannot be used to access the first object until the scope of the duplicate identifier (the lifetime of the second object) has ended.

Questo significa che lo scopo e la vita sono le stesse cose?

Questi termini come scope significano fondamentalmente la stessa cosa in C ++ come in PHP, Python o anche Java. Oppure potrebbero significare cose diverse concettualmente a seconda della lingua in cui stai lavorando. L'articolo che ho citato è correlato a C / C ++, ma voglio capire i termini in senso generale.

    
posta user1720897 20.02.2014 - 19:45
fonte

2 risposte

2

Ambito , visibilità e accessibilità stanno davvero parlando della stessa cosa; data una dichiarazione particolare in cui è possibile fare riferimento a tale dichiarazione. Scope è il termine più generico e comprende sia visibilità che accessibilità e la citazione di riferimento è adeguata. Visibilità e accessibilità di solito vengono applicati ai membri di una classe in quanto è più facile considerarli come "nascosti" o "non visibili" anziché fuori ambito ; ovvero, myMember è o private , protected o public che controllano la visibilità del membro in una classe e i suoi decedenti. Quando si è all'interno di un metodo di una classe, tutti i membri sono accessibili o visibili , ma solo public membri provengono dall'esterno della classe. % membri diprotected sono solo accessibili o visibili dalla classe stessa o da una delle sue classi derivate. Tutti questi contribuiscono allo ambito di myMember , ovvero la più piccola regione di testo che può accedere a myMember .

La parentetica della vita è tecnicamente accurata per le variabili locali, ma in realtà è un mix di un concetto di runtime, lifetime, con un concetto di tempo compilato o lessicale, scope. Dovresti ignorarlo. È più confuso che utile quando si cerca di comprendere l'ambito. Comprendere la durata è importante per capire quando un distruttore viene eseguito ed è correlato all'ambito ma non è importante per comprendere l'ambito.

    
risposta data 20.02.2014 - 20:27
fonte
1

Credo che quei termini siano gli stessi per tutte le lingue, dal momento che è come il compilatore (o interprete) salverà internamente le variabili e le accederà.

[Modifica] L'esempio C è migliore per questo scopo.

#include <stdio.h>

int i = 4;

void myMethod(void) {
  int j = 3;
  printf("I can see var i from the outside: %d\n", i);
}

void anotherMethod(void) {
  int i = 2;
  printf("Scope of 'i' declared outside of the method is valid, but it's not visible.\n");
  printf("You'll see the 'i' variable declared inside the method: %d\n", i);
}

int main(void) {
  myMethod();
  printf("Asking for j will give an error, because it's outside the scope\n");
  anotherMethod();
}
    
risposta data 20.02.2014 - 19:59
fonte

Leggi altre domande sui tag