Cztery plusy

Czy język C#, sztandarowy język platformy .NET, można uznać za kolejne stadium rozwoju C i C++? Innymi słowy, czy C# to (C++)++? Czy platforma .NET to efekt ewolucji interfejsów programistycznych Windows, czy może rewolucja na miarę pojawienia się wirtualnej maszyny Javy? Zastanówmy się, jakie zalety nowego języka i platformy .NET mogłyby skłonić programistów do ich wykorzystania.

Czy język C#, sztandarowy język platformy .NET, można uznać za kolejne stadium rozwoju C i C++? Innymi słowy, czy C# to (C++)++? Czy platforma .NET to efekt ewolucji interfejsów programistycznych Windows, czy może rewolucja na miarę pojawienia się wirtualnej maszyny Javy? Zastanówmy się, jakie zalety nowego języka i platformy .NET mogłyby skłonić programistów do ich wykorzystania.

Język C#, podobnie jak platforma .NET, z którą jest związany, to dzieło programistów z Microsoftu. I choć platforma .NET jest produktem nowym i chyba nie ryzykuję wiele, twierdząc, że jeszcze nie osiągnęła pełni swoich możliwości, to przeznaczony do niej język C# określiłbym jako obecnie najbardziej dojrzały i konsekwentny język obiektowy. Konsekwentna obiektowość oznacza, że dosłownie wszystko, co znajduje się w pamięci, jest obiektem (tzn. jest instancją jakiejś klasy lub struktury). Nie ma tu typów prostych, nie ma funkcji. Są jedynie klasy, ich pola, własności i metody. Dzięki temu kod wszelkich programów jest znacznie bardziej uporządkowany, co wraz z odebraną programiście i przejętą przez platformę .NET kontrolą pamięci zmniejsza liczbę błędów. Język C#, podobnie jak konkurencyjna Java, wywodzi się z rodziny języków C++. Programiści C++ i Javy nie będą mieli zatem trudności z nauką nowej gramatyki; odnajdą tu także większość znanych sobie koncepcji, choć czasem w nieco zmodyfikowanej formie.

Dobrym przykładem różnic między językami C# i C++ jest koncepcja klas i struktur. Składnia prowadząca do tworzenia obiektów jest identyczna, jak w C++, ale sens poszczególnych poleceń zależy od tego, czy tworzony obiekt jest instancją klasy, czy struktury i w inny sposób rezerwowana jest w obu przypadkach pamięć. Może to z początku być nieco mylące, dlatego to konkretnie zagadnienie będzie przedmiotem osobnego artykułu w następnym numerze. Natomiast C# i Javę łączy to samo zasadnicze podejście: wykorzystanie pośredniej platformy uruchomieniowej, a więc i podwójna kompilacja, wykorzystanie zbioru bibliotek klas dostarczanych przez platformę i zwiększone bezpieczeństwo.

Zalety C# i platformy .NET

Technologia ADO.NET z platformy .NET pozwala na tworzenie aplikacji bazodanowych korzystających zarówno z obiektowych (XML), jak i relacyjnych baz danych (m.in. Access, SQL Server).

Technologia ADO.NET z platformy .NET pozwala na tworzenie aplikacji bazodanowych korzystających zarówno z obiektowych (XML), jak i relacyjnych baz danych (m.in. Access, SQL Server).

Chciałbym zwrócić szczególną uwagę na cztery zalety progra-mowania w C# na platformie .NET. Po pierwsze, wspomniana już konsekwentna obiektowość języka. Oznacza ona między innymi, że biblioteki platformy .NET, w przeciwieństwie do powszechnie używanych funkcji WinAPI, przygotowane zostały w technologii obiektowej. Nie trzeba chyba zapewniać, jak bardzo ułatwia to ich wykorzystanie. Poza tym można, oczywiście, budować własne komponen-ty i biblioteki. Dostarczana przez platformę .NET i jej środowisko uruchomieniowe (odpowiednik wirtualnej maszyny Javy) biblioteka komponentów pozwala na znakomite odchudzenie rozpowszech-nianych aplikacji.

Należy przy tym zwrócić uwagę, że platforma .NET, choć jeszcze młoda i nie w pełni dojrzała, to jednak czerpie z wieloletnich doświadczeń interfejsów programistycznych Windows. Przede wszystkim zawiera nową wersję mechanizmu dostępu do baz danych ADO.NET, potomka popularnego ADO. Poza tym prawdziwym hitem platformy .NET jest ASP.NET, a więc biblioteka pozwalająca na przygotowanie aplikacji sieciowych rozszerzających funkcjonalność serwerów WWW . ASP.NET w połączeniu z ADO.NET to naprawdę rewelacyjne narzędzie, które już staje się standardem (z aplikacjami okienkowymi nie jest jeszcze tak dobrze, choć wydaje się, że to powoli będzie się zmieniać).

Ale nie tylko projektanci aplikacji bazodanowych i sieciowych skorzystają na migracji na platformę .NET. Także producenci gier mogą mieć łatwiejsze życie. DirectX.NET, dołączone do wersji 9 DirectX, wprowadza charakterystyczną dla platformy .NET i języka C# obiektowość do programowania grafiki. Programiści nie mogą się nachwalić przejrzystości i elegancji tej biblioteki, szczególnie w porównaniu z jej tradycyjną wersją. Takiego wsparcia od producenta systemu Windows nie ma Java, choć ma to również wady - Microsoft nie jest bezpośrednio zaangażowany w przygotowanie platformy do innych systemów niż Windows. I choć korzystanie z warstwy pośredniej platformy (skompilowany kod źródłowy obsługiwany jest przez platformę programową, a nie systemową czy sprzętową) pozwala na przenoszenie aplikacji, to próba praktycznej realizacji tej możliwości nie jest podejmowana przez koncern z Redmond, lecz przez niezależną grupę. Mam na myśli, oczywiście, projekt Mono, tj. projekt platformy .NET do systemu Linux ( http://www.mono-project.com ).

Wspominałem już o ważnej zalecie platformy .NET, otóż podobnie jak wirtualna maszyna Javy, wyręcza ona programistę w kontroli pamięci. Nie ma operatora delete, jest za to odśmiecacz (garbage collector), który usuwa z pamięci nieużywane obiekty. Nie ma zatem wycieków pamięci. Ostatnią wyróżnioną przeze mnie zaletę zasygnalizuję jednym słowem: bezpieczeństwo - zarówno w znaczeniu stabilności systemu, jak i zapewnienia bezpieczeństwa aplikacji sieciowych poprzez ochronę przed atakami.

Zmiany w C# 2.0 i .NET 2.0

Zanim zdecydujemy się na wybór języka C# i platformy .NET, warto wiedzieć, jak rysuje się ich najbliższa przyszłość. Budowane obecnie przez Microsoft środowisko Visual C# 2005 (wersja testowa beta 1 została dołączona do numeru 12/2004) będzie oparte na nowej specyfikacji języka C# w wersji 2.0 i nowej platformie Microsoft .NET 2.0. Zmiany są spore, choć nie rewolucyjne.

Interfejs aplikacji sieciowych ASP.NET można w Visual C# i C# Builderze projektować w identyczny sposób, jak zwykłych aplikacji ''okienkowych''. Do ich uruchomienia na terminalu nie jest konieczna platforma .NET, wystarczy przeglądarka stron WWW.

Interfejs aplikacji sieciowych ASP.NET można w Visual C i C Builderze projektować w identyczny sposób, jak zwykłych aplikacji ''okienkowych''. Do ich uruchomienia na terminalu nie jest konieczna platforma .NET, wystarczy przeglądarka stron WWW.

Najważniejsza zmiana to wprowadzenie typów parametrycznych, które nawiązują do znanych z C++ szablonów. W C# mechanizm ten nazywany jest generic types. Choć nie ma tych samych możliwości, co szablony, to programiści C++, którzy zdecydowali się na programowanie w C#, z pewnością się z nich ucieszą. Poza tym będzie opcja definiowania klas statycznych, tj. zawierających jedynie statyczne pola i metody. Nie będzie można tworzyć obiektów tych klas ani po nich dziedziczyć. Ułatwia to tworzenie zbiorów niby-funkcji, powiązanych tematycznie, ale niezwiązanych z konkretnym obiektem (np. zbiór funkcji matematycznych). Wprowadzona zostanie kontrola dostępu do własności poprzez modyfikatory określające zakres dostępu elementów get i set w jej definicji. Pozwoli to na takie zaprojektowanie własności, że jej odczyt będzie możliwy z zewnątrz, ale zmiana - tylko z wnętrza klasy. Możliwy stanie się także podział kodu klasy na kilka plików, co ułatwi środowiskom programistycznym rozdzielenie kodu edytowanego przez użytkownika (w szczególności metody zdarzeniowe) od kodu, który jest zarządzany przez samo środowisko (np. metoda InitializeComponents budowana na podstawie operacji wykonanych przez programistę w widoku projektowania).

Rozwinięta zostanie także sama platforma .NET. Jak zwykle w tego typu projektach, największym zmianom podlegają moduły związane z bazami danych i dostępem do nich, a więc ADO.NET i ASP.NET. Poprawione zostanie także zabezpieczenie systemu przez dodanie do platformy obsługi listy osób uprawnionych do wykonywania operacji na systemie oraz klas obsługujących protokoły SSL i NS. Wzbogaci się biblioteka komponentów Windows Forms. Między innymi pojawią się wreszcie klasy obsługujące odtwarzanie plików dźwiękowych z kontrolką SoundPlayer. Dodany zostanie bardzo ciekawy komponent BackgroundWorker ułatwiający umieszczanie czynności w osobnym wątku. Pojawią się również nowe komponenty wizualne (SplitContainer, ToolStrip, WebBrowser), a część dostępnych w obecnej wersji zostanie znacznie rozbudowana (np. DataGridView).

Dodane zostaną także klasy obsługujące protokoły sieciowe HTTP, FTP, ping, SMTP. Wreszcie możliwa będzie z poziomu kodu kompresja plików w standardzie GZip oraz łatwiejszy dostęp do informacji o dyskach bez angażowania mechanizmu WMI (klasa System.IO.DriveInfo). Warto też wspomnieć o deklarowanej przez Microsoft obsłudze platform 64-bitowych w nowej wersji platformy .NET. A to przecież tylko część zmian. Prace nad nowymi wersjami języka, platformy i środowiska programistycznego są już bardzo zaawansowane, a premiera nowych produktów odbędzie się w ciągu najbliższych miesięcy.

Kurs C#

Tuż obok zamieszczamy artykuł poświęcony pracy w środowiskach programistycznych C# oraz przykład pierwszych aplikacji utworzonych za ich pomocą. Jest to pierwsza część kursu C#. W kolejnych numerach omówimy zagadnienia projektowania klas w C# i jego różnice względem C++ i Javy. Aby nie zanudzić, będę przeplatał omawianie nowych pojęć języka C# praktycznymi przykładami aplikacji. Dlatego trzecia część kursu będzie miała postać studium jednego projektu, co pozwoli na omówienie typowych problemów z tworzeniem aplikacji i sposobów ich rozwiązywania. Następnie wrócę do omówienia nowych elementów języka C#: indeksatorów, delegacji i zdarzeń. Zaś w piątej części zajmiemy się kolekcjami, czyli zaimplementowanymi na platformie .NET standardowymi strukturami danych i praktycznym ich wykorzystaniem w aplikacjach. Tematy kolejnych części to: projektowanie komponentów oraz mechanizm PInvoke, a w części ósmej prawdopodobnie przejdziemy do baz danych, aplikacji sieciowych i ich łączenia. Znajdzie się również miejsce na wstęp do DirectX.NET. Jednym słowem, wszystko to, co w C# i platformie .NET ciekawe i nowe. Zapraszam!


Zobacz również