Filosofia di incapsulamento OOP

2

È corretto dire che è buona norma impostare tutto su privato quando si definisce una classe?

Ad esempio, per la mia interfaccia pubblica impostarei la mia classe qualcosa del genere:

class foo {
    private var x
    private var y

    //even get and set are private, 
    //public only if necessary
    private get/set method for variables

    //main function
    private coreFunc () {...}

    //helper function 
    public  callCoreFunc() {
    coreFunc()
 }
}

Sono abituato (e mi sono abituato al mio insegnante di algoritmi) che tutto in una classe dovrebbe essere privato, tranne i metodi che l'utente deve chiamare (con la funzione di helper avvolta.)

Questo è un buon modo per vedere "l'interfaccia pubblica" o è troppo severo?

    
posta Asynch_ 14.09.2018 - 10:46
fonte

1 risposta

3

È certamente vero che è meglio rendere tutto privato, a meno che non debba essere pubblico, è un buon punto di partenza.

Ma rendere private le funzioni membro importanti e quindi scrivere funzioni di wrapper pubbliche in modo che possano essere richiamate, in realtà non ottiene alcun risultato.

Dal punto di vista dell'efficienza del codice, hai aggiunto una chiamata di funzione aggiuntiva ogni volta che viene chiamata la funzione membro e hai gonfiato il tuo codice base con funzioni extra.

Da un punto di vista nascosto del codice, non hai effettivamente nascosto nulla. Nelle lingue (come Java) che non hanno "intestazioni" e "corpi" separati, non fa alcuna differenza: se l'utente può vedere il wrapper, può vedere il codice. Nelle lingue che hanno intestazioni separate, come C ++, il wrapper si troverà nello stesso corpo della funzione che avvolge. Quindi l'utente vedrà sia se hanno accesso al corpo, né se non lo fanno.

A meno che tu non stia vendendo software proprietario, in OO il privato non significa nascondere il codice dalle persone. Si tratta di separare chiaramente i bit che costituiscono l'API pubblica di una funzione dai dettagli dell'implementazione e assicurandosi che il chiamante possa accedere solo ai bit a cui sono destinati.

    
risposta data 14.09.2018 - 15:15
fonte