W poniższym samouczku nauczycie się:
Zauważamy, że okienko Workspace wykonuje fragmenty kodu Smalltalkowego zawierające zmienne lokalne. Spróbujemy obejrzeć jego kod i na tej podstawie zbudować metodę wczytywania pliku konfiguracyjnego. |
![]() |
Uruchamiamy przeglądarkę klas Object Studio. |
![]() |
Wpisujemy słowo Workspace nad listą klas, aby wyszukać klasy o nazwie zaczynającej się od tego słowa. (Mamy nadzieję, że będą takie klasy.) |
![]() |
Szukamy wśród metod takiej, która może odpowiadać za wykonywanie akcji Execute. W niej lokalizujemy fragment kodu, który może być odpowiedzialny za ewaluację i kopiujemy go. |
![]() |
Kopiujemy "podejrzany" fragment do brudnopisu (Workspace) i modyfikujemy parametry. Na początek zakładamy, że parametr source może być napisem... |
![]() |
Wykonujemy zmodyfikowany kod akcją Insert z menu Smalltalk, aby zobaczyć wynik obliczenia. |
![]() |
Rezultat obliczeń wygląda bez zarzutu. |
![]() |
Pozostaje znaleźć sposób wczytywania pliku, też używany przez Workspace. |
![]() |
Wracamy do przeglądarki klas i szukamy metody odpowiedzialnej za obsługę menu.
Jak widać przerzuca ona odpowiedzialność na metodę file: obiektu workspace. Czym jest ten obiekt? |
![]() |
W środkowym podokienku klikamy przycisk radiowy (radio button)) o nazwie Variables i wybieramy z listy zmienną o nazwie workspace. Widzimy wtedy listę metod w których zmienna jest używana. |
![]() |
Niestety zmienna nie jest inicjalizowana w żadnej z tych metod. Jak to jest możliwe? |
![]() |
Przypominamy sobie, że w poprzednim samouczku widzieliśmy już coś takiego. Kod generowany przez Designera inicjalizuje komponenty składowe w inny sposób, więc szukamy w metodach generowanych przez Designera... createItems i initializeBindings. |
![]() |
Wiedząc już, że zmienna workspace zawiera obiekt klasy FormClassFileEditor, szukamy w tej klasie metody file:. Niestety metoda ta nie jest implementowana w tej klasie... |
![]() |
Możemy szybko wyszukać najbliższą w hierarchii implementację tej metody przy użyciu akcji Local implementors... z menu Search. |
![]() |
Niestety źródło tej metody nie jest widoczne (najprawdopodobniej jest wbudowana w ObjectStudio lub bibliotekę systemową). |
![]() |
Zmuszeni do zmiany metody postępowania, szukamy klas związanych z plikami. |
![]() |
Dla każdej klasy szukamy metody konwertującej na napis. Jeżeli nie ma jej w klasie - szukamy w hierarchii po nadklasach. Wedle wszelkiego prawdopodobieństwa metoda powinna się nazywać asString. |
![]() |
Teraz próbujemy stworzyć w brudnopisie kod, który:
(UWAGA: zanim spróbujemy wczytać plik, należy go najpierw utworzyć - na przykład na biurku.) |
![]() |
Potrafimy już zamienić plik na napis i potrafimy ewaluować napis. Połączony kod powinien zająć tylko jedną linijkę... |
![]() |