Programowanie w języku C++
C++ Programowanie proceduralne Programowanie obiektowe Programowanie generyczne Programowanie funkcyjne
Wprowadzenie
Języki C i C++ od wielu lat są jednymi z najczęściej stosowanych zarówno w przemyśle IT, jak i w instytucjach naukowo-badawczych. Szczególną rolę spełniają od dawna m.in. w telekomunikacji, przemyśle motoryzacyjnym i w produkcji gier, a ostatnio również w systemach "Internetu rzeczy" (IoT). Dlatego zapotrzebowanie na programistów znających C++ jest ciągle ogromne.
Kurs jest wprowadzeniem do programowania w C++. Obejmuje elementy programowania proceduralnego, obiektowego, generycznego i funkcyjnego istotne z punktu widzenia współczesnych zastosowań języka. Jego nauka odbywa się w kontekście zagadnień kluczowych dla każdego programisty, a dotyczących m.in. architektury komputera, zarządzania pamięcią, projektowania i analizy algorytmów oraz struktur danych, a także wzorców projektowych i testowania oprogramowania.
Adresaci kursu
Osoby bez kierunkowego wykształcenia zarówno już związane z branżą IT, jak również poszukujące takiej pracy. Kurs umożliwi uczestnikom uzupełnienie i uporządkowanie posiadanej wiedzy z zakresu nie tylko języka C++, ale także podstaw programowania ułatwiających dalszą naukę (także innych języków).
Wymagania wobec kandydatów
Kandydaci na kurs powinni znać podstawy programowania w dowolnym języku.
Atuty kursu
- zakres materiału odpowiadający kursom przygotowawczym prowadzonym przez firmy z branży IT dla kandydatów do pracy,
- nastawienie na zrozumienie kluczowych zagadnień dla każdego programisty, ułatwiających dalszą naukę (także innych języków),
- kadra z wieloletnim doświadczeniem zarówno dydaktycznym (prowadzenie zajęć na studiach, w tym podyplomowych, i kursach realizowanych na zamówienie dla firm z branży IT), jak również w przemyśle IT (role programisty i architekta oprogramowania, prowadzenie rozmów rekrutacyjnych),
- świadectwo ukończenia.
Zakres tematyczny kursu
- Pojęcia podstawowe:
pliki .cpp vs. .h (nagłówkowe); proces kompilacji: kompilacja vs. interpretacja, kod źródłowy, kod maszynowy/asembler, narzędzia qmake i cmake; preprocesor/makra/kompilacja warunkowa,
- Programowanie proceduralne:
deklaracja/definicja/inicjalizacja, zasięg nazw, typedef vs. deklaracja "using", wnioskowanie typu (auto/decltype), typy i rozmiary danych, konwersje typów/rzutowanie, wejście/wyjście (C vs. C++), funkcje, struktury sterujące, operatory bitowe, organizacja pamięci programu, zarządzanie pamięcią, stałe/zmienne lokalne/globalne, statyczne, dynamiczne; tablice, wskaźniki (w tym do funkcji) i referencje, struktury, unie, pola bitowe; const vs. constexpr; moduły, przestrzenie nazw, dyrektywa "using",
- Programowanie obiektowe:
klasy (konkretne i abstrakcyjne), obiekty, metody, kontrola dostępu (w tym funkcje/klasy zaprzyjaźnione), konstruktory, destruktory; dziedziczenie vs. agregacja/kompozycja, inicjalizacja, polimorfizm inkluzyjny/"podtypowanie" i funkcje wirtualne, operatory definiowane przez użytkownika; wyjątki, noexcept, poziomy "exception safety",
- Elementy programowania uogólnionego:
programowanie generyczne vs. generatywne, polimorfizm parametryczny, szablony funkcji i klas, elementy biblioteki standardowej (kolekcje i algorytmy),
- Elementy programowania funkcyjnego:
cechy stylu (paradygmatu) funkcyjnego; funkcje wyższego rzędu, anonimowe obiekty funkcyjne/wyrażenia lambda,
- Zarządzanie zasobami:
idiom RAII, "rule of three" vs. "rule of five", wskaźniki "unique_ptr" i "shared_ptr", semantyka przenoszenia ("move semantics"), idiom "copy-and-swap", typy "move-only",
- Podstawy programowania aplikacji w Qt, testy jednostkowe,
- Architektura komputera (podstawy, perspektywa programisty):
struktura procesu, zarządzanie pamięcią, reprezentacja liczb,
- Elementy algorytmiki i wybrane struktury danych:
rekursja (w tym strukturalna), złożoność obliczeniowa (czasowa, pamięciowa); wybrane struktury danych - tablice, zbiory, mapy, stosy, kolejki, listy; drzewa (poszukiwań binarnych), grafy; wybrane algorytmy - wyszukiwanie, sortowanie, najkrótsze ścieżki w grafie.
Organizacja kursu
Czas trwania: 20 spotkań 4-godzinnych (od 17.45 do 21.00)
Forma zajęć: mini wykłady, ćwiczenia laboratoryjne/warsztaty
Liczba uczestników: min. 12, maks. 16
Język wykładowy: polski
Forma i warunek zaliczenia: uzyskanie pozytywniej oceny z testu końcowego
Polecane materiały pomocnicze:
- Bjarne Stroustrup: Język C++ Kompendium Wiedzy, Helion 2014
- Stephen Prata: Język C++. Szkoła programowania, Helion 2012
- Jerzy Grębosz: Opus Magnum C++11, Helion 2017
- http://www.learncpp.com
Kierownik kursu: dr inż. Roman Dębski
Szczegółowe informacje o procesie rekrutacji otrzymają Państwo na adres e-mail podany w zgłoszeniu uczenictwa