2010-10-23 11 views
7

Czy ktoś mógłby mi wytłumaczyć, czym jest enkapsulacja danych w Objective-C? Powiedziano mi, że to ważna koncepcja Celu C, ale nie rozumiem, dlaczego ...Enkapsulacja danych ...?

Wyjaśnij mi, jakbym miał 5 lat, a potem jakbym miał 25 lat ...

Dzięki za poświęcony czas, ~ Daniel

+0

Dlaczego głosy bliskie? – CesarGon

+0

FWIW: Enkapsulacja danych nie jest w żaden sposób związana z Objective C, ani nawet z programowaniem obiektowym, jest to bardzo ogólna technika przydatna do kontrolowania jednej klasy złożoności w prawie każdym środowisku programistycznym. – dmckee

+2

Zgadzam się, że to (hermetyzacja) jest słabo "wyjaśnione". Z jakiegoś powodu, prawie wszystko w obiektywnym C jest "jak to". Wszystkie koncepcje mają słodkie, abstrakcyjne, częściowo powiązane, angielskie "nazwy", które niestety nie mają absolutnie żadnego sensu razem ... NIŻ rozumiesz ... Potem przełącznik odwraca się, a każdy, kto tego nie robi, wydaje się głupi. Przysięgam ... sposób, w jaki wyabstrahowali te koncepcje, jest na krawędzi tego, co ludzie mogą zrozumieć ... do tego stopnia, że ​​kiedy już to zrozumiecie ...jesteś prawie przerażony, aby wrócić i spróbować wyjaśnić, lol. –

Odpowiedz

4

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

Co rozumiemy przez dane hermetyzacji jest że dane zawarte jest (że tak powiem) metodami sens dostęp to my potrzebę używać met hods. Niektórzy z was, którzy zaprogramowali w innych językach i , nie słyszeli o enkapsulacji danych, mogą się zastanawiać, dlaczego robimy to w ten sposób. Odpowiedź jest taka, że ​​przez dane enkapsulujące istnieje przyjemna poduszka między programistą klasy a użytkownikiem klasy. Ponieważ klasy klasy zarządzają i zachowują atrybuty w klasie, mogą one łatwiej integrować dane. Inną ważną zaletą jest , że gdy programista dystrybuuje swoją klasę , osoby używające go nie mają w ogóle wartości , aby w ogóle martwić się o elementy wewnętrzne klasy . Programista może zaktualizować metodę , aby była szybsza lub bardziej wydajna, ale ta aktualizacja jest przejrzysta dla użytkownika klasy , ponieważ nadal używa tej samej metody bez zmiany swojego kodu.

Mówiąc najprościej, użytkownik otrzymuje to, co chciał deweloper, i "chroni" wszystko inne. Deweloper może zmienić wszystko, co wewnętrzne, bez konieczności przerabiania kodu przez użytkownika.

Jeśli deweloperzy nie dostosowali się do enkapsulacji danych, musielibyśmy przepisać nasz kod za każdym razem, gdy wydamy nową wersję biblioteki, fragment kodu lub cały program.

3

Enkapsulacja danych w Objective-C oznacza, że ​​tylko klasa powinna dotykać zmiennych instancji. Do nich należy zawsze oznaczyć je jako prywatne, a tylko wystawiać je poprzez właściwości, jak to:

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

To oznacza, że ​​klasa może implementować walidacji w to metody setter. A jeszcze lepiej, jeśli użyjesz @synthesize do wygenerowania gettera i seterów, niż w ogóle nie musisz martwić się o model pamięciowy Cocoa (z wyjątkiem zwolnienia twoich ivarów w dealloc).

+0

To niesamowite .. wyjaśniłem jednym zdaniem .. Jeśli wyjaśniłeś przykład z dodatkowymi szczegółami, to byłoby miło. W każdym razie dziękuję. –

+0

@Peylow - Ładnie postaw! –

Powiązane problemy