• Nie Znaleziono Wyników

" W informatyce strukturami danych nazywamy takie sposoby przechowywania i organizowania porcji informacji, które sprzyjają ich efektywnemu wykorzystaniu w ramach projektowanego rozwiązania. Różne z tych form udostępniają zawartość zróżnicowanym typom aplikacji, stąd wybór odpowiedniej reprezentacji danych nie jest trywialny również z punktu widzenia języków programowania. W tym podrozdziale postaramy się wyliczyć niektóre podstawowe struktury i ich właściwości posługując się do tego celu przykładami z języka Processing jako przeznaczonego i szczególnie nadającego się do kreatywnego stosowania w sztuce nowych mediów i różnego rodzaju projektach spod znaku digital humanities. Dodatkowo, w późniejszych częściach pracy będę się od czasu do czasu wspierał przykładami z JavaScriptu oraz C++ i Javy jako jednych z najpopularniejszych aktualnie języków programowania na świecie (samym językom i ich właściwościom poświęcony został rozdział A 5 tej dysertacji)."

"

Język programowania Processing!

"

" P r o c e s s i n g - j a k p i s z ą j e g o t w ó r c y s t r o n i e i n t e r n e t o w e j p r o j e k t u (www.processing.org) - to język programowania, darmowe zintegrowane środowisko developerskie (IDE) oraz społeczność on-line stworzone jako narzędzie dla twórców sztuki elektronicznej. "

"

" Processing powstał w ramach Aesthetic and Computation Group (ACG) w przy MIT Media Lab. Jego oryginalnymi twórcami są Ben Fry i Casey Reas ale projekt „uwolnił się”

spod opieki autorów i jest rozwijany przez społeczność."

"

" Język pozwala na pisanie kodu zarówno w paradygmacie proceduralnym jak i obiektowym oraz jest multiplatformowy."

"

" Cechą charakterystyczną Processingu jest nastawienie na uproszczenie złożonych konstrukcji programistycznych oraz szybkie uzyskiwanie efektów wizualnych lecz bez pozbawiania narzędzia właściwości „porządnego” języka programowania – pomimo bowiem swojego edukacyjnego rodowodu rozwinął się on do postaci pełnowartościowego narzędzia programistycznego."

"

" Tablice (array) i tablice mieszające (hash table)"

" Pierwszym i zarazem jednym z najpopularniejszych typów danych jest tablica (ang.

array). Funkcjonuje ona zarówno jako struktura danych jak i kontener, w którym poszczególne komórki są dostępne za pomocą kluczy (nazw, numerów). Tablice mogą być jednowymiarowe (ciąg), dwuwymiarowe (macierz) lub wielowymiarowe. W języku Processing tablice inicjuje się poleceniem [ ] podając nazwę tablicy oraz jej strukturę i typ przechowywanych informacji np.:"

"

int[] liczba = new int[2]

"

