Modificatori de acces - Access modifiers
Modificatorii de acces (sau specificatorii de acces ) sunt cuvinte cheie în limbaje orientate obiect care stabilesc accesibilitatea claselor, metodelor și a altor membri. Modificatorii de acces sunt o parte specifică a sintaxei limbajului de programare utilizat pentru a facilita încapsularea componentelor.
În C ++ , există doar trei modificatori de acces. C # extinde numărul acestora la șase, în timp ce Java are patru modificatori de acces, dar trei cuvinte cheie în acest scop. În Java, fără a avea un cuvânt cheie înainte, este implicit modificatorul pachet-privat.
Când clasa este declarată publică, este accesibilă pentru alte clase definite în același pachet, precum și pentru cele definite în alte pachete. Acesta este cel mai frecvent utilizat specificator pentru clase. Cu toate acestea, o clasă în sine nu poate fi declarată privată. Dacă nu este specificat niciun specificator de acces, se vor aplica restricțiile implicite de acces. Clasa va fi accesibilă pentru alte clase din același pachet, dar va fi inaccesibilă pentru clasele din afara pachetului. Când spunem că o clasă este inaccesibilă, înseamnă pur și simplu că nu putem crea un obiect din acea clasă sau să declarăm o variabilă de acel tip de clasă. Specificatorul de acces protejat nu poate fi aplicat nici unei clase.
Numele cuvintelor cheie
C ++ foloseste cele trei modificatori numite public , protected și private . C # are modificatorii public , protected , internal , private , protected internal și private protected . Java are public , package , protected și private . Modificatorul de acces package este implicit și este utilizat, dacă lipsește orice alt cuvânt cheie modificator de acces. Semnificația acestor modificatori poate diferi de la o limbă la alta. Urmează o comparație a cuvintelor cheie, ordonate de la cele mai restrictive la cele mai deschise, și semnificația lor în aceste trei limbi. Vizibilitatea lor variază de la aceeași clasă la pachetul în care clasa este definită până la o permisiune generală de acces. Mai jos, accesul maxim este scris în tabel.
În Swift, există cinci niveluri de acces diferite în raport atât cu fișierul sursă în care este definită entitatea, cât și cu modulul care conține fișierul sursă respectiv.
| Cuvânt cheie | C # | C ++ | Java | Rapid |
|---|---|---|---|---|
private |
clasă | cursuri de clasă și / sau prieteni |
clasă | atașând numai declarație + extensii ale declarației în același fișier |
fileprivate |
- | - | - | același fișier |
private protected |
clase derivate în același ansamblu | - | - | - |
protected internal |
același ansamblu și / sau clase derivate |
- | - | - |
protected |
clase derivate | clase derivate și / sau clase de prieteni |
clase derivate și / sau în cadrul aceluiași pachet |
- |
package |
- | - | în cadrul pachetului său | - |
internal |
aceeași asamblare | - | - | același modul |
public |
toata lumea | toata lumea | toata lumea | toata lumea |
open |
- | - | - | toată lumea + subclasă modul exterior + suprascrie modul exterior |
Exemplu în C ++
#include <iostream>
#include <conio.h>
using std::cout;
using std::endl;
struct B { // default access modifier inside struct is public
void set_n(int v) { n = v; }
void f() { cout << "B::f" << endl; }
protected:
int m, n; // B::m, B::n are protected
private:
int x;
};
struct D : B {
using B::m; // D::m is public
int get_n() { return n; } // B::n is accessible here, but not outside
// int get_x() { return x; } // ERROR, B::x is inaccessible here
private:
using B::f; // D::f is private
};
int main() {
D d;
// d.x = 2; // ERROR, private
// d.n = 2; // ERROR, protected
d.m = 2; // protected B::m is accessible as D::m
d.set_n(2); // calls B::set_n(int)
cout << d.get_n() << endl; // output: 2
// d.f(); // ERROR, B::f is inaccessible as D::f
B& b = d; // b references d and "views" it as being type B
// b.x = 3; // ERROR, private
// b.n = 3; // ERROR, protected
// b.m = 3; // ERROR, B::m is protected
b.set_n(3); // calls B::set_n(int)
// cout << b.get_n(); // ERROR, 'struct B' has no member named 'get_n'
b.f(); // calls B::f()
return 0;
}
Referințe
Note
Bibliografie
- Mayo, Joseph (2002), C Sharp Unleashed , publicarea Sams, ISBN 9780672321221