Platforma Java a technologie .Net

W najnowszym języku Microsoftu można skorzystać z uproszczonej składni odwoływania się do właściwoś-ci, tak jak w Visual Basicu czy Delphi. W Javie trzeba jawnie wywoływać metody Set i Get; w C# można skorzystać ze znacznie krótszej składni "z kropką". Indeksatory w C# odpowiadają niemal zupełnie koncepcji wektorów w Javie. Jednak w połączeniu z właściwościami skracają składnie, zwłaszcza przy poruszaniu się po rozbudowanym drzewie obiektów.

Java jest językiem obiektowym, jednak niektóre typy proste nie są obiektami. W C# wprowadzono mechanizm boxowania, gdzie typ prosty może być obiektem. Jest umieszczany w odpowiednim "pudełku, jeżeli tylko w kodzie nastąpi próba odwołania np. do jakiejś metody. Normalne operacje arytmetyczne są natomiast wykonywane szybko, tak jakby liczba nie była obiektem. Java zaś odziedziczyła pewne niekonsekwencje po C++.

W C# zostały znacznie uproszczone mechanizmy, pozwalające na pisanie aplikacji wielowątkowych. To, co w Javie jest realizowane na poziomie klas (np. Runnable), to w C# jest wspierane dodatkowo atrybutami (także klasy bazowe realizujące wielowątkowość są znacznie prostsze).

Microsoft twierdzi, że jedną z przewag .Net Framework jest możliwość tworzenia aplikacji w wielu różnych językach, z łatwą wymianą parametrów, dziedziczeniem klas, które powstały w innym języku programowania. Nie można jednak zapominać, że jedną z części .Net Framework jest CLS - biblioteka "typów" danych, która pośrednio ogranicza możliwości języka. Ű Ű Innymi słowy to, co określony język udostępnia, musi być wyrażone przy użyciu CLS, a tylko C# jest językiem, który pozwala w pełni skorzystać z możliwości, jakie zapewnia CLS. Na przykład nie jest możliwe w Visual Basic.Net napisanie kodu wykorzystującego wskaźniki.

Sun poinformował, że prawdopodobnie powstanie środowisko IDE Forte, w którym będzie można pisać zarówno aplikacje w C/C++, jak i Javie (obecnie dostępne Studio One jest zintegrowanym IDE dla C++ i Fortrana). W zapowiedziach kolejnej wersji Java Development Kit jest planowane wsparcie dla debuggera (Java Platform Debugger Architecture), w którym bytecody powstają na podstawie kodu źródłowego, napisanego w języku innym niż Java, a który został np. przetłumaczony na Javę.

Z kolei Microsoft opracował pakiet pozwalający na przenoszenie rozwiązań powstałych w Javie do .Net. Zestaw programistyczny JUMP zawiera J# (kompilator Javy) do MSIL, narzędzie, które konwertuje kod źródłowy Javy do C#, a także konwerter plików binarnych, przekształcających bytecody Javy na MSIL.

Awantura o delegaty

Delegaty są wskaźnikami do funkcji. Mogą być wykorzystywane np. do definiowania procedur obsługi zdarzeń czy przechwytywania informacji zgłaszanych z innych modułów programu. Dzięki delegatom w C# wystarczy użyć składni: obiekt.zdarzenie += naz-wa funkcji obsługującej zdarzenie. Chcąc natomiast obsłużyć zdarzenie w Javie, zwykle należy skorzystać z zagnieżdżonej klasy i zdefiniować odpowiednią klasę typu Listener.

Jeżeli przyjąć, że proces między Sun Microsystems a Microsoftem dotyczy kwestii technicznych, to główną kwestią sporną są delegaty. Tak naprawdę, gdyby Sun zgodził się na rozszerzenie Javy o ten mechanizm, prawdopodobnie C# ani .Net w ogóle nigdy by nie powstały. A tak Microsoft opracował ten mechanizm samodzielnie.

Sun wprawdzie pokazał, jak można zrealizować mechanizm delegatów bez wykorzystywania niestandardowych rozszerzeń języka Java, ale przykładowy minimalny kod ma ponad 1264 bajty i zawiera pomocniczą klasę korzystającą z mechanizmów java.lang.reflect, mającą 37 linii. Zaś przy użyciu delegatów jest to tylko jedna linia kodu.

Atrybuty a opis w XML

We współczesnych aplikacjach, obok właściwego kodu źródłowego, znajduje się duża liczba tzw. metadanych, czyli informacji opisujących znaczenie innych danych.

W przypadku Javy większość metadanych znajduje się w plikach XML towarzyszących projektowi. W .Net wprowadzono atrybuty. Atrybut to dodatkowy element składni, który zmienia znaczenie określonych elementów języka. Dobrym przykładem jest atrybut WebMethod, który przekształca funkcję czy procedurę w usługę Web, dodając odpowiednie "opakowanie" realizujące np. translację SOAP. W Javie zwykle jest to plik konfiguracyjny, który określa, że dla danego elementu należy wygenerować wrapper. Skutek działania jest dosyć podobny, jednak atrybut sprawia, że składnia jest bardziej zwięzła i czytelna.

W .Net programista może także definiować własne atrybuty, np. modyfikując zachowanie wrapperów tak, by pakiet SOAP został zaszyfrowany. Nadużywanie atrybutów może być jednak niebezpieczne. Zbyt dużo modyfikatorów może sprawić, że oryginalna składnia nie będzie widoczna (atrybuty można dopisywać na poziomie całego pakietu, klasy czy funkcji ewentualnie poszczególnych instrukcji).

Przenośność

Generalnie rozwiązania oparte na Javie można uruchamiać na każdej platformie, na dowolnym systemie operacyjnym (o ile nie korzysta się z mechanizmów właściwych dla danego serwera aplikacyjnego czy platformy - za pośrednictwem JNI).

Pełna wersja .Net Framework jest oczywiście dostępna tylko na Windows. Warto podkreślić, że Microsoft nie wspiera już Windows 95 i na tej platformie .Net Framework nie będzie działał. Niedawno Microsoft udostępnił kod źródłowy projektu Rotor, który jest implementacją CLI (jednej z podstawowych część .Net) jako shared-source. Dostępny jest kod źródłowy dla systemów FreeBSD i Windows 2000/XP, który realizuje podstawową funkcjonalność .Net (jest tam m.in. kompilator C#, klasy wejścia/wyjścia itp.).

Jednocześnie firma Ximian prowadzi pracę nad projektem Mono - implementacją .Net Framework dostępną jako open source. Niemal w całości działa już kompilator C#. Opracowano także interpreter MSIL. Trwają prace nad biblioteką klas.

W najbliższych numerach przedstawimy kolejne aspekty porównujące technologie .Net i Java. Za tydzień o komponentach i standardowych bibliotekach.


TOP 200