Najlepsze pytania
Chronologia
Czat
Perspektywa
Selekcja (programowanie)
Z Wikipedii, wolnej encyklopedii
Remove ads
Selekcja w programowaniu, czyli odniesienie do składowej – zawarta w kodzie źródłowym operacja odniesienia (odwołania, selekcji, wyboru) do pewnej składowej struktury danych[1][2]. Takie odwołanie umożliwia:
- przypisanie składowej określonej wartości
- odczytanie (pobranie) wartości przechowywanej w składowej
- wywołanie podprogramu stanowiącego składową.
Sposoby odniesienia
W językach programowania stosuje się następujące sposoby odniesienia do składowych struktur[1][2]:
- desygnator
- pomijanie nazwy struktury, w przypadku stosowania unikatowych identyfikatorów składowych
- instrukcja wiążąca
- dodatkowa nazwa dla składowej
- słowo określające właśnie definiowaną strukturę.
Struktury danych
W różnych językach programowania istnieje możliwość definiowania w kodzie źródłowym i używania struktur danych, składających się z pól (zmiennych) różnych typów, oraz ewentualnie (w przypadku klas), także metod (podprogramów), wykonujących określone operacje na definiowanej strukturze i komunikacji z otoczeniem.
Typowe struktury danych, do których stosuje się selekcje, to m.in.:
- struktura[3][4][5], rekord[6][7][8][9]
- unia[3][4][5], rekord z wariantami[6][7][8][9]
- klasa, typ obiektowy[4][7][10]
- rekord bazy danych[11].
Oprócz powyższych, typowych struktur danych, selekcje mają zastosowanie również w przypadku definiowania odrębnych jednostek programowych, takich jak np. moduły, biblioteki, pakiety, wyliczenia, czy przestrzenie nazw, w celu wskazania właściwego elementu, reprezentowanego w kodzie źródłowym za pomocą pewnego identyfikatora, który to identyfikator może odnosić się do różnych elementów zdefiniowanych w odrębnych jednostkach. Selekcja umożliwia wybór elementu z konkretnej jednostki i jest stosowania w przypadku wystąpienia konfliktów nazw (jednakowych identyfikatorów)[7][10].
Remove ads
Elementy składowe
Jak wyżej wspomniano struktura danych może zawierać następujące rodzaje składowych[1][7][4]:
- pola
- metody (dla klas, obiektów).
Elementy składowe struktury mogą być rozmieszczone w pamięci[1]:
- jedna składowa za drugą[3][7]
- jedna składowa za drugą, ale z rozmieszczeniem od określonego miejsca w pamięci, np. granicy słowa[12]
- począwszy od tego samego miejsca w pamięci – adresu (unie i pola wariantowe)[7][4].
W rozpatrywanym kontekście, zasygnalizowany powyżej podział składowych i ich sposób rozmieszczenia, nie ma wpływu na sposób specyfikacji operacji selekcji. Jednakże pewne przypadki szczególne limitują możliwość odniesienia do pewnych składowych, np. w polach wariantowych, gdy zapisany aktualnie rekord posiada atrybuty dla innego wariantu[8].
Bardzo ważną zasadą jest możliwość zagnieżdżania struktur danych, tzn. pole pewnej struktury może stanowić również strukturę danych[12][2]. Takie zagnieżdżanie, we współczesnych systemach programowania jest niemal nieograniczone[1]. Oznacza ono stosowanie wielokrotnych desygnatorów pól, przy odwołaniu do pól najbardziej zagnieżdżonych w hierarchii struktur[1][10].
Miejsce stosowania
Zasadniczo selekcje stosuje się wewnątrz kodu definiującego określony algorytm. Selekcje jednak muszą także występować w przypadku deklaracji i definicji. Takie konstrukcje spotyka się głównie w tych językach, w których składnia umożliwia oddzielenie deklaracji pewnej struktury (klasy, pakietu itp.), od definicji poszczególnych składowych (metod), w których to definicjach umieszcza się selekcję, do której klasy dana metoda przynależy[4][8].
Remove ads
Przegląd selekcji
Podsumowanie
Perspektywa
Desygnator pola
Desygnator pola; operator selekcji; odniesienie, odwołanie do składowej; operator wyboru; to operator lub symbol leksykalny zdefiniowany w określonym języku programowania, umożliwiająca w kodzie źródłowym odniesienie do pola lub metody, stanowiącego składową pewnej, zdefiniowanej danej strukturalnej. Zwykle jest to podstawowy sposób selekcji składowej. Występuje w każdym języku programowania wysokiego poziomu, w którym występują struktury danych wskazane wyżej. Polega na specyfikacji poszczególnych poziomów hierarchicznej struktury zagnieżdżenia danych, za pomocą odpowiedniego symbolu lub operatora.
Zalety:
- jednoznaczność jawnej i pełnej specyfikacji hierarchii
Wady:
- przy wielokrotnych zagnieżdżeniach zapis odwołania może być bardzo długi
- nużące i podatne na błędy zapisywanie takich odwołań
- zaciemnianie kodu źródłowego.
Najczęściej stosowanym desygnatorem jest kropka, np. w językach Pascal[6][7] , C[3][4][5] , C++[4] , PL/I[12] , Ada[8] , Modula-2[9] , Visual Basic[10] i wielu innych.
Przykład w języku Visual Basic for Applications[10] (porównaj z instrukcją wiążącą):
Selection.Font.Bold = MBold
Selection.Font.Italic = MItalic
Selection.Font.Underline = MUnderline
Selection.Font.Spacing = MSpacing
Selection.Font.Size = MSize
Instrukcja wiążąca
Ten sposób stosowany jest w takich języka jak np. Ada[8], Pascal[6][7], Modula-2[9], Visual Basic[10].
Zalety:
- zwięzłość zapisu
- strukturalność zapisu
- jawna specyfikacja, że w danych fragmencie kodu występuje skrócone odwołanie do składowych
Wady:
- trudności w analizie kodu przez człowieka
- konieczność stosowania desygnatorów w danym fragmencie przy kilku strukturach o składowych z identycznymi nazwami.
Przykład w języku Visual Basic for Applications[10] (porównaj z desygnatorem pola):
With Selection.Font
.Bold = MBold
.Italic = MItalic
.Underline = MUnderline
.Spacing = MSpacing
.Size = MSize
End With
Należy nadmienić, że powyższy zapis nazw pól w instrukcji wiążącej, polegający na poprzedzeniu identyfikatora składowej desygnatorem (w tym przypadku kropką), jest specyficzny dla systemu Visual Basic. Wiąże się on z wyborem przez programistę składowej, z listy składowych, która otwiera się automatycznie po wprowadzeniu, w edytorze tego systemu programowania, desygnatora. W językach takich jak Pascal[6][7] czy Modula-2[9], nie poprzedza się desygnatorem, w instrukcji wiążącej, identyfikatora składowej struktury wyspecyfikowanej w nagłówku instrukcji wiążącej.
Słowo kluczowe
Ten rodzaj selekcji, dzięki swojej składni, kładzie nacisk na pole jako ważniejszy element w porównaniu do całej struktury[1].
Zalety:
- jednoznaczność odwołania
Wady:
- niewygodny zapis.
Przykłady:
Pomijanie nazwy struktury
Rzadko występujący sposób odwołań (np. PL/I[12], COBOL[14])[1]. Polega on na podawaniu samej nazwy pola, nie poprzedzonej nawą struktury, do której pole przynależy. Jest to forma niejawnej specyfikacji selekcji, krytykowany jednak w literaturze przedmiotu za wady znacznie przewyższające zaletę zwięzłości zapisu[1].
Zalety:
- zwięzłość zapisu
Wady:
- konieczność znajomości deklaracji wszystkich struktur, tak aby tworzyć unikatowe identyfikatory także dla składowych
- co również oznacza brak możliwości stosowania przy zagnieżdżeniu w strukturze więcej niż jednej, jednakowej struktury podrzędnej, za względu na powtarzanie się identyfikatorów
- trudności przy zmianie kodu.
Nazwa składowej
To rozwiązanie polega na wprowadzenie dodatkowej deklaracji identyfikatora dla wybranego odwołania do składowej. Zastosowane zostało m.in. w języku Ada[8][1], COBOL[14][1], Euclid[1].
Zalety:
- zwięzłość zapisu
- jawna specyfikacja, wyprzedzające selekcji skróconej
Wady:
- konieczność dodatkowej deklaracji
- zwiększenie ilości identyfikatorów w kodzie.
odw: '''renames''' str.str_wewn.pole;
Słowo odwołujące do definiowanej struktury
Ten sposób selekcji dotyczy definiowana metod przynależnych do określonej klasy. W kodzie takiej definicji można użyć określonego w składni słowa identyfikującego definiowaną klasę, bez specyfikacji literalnej nazwy klasy. Stosowane są słowa sugerujące takie właśnie wskazanie:
Self
: Turbo Pascal[7], Smalltalk[1]this
: C++[4]Me
: Visual Basic[10].
Remove ads
Selekcje modułów
Definicja obiektu kodu (np. zmiennej, podprogramu itp.) o określonym identyfikatorze, w pewnej, niezależnej, odrębnej jednostce (module, bloku itp.), może spowodować albo konflikt nazw z inną równorzędną jednostką, albo przesłonięcie nazwy w jednostce zagnieżdżonej. Każde odwołanie do identyfikatora spowoduje odwołanie do obiektu lokalnego. W celu umożliwienia odwołania do obiektu zewnętrznego, lub jawnego wskazania, o element z której jednostki programowej chodzi, stosuje się selekcje, w postaci desygnatora, analogicznie jak w odniesieniu do struktur danych. Takie rozwiązanie dostępne jest między innymi w Turbo Pascalu[7] i Visual Basicu, w tym także w VBA[10], a w języku Python obowiązkowe.
Przykład w Turbo Pascalu[7]:
uses Crt;
begin
{ brak selekcji spowodowałby użycie procedury writeln modulu Crt }
System.writeln;
…
end.
Remove ads
Selekcje w językach programowania
Remove ads
Zobacz też
Przypisy
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads