Podręcznik
1. Biblioteka standardowa języka
Współcześnie już mało kto korzysta z czystego języka do pisania rzeczywistych aplikacji - niezależnie od tego jaki język wybierze. Zawsze ma do dyspozycji zestaw pomocniczych bibliotek i dodatków - które albo utworzył samodzielnie, albo utworzył jego zespół, albo - co najbardziej prawdopodobne - korzysta z kodu udostępnianego komercyjnie lub bezpłatnie - przez innych.
Dla C++ opracowano ogromną ilość bibliotek, o różnej jakości, i różnym stopniu skomplikowania. Dla mnie z całego nieprzebranego dobrobytu bibliotek najważniejsze są trzy:
- STL (ang: Standard Template Library) - to biblioteka standardowa języka. Ją głównie zajmiemy się w tym rozdziale.
- Boost - biblioteka, która została opracowana w celu uzupełnienia standardowej biblioteki C++ i rozszerzenia jej funkcjonalności. Boost dostarcza wiele różnych modułów, obejmujących obszary takie jak programowanie generyczne, metaprogramowanie, obsługa wielowątkowości, struktury danych, obsługa sygnałów i wątków, a także wiele innych.
Najbardziej znanym elementem biblioteki Boost jest Boost.Python, który ułatwia integrację pomiędzy C++ a Pythonem. Inne istotne moduły to Boost.Asio do programowania sieciowego i asynchronicznego, Boost.Test do testowania jednostkowego, Boost.Filesystem do operacji na plikach i katalogach, Boost.Regex do obsługi wyrażeń regularnych, oraz wiele innych.
Boost jest ceniony za wysoką jakość swojego kodu, a także za to, że wiele propozycji funkcji i rozszerzeń, które później zostały wprowadzone do standardowej biblioteki C++, pierwotnie było testowane w ramach biblioteki Boost. Patrząc na to co jest w Boost - możecie mieć obraz planowanych zmian w bibliotece standardowej. - Qt - bibliteka zupełnie inna niż STL czy Boost. Po pierwsze - nie jest w ogóle w zakresie standardu języka - wręcz przeciwnie. Wprowadza własny etap metakompilacji, własny system budowania (z którego twórcy powoli się wycofują na rzecz cmake), własne rozszerzenia języka w formie np sygnałów i slotów, czy metadanych obiektu.
Ma też wiele komponentów zastępujących / odpowiadających komponentom biblioteki standardowej, często wygodniejszych w użyciu, czasami nawet bardziej efektywnych niż ich standardowe odpowiedniki.
Qt - podobnie jak C++ i biblioteki standardowe - jest wieloplatformowa. Bezproblemowo wykorzystacie ją do budowy aplikacji dla klasycznych PC (Windows, Linux, iOS), jak i do tworzenia aplikacji mobinych (Android).
Dla mnie jednak najistotniejszą cechą Qt jest jej przydatność w praktycznym budowaniu aplikacji z graficznym interfejsem użytkownika. IMHO nie ma lepszego narzędzia, jeśli w C++ chcemy zaprogramować osadzony system komunikujący się z użytkownikiem przy pomocy dotykowych ekranów, zachowując przy tym możliwości komunikacji ze światem zewnętrznym zarówno klasycznie (np poprzez sieć TCP/IP), jak i korzystając ze specjalizowanych protokołów (ModBus, OPC, Protobuf) czy nawet bezpośrednio ze sprzętu (Sensors).
Qt w tym podręczniku nie będziemy się specjalne zajmowali - aczkolwiek na koniec modułu zamieszczę Wam przykład wykorzystania Qt do budowy systemu opartego na pluginach.
Teraz zajmijmy się jednak STL. Jest to ogromna biblioteka - wg słów Bjarne Stroustrup-a, specyfikacja STL to 2/3 standardu ISO języka.
Zawartość biblioteki standardowej pierwotnie podzielono na trzy grupy:
- Podstawowe Komponenty: Obejmują one podstawowe aspekty języka, takie jak operacje wejścia/wyjścia (I/O), zarządzanie pamięcią, obsługa błędów, obsługa wyjątków, dynamiczna alokacja pamięci, oraz obsługa niskopoziomowych operacji.
- Struktury Danych: Ta kategoria zawiera różne struktury danych, takie jak wektory, listy, stosy, kolejki, drzewa, mapy, oraz inne. Struktury te dostarczają gotowe implementacje, które programiści mogą wykorzystać bez potrzeby ponownego implementowania podstawowych struktur za każdym razem, kiedy są potrzebne.
- Algorytmy: Zawierają gotowe algorytmy do różnych operacji na danych, takie jak sortowanie, przeszukiwanie, transformacje, oraz inne. Programiści mogą korzystać z tych algorytmów bez konieczności implementacji ich od podstaw, co sprzyja tworzeniu bardziej wydajnego i zrozumiałego kodu.
Z czasem do biblioteki dołączano dodatkowe elementy, takie jak obsługa wątków, wyrażeń regularnych, narzędzia do obliczeń numerycznych (z włączonymi dodatkowo generatorami liczb losowych), obsluga czasu, czy zaawansowane aspekty programowania szablonowego. Ze względu na ograniczony czasowo zakres tego kursu - nie będziemy omawiali wszyskiego. Skupimy się natomiast na najbardziej przydatnych lub najciekawszych elementach biblioteki: kontenerach wraz z iteratorami, podstawowych algorytmach, czy obsłudze wyjątków. Potem opiszę Wam jeszcze przykład budowania aplikacji wielowątkowej.