Referencja (informatyka)

Z Wikipedii, wolnej encyklopedii
Przejdź do nawigacji Przejdź do wyszukiwania

Referencja – wartość, która zawiera informacje o położeniu innej wartości w pamięci lub nośniku danych. W odróżnieniu od wskaźników, zarządzanie referencjami realizowane jest wyłącznie przez kompilator lub interpreter, a programista nie posiada żadnych informacji o konkretnym sposobie implementacji referencji.

Pamięć komputerowa to różnego rodzaju urządzenia i bloki funkcjonalne komputera, służące do przechowywania danych i programów (systemu operacyjnego oraz aplikacji). Potocznie przez "pamięć komputerową" rozumie się samą pamięć operacyjną.Programowanie obiektowe (ang. object-oriented programming) — paradygmat programowania, w którym programy definiuje się za pomocą obiektów — elementów łączących stan (czyli dane, nazywane najczęściej polami) i zachowanie (czyli procedury, tu: metody). Obiektowy program komputerowy wyrażony jest jako zbiór takich obiektów, komunikujących się pomiędzy sobą w celu wykonywania zadań.

Mechanizm referencji jest powszechnie wykorzystywany w językach programowania, gdyż idea jego działania polega m.in. na uniemożliwieniu wykonywania operacji uznawanych za potencjalnie niebezpieczne, które w wypadku błędu programistycznego mogłyby doprowadzić do awarii, zmniejszając w ten sposób niezawodność oprogramowania. Referencje nie ograniczają możliwości programisty – wszystkie operacje, które nie bazują na jawnej znajomości organizacji pamięci, mogą być zaimplementowane wyłącznie za ich pomocą. Z tego powodu w wielu językach programowania wysokiego poziomu jest to jedyny mechanizm obsługi pamięci (np. Java). W innych referencje współistnieją ze wskaźnikami (np. C++).

Garbage collection (zbieranie nieużytków, odśmiecanie) – jedna z metod automatycznego zarządzania dynamicznie przydzieloną pamięcią, w której za proces jej zwalniania odpowiedzialny jest nie programista, lecz programowy zarządca nazwany garbage collector. Pierwsza metoda odśmiecania została opracowana w 1959 roku przez Johna McCarthy’ego w celu rozwiązania problemu ręcznego zarządzania pamięcią w Lispie. Mechanizm ten następnie został szeroko rozpowszechniony i jest wykorzystywany w wielu wysokopoziomowych językach programowania, takich jak: Smalltalk, Python, Ruby, Java, C# czy D.Język programowania – zbiór zasad określających, kiedy ciąg symboli tworzy program komputerowy oraz jakie obliczenia opisuje.

Zastosowania[ | edytuj kod]

Dopełnienie mechanizmu wskaźników[ | edytuj kod]

W niskopoziomowych językach takich, jak C++, referencje są implementowane jako oferująca mniej możliwości, ale bezpieczniejsza odmiana wskaźników. Podobnie jak i one, referencje wskazują tutaj na pewien obszar pamięci z tą różnicą, że nie mogą być modyfikowane. Innymi słowy, już podczas tworzenia zmiennej będącej referencją musimy określić, na co będzie ona wskazywać, a ponadto referencji nie wolno później modyfikować.

Kompilator – program służący do automatycznego tłumaczenia kodu napisanego w jednym języku (języku źródłowym) na równoważny kod w innym języku (języku wynikowym) . Proces ten nazywany jest kompilacją. W informatyce kompilatorem nazywa się najczęściej program do tłumaczenia kodu źródłowego w języku programowania na język maszynowy. Niektóre z nich tłumaczą najpierw do języka asemblera, a ten na język maszynowy jest tłumaczony przez asembler.W językach programowania pozwalających na bezpośredni dostęp do pamięci (jak np. asembler, C, C++, Cyclone) pamięć jest reprezentowana jako jednowymiarowa tablica bajtów – wszystkie zmienne (statyczne i dynamiczne) są umieszczane w tej „tablicy”.

Referencje do obiektów[ | edytuj kod]

W wielu językach zmienne obiektowe są jedynie referencjami do obiektów znajdujących się na stercie.

W wielu obiektowych językach wysokiego poziomu (np. Java) programista nie może samodzielnie zarządzać pamięcią. Sposób jej organizacji zależy od implementacji konkretnej maszyny wirtualnej. Wyróżniony jest w niej obszar zwany stertą, w której przechowywane są wszystkie utworzone przez aplikację obiekty. Zmienne obiektowe nie przechowują bezpośrednio obiektów, a jedynie referencje do sterty. Przypisując wartość jednej zmiennej obiektowej do drugiej, lub przekazując ją przez wartość, przekazujemy jedynie referencję, co oznacza, że od tego momentu obie zmienne będą odnosić się do tego samego obiektu, a zmiany stanu wprowadzone za pośrednictwem jednej z nich będą natychmiast widoczne przez drugą.

Obiekt to podstawowe pojęcie wchodzące w skład paradygmatu programowania obiektowego w analizie i projektowaniu oprogramowania oraz w programowaniu.Definicja intuicyjna: Java (wym. „dżawa”) to język programowania. Programy napisane w Javie można uruchamiać na wielu urządzeniach, takich jak telefony komórkowe lub komputery oraz pod różnymi systemami operacyjnymi, przy użyciu Wirtualnej maszyny Javy, która musi być w danym środowisku zainstalowana.

Dodatkowo, dopuszcza się istnienie pustych referencji (null), które aktualnie nie wskazują na żaden obiekt.

Odśmiecanie pamięci[ | edytuj kod]

Referencje mają kluczowe znaczenie dla algorytmów odśmiecania pamięci. Umożliwiają śledzenie, które obiekty i wartości są wciąż używane przez program, a które mogą być bezpiecznie usunięte. Najprostszą techniką kontroli czasu życia danych na stercie jest zliczanie referencji. Aplikacja utrzymuje specjalny licznik dla każdego obiektu, który przechowuje informacje o liczbie referencji aktualnie na niego wskazujących. Jeśli spadnie on do zera, oznacza to, że nie jest już używany, a przydzielona mu pamięć powinna być zwolniona. Technika ta nie potrafi jednak wykrywać cykli (obiekty A i B posiadają referencje do siebie nawzajem, lecz reszta programu już nie).

Zliczanie referencji (ang. reference counting) – jedna z najłatwiejszych metod odśmiecania pamięci, opracowana w 1959 roku przez Johna McCarthy’ego na potrzeby zarządzania pamięcią w języku programowania Lisp. Implementacja (wdrożenie, przystosowanie, realizacja, łac.ang. implementation) – w informatyce – proces przekształcania abstrakcyjnego opisu systemu lub programu na obiekt fizyczny: komputer lub działający program zapisany w konkretnym języku programowania; także obiekt fizyczny będący efektem takiego przekształcenia, np. implementacja systemu operacyjnego (wdrożenie systemu) lub kompilatora dla konkretnego typu komputera.

Zobacz też[ | edytuj kod]

  • Wskaźnik
  • Odśmiecanie pamięci
  • Słaba referencja
  • Przypisy[ | edytuj kod]

    1. Harry Henderson: Encyclopedia of computer science and technology. Facts on File, Inc, 2008, s. 376 - 377. ISBN 978-0-8160-6382-6. (ang.)
    2. Recycling techniques (ang.). The Memory Management Reference. [dostęp 2010-12-08].
    Zmienna - konstrukcja programistyczna posiadająca trzy podstawowe atrybuty: symboliczną nazwę, miejsce przechowywania i wartość; pozwalająca w kodzie źródłowym odwoływać się przy pomocy nazwy do wartości lub miejsca przechowywania. Nazwa służy do identyfikowania zmiennej w związku z tym często nazywana jest identyfikatorem. Miejsce przechowywania przeważnie znajduje się w pamięci komputera i określane jest przez adres i długość danych. Wartość to zawartość miejsca przechowywania. Zmienna zazwyczaj posiada również czwarty atrybut: typ, określający rodzaj danych przechowywanych w zmiennej i co za tym idzie sposób reprezentacji wartości w miejscu przechowywania. W programie wartość zmiennej może być odczytywana lub zastępowana nową wartością, tak więc wartość zmiennej może zmieniać się w trakcie wykonywania programu, natomiast dwa pierwsze atrybuty (nazwa i miejsce przechowywania) nie zmieniają się w trakcie istnienia zmiennej. W zależności od rodzaju języka typ zmiennej może być stały lub zmienny. Konstrukcją podobną lecz nie pozwalającą na modyfikowanie wartości jest stała.




    Reklama