W środowisku RAD Studio XE2 użytkownicy mają do wyboru dwie platformy komponentowe. Oprócz VCL-a znanego z wcześniejszych wersji Delphi i C++ Buildera, pojawiła się nowa platforma komponentowa FireMonkey.
Platforma FireMonkey powstała wychodząc naprzeciw oczekiwaniom programistów o kompilacji aplikacji z jednego kodu dla wielu systemów operacyjnych. Przyjrzyjmy się zatem tym platformom oraz ich wzajemnemu współdziałaniu.
VCL - Visual Component Library
Biblioteka VCL powstała z myślą o szybkim tworzeniu aplikacji (RAD - Rapid Application Development) poprzez wielokrotne użycie tych samych fragmentów kodu (komponentów). Biblioteka udostępnia szereg gotowych komponentów - od najprostszych jak formatki i przyciski, poprzez komponenty połączeniowe do baz danych, komponenty raportujące aż do serwerów obsługujących protokoły internetowe i serwerów aplikacyjnych. Taka budowa biblioteki VCL pozwala na użycie „gotowców” poprzez wyjmowanie potrzebnych funkcjonalności „z pudełka” i składanie z nich szkieletu aplikacji.
Przyglądając się dokładniej VCL-owi można zauważyć, że jest on mocno zintegrowany z systemem operacyjnym Windows, a część komponentów (np. przyciski, okna dialogowe) jest brana bezpośrednio z bibliotek systemowych. Programując można używać bezpośrednio API Windowsa.
FireMonkey – biblioteka „cross-platform”
Ponieważ systemy operacyjne różnią się znacznie pomiędzy sobą, stworzenie środowiska które z tego samego kodu będzie tworzyło kod natywny dla różnych systemów operacyjnych jest bardzo trudne. Stąd narodziła się idea, aby korzystając ze standardu kart graficznych rozdzielić obsługę grafiki od kompilacji kodu „niegraficznego”. Zdecydowano się powierzyć obsługę grafiki w tworzonej aplikacji karcie graficznej (a nie procesorowi) – tak jakma to miejsce w przypadku gier komputerowych. Dzięki temu zabiegowi, kompilacja kodu pod różne systemy operacyjne stała się znacznie prostsza.
Biblioteka FireMonkey powstała z myślą o kompilacji pod różne systemy operacyjne. Grafika jest tworzona z wykorzystaniem technologii Direct2D, Direct3D, OpenGL, a komponenty niegraficzne i cały kod są kompilowane (cross-compiling) przez kompilatory dedykowane poszczególnym platformom sprzętowym. W wersji RAD Studio XE2 mamy możliwość kompilacji pod Windows 32-bitowy, Windows 64-bitowy (tylko Delphi) oraz OSX (Macintosh)
Embarcadero pracuje nad kolejnymi kompilatorami, które poszerzą listę obsługiwanych systemów operacyjnych.
FireMonkey – możliwości
Język programowania się nie zmienił – możemy pisać zarówno w Delphi jak i C++. Co więcej, w FireMonkey znajdziemy takie same komponenty(podstawowe, Indy, bazodanowe ) jak w przypadku klasycznej biblioteki VCL, ale też wiele innych, nowych elementów. Dzięki temu, każdy programista przyzwyczajony do VCL-a bez trudu, od razu poradzi sobie z FireMonkey.
Istotną zmianą w stosunku do VCL-a jest bogactwo graficzne FireMonkey. Wykorzystując możliwości oferowane przez kartę graficzną możemy w prosty sposób animować obiekty, każdy obiekt posiada „widzialność” (od 0 do 1) oraz każdemu komponentowi możemy przypisać efekty wykorzystujące „shaders” (np. cień, rozmycie, odbicie, zwielokrotnienie, sepia, itp.). Animacje i efekty są obiektami, a jako takie mają własne atrybuty i zdarzenia – są w pełni programowalne. Cały interfejs użytkownika jest wektorowy, a przez to łatwo skalowany. Projekty mogą być budowane jako High Definition (2D, wysoka jakość) lub 3D (trójwymiarowa „scena” ). Jeśli przyjrzymy się tej funkcjonalności bliżej, zauważymy że nie ma sztywnego podziału na 3D i HD a jedynie dla wygody programistów podzielono szablon startowy na dwuwymiarowy (HD) i trójwymiarowy (3D), a obiekty płaskie i przestrzenne można ze sobą dowolnie łączyć.
Ponieważ platforma została wprowadzona na rynek we wrześniu 2011, rynek komponentów „firm trzecich” dla FireMonkey jest jeszcze w fazie rozwoju. Jednak warto zauważyć, że wszystkie liczące się firmy tworzące komponenty do RAD Studio np. FastReport pracują nad komponentami dla tej platformy.
Kompatybilność i migracja projektów pomiędzy VCL a FireMonkey
W jednym projekcie nie można ze sobą łączyć dwóch różnych platform komponentowych – projekty mogą być tworzone albo w VCL albo w FireMonkey. Natomiast, ponieważ obydwie platformy używają tych samych języków, pliki niezawierające grafikiczy bezpośrednich odniesień do VCL i Windows API (np. moduł obliczeniowy) mogą zostać przeniesione do FireMonkey.
Embarcadero nie wspiera bezpośrednio „konwersji” projektów pomiędzy platformami zalecając stworzenie GUI od nowa oraz przeniesienie plików pas. Aczkolwiek, użytkownik planujący migrację może skorzystać z projektu Mida (http://midafiremonkey.wordpress.com/), który wspiera tego rodzaju migrację i pozwala konwertować standardowe komponenty graficzne projektów VCL na ich odpowiedniki w FireMonkey.
Używać VCL czy FireMonkey? Przyszłość VCL-a.
Pojawienie się platformy FireMonkey nie wyklucza z gry platformy VCL. David Intersimone na konferencji w Warszawie powiedział, że „platforma VCL przestanie być rozwijana dzień po tym jak Microsoft przestanie sprzedawać Windows”. Przez wiele lat użytkownicy Delphi i C++ Buildera tworzyli oprogramowanie w VCL dla systemów Windows dostarczając różnej wielkości rozwiązania. Przeniesienie dużych projektów na platformę FireMonkey może być bardzo kosztowne, a przez to nieopłacalne z biznesowego punktu widzenia. VCL jest i będzie cały czas dostarczany programistom w celu umożliwienia dalszego rozwoju takich aplikacji .Z drugiej strony, komponenty niewizualne są przecież pisane w Delphi lub C++ i ich kod w dużym stopniu pokrywa się dla obydwu platform, co redukuje koszt utrzymywania równoległych platform komponentowych. Dobrym przykładem jest technologia LiveBindigs, która powstała z myślą o FireMonkey, lecz została natychmiast „zaimportowana” do VCL. Również wprowadzona w XE2 funkcjonalność motywów tj. korzystania z „schematów wyglądu” jest dostępna dla VCL i FireMonkey.
Zatem, której platformy używać? Nie ma konieczności przenoszenia projektów z VCL do FireMonkey. Istniejące projekty można dalej rozwijać w VCL, korzystając z dodatkowych udogodnień wprowadzonych w wersji XE2 jak kompilacja 64-bitowa, LiveBindings czy obsługa motywów. Jeżeli w projekcie istotną sprawą jest wieloplatformowość czy efektowniejsza grafika - warto zastanowić się nad migracją projektów do FireMonkey. Samej platformie FireMonkey też warto się przyjrzeć aby ją poznać i przy rozpoczynaniu nowych projektów świadomie zdecydować, która platforma będzie lepsza.
Przydatne linki
Opis FireMonkey oraz zmian w VCL wprowadzonych w RAD Studio XE2:
http://docwiki.embarcadero.com/RADStudio/en/What%27s_New_in_Delphi_and_C%2B%2BBuilder_XE2
Filmy prezentacji z CodeRage6 – kilkanaście filmów dotyczących FireMonkey, zmian w IDE oraz nowych technologii dostępnych w VCL i FM (LiveBindings, motywy, itp.): http://cc.embarcadero.com/coderage