tworzy jednowymiarową tablicę o dwóch elementach i nazwie „liczba”, zawierającą liczby całkowite (integer)(

"

liczba [0] = 1; liczba [1] = 2

"

przypisuje elementowi tablicy „liczba” o indeksie 0 wartość 1 i elementowi o indeksie 1 wartość 2. "

"

" Oczywiście na tablicach możemy wykonywać bardziej złożone operacje.

Realizować działania arytmetyczne na ich zawartości, umieszczać w pętlach etc."

"

" Krotki [tuple, record]"

" To struktury danych będące realizacjami n-ki matematycznej, czyli pewnego uporządkowanego ciągu wartości. Przykłady krotek to np."

"

Zwierz = („kot”, „mainecoon”, 5)

"

Do takiej konstrukcji mo1emy odwo#a0 si. przez podanie jej indeksu. Na krotkach równie1 mo1emy realizowa0 operacje logiczne i arytmetyczne. W j.zyku Processing tak$ struktur.

mo1emy sobie zorganizowa0 poprzez stworzenie klasy z przypisywan$ list$ parametrów np.:"

"

class xy {!

float x,y; xy(float _x, float _y)

{x=_x; y=_y;}}

!

! Tablice mieszaj"ce [hash table]!

! Ta struktura danych daje mo#liwo$% realizowania uk&adów w rodzaju tablic asocjacyjnych, które s&u#" do przechowywania informacji szybkiego dost'pu. Najpro$ciej rzecz ujmuj"c hash table dzia&a podobnie do zwyk&ej tablicy z tym, #e umo#liwia stosowanie funkcji mieszaj"cych (czasami mówi si' haszuj"cych), które &"cz" indeks tablicy z zadanym kluczem.!

!

( !

!

Ilustracja 9: Zastosowanie tablicy haszuj"cej na przyk&adzie ksi"#ki telefonicznej. !8

!!! !!

!

( z ( 70 257

)ród&o: http://upload.wikimedia.org/wikipedia/commons/thumb/7/7d/Hash_table_3_1_1_0_1_0_0_SP.svg/

8

315px-Hash_table_3_1_1_0_1_0_0_SP.svg.png (dost'p: 1.03.2014).

! Reprezentacja grafu [graph]!

! ! Graf stanowi specyficzny sposób uporządkowania i opisu relacji między elementami. Najczęściej pojawia się tu użycie macierzy i listy sąsiedztwa. Formalizacja wygląda następująco: jeśli to graf, V zbiór wierzchołków, E zbiór krawędzi - to możemy taki układ indeksować przypisując wierzchołkowi . Zbiór wierzchołków będzie miał postać: . Wierzchołki mogą być reprezentowane za pomocą różnorodnych struktur danych. Jest to bardzo wygodna i łatwa do zoperacjonalizowania koncepcja reprezentowanie założonych relacji. !

! !

W Processingu możemy zdefiniować graf za pomocą klasy:!

g = new Graf();

!

Następnie jego wierzchołki i krawędzie za pomocą tablic (array):!

Node[] nodes = new Node[numerOfNodes]

!

A dalej wywoływać je do dalszego przetwarzania za pomocą funkcji w rodzaju!

Node[] nodes = przypisane.wartosci[x][y].getAdjacentNodes(1,0);

!

Oczywiście elementy tablicy trzeba najpierw wygenerować za pomocą np. pętli for.


! !

! Dzięki podobnym operacjom możemy przedstawiać nasze dane w postaci grafu i!

generować ich wizualizacje np. takie jak na ilustracji poniżej.!

Ilustracja 10: Przykładowa struktura grafowa !9

!

G=< V,E >

i∈0...|V | −1 v0,...,v|v|−1

źródło: http://stackoverflow.com/questions/10874024/data-structure-and-algorithm-for-circular-graph

9

(dostęp 1.03.2014)

! Drzewo [tree]!

! Drzewo to struktura danych, która mając swoje źródło w matematyce nadaje się bardzo dobrze do reprezentowania hierarchii dowolnych elementów (danych). Podobnie jak graf składa się ona z wierzchołków (węzłów/nodes) oraz krawędzi, które łączą je między sobą. W niepustym drzewie wyróżniany jest jeden element – korzeń. Poziom węzła jest określany przez ilość krawędzi od niego do korzenia. Wysokość jest wyznaczana przez odległość od korzenia do najdalszej krawędzi (gałęzi). Wierzchołki niższe w hierarchii są nazywane dziećmi węzła, jeśli takowy nie posiada elementów niższych – jest liściem.!

Ilustracja 11: Przykładowa struktura drzewiasta z opisem !10

!!

! Obiekt [object]!

! To jedno z najważniejszych pojęć dla naszych dalszych rozważań. Dokładne jego wyjaśnienie znajduje się w rozdziale dotyczącym paradygmatów oprogramowania (dokładnie zaś kiedy mowa jest właśnie o paradygmacie obiektowym [object oriented paradigm] ). Na potrzeby aktualnego wywodu wystarczy opisanie obiektu w sensie 11 programistycznym jako struktury zawierającej dane oraz metody rozumiane jako procedury służące do realizowania konkretnych zadań. Obiekty są swego rodzaju samodzielnymi „bytami” w specyficznej ontologii języków programowania. Waga tego pojęcia dla dalszej części rozważań poświęconych metodom konstruowania i sposobom działania oprogramowania polega na specyficznym zwrocie jaki dokonał się za sprawą OOP. Chodzi mianowicie o fakt, że programy w takim ujęciu nie są już tylko nierozłącznymi zbiorami danych i procedur (do manipulacji danymi) lecz zyskują swoistą autonomię, stają się elementami „świata” konstruowanego za pomocą opisu informatycznego.


źródło: http://img.sparknotes.com/figures/B/becc4efefde067dce51a326cca23c5f0/treedefinition.gif (dostęp

10

1.03.2014)

vide: A 4 Paradygmaty programowania

11

A 2.1.1 Przykłady prostych programów artystycznych i narzędzi