2012-07-25 29 views
5

Questa è la domanda dei miei compiti: Quale tra le seguenti classi NON è strettamente incapsulata?Classe strettamente incapsulata

class A 
{ 
    private int x; 
} 
class B 
{ 
    private int x; 
    public void setX(int x) 
    { 
     this.x=x; 
    } 
    public int getX() 
    { 
     return x; 
    } 
} 
class C 
{ 
    private int x; 
    private void setX(int x) 
    { 
     this.x=x; 
    } 
    private int getX() 
    { 
     return x; 
    } 
} 

Ho passato un po 'di tempo a cercare su coderanch ma non sono riuscito a ottenere le cose richieste. Qualcuno può aiutarmi?

Quello che penso è la classe C non è strettamente incapsulato, perché i metodi sono privati. E riguardo alla classe A quello che sento è che non è solo incapsulato. Perché la definizione di base dell'incapsulamento dice che "Devi nascondere i tuoi membri e fornire ai metodi utente della classe che si comportano nel modo desiderato". Ora la classe A non ha metodi di accesso-mutatore. Quindi A non dovrebbe essere considerato incapsulato. Non sono sicuro ma. Perfavore, correggimi se sbaglio.

+0

Questo probabilmente non ti aiuterà, ma la domanda è posta (presumibilmente dai tuoi istruttori) in modo assurdamente astratto. Una classe è strettamente incapsulata quando espone solo l'interfaccia di cui i suoi clienti hanno bisogno. È praticamente impossibile dirlo in modo significativo senza conoscere lo scopo di una determinata classe. – millimoose

risposta

1

Hai esattamente ragione. Sia la Classe A che la Classe C non sono strettamente incapsulate perché l'incapsulamento stretto implica campi privati ​​accoppiati a getter e setter pubblici.

+0

Ora sono confuso ... Perché ho 4 opzioni: A: Classe A B: Classe B C: Classe C D: Nessuno di sopra – user1500024

+2

Accesso diretto ai vostri interni implica l'incapsulamento? – jeff

1

La definizione di incapsulamento è corretta. Ma penso che ti stai allontanando un po '.

L'incapsulamento indica che non si consente agli altri di accedere direttamente ai componenti interni. Esporre funzionalità utente e gestire i propri interni.

Quindi, se sono un conto bancario, ho un campo privato chiamato totale. Non consento agli utenti di impostare direttamente il mio totale. Invece, espongo ritiro (double amt) e deposito (double amt) e gestisco il totale in base alle necessità.

Non rimanere incastrato su A avendo solo un membro privato. Considera questi frammenti di classe, come la funzionalità utente non viene mostrata e prova a rispondere di nuovo.

+0

In realtà questa domanda viene posta in un test attitudinale di assunzione con 4 opzioni: classe A, B, C o Nessuna. Fuori di loro, solo uno è corretto. Quindi qual è la risposta più corretta? – user1500024

+0

@ user1500024 Di queste opzioni? Direi None perché 'B' espone tutti i suoi interni, e' A' e 'C' non espongono nulla e sono quindi inutili. Detto questo c'è un argomento da fare per rispondere a "' B' "(perché mentre espone' x' almeno controlla l'accesso ad esso); così come c'è un argomento da fare per 'A' e' C' poiché non espongono 'x' affatto. È solo una domanda ridicolmente vaga. – millimoose

+1

Sono assolutamente d'accordo ... CURSE la persona che ha disegnato una domanda del genere. – user1500024

4

Come è definito "incapsulamento stretto" nella classe? Non ci sono accademie o definizioni a livello di settore per quanto posso dire da una ricerca su Google.

Potrei sostenere che ogni classe è ben incapsulata o entrambe sono scarsamente incapsulate. Perché il cliente è esposto al nome della variabile privata X? Sembra sfortunato. Perché la classe A non espone alcuna funzionalità? È "corretto" che C esponga solo un getter nel dominio in cui dovrebbe essere usato?

Questa domanda travisa il concetto di incapsulamento. Non è possibile eseguire il codice attraverso una routine di "verifica dell'incapsulamento". È una decisione di progettazione umana in cui dici che ciò che è esposto dovrebbe essere e ciò che non lo è non dovrebbe essere. Fondamentalmente, questo in genere richiede che i dati siano privati, ma se un metodo debba essere pubblico o privato dipende interamente da ciò che in realtà significa e sta facendo.

0

Penso che la necessità di accesso pubblico sia menzionata nella definizione di incapsulamento perché ha semplicemente un senso e per nessun altro motivo. Quindi direi che la classe strettamente incapsulata è una classe che nasconde i suoi membri, impedendo l'accesso diretto ad essi da parte di oggetti di altre classi. Questo è tutto. Andrei con None, poiché tutte queste classi sono incapsulate anche se due di esse non hanno molto senso.

0

Qui di classe B saranno strettamente incapsulato perché secondo la definizione "se una classe è dichiarata con le variabili private & proprietà pubbliche, si dice di essere strettamente incapsulamento "

0

tutte le classi di cui sopra sono strettamente incapsulati.

Una classe si dice che sia strettamente incapsulata se e solo se tutti i membri di dati dichiarati come privati. Qui non dovremmo preoccuparci della presenza o meno di dispositivi di accesso pubblici o di mutatori.

-1

Una classe è detto di essere "strettamente incapsulato" se e solo se ogni variabile è dichiarata come privata. (A prescindere se contengono getter o setter metodi o meno.

Nel tuo esempio Tutto le tre classi sono strettamente incapsulato dal momento che ogni classe ha tutte le variabili come private.

0

Tutte le tre classi descritte da voi sono strettamente incapsulato.

i Se una classe ha solo variabili private e nessun'altra variabile pubblica, allora una classe è detta classe strettamente incapsulata.

Non dipende dai metodi getter o setter.

Abbiamo bisogno di avere getter e setter in quanto abbiamo bisogno di creare variabili in modo che possiamo usarli in altre classi o funzioni.

Quindi, indipendentemente dal metodo getter e setter pubblico, tutte e tre le classi sono strettamente incapsulate.

0

classe ermeticamente incapsulato significa che tutti variabile membro dichiarato come privato in modo tutte le classi sono strettamente incapsulato NB se una classe genitore contiene una variabile membro che è definito come non privato la classe bambino non sarà strettamente incapsulato

Problemi correlati