Wczytywanie pliku konfiguracyjnego

W poniższym samouczku nauczycie się:

  1. wczytywania dowolnych fragmentów kodu w Smalltalku;
  2. wewnętrznej architektury brudnopisu (Workplace); który jest wbudowaną aplikacją ObjectStudio;
  3. technik programowania eksploracyjnego.

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. screenshot
Uruchamiamy przeglądarkę klas Object Studio. screenshot
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.) screenshot
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. screenshot
Kopiujemy "podejrzany" fragment do brudnopisu (Workspace) i modyfikujemy parametry. Na początek zakładamy, że parametr source może być napisem... screenshot
Wykonujemy zmodyfikowany kod akcją Insert z menu Smalltalk, aby zobaczyć wynik obliczenia. screenshot
Rezultat obliczeń wygląda bez zarzutu. screenshot
Pozostaje znaleźć sposób wczytywania pliku, też używany przez Workspace. screenshot
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?
screenshot
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. screenshot
Niestety zmienna nie jest inicjalizowana w żadnej z tych metod.
Jak to jest możliwe?
screenshot
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. screenshot
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... screenshot
Możemy szybko wyszukać najbliższą w hierarchii implementację tej metody przy użyciu akcji Local implementors... z menu Search. screenshot
Niestety źródło tej metody nie jest widoczne (najprawdopodobniej jest wbudowana w ObjectStudio lub bibliotekę systemową). screenshot
Zmuszeni do zmiany metody postępowania, szukamy klas związanych z plikami. screenshot
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. screenshot

Teraz próbujemy stworzyć w brudnopisie kod, który:

  1. tworzy obiekt klasy FileStream,
  2. wysyła do niej komunikat asString.

(UWAGA: zanim spróbujemy wczytać plik, należy go najpierw utworzyć - na przykład na biurku.)

screenshot
Potrafimy już zamienić plik na napis i potrafimy ewaluować napis. Połączony kod powinien zająć tylko jedną linijkę... screenshot