Uniwersytet Jagielloński w Krakowie - Punkt LogowaniaNie jesteś zalogowany | zaloguj się
katalog przedmiotów - pomoc

Język C++

Informacje ogólne

Kod przedmiotu: WFAIS.IF-C119.0 Kod Erasmus / ISCED: (brak danych) / (brak danych)
Nazwa przedmiotu: Język C++
Jednostka: Wydział Fizyki, Astronomii i Informatyki Stosowanej
Grupy:
Punkty ECTS i inne: 4.00 LUB 6.00 (w zależności od programu)
zobacz reguły punktacji
Język prowadzenia: polski

Zajęcia w cyklu "Semestr letni 2018/2019" (zakończony)

Okres: 2019-02-23 - 2019-06-14
Wybrany podział planu:


powiększ
zobacz plan zajęć
Typ zajęć: Laboratorium, 45 godzin więcej informacji
Koordynatorzy: Janusz Karkowski
Prowadzący grup: Janusz Karkowski, Marcin Misiaszek, Michał Mnich, Kamil Nowakowski
Lista studentów: (nie masz dostępu)
Zaliczenie: Egzamin
Ocena wliczana do średniej:

tak

Efekty kształcenia:

K_W03: Student posługuje się programowaniem obiektowym oraz zna mechanizmy wspierania tego paradygmantu w języku c++. Potrafi wskazać zalety programowania uogólnionego (stosuje bibliotekę STL, iteratory, algorytmy).

K_W05, K_U09: Student potrafi kompilować, konsolidować kod, oraz zna systemy śledzenia kodu i szukania błędów w kodzie (debuger). Używa również skrytpów Makefile do automatyzacji kompilacji i konsolidacji kodu.

K_W06, K_U10, K_U14, K_U19: W rozwiązywaniu relacji obiektowych potrafi korzystać ze wzorców projektowych i ich implementacji w języku C++. Potrafi korzystać z notacji UML, zwłaszcza diagramów klas. Zna reguły dobrych rozwiązań w projektowaniu obiektowym.

K_U04: Zna składnię języka w ramach aktualnego standardu języka C++ (ISO/IEC 14882:2011) oraz biblioteki standardowej.

K_K04: Student potrafi przeprowadzić wywaid z "klientem" oraz dyskusję nad alternatywnymi rozwiązaniami problemu. Przedstawia korzyści w realizacji poprzez mechanizmy dziedziczenia, asocjacji - klasy mieszane, klasy ról. Potrafi projektować kod otwarty na rozszerzenia przy zachowaniu stabilnego interfejsu.

Wymagania wstępne:

Elementarna znajomość systemu Linux.

Umiejętność programowania w języku C.

Bierna znajomość języka angielskiego.



Forma i warunki zaliczenia:

Ćwiczenia - kryteria zaliczenia zależne od prowadzącego. Przykładowe kryteria: aktywność na ćwiczeniach, napisanie 2 kolokwiów zaliczeniowych.

Metody sprawdzania i kryteria oceny efektów kształcenia uzyskanych przez studentów:

Efekty kształcenia sprawdzane są poprzez:

1) konktrolę indywidualnych postępów na ćwiczeniach laboratoryjnych, podczas analizy i pisania przykładowego kodu

2) kolokwiach, podczas których studenci rozwiązują konkretne zadania programistyczne


Metody dydaktyczne - słownik:

E-learning
Metody eksponujące - film
Metody podające - objaśnienie lub wyjaśnienie
Metody podające - prelekcja
Metody podające - prezentacja multimedialna
Metody podające - wykład informacyjny
Metody praktyczne - ćwiczenia laboratoryjne
Metody praktyczne - metoda projektów
Metody praktyczne - pokaz
Metody programowane - z użyciem komputera
Metody programowane - z użyciem podręcznika programowanego

Metody dydaktyczne:

Ćwiczenia na pracowni komputerowej, przykłady kodu prezentowane i dyskutowane na tablicy. Pełne wsparcie dla standardu języka C++11.

Skrócony opis:

Intensywny kurs języka C++ oraz biblioteki standardowej, włączając wszelkie nowe elementy standardu C++11. Zapoznanie się ze składnią języka, jak również paradygmatami programowania obiektowego i uogólnionego. Wybrane wzorce projektowe. Używanie kontenerów STL, iteratorów, algorytmów uogólnionych w połączeniu z obiektami funkcyjnymi.

Pełny opis:

Program kursu obejmuje następujące zagadnienia:

1. Cechy języka C++ oraz style programowania. Kompilacja i konsolidacja (g++) programu, bibliotek statycznych i dynamicznych. Deklaracje i definicje zmiennych i funkcji. Typy danych, zasięg zmiennych i ich czas życia. Przestrzenie nazw. Specyfikatory języka, stałe a kwestia preprocesora. Operatory - przegląd. Sposoby rzutowania w stylu C++.

2. Typy złożone, proste kontenery, tablice wielowymiarowe. Wskaźniki – własności i arytmetyka. Argumenty programu, konwersja typów argumentów.

3. Funkcje – argumenty i wartości zwracane, wskaźniki do funkcji, tablice wskaźników do funkcji. Operacje tworzenia i niszczenia (new i delete), przeciążone formy operatora new. Kontrolowanie obiektu za pomocą auto_ptr (jako przykład techniki RAII). Funkcje – techniki przeciążania. Dopasowanie funkcji do typów argumentów.

4. Typy abstrakcyjne (klasa, a obiekt), cechy modelu obiektowego (abstrakcja danych, hermetyzacja, hierarchia), typy hierarchii. Interfejs i implementacja. Klasa – dostęp do składników. Własności wskaźnika this. Zagnieżdżanie i zasłanianie nazw. Klasa – inicjalizacja i likwidacja. Kwestie const/volatile i static, lista inicjatorów konstruktora. Składowe mutable.

