Best practice per l'utilizzo pubblico, protetto, privato?

10

È corretto dire che è buona norma impostare tutto su private in primo piano quando si codifica qualcosa?

E poi lo aggiorni solo a protected se una sottoclasse ne ha bisogno, o public se un'altra classe ne ha bisogno?

    
posta Aruka J 29.03.2016 - 21:15
fonte

3 risposte

10

Risposta breve:

Risposta più lunga:

Sì, ma non dovrebbe essere interpretato come un suggerimento per iniziare scrivendo le tue lezioni con tutto ciò che è privato; questo approccio implica il design di classe concentrandosi sui dettagli di implementazione prima di aver scelto un'interfaccia.

Uno degli aspetti più importanti da considerare quando si progetta una classe è come verrà utilizzato; che implica pensare ai tuoi metodi pubblici prima di iniziare a pensare ai dettagli privati / di implementazione.

Inoltre, questo approccio di solito perde le possibilità di chiedersi "Come scriverei un test unitario per questa classe?" - che è una domanda importante da porsi anche se non si stanno effettivamente scrivendo test unitari. (Related: "Quali sono i principi di progettazione che promuovono il codice testabile?" )

Quindi, una volta definita l'interfaccia pubblica, è buona norma impostare il resto su privato perché la maggior parte di ciò sarà in genere un dettaglio di implementazione grintoso che non interessa nulla al di fuori della classe.

    
risposta data 29.03.2016 - 21:38
fonte
6

"E poi lo aggiorna solo se protetto da una sottoclasse o pubblico se un'altra classe ne ha bisogno?"

Questo è l'approccio sbagliato. In fase di progettazione, dovresti sapere quale accesso pubblico vuoi a dare. Di solito fornisci l'accesso pubblico perché questo è l'intero scopo della tua classe. E tu dai accesso protetto perché vuoi sottoclassi per accedere alle cose. E tu usi il privato per cose che non sono affari di nessuno.

Ora se qualcuno ha bisogno di accedere a cose a cui non possono accedere, allora dovresti pensare davvero a quel bisogno . Non dovrebbero aver bisogno di quell'accesso, o il tuo progetto è sbagliato. Forse il tuo design è sbagliato, e qualcosa non è pubblico che dovrebbe essere pubblico, quindi lo cambi. Ma se il tuo progetto è giusto, allora c'è qualcosa di sbagliato nel bisogno , quindi correggi che invece di danneggiare il tuo design.

    
risposta data 30.03.2016 - 00:29
fonte
2

La chiave per comprendere questo aspetto della programmazione orientata agli oggetti è il concetto di incapsulamento dei dati . L'idea è di rendere una classe più facile da capire nascondendo i suoi dettagli di implementazione. Si chiama Nascondere i dati . Quindi, vogliamo solo esporre (rendere pubbliche) quelle funzioni che sono necessarie per usare la classe. Queste funzioni sono l' interfaccia della classe.

Pensa a un'interfaccia come la ruota di un'auto. Sei tu a decidere in che direzione va la macchina girando la ruota, ma sotto le coperture ci sono valvole rotanti, idraulici, pulegge che cambiano la rotazione delle tue ruote, ma non è necessario essere un ingegnere meccanico per guidare una macchina.

Quindi la risposta alla tua domanda è sì. Vuoi nascondere il maggior numero di dettagli su una classe da altre classi il più possibile. Capire quando qualcosa deve essere pubblico, privato o protetto è facile da imparare ma difficile da padroneggiare.

    
risposta data 29.03.2016 - 21:38
fonte

Leggi altre domande sui tag