Co to jest zmienna instancji?
Zmienna instancji to fragment danych w programowaniu obiektowym, który ma swoją własną unikalną wartość dla każdego obiektu, w którym się znajduje. Zmienne instancji mogą być również nazywane elementami instancji, polami niestatycznymi i elementami danych. Stanowią one ważną część większości obiektów i zawierają określone fragmenty danych, które są wykorzystywane przez obiekt do obliczeń.
Na przykład, jeśli istnieją dwa obiekty, A i B, gdzie obiekt A ma zmienną instancji o nazwie „bla”, a obiekt B ma również zmienną instancji o nazwie „bla”, dwie zmienne „bla” to odrębne byty. Każda zmienna jest powiązana z obiektem, który ją kapsułkuje. Pełna nazwa zmiennej „blah” powiązanej z obiektem A to „A.blah”, natomiast pełna nazwa zmiennej „blah” powiązanej z obiektem B to „B.blah”. Każda, jeśli zmienne te mogą mieć własną wartość. Jeśli obiekty A i B są tego samego typu, a inny obiekt tego typu, C, zostanie utworzony, a obiekt C będzie również miał zmienną instancji „bla”, która może mieć swoją unikalną wartość.
Zmienne instancji są często mylone ze zmiennymi statycznymi, ale te dwie są znacznie różne. W przeciwieństwie do zmiennych instancji, których każdy obiekt określonego typu ma swój własny, zmienne statyczne mają tylko jedną wartość, a ta wartość jest taka sama dla każdego obiektu odpowiedniego typu. Zmienne statyczne są często nazywane zmiennymi klasowymi, które nie są takie same jak zmienne instancji.
W zależności od przypisanych im właściwości widoczności zmienne instancji mogą być widoczne tylko wewnątrz określonego obiektu, obiektu i jego podklas lub obiektu, w którym się znajduje, a także wszelkich innych obiektów. Ten końcowy rodzaj widoczności, zwany widocznością publiczną, jest często uważany za złą praktykę, na przykład w przypadku zmiennych, ponieważ łatwo jest naruszyć zasady enkapsulacji w programowaniu obiektowym. Pomimo tego tabu zdarzają się użyteczne zmienne instancji publicznej. Na przykład wiele standardowych klas w Javie ma zmienne instancji publicznych, co czasami pozwala na łatwą modyfikację właściwości.
Widoczność zmiennej instancji ma również znaczenie w dziedziczeniu. Jeśli jedna klasa dziedziczy po drugiej, nie daje to natychmiast obu stronom dostępu do zmiennych instancji drugiej klasy. Zmienne instancji prywatnej w podklasie i podklasie pozostają ograniczone tylko do tych klas, więc prywatna zmienna w podklasie nie może być widoczna przez nadklasę i odwrotnie. Jedynymi zmiennymi instancji, które mogą zobaczyć zarówno nadklasa, jak i podklasa, są chronione zmienne w nadklasie.