5. Wszystko o „const” i o „static”. Konstruktor kopiujący. Konwersja typów. Wskaźniki do składników klasy, do metod składowych klasy. Wszystko o deklaracji przyjaźni (friend).

6. Przeciążanie (przeładowanie) operatorów. Kopiowanie płytkie i głębokie, technika Copy On Write. Przeciążanie operatorów new i delete (sytuacje krytyczne: new handler, bad_alloc).

7. Dziedziczenie, sposoby dziedziczenia, deklaracja dostępu using. Polimorfizm – wiązanie późne i wczesne, koszty. Funkcje wirtualne, kwestia konstruktora i destruktora, dziedziczenie a konwersje, klasy abstrakcyjne.

8. Abstrakcja danych – programowanie obiektowe i hermetyzacja, prywatne dziedzicznie a dostęp. Składowa prywatna a widzialność. Technika tworzenia niewirtualnych interfejsów. Dziedziczenie a kwestie czterech podstawowych metod (konstruktor, konstruktor kopiujący, operator=, destruktor).

9. Dziedziczenie wielokrotne (wielobazowe) przesłanki i powody – inicjalizacja i destrukcja, wieloznaczność, dziedziczenie wirtualne. Klasy wewnętrzne (doskonała hermetyzacja – wzorzec obserwatora). Definiowanie metod czysto wirtualnych. Rozpoznawanie typu w czasie wykonania (Run-Time Type Identification).

10. Dziedziczenie kontra zawieranie. Dziedziczenie – zależności statyczne. Klasa mieszana. Dynamiczna zmiana sytuacji – role i ich konsekwencje. Przydatne techniki obiektowe: wskazanie na polimorfizm, „polimorfizm konstruktora”, wielokrotne rozgłaszanie (multiple dispatch), delegacja (cross delegation).

11. Wyjątki – obsługa, wymagania, przechwytywanie. Dopasowanie wyjątków, sytuacje „bez wyjścia”, wyjątki a polimorfizm. Sprzątanie stosu. Obsługa wyjątków na poziomie funkcji. Wyjątek w konstruktorze. Specyfikacje wyjątków i złe sytuacje. Wyjątki standardowe. Kod odporny na wyjątki (gwarancje).

12. Szablony funkcji – wywołania, dedukcja typów, przeciążanie. Szablony klas – specjalizacje, domyślne argumenty, pozatypowe argumenty, użycie typename i this->, szablony zagnieżdżone.

13. Iteratory (wzorzec projektowy) – rodzaje (input, output, forward, bidirectional, random access) i ich własności. Iteratory kontenerów standardowych. Iteratory strumienia. Iteratory wstawiania do kontenera. Kontenery – charakterystyka, wspólne metody. Kontenery sekwencyjne, skojarzeniowe, łączniki.

14. Obiekty funkcyjne (funktory). Adaptory obiektów funkcyjnych (wiązadła, negatory, ptr_fun, mem_fun, mem_fun_ref). Algorytmy uogólnione – przegląd.

15. Wzorce projektowe – nazwa, problem, rozwiązanie, konsekwencje. Systematyka (konstrukcyjne, strukturalne, behawioralne). Wybrane przykłady: adapter – fasada, most (realizowanie najlepszych zasad OOP), dekorator, singleton, fabryka abstrakcyjna, strategia, metoda szablonowa, obserwator, metoda fabryczna.

16. Kompletny przegląd nowych elementów języka C++11 (w trakcie omawiania bieżącego standardu).

Literatura:

Język C++ specyfikacja, podręczniki

* International Standard ISO/IEC 14882 (tylko po angielsku)

* Draft przyszłego standardu C++0x (wersja N3291)

* Bjarne Stroustrup - Programowanie. Teoria i praktyka z wykorzystaniem C++

* Bjarne Stroustrup - Języc C++

* Bruce Eckel - Thinking in C++, vol. I i II

* Jerzy Grębosz - Symfonia C++ Standard

* Jerzy Grębosz - Pasja C++ (niestety stara)

* Jesse Liberty, S. Rao, B.L. Jones - C++ dla każdego. Wydanie II

* Stephen Prata - Język C++. Szkoła programowania. Wydanie V

* Nicholas A. Solter, S.J. Kepler - C++ Zaawansowane programowanie

Język C++, różne zagadnienia

* Scott Meyers - C++ 50 efektywnych sposobów na udoskonalenie Twoich programów

* Scott Meyers - Języc C++ bardziej efektywny

* Scott Meyers - STL w praktyce: 50 sposobów efektywnego wykorzystania

* Herb Sutter - Wyjątkowy język C++ 47 łamigłówek

* Herb Sutter - Wyjątkowy język C++ 40 nowych łamigłówek

* Herb Sutter - Niezwykły styl języka C++ 40 nowych łamigłówek

* Herb Sutter, Andrei Alexandrescu - Język C++ Standardy kodowania 101 zasad

* Kayshaw Dattatri - Język C++ Efektywne programowanie obiektowe

* D. Ryan Stephens i inni - C++ Receptury (O'Reilly)

* Nicolai M. Josuttis - C++ Biblioteka standardowa. Podręcznik programisty.

* David Vandevoorde, Nicolai M. Josuttis - C++ szablony Vademecum profesjonalisty

* Bjoern Karlsson - Więcej niż C++ Wprowadzenie do biblioteki Boost

Opisy przedmiotów w USOS i USOSweb są chronione prawem autorskim.
Właścicielem praw autorskich jest Uniwersytet Jagielloński w Krakowie.