J# - Java àla Microsoft

J# to jeden z czterech podstawowych języków oferowanych przez Microsoft, w których można tworzyć aplikacje przeznaczone na platformę .NET.

J# to jeden z czterech podstawowych języków oferowanych przez Microsoft, w których można tworzyć aplikacje przeznaczone na platformę .NET.

Z punktu widzenia .NET (i środowiska VS.NET) J# jest jednym z wielu równorzędnych języków programowania.

Z punktu widzenia .NET (i środowiska VS.NET) J# jest jednym z wielu równorzędnych języków programowania.

Warto przyjrzeć się historii tego języka. Gdy Microsoft rozpoczął licencjonowanie Javy od firmy Sun, opracował produkt Visual J++ 6.0. Była to Java, ale z pewnymi rozszerzeniami. Po pierwsze, zawierała wygodny mechanizm integracji z technologią COM (komponentami w Windows), a po drugie, w celu wygodnej obsługi zdarzeń, wprowadzono tzw. delegaty, czyli (w uproszczeniu) wskaźniki do funkcji, które są wywoływane w momencie zajścia zdarzenia. Wszystko to sprawiło, że J++ 6.0 było dosyć wygodnym narzędziem do pisania aplikacji w Javie na platformie Windows.

Z powodu procesu wytoczonego przez Sun rozwój tego narzędzia został zatrzymany i w zasadzie do pojawienia się J# w VS.NET Microsoft nie oferował środowiska do pisania w Javie.

Pierwsza wersja J# dostępna była jako dodatek do Visual Studio 2002, potem stała się częścią Visual Studio 2003 i oczywiście jest dostępna w VS.NET 2005. Pakiet Visual J# to nie tylko kompilator Javy na platformę .NET. Dodatkowo zawiera dwa bardzo ciekawe narzędzia.

Java Language Conversion Assistant przekształca kod w Javie na kod w C#. Praktycznie wszystkie elementy kodu źródłowego są konwertowane i nie wymagają poprawek - klasy, logika algorytmów po konwersji są takie same. Problemy pojawiają się przy niektórych bibliotekach. Ale JLCA opakowuje brakujące biblioteki zaznaczając, jakie elementy nie mogły być przekształcone na C# (używając komentarzy, które dodatkowo zgrupowane są na liście zadań "do zrobienia"). W ten sposób można nie tylko przenieść algorytmy, ale po włożeniu pewnego wysiłku także np. interfejs użytkownika. Warto też dodać, że JLCA może konwertować całe projekty (np. z VJ++ 6.0), ale też samodzielne pliki źródłowe z kodem Javy - np. te, które zawierają kluczowe obliczenia.

Konwersja też binarna

Drugim ciekawym narzędziem jest Visual J# Binary Converter Tool, pakiet, który potrafi przekształcić skompilowane programy Javy zawierające bytecode (czyli pliki .class) na MSIL (czyli asembler platformy .NET). W ten sposób, nie mając dostępu do kodu źródłowego, można tak przekształcić program w Javie, żeby bez instalacji JVM działał na platformie .NET.

Taki skonwertowany pakiet jest dostępny do innych aplikacji .NET jak normalna biblioteka. Można dodawać do niej referencje, wywoływać funkcje, tworzyć klasy itp. Microsoft zaleca, żeby z tego mechanizmu korzystać tylko wtedy, gdy nie można uzyskać źródeł. Ale czasami jest prościej bez "grzebania się" w Javie uzyskać coś, co po prostu działa na platformie .NET. Na marginesie warto dodać, że także część bibliotek JDK można konwertować przy użyciu JbImp.exe.

J# jest "pełnoprawnym" językiem .NET - w pełni obsługiwanym przez środowisko Visual Studio (tu - VS.NET 2005).

J# jest "pełnoprawnym" językiem .NET - w pełni obsługiwanym przez środowisko Visual Studio (tu - VS.NET 2005).

J# w VS 2005 zostało rozbudowane o nowe mechanizmy, analogicznie jak np. C#. Wprowadzono typy ogólne, a także kilka mechanizmów, których nie było w poprzednich edycjach J#, a oferowały je np. VB.NET czy C#. W nowej wersji można tworzyć atrybuty, typy wyliczeniowe, tzw. value types. Mechanizm wyjątków w J# może równolegle wychwytywać wyjątki .NET, używając java.lang.Throwable. Obsługiwane są właściwości w stylu Java Beans. Można pisać aplety (aplikacje uruchamiane w środowisku przeglą-darki). J# w VS.2005 zawiera klasy odpowiadające JDK 1.2, a kompilator ma opcję wyłączającą rozszerzenia języka w stosunku do tego, co było w J++ 6.0.

Obszar zastosowań J# (i narzędzi z nim związanych) jest dosyć szeroki. Z jednej strony - pozwala na przechodzenie pomiędzy Visual J++ 6.0 a .NET (a dużo rozwiązań powstało w VJ++ 6.0), z drugiej - pozwala wykorzystać wiele gotowych algorytmów zaimplementowanych w Javie. Jeżeli weźmiemy np. biblioteki numeryczne czy też szkolne (raczej: uniwersyteckie) przykłady realizacji różnych algorytmów, to ich kompilacja do J# czy konwersja na C# nie wymaga właściwie ingerencji programisty.

Po trzecie, J# może się przydać, gdy trzeba zintegrować kod .NET z aplikacją w Javie, a program w Javie stosuje tylko własne mechanizmy komunikacyjne. Jednak w takim wypadku warto też sięgnąć po dodatkowe narzędzia, np. JNBridgePro czy Janeva.


Zobacz również