Java kontra C#

Wielu traktuje język C# jako odpowiedź Microsoftu na popularność języka Java. Bez wątpienia wykorzystuje zalety Javy, próbując jednocześnie uchronić się od jej wad. Można go traktować jako kolejny etap ewolucji języków programowania, wywodzący się z Javy i C++.

Wielu traktuje język C# jako odpowiedź Microsoftu na popularność języka Java. Bez wątpienia wykorzystuje zalety Javy, próbując jednocześnie uchronić się od jej wad. Można go traktować jako kolejny etap ewolucji języków programowania, wywodzący się z Javy i C++.

Microsoft początkowo podchodził do języka Java dość entuzjastycznie, tworząc nawet własne środowisko do programowania w nim (Visual J++), a nawet rozwijając Javę o własne rozszerzenia. Te dodatki stały się bezpośrednią przyczyną procesu wytoczonego Microsoftowi przez Suna. W rezultacie Microsoft na dobre, jak się wydaje, porzucił Javę, proponując własną wersję nowoczesnego języka obiektowego: C#. Ogromna marketingowa siła giganta z Redmond przyczynia się znacząco do rosnącej popularności technologii .NET i języka C#, tym bardziej, że wciąż przybywa narzędzi do tworzenia w nim aplikacji.

Języki Java i C# są niezwykle podobne, gdyż wywodzą się z tego samego źródła - języka C++, stosują podobne rozwiązania technik programowania obiektowego. Trudno wymienić wszystkie podobieństwa i różnice, postaramy się jednak wskazać najistotniejsze.

C#, podobnie jak Java, to język wywodzący się z C++. Charakterystyczną cechą obu jest użycie języka pośredniego. Programy w nich tworzone nie są kompilowane do postaci programu wykonywalnego, który można uruchomić w systemie operacyjnym, lecz do pewnej formy pośredniej (w Javie jest bytecode, w C# - MSIL, Microsoft Intermediate Language). Tak przygotowany program można uruchomić za pomocą tzw. maszyny wirtualnej. Pozornie wydaje się to niepotrzebną komplikacją. Użycie maszyny wirtualnej pozwala jednak na uruchomienie programu w praktycznie dowolnym systemie operacyjnym. Wystarczy, żeby system wyposażony był w odpowiednią wersję maszyny wirtualnej. Przenoszenie oprogramowania pomiędzy różnymi systemami operacyjnymi staje się dzięki takiemu rozwiązaniu znacznie prostsze - aplikacje napisane w Javie można swobodnie uruchamiać np. i w Windows, i w Linuksie.

Porównanie wybranych cech języków Java i C#

Porównanie wybranych cech języków Java i C#

C# i Java wykorzystują podobne nowoczesne rozwiązania. Jednym z takich rozwiązań jest odśmiecacz (garbage collector), zajmujący się automatycznym zwalnianiem pamięci po obiektach, które nie będą już wykorzystywane. Programista tworzący w Javie czy C# praktycznie nie musi się martwić o zaalokowaną, a niezwolnioną pamięć - odśmiecacz wykona wszystkie porządki za niego. W przypadku języka C# wykonano jednocześnie krok do przodu i do tyłu: funkcjonuje automatyczny odśmiecacz, ale programista ma możliwość wyłączenia tego urządzenia dla części kodu i korzystanie ze wskaźników znanych z C, z ręcznym przydzielaniem i porządkowaniem pamięci. W Javie działa podobny mechanizm, tzw. użycie metod rodzimych (native method) przy wykorzystaniu tzw. Java Native Interface.

Zarówno Java, jak i C# to języki w pełni obiektowe. Oznacza to nie tylko, że każda funkcja i procedura musi być metodą pewnej klasy. Obydwa stosują własne podejście do typowych właściwości programowania obiektowego. Dziedziczenie klas funkcjonuje, oczywiście, w obydwu językach, ale brak dziedziczenia wielokrotnego, które występowało np. w C++. W obu zabrania się wielokrotnego dziedziczenia klas, ale umożliwia wielokrotne dziedziczenie tzw. interfejsów.

Te ostatnie właśnie specjalnie oznaczonymi klasami abstrakcyjnymi, zawierającymi wyłącznie metody abstrakcyjne.

Pomiędzy Javą i C# znaleźć można również kilka innych różnic, C# zawiera np. więcej typów bazowych. Wydaje się jednak, że więcej jest podobieństw. Programista znający Javę bez trudu rozpocznie pracę z C#, a miłośnik tego ostatniego również nie powinien mieć problemów z nauką programowania w Javie. C# wywodzi się bezpośrednio z języka C++, modyfikując ten ostatni tak, by zawierał narzędzia programowania obiektowego charakterystyczne dla Javy i porządkując nieco składnię. Programista znający C++ (czyli właściwie każdy programista) nie będzie miał większych problemów ze zrozumieniem kodu w C#.


Zobacz również