2011-12-11 13 views

risposta

26

In teoria, gli attributi protetti (variabili) sono un anti-modello nei linguaggi orientati agli oggetti. Se solo le sottoclassi devono accedere agli attributi dei membri della propria superclasse, definire gli attributi come privati ​​e creare metodi di accesso protetti (getter e setter). Questo approccio applica il concetto di "nascondere le informazioni". Esiste una soluzione alternativa: definire attributi immutabili (definitivi) membri protetti.

Approfondimenti:

+2

"Ufficialmente"? ... –

+2

@Oli Charlesworth: ok, 'ufficialmente' potrebbe non essere il termine giusto, sei d'accordo se dico 'teoricamente'? – home

17

immagino, rendendo tutto privato è un anti-modello. Spesso le classi sono usate in un gruppo e nel loro insieme rappresentano entità incapsulate collocate in un pacchetto separato. Non hanno bisogno di nascondere qualcosa l'uno dall'altro, ma questa regola impone di nascondersi senza una buona ragione, aumentando il disordine e facendo effettivamente peggiorare lo stile (a quanto ho capito). Nel frattempo, spesso vediamo che la classe ogni nel pacchetto è pubblica. Immagino che questo sia molto peggio, ma checkstyle non lo controlla.

L'incapsulamento non esiste solo a livello di classe, anche su pacchetto, sistema e così via. E penso che questi livelli siano ancora più importanti.

4

Consentire l'accesso al pacchetto semplifica la programmazione all'interno di un pacchetto e riduce il codice boilerplate. Spesso, l'accesso è necessario solo all'interno del pacchetto. L'accesso privato ti costringe a creare molti metodi di accesso quasi inutili. Ciò ha in realtà l'effetto di ridurre l'incapsulamento e l'occultamento delle informazioni perché una classe deve esporre i dati interni/struttura a livello di applicazione invece che solo a livello di pacchetto attraverso metodi di accesso pubblico. La visibilità predefinita del pacchetto semplifica anche i test, in quanto le classi di test risiedono nello stesso pacchetto (nella directory di test/albero).

Problemi correlati