Pääsyn muokkaajat - Access modifiers

Access modifiers (tai pääsy toimintomerkit ) ovat avainsanoja on olio-kielet , jotka asettavat saatavuutta luokkia, menetelmiä, ja muut jäsenet. Pääsyn muokkaajat ovat erityinen osa ohjelmointikielen syntaksia, jota käytetään komponenttien kapseloinnin helpottamiseen .

In C ++ , on vain kolme pääsy muokkaajia. C # laajentaa niiden lukumäärän kuuteen, kun taas Java: lla on neljä pääsynmuutosta, mutta kolme avainsanaa tähän tarkoitukseen. Java-ohjelmassa ei ole avainsanaa ennen oletusasetusta paketti-yksityinen muuttaja.

Kun luokka julistetaan julkiseksi, se on kaikkien muiden samassa paketissa määriteltyjen luokkien sekä muiden pakettien määriteltyjen luokkien käytettävissä. Tämä on yleisimmin käytetty luokkien määrittelijä. Itse luokkaa ei kuitenkaan voida julistaa yksityiseksi. Jos käyttöoikeuksien määrittäjää ei ilmoiteta, käytetään oletusarvoisia käyttörajoituksia. Luokkaan pääsevät muut samassa paketissa olevat luokat, mutta paketin ulkopuoliset luokat eivät voi käyttää sitä. Kun sanomme, että luokkaan ei pääse, se tarkoittaa yksinkertaisesti sitä, että emme voi luoda kyseisen luokan objektia tai julistaa kyseisen luokan tyyppistä muuttujaa. Myöskään suojattua pääsyn määrittelyä ei voida soveltaa luokkaan.

Avainsanojen nimet

C ++ käyttää kolmea muokkaajia nimeltään public , protected ja private . C # on muokkaajia public , protected , internal , private , protected internal , ja private protected . Java on public , package , protected , ja private . Pääsyn muokkaaja package on oletusarvo ja sitä käytetään, jos jokin muu pääsynmuuttaja-avainsana puuttuu. Näiden muokkaajien merkitys voi vaihdella kielittäin. Seuraavassa verrataan avainsanoja, jotka on järjestetty rajoittavimmista avoimimpiin, ja niiden merkitys näillä kolmella kielellä. Niiden näkyvyys vaihtelee samasta luokasta pakettiin, jossa luokka on määritelty, yleiseen käyttöoikeuteen. Alla taulukossa on suurin käyttöoikeus.

Swiftissä on viisi erilaista käyttöoikeustasoa suhteessa sekä lähdetiedostoon, jossa entiteetti on määritelty, että moduuliin, joka sisältää lähdetiedoston.

Avainsana C # C ++ Java Nopea
private luokassa luokka-
ja / tai
ystäväluokat
luokassa liitetään vain ilmoitus
+ ilmoituksen laajennukset samaan tiedostoon
fileprivate - - - sama tiedosto
private protected johdetut luokat samassa kokoonpanossa - - -
protected internal sama kokoonpano
ja / tai
johdetut luokat
- - -
protected johdetut luokat johdetut luokat
ja / tai
ystäväluokat
johdetut luokat
ja / tai
samassa paketissa
-
package - - sen pakkauksessa -
internal sama kokoonpano - - sama moduuli
public kaikki kaikki kaikki kaikki
open - - - kaikki
+ aliluokan ulkopuolinen moduuli
+ ohittaa ulkopuolisen moduulin

Esimerkki C ++: sta

#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;
}

Viitteet

Huomautuksia

Bibliografia