Platforma Java a technologie .Net

Analogiczny mechanizm jest dostępny w .Net. Chcąc wywołać funkcję kodu niezarządzalnego, wystarczy zadeklarować jej prototyp, a następnie go wywołać. Funkcjonalność tę można zablokować poprzez użycie polis bezpieczeństwa.

W przypadku Javy w ogóle nie można korzystać ze wskaźników (to jeden z elementów języka C++, który usunięto podczas projektowania Javy). CLR (biblioteka uruchomieniowa .Net) natomiast pozwala na stosowanie tzw. niebezpiecznego kodu, gdzie można jawnie, za pośrednictwem wskaźników, manipulować pamięcią. W aplikacji należy zaznaczyć początek i koniec "niebezpiecznego" kodu. Warto dodać, że ten kod nadal jest kodem zarządzalnym: działają automatyczny "odśmiecacz" i inne mechanizmy runtime. Oczywiście, z poziomu polis można określić, że kod "niebezpieczny" nie będzie działał.

Należy mieć na uwadze, że oparcie środowiska na języku pośrednim (MSIL czy bytecode) powoduje, że staje się możliwe "deasemblowanie kodu" i otrzymanie, wbrew woli autora programu, czytelnego kodu źródłowego. Powstało wiele narzędzi, które taki swoisty reverse engineering utrudniają. Taki pakiet dla Javy powstał mniej więcej dwa lata po pojawieniu się JDK 1.1.7. W przypadku .Net też jest już dostępny - w cztery miesiące po oficjalnej premierze środowiska programistycznego. Co ciekawe, autorami narzędzi dla .Net są te firmy, które oferują analogiczne pakiety dla Javy.

Pakiet a JAR

Podstawową "jednostką" programu - zarówno tego napisanego w Javie, jak i w .Net - jest pakiet. Praktycznie oba środowiska mają bardzo zbliżone możliwości. W Javie nazwa pakietu musi odpowiadać logicznej nazwie przestrzeni nazw czy klasy. W .Net jest większa dowolność - plik można nazwać w dowolny sposób i może on zawierać definicję kilku klas. Jednak dla zachowania porządku i tak zazwyczaj ich nazwy odpowiadają nazwom klas.

Java i .Net pozwalają na podpisywanie pakietów. W Javie jest do dyspozycji zestaw narzędzi: keytool (do zarządzania kluczami i certyfikatami), jar (do tworzenia pakietu) i jarsigner (do podpisywania pliku danym kluczem).

W .Net pakiet ma także nazwę "referencji" do innych pakietów - w celu uproszczenia instalacji rozwiązania składającego się z wielu oddzielnych pakietów. Instalacja pakietu .Net sprowadza się do skopiowania odpowiednich plików.

Równocześnie wprowadzono koncepcję "mocnej" nazwy. To podpisana cyfrowo nazwa pakietu wraz z wersją. W ten sposób twórca, po utworzeniu "mocnej" nazwy, może być jednoznacznie zidentyfikowany nawet na poziomie poszczególnych klas (w Javie na poziomie całych pakietów). W .Net można np. określić, że danej "mocnej" nazwie będą przypisane określone prawa.

Java nie ma tak bardzo rozbudowanych mechanizmów wersjonowania. W .Net manifest pakietu może określić dokładne wersje innych komponentów, z którymi będzie współpracował.

Dziedzictwo C++

Platforma Java a technologie .Net

Podpisywanie pakietów Javy przez twórce kodu

Analizując dwa światy programistyczne, nie można zapomnieć o porównaniu dwóch języków - Javy i C#.

Oba powstały na bazie C++, a ich autorzy postawili sobie zadanie wyeliminowania niedociągnięć i nadmiernej komplikacji pierwowzoru. Chcąc krótko scharakteryzować Javę i C#, można powiedzieć, że jest to język, w którym sprawnie można wyrazić większość składni obiektowej.

C# jest natomiast językiem obiektowym - jak mówi Anders Hejlsberg, jego twórca. Microsoft uznał, że wiele przydatnych elementów języka C++ niepotrzebnie usunięto z Javy. Na przykład trudno znaleźć racjonalny powód, dlaczego w Javie nie ma typów wyliczeniowych. W C# ten mechanizm jest dostępny (tyle, że wyliczenie nie jest jak w C++ rzutowane na liczby całkowite i np. nie można prosto porównać go z liczbą).

Zarówno twórcy Javy, jak i C# zrezygnowali z oddzielenia deklaracji i definicji elementów. Oba języki mają bardzo zbliżoną składnię. C# wyeliminował konieczność definiowania interfejsów COM. W C# pojawiło się słowo kluczowe goto i możliwość skoku w obrębie tego samego lub nadrzędnego bloku programu.


TOP 200