Cosa sono pubblici, privati ​​e protetti nella programmazione orientata agli oggetti?


Risposte:


152

Sono modificatori di accesso e ci aiutano a implementare l' incapsulamento (o l'occultamento delle informazioni). Indicano al compilatore quali altre classi dovrebbero avere accesso al campo o al metodo da definire.

private - Solo la classe corrente avrà accesso al campo o al metodo.

protected - Solo la classe e le sottoclassi correnti (e talvolta anche le classi dello stesso pacchetto) di questa classe avranno accesso al campo o al metodo.

public - Qualsiasi classe può fare riferimento al campo o chiamare il metodo.

Ciò presuppone che queste parole chiave vengano utilizzate come parte di una dichiarazione di campo o metodo all'interno di una definizione di classe.


4
nota che in java i membri dello stesso pacchetto possono accedere ai membri protetti
Landon Kuhn

2
Sì, e Java ha anche un quarto modificatore di accesso che è la stringa vuota. Non fornire alcun modificatore di accesso consentirà l'accesso da qualsiasi classe a livello di pacchetto.
Ben S,

1
Mi piace la parte "compilatore", perché la maggior parte dei linguaggi che conosco tutte le funzioni / classi possono essere facilmente accessibili in fase di esecuzione, ad esempio tramite le riflessioni in .NET. Pertanto tendo a dire che questi modificatori di accesso sono fondamentalmente solo un aiuto per i programmatori per guidare altri programmatori che lavorano sullo / con lo stesso codice nascondendo alcune cose.
merkuro

1
Alcune lingue hanno alcune particolarità. Come in Delphi, i membri privati ​​sono accessibili da altre classi sulla stessa unità, e devi usare rigorosamente privato se non vuoi questo comportamento.
Fabio Gomes

1
C # esegue anche il trucco dei membri protetti dall'accesso dello stesso pacchetto. In sostanza, C # è solo Java di Microsoft
iGbanam

6

Non sono realmente concetti, ma piuttosto parole chiave specifiche che tendono a verificarsi (con semantica leggermente diversa) in linguaggi popolari come C ++ e Java.

Essenzialmente, hanno lo scopo di consentire a una classe di limitare l'accesso ai membri (campi o funzioni). L'idea è che meno un tipo è autorizzato ad accedere a un altro tipo, minore è la dipendenza che può essere creata. Ciò consente di modificare più facilmente l'oggetto a cui si accede senza influire sugli oggetti che si riferiscono ad esso.

In generale, pubblico significa che l'accesso è consentito a tutti, privato significa che l'accesso è consentito solo ai membri della stessa classe e protetto significa che sono consentiti anche i membri delle sottoclassi. Tuttavia, ogni lingua aggiunge le proprie cose a questo. Ad esempio, C ++ ti consente di ereditare in modo non pubblico. In Java, c'è anche un livello di accesso predefinito (pacchetto) e ci sono regole sulle classi interne, ecc.


6

Tutti e tre sono modificatori di accesso e parole chiave che vengono utilizzate in una classe. Qualsiasi cosa dichiarata in pubblico può essere utilizzata da qualsiasi oggetto all'interno o all'esterno della classe, le variabili in privato possono essere utilizzate solo dagli oggetti all'interno della classe e non possono essere modificate tramite l'accesso diretto (poiché può cambiare tramite funzioni come la funzione amico) Tutto ciò che è definito nella sezione protetta può essere utilizzato dalla classe e dalla loro classe appena derivata.


1

Un elemento pubblico è accessibile da qualsiasi altra classe. Devi solo sapere di che oggetto si tratta e puoi utilizzare un operatore punto per accedervi. Protetto significa che una classe e le sue sottoclassi hanno accesso alla variabile, ma non a qualsiasi altra classe, devono usare un getter / setter per fare qualsiasi cosa con la variabile. Un privato significa che solo quella classe ha accesso diretto alla variabile, tutto il resto ha bisogno di un metodo / funzione per accedere o modificare quei dati. Spero che questo ti aiuti.


1

come sopra, ma qualitativamente:

private - least access, best encapsulation
protected - some access, moderate encapsulation
public - full access, no encapsulation

meno accesso fornisci, meno dettagli di implementazione fuoriescono dai tuoi oggetti. meno di questo tipo di perdita significa maggiore flessibilità (aka "accoppiamento più lento") in termini di modifica del modo in cui un oggetto viene implementato senza interrompere i client dell'oggetto. questa è una cosa veramente fondamentale da capire.


0

Per riassumere, nella programmazione orientata agli oggetti, tutto è modellato in classi e oggetti. Le classi contengono proprietà e metodi. Le parole chiave pubbliche, private e protette vengono utilizzate per specificare l'accesso a questi membri (proprietà e metodi) di una classe da altre classi o altre DLL o anche altre applicazioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.