Żółw - wykres - obiekt
Żółw (turtle) w LOGO może zapamiętywać zmienne oraz wykonywać instrukcje i funkcje - jest aktywnym obiektem, jeśli użyjemy
nazewnictwa stosowanego powszechnie w programowaniu.
W dialekcie POOL każdy program jest funkcją (ciągiem instrukcji) głównego żółwia #first
.
Żółw #first
może tworzyć nowe żółwie, które mogą posiadać
własne zmienne, a także wykonywać swoje własne zadania-programy. Funkcje i zmienne, które są dostępne dla żółwi "potomnych" można określić
definiując klasy.
W POOL dostępna jest także uproszczona wersja żółwia: obiekt (object). Obiekty nie posiadają
reprezentcji graficznej i nie mogą obsługiwać zdarzeń związanych z grafiką (np. kliknięć myszy). Dzięki temu obiekty zajmują mniej pamięci,
są szybciej tworzone i szybciej wykonują polecenia.
Począwszy od wersji POOL 1.5 dostępny jest jeszcze jeden typ żółwia: wykres (plot). Wykres pozwala zwizualizować cały zbiór danych,
używając różnych stylów do wyświetlenia poszczególnych wartości wielowymiarowych danych. Każdy wykres posiada dwie specjalne zmienne globalne:
- :data
, przechowująca dane do wyświetlenia;
- :style
, która jest słownikiem właściwości używanych do narysowania wykresu.
Wykres może być rysowany w głównym lub dodatkowym oknie graficznym, zależnie od wartości argumentów konstruktora
wykresu. Właściwości okna graficznego można zmieniać przy pomocy zmiennej współdzielonej :pool_cfg
(dla okna głównego) lub :nazwa_canvas_cfg
(dla okien dodatkowych, gdzie nazwa
jest nazwą okna podaną jako argument konstruktora wykresu).
Przykład 1:
to spirala :s :c :length
let "a :c * sign :s
let "b abs :c
repeat :length [
fd :s rt :a
"a := :a * :b
]
(print who "skończył)
end
"t := newt
"u := newt
ht @ :t
ht @ :u
(spirala -2 1.006 450) @ :t
(spirala -2 (-1.004) 600) @ :u
spirala 2 0.99 100
Rezultat wykonania:
t1 skończył
first skończył
t2 skończył
W powyższym przykładzie wywołania instrukcji ht
oraz funkcji spirala
dla żółwi :t
i :u
są wykonywane
równolegle i nie wstrzymują wykonania programu żółwia #first
. Z tego powodu dla
każdego uruchomienia programu kolejność pojawiających się napisów "nazwa skończył" może być inna.
Przykład 2:
to spirala :p1 :p2 :deg
to fn [:a :p1] [:b :p2]
"data := (list array :a 0)
let "cfg thing word world "_canvas_cfg
let "t 0 let "s 0.1
do.while [
"t += :s
let "f :a * exp :b * :t
let "x (sign :deg) * :f * cos :t
let "y :f * sin :t
let "p array :x :y
let "d (distance :p last :data)
queue :data :p
if :d > 3 ["s := 0.5 * :s]
if :d < 1 ["s := 2 * :s]
] (abs :x < :cfg,"max_x && abs :y < :cfg,"max_y)
end
fn
setr 0
:style,"mode := "line
"tick := timer [rt :deg] 20
end
"w1 := (newp "Spirala $spirala 2 0.001 (-1)) (setxy 100 0) @ :w1
"w2 := (newp "Spirala $spirala 2 0.001 1) (setxy -100 0) @ :w2
Rezultat wykonania:
Obracające się wyresy spiral.
Zobacz także:
Klasy i dziedziczenie
Synchronizacja wielu obiektów
Spis treści