È corretto affermare che è buona norma impostare tutto in private
primo piano quando si codifica qualcosa?
E quindi aggiornarlo solo protected
se una sottoclasse ne ha bisogno o public
se ne ha bisogno un'altra classe?
È corretto affermare che è buona norma impostare tutto in private
primo piano quando si codifica qualcosa?
E quindi aggiornarlo solo protected
se una sottoclasse ne ha bisogno o public
se ne ha bisogno un'altra classe?
Risposte:
Risposta breve: Sì
Risposta più lunga:
Sì, ma questo non dovrebbe essere interpretato come un suggerimento per iniziare scrivendo le tue lezioni con tutto ciò che è privato; tale approccio implica la progettazione di una classe concentrandosi sui dettagli di implementazione prima di scegliere un'interfaccia.
Uno degli aspetti più importanti da considerare nella progettazione di una classe è il modo in cui verrà utilizzata; 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 porre anche se in realtà non stai scrivendo test unitari. (Relativo: "Quali sono i principi di progettazione che promuovono il codice testabile?" )
Quindi, una volta definita l'interfaccia pubblica, è una buona idea impostare il resto su privato perché la maggior parte di questi sarà in genere un dettaglio di implementazione grintoso che non interessa a nulla al di fuori della classe.
"E quindi aggiornarlo per proteggerlo solo se una sottoclasse ne ha bisogno, o pubblico se ne ha bisogno un'altra classe?"
Questo è l'approccio sbagliato. In fase di progettazione, dovresti sapere quale accesso pubblico vuoi dare. Di solito dai accesso pubblico perché è tutto lo scopo della tua classe. E dai accesso protetto perché vuoi che le sottoclassi accedano alle cose. E usi il privato per cose che non sono affari di nessun altro.
Ora, se qualcuno ha bisogno di accedere a cose a cui non può accedere, allora dovresti pensare davvero a quel bisogno . Non dovrebbero aver bisogno di tale accesso o il tuo design è sbagliato. Forse il tuo design è sbagliato e qualcosa non è pubblico che dovrebbe essere pubblico, quindi lo cambi. Ma se il tuo design è giusto, allora c'è qualcosa di sbagliato nella necessità , quindi risolvi questo invece di danneggiare il tuo design.
private
o protected
?
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 nascondendone i dettagli di implementazione. Questo si chiama nascondere i dati . Pertanto, vogliamo solo esporre (rendere pubbliche) le funzioni necessarie per utilizzare la classe. Queste funzioni sono l' interfaccia per la classe.
Pensa a un'interfaccia come la ruota di un'auto. Decidi in che direzione va la macchina girando la ruota, ma sotto i coperchi ci sono valvole rotanti, idraulica, pulegge che cambiano la rotazione delle ruote, ma non devi essere un ingegnere meccanico per guidare una macchina.
Quindi la risposta alla tua domanda è sì. Vuoi nascondere quanti più dettagli possibili su una classe da altre classi. Capire quando qualcosa dovrebbe essere pubblico, privato o protetto è facile da imparare ma difficile da padroneggiare.