Środowisko IDE Galileo wprowadzono w roku 2005 i od tamtej pory jest sukcesywnie wzbogacane o kolejne funkcjonalności wraz z każdą kolejną wersją. Podczas tworzenia Galileo jego twórcom przyświecała jedna generalna zasada: "Pozwolić programistom zaprojektować i dowolnie poustawiać ich środowisko pracy". IDE (ang.Integrated Development Environment) to zintegrowane środowisko programistyczne, które ma wspierać użytkownika, ułatwiać mu pracę i przyspieszać tworzenie kodu. Należy wyraźnie rozgraniczyć funkcje językowe, komponenty VCL i samo środowisko, bo o możliwościach budowanych aplikacji decydują język i komponenty, a o wygodzie pracy środowisko IDE. Doskonale to widać na przykładzie RAD Studio, gdzie interfejs Galileo obsługuje zarówno Delphi jak i C++Buildera, dostarczając im tych samych lub bardzo podobnych funkcji przyspieszających pracę programisty.
Rysunek 1. Środowisko Galileo.
Zobacz cały rysunek
[1] - wybór układu okien środowiska
[2] - okno struktury („Structure”)
[3] - inspektor obiektów („Object Inspector”)
[4] - zakładki głównego okna: Kod, Projektowanie, Historia
[5] - menadżer projektu („Project Manager”)
[6] - paleta komponentów („Tool Palette”)
Rysunek 2. Konto użytkownika na DevelopersNetwork. Podstrona zarejestrowane produkty.
Zobacz cały rysunek
W każdej kolejnej wersji środowiska umieszczane są usprawnienia zwiększające komfort i efektywność. Nowe i ulepszone funkcje powstają nie tylko na bazie pomysłów działu rozwoju firmy Embarcadero, ale są również proponowane przez użytkowników. Każdy z posiadaczy zarejestrowanych środowisk, ma stworzone elektroniczne konto Developers Network, dzięki któremu może umieszczać swoje propozycje w serwisie Quality Central Podczas rejestracji środowiska automatycznie jest zakładane konto na Developers Network, a wszystkie dane dotyczące owego konta, jego możliwości i zarejestrowanych produktów można sprawdzić logując się na to konto na stronie: http://members.embarcadero.com/
1.1 Personalizacja ustawień środowiska
1.2 Graficzny interfejs użytkownika (GUI)
1.3 Praca z kodem
1.4 Debugowanie
1.1 Personalizacja ustawień środowiska
Po uruchomieniu środowiska w pierwszej kolejności warto zwrócić uwagę na możliwości personalizacji wyglądu środowiska. Na początku zauważymy, że wszystkie okna są zadokowane, czyli poprzyczepiane do siebie i stanowią jedną dużą formatkę. Dla programistów pracujących w Delphi 7 lub w starszych wersjach jest to duża zmiana. Nie ma „pływających” po pulpicie okien. Oczywiście nie musi tak być, a odpowiada za to menedżer widoków (pole wyboru z rys. 1 oznaczone numerem 1). Po instalacji otrzymujemy trzy różne ustawienia okien: „Default Layout”, „Debug Layout”, „Classic Undocked”. Pierwszy jest domyślnym rozmieszczeniem okien dla trybu tworzenia aplikacji, drugi jest włączany podczas debugowania, a trzeci przywraca tryb znany z klasycznych wersji Delphi. Został on opracowany nie tylko z myślą o użytkownikach starszych wersji, ale również osób pracujących na kilku monitorach. W trybie dokowalnym środowiska Galileo możemy wszystkie okna przesuwać, dokować w wybranych miejscach, chować oraz włączać automatyczne ukrywanie po obydwu bokach ekranu (znacznik nr 2). Dzięki temu mechanizmowi mamy możliwość dostosowania wyglądu ekranu do indywidualnych potrzeb i upodobań programisty, a dzięki funkcji zapisywania ustawień "Layout'u" można zapisać te ustawienia, a nawet stworzyć kilka ustawień wybieranych w zależności od typu tworzonej aplikacji.
Personalizacja ustawień jest nie tylko atutem, ale rzeczą wręcz niezbędna, ponieważ liczba dostępnych okien wspomagających programistę jest bardzo duża. Rozwój środowiska powoduje, że w każdej kolejnej wersji pojawiają się nowe funkcjonalności, a istniejące są często ulepszane. Czasem są to drobne ulepszenia jak chociażby nowy interfejs wyszukiwania tekstu w kodzie (z podawaniem liczby odnalezionych dopasowań i prostą nawigacją „poprzedni”, „następny”), ale są to również rozbudowane funkcjonalności takie jak audyty kodu (funkcje automatycznie wyszukujące skomplikowane i trudne do znalezienia błędy lub składnie niebezpieczne).
Rysunek 3. Wyszukiwanie tekstu w kodzie aplikacji.
Zobacz cały rysunek
Do znanych okien jak inspektor obiektów („Object Inspector”), paleta komponentów („Tool Palete”), eksplorator klas („Class Explorer”) czy okna edytora kodu i projektanta formatek („VCL Form Designer”) dołączyły nowe okna, jak choć okno struktury („Structure”), eksplorator danych („Data Explorer”), czy okno historii. Więcej informacji o oknach i ich przeznaczeniu znajduje się w opisach poszczególnych funkcjonalności IDE.
Rysunek 13. Wyszukiwanie na palecie komponentów („Tool Palette”) po ”butt”.
Zobacz cały rysunek
1.2 Graficzny interfejs użytkownika (GUI)
Od powstania Delphi jednym z najważniejszych jego atutów było silne wsparcie dla tworzenia wizualnej części aplikacji. Cały czas środowisko Delphi dostarcza komponenty pozwalające łatwo tworzyć formatki zgodnie z najnowszymi trendami w budowie aplikacji. Wśród nowości w tym obszarze warto wymienić: menedżera akcji, pasek menu oparty o wstęgę znany z nowego pakietu Office, obsługę gestów ("Gesture") i budowane aplikacji wielo dotykowych („MultiTouch Apps”) wykorzystujące nowe mechanizmy Windows 7. Warto podkreślić także mechanizmy używania interfejsu tematycznego systemu Windows, oraz możliwość włączania trybów specjalnych, takich jak półprzezroczystość formatek w Windows Vista i Windows 7.
Rysunek 5. Nowoczesne GUI aplikacji – półprzezroczystość i menu typu „Ribbon”.
Zobacz cały rysunek
Nowości dotyczą nie tylko nowych komponentów, ale także dodano kilka funkcji usprawniających projektanta formatek („VCL Form Designer”). Najciekawszą jest funkcja "Designer Guildlines" do automatycznego wyrównywania obiektów do linii (tzw. "guildlines") wyznaczanych przez inne obiekty. Jest ona bardzo przydatna podczas rozkładania i wyrównywania obiektów na formatce.
Rysunek 4. Wyrównywanie komponentów na formatce z wykorzystaniem „guildlines”.
1.3 Praca z kodem
Sam wygląd aplikacji to tylko początek, bo wiadomo, że najczęściej używa się edytora kodu i okien z nim związanych, które do warstwy graficznego interfejsu aplikacji dodają funkcjonalność. To właściwie w edytorze kodu programiści spędzają najwięcej czasu i dlatego tutaj wprowadzono najwięcej udogodnień.
Podstawową nowością jest dodanie zakładki związanej z historią zamian w kodzie („History”). Aktualnie edytor kodu i projektant formatek są widoczne w jednym oknie, a przełącza się je za pomocą zakładek. Do tych zakładek (Code i Design) dodano trzecią „History”. Zakładka ta pozwala porównywać wersje historyczne kodu z aktualną lub historyczne między sobą. Teraz w momencie wprowadzenia zmian w prosty sposób można powrócić do ostatniej stabilnej wersji. Pliki historyczne są wykorzystywane także w oknie „Code” do zaznaczania zmian w kodzie - zielonym wprowadzonych podczas ostatniego zapisu plików oraz kolorem żółtym od ostatniej zapisanej wersji.
Rysunek 6. Kolorowe paski wskazują zmiany w kodzie od czasu ostatniego zapisu (żółte) oraz od czasu uruchomienia środowiska (zielone).
Zobacz cały rysunek
Dostępny jest również bardzo prosty i wygodny mechanizm wskazujący aktualne zmiany w kodzie. Po lewej stronie edytora kodu pokazują się zielone i żółte pionowe paski wzdłuż linii, które zostały zmienione. Kolor żółty oznacza, że zmiana w tej linii nie została zapisana na dysku, a kolor zielony oznacza, że jest to zapisana zmiana, ale wprowadzona „niedawno”, czyli w czasie aktualnego uruchomienia środowiska.
Kolejną ważną zmianą rozwój funkcji Insight, do których należą: Code Insight, Help Insight, Error Insight i najnowszy IDE Insight. Są to rozwiązania pozwalające szybciej wprowadzać kod, informujące o dokumentacji lub jakości kodu oraz pozwalające szybko wywołać dowolną funkcję bezpośrednio z okna kodu lub projektanta. Mechanizm Code Insight został wprowadzony jeszcze w klasycznych wersjach Delphi, ale od tego czasu ulega on ciągłemu ulepszaniu, na przykład o automatycznie domykanie bloków kodu lub wsparcie przy wprowadzaniu parametrów funkcji. Mechanizm IDE Insight jest nowością wprowadzoną w wersji 2010 - po naciśnięciu klawisza [F6] (lub [CTRL+.]) otwierane jest okno zawierające wszystkie funkcje i opcje środowiska, ale również komponenty, szablony i inne. Okno wzbogacone jest o wygodną funkcję wyszukiwania kontekstowego, dzięki czemu nawet początkujący programista może znaleźć to co szuka. Już nie musimy pamiętać, w której pozycji menu znajduje się potrzebna opcja, a nawet dokładnie pamiętać jej nazwy. Przykładowo chcąc wyłączyć tworzenie kopii zapasowych (historycznych) dla kodu źródłowego lub zmienić ilość zachowywanych wersji wystarczy uruchomić IDE Insight i wpisać „backup” (po każdej literze zostają tylko pasujące opcje), aby otrzymać dwie z opcji edytora „Create backup files” i „File backup limit”. Po wybraniu którejś z tych opcji otworzy się standardowe okno opcji środowiska, ale ustawione na zakładce zawierającej to co wybraliśmy. W efekcie wszystkie zmiany mogą być dokonywane w sposób prostszy (istotne dla początkujących) i bez odrywania rak od klawiatury (ważne dla zaawansowanych programistów).
Rysunek 7. IDEInside – wyszukiwanie w środowisku po „back”.
Zobacz cały rysunek
Nowością jest Code Formatter pozwalający „uporządkować” kod według upodobań programisty dzięki szczegółowym regułom ustalającym zasady stosowania wcięć, nowych linii, znaków białych, itp.. Funkcja ta jest przydatna do szybkiego porządkowania własnego kodu i wręcz niezastąpiona, gdy musimy pracować z czyimś kodem (np. przy pracy zespołowej), za pomocą jednej funkcji przekształcamy kod do własnego formatu, z którym pracuje się najbardziej komfortowo.
Rysunek 8. Opcje formatera kodu.
Zobacz cały rysunek
Wiele funkcji było udoskonalanych w kolejnych wersjach środowiska zgodnie z życzeniami programistów. Często te zmiany są drobne, jak wcześniej opisana zmiana sposobu wyszukiwania tekstu w kodzie programu, czy zarządzanie listą ostatnio otwieranych projektów, albo możliwość wyszukiwania kontekstowego komponentów na palecie narzędzi. Wszystkie one miały na celu uproszczenie pracy programisty, tak aby zmagał się z problemami programistycznymi, a nie środowiskiem. Równocześnie, aby użytkownicy wcześniejszych wersji nie czuli się wyobcowani istnieje możliwość pracy ze środowiskiem w trybie "rozdokowanym" oraz ustawienia klasycznej palety komponentów u góry ekranu (w menu View\Toolbars\Component).
Podczas pracy z środowiskiem Galileo warto posługiwać się skrótami klawiszowymi. Listę najpopularniejszych skrótów można pobrać ze strony:
1.4 Debugowanie
Oprócz tworzenia kodu niezwykle ważne jest jego debugowanie, bo mawiają mędrcy „nie ma programu bez błędów, są tylko niedostatecznie przetestowane”. O wadze procesu debugowania świadczy chociażby fakt, że podczas jego wykonywania środowisko przełącza się w dedykowany do tego celu widok „Debug Layout”, który zawiera okna przydatne w tym procesie, takie jak „Watch List”, „Call Stack” itd. Również aplikacja budowana do celów wyszukiwania błędów zawiera wkompilowane dużo dodatkowych informacji, dlatego a w menedżerze projektu są domyślnie wprowadzono dwie konfiguracje budowy: „Release” (bez informacji dla debuggera) i ”Debug” (z dodatkowymi informacjami).
Rysunek 12. Menedżer projektu („Project Manager”). Pliki projektu, typy kompilacji, pliki dodatkowe.
Zobacz cały rysunek
Przy okazji warto wspomnieć, że nowy menedżer projektu („Project manager”) pozwala tworzyć własne konfiguracje ustawień z którymi budowane („build”) są pliki exe. Domyślnie otrzymujemy dwa zestawy konfiguracji: „Release” i ”Debug”, które możemy modyfikować, ale możemy też dodawać swoje. Wcześniej każdorazowo należało wejść do menu i ręcznie pozmieniać opcje przed kompilacją, a teraz możemy zapisać wybrane ustawienia i odpowiedni build bez wychodzenia z okna głównego.
Rysunek 10. Okno wątków („Thread Status”). Możliwości zatrzymywania i wstrzymywania poszczególnych wątków.
Zobacz cały rysunek
Bardzo ważnym elementem przy testowaniu aplikacji są tzw. pułapki (breakpoints). Pod oknem z kodem znajduje się okno z zakładką „Breakpoints list” w którym możemy zarządzać pułapkami. Określenie "zarządzać" jest tutaj celowe, bo od dawna możliwości związane z breakpoint'ami wyszły poza samo ich włączenie na bocznej listwie okna kodu. Breakpoint'y można grupować, aktywować i dezaktywować pojedynczo i grupami, wybierać wątek w którym mają działać, liczbę przejść zanim break point zadziała oraz przesuwać. Obok zakładki z breakpoint'ami znajduje się zakładka „Thread list” która pozwala na zarządzanie wątkami. Wątki na potrzeby debugowania możemy nazywać, a później mamy możliwość ich wybiórczego zatrzymywania i uruchamiania.
Rysunek 9. Własciwości pułapek (breakpoints). Wybór wątku.
Zobacz cały rysunek
Kolejne dwa okna w trybie debugowania to „Local Variables” i „Watch List”. Pierwsze z okien wyświetla stan lokalnych zmiennych, a drugie pozwala obserwować, a także zmieniać wybrane zmienne. Dzięki nim podczas debugowania mamy cały czas podgląd zmiennych lokalnych, np. z procedury oraz możliwość śledzenia zmiennych globalnych, a także ich zmiany w miarę potrzeb. Możliwość zmian wartości zmiennych podczas pracy aplikacji pozwala zaoszczędzić dużo czasu podczas testowania aplikacji, bo zamiast wymuszać ścieżki krytyczne w całym systemie możemy je „zasymulować” zmieniając zmienne przed wywołanie testowanej procedury.
Niektóre zmienne są trudne do debugowania przez samego programistę, jak typ TDateTime, TStringList czy obiekty. Jest to związane z trudnością we właściwej interpretacji wyświetlanej wartości zmiennej. Z tych powodów wprowadzono wizualizatory, które pomagają „lepiej” zobrazować zmienne. Typy proste są konwertowane do postaci „strawniejszej” dla prgramisty, przykładowo dla TDateTime wizualizator wyświetla wartość w postaci „daty i czasu” zamiast liczby zmiennoprzecinkowej. Dla typów złożonych są budowane specjalne „formatki” pozwalające pokazać szczegółowo złożoną zmienną zamiast bardzo długiego tekstu.
Rysunek 11. Wizualizatory. Zmienne: data - wizualizator dla TDateTime i SL
- wizualizator dla TStringList.
Zobacz cały rysunek