2010-10-23 13 views
7

Qualcuno potrebbe spiegarmi quale incapsulamento dei dati in Objective-C è? Mi è stato detto che questo è un concetto importante di Objective-C ma non vedo perché ...Incapsulamento dati ...?

Spiegatemi come se avessi 5 anni e poi come se avessi 25 anni.

Grazie per il vostro tempo, ~ Daniel

+0

Perché i voti ravvicinati? – CesarGon

+0

FWIW: L'incapsulamento dei dati non è in alcun modo specifico per l'Objective C, e nemmeno per la programmazione orientata agli oggetti, piuttosto è una tecnica molto generale utile per controllare una classe di complessità in quasi tutti gli ambienti di programmazione. – dmckee

+2

Concordo sul fatto che questo (incapsulamento) sia "spiegato" in modo insufficiente. Per qualche ragione, quasi TUTTO nell'obiettivo C è "così" .. Tutti i concetti hanno simpatici, astratti, semi-correlati, "nomi" inglesi ... che purtroppo non hanno assolutamente senso insieme ... FINO A che non capisci ... Poi, un interruttore ribalta, e tutti quelli che non capiscono sembrano stupidi. Giuro che il modo in cui hanno astratto i concetti è proprio al limite di ciò che _normal_ persone possono comprendere .. al punto che una volta ottenuto lo capisci ...hai quasi paura di tornare indietro e cercare di spiegarlo, lol. –

risposta

4

da http://mobile.tutsplus.com/tutorials/iphone/learn-objective-c-2/:

Cosa intendiamo per incapsulamento dei dati è che i dati sono contenuti (si fa per dire) con metodi significato per accedervi we necessità usare incontrato hods. Alcuni di voi che hanno programmato in altre lingue e non si è mai sentito parlare di incapsulamento dei dati potrebbe chiedersi perché facciamo le cose in questo modo . La risposta è che con dati incapsulati, c'è un bel cuscino tra lo sviluppatore di una classe e l'utente di una classe. Poiché i metodi di classe gestiscono e mantengono gli attributi all'interno della classe, , possono più facilmente mantenere l'integrità dei dati . Un altro importante vantaggio è che quando uno sviluppatore distribuisce la sua classe , le persone che lo utilizzano non hanno il preoccuparsi della parte interna della classe . Uno sviluppatore può aggiornare un metodo per renderlo più veloce o più efficiente, ma questo aggiornamento è trasparente per l'utente della classe come lui/lei usa ancora lo stesso metodo senza alcun cambiamento alla sua/il suo codice.

In termini semplici, l'utente viene fornito con ciò che lo sviluppatore voleva che avessero e "protegge" tutto il resto. Lo sviluppatore può cambiare qualcosa di interno senza che l'utente debba riscrivere il proprio codice.

Se gli sviluppatori non si conformavano all'incapsulamento dei dati, dovevamo riscrivere il nostro codice ogni volta che veniva rilasciata una nuova versione di una libreria, uno snippet di codice o un intero programma.

3

L'incapsulamento dei dati in Objective-C significa che solo la classe stessa deve toccare le sue variabili di istanza. Perciò si dovrebbe sempre contrassegnarli come privati, e solo esporre loro attraverso le proprietà, come questo:

@interface Foo : NSObject { 
@private 
    int numberOfBars; 
    Baz* contentBaz; 
} 
@property(nonatamic, assign) int numberOfBars; 
@property(nonatomic, retain) Baz* contentBaz; 
@end 

Ciò significa che la classe può implementare la convalida nella sua metodi setter. E ancora meglio se usi @synthesize per generare getter e setter di quanto non ti debba preoccupare del modello di memoria di Cocoa (ad eccezione del rilascio dei tuoi ivars in dealloc).

+0

Questo è incredibile ... ho spiegato con una frase ... Se avessi spiegato un esempio con più dettagli che sarebbero stati gentili ... Comunque, grazie. –

+0

@Peylow - Ben messo! –

Problemi correlati