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ę... |