Zaawansowane techniki programowania obiektowego w C++

Zajęcia grupy nr 2 rozpoczynają się o 16:05 we wtorki, sala G-1-09. W razie kłopotów ze zrozumieniem omawianych zagadnień zapraszam na konsultacje w trakcie moich dyżurów (pokój C-2-24, terminy w USOSwebie).

Można mieć dwie nieusprawiedliwione nieobecności bez ponoszenia konsekwencji. Przy większej ich liczbie proszę się spodziewać dodatkowego przepytywania, dodatkowych kolokwiów, itp. rzeczy sprawdzających czy na pewno znacie wszystkie zagadnienia poruszane na zajęciach.

Aby zaliczyć zajęcia trzeba oddać projekt programistyczny. Oprócz niego będą jeszcze kolokwia, oraz plusy i minusy stawiane za aktywność podczas zajęć.

Zakres materiału na pierwsze kolokwium: to co jest w trzech pierwszych modułach na ważniaku oraz umiejętność korzystania z pojemników STL (w tym przeglądanie ich przy pomocy iteratorów).

Zakres materiału na drugie kolokwium: to co było na pierwszym kolokwium, do tego dodatkowo umiejętność korzystania z funktorów i wyrażeń lambda, zwłaszcza w połączeniu z algorytmami z biblioteki standardowej.

Literatura

Środowisko programistyczne

Oficjalnym środowiskiem są narzędzia zainstalowane na linuksowych komputerach w pracowniach studenckich oraz na serwerze spk-ssh.if.uj.edu.pl (można się na niego zalogować z domu). Każdy ma obowiązek znać te narzędzia i umieć się nimi posługiwać. Oddawany kod musi być kompilowalny przy ich pomocy.

Oprócz kompilatora g++ w wersji 4.7 i związanych z nim bibliotek (standardowa część dystrybucji Debian 7) dostępny jest również g++ w wersji 6 (patrz plik /app/Cpp/gcc6.3.0/CZYTAJ.txt). Ta wersja w pełni obsługuje C++14.

Zajęcia 2017-02-28

Zajęcia wprowadzające — przypomnienie podstaw:

Zadania do wykonania podczas zajęć bądź w domu:

Zajęcia 2017-03-07

Omawiane zagadnienia:

Zadania do wykonania podczas zajęć bądź w domu:

Zajęcia 2017-03-14

Omawiane zagadnienia:

Zadania do wykonania podczas zajęć bądź w domu:

Zajęcia 2017-03-21

Omawiane zagadnienia:

Dyskusja zajęła całe zajęcia, pozostałe punkty przesuwamy więc na następny tydzień. Patrz poczynione ustalenia.

Zadanie domowe: przemyśleć w jaki sposób chcecie zaimplementować drzewo, mieć gotowy kod w C++ pokazujący jak te pomocnicze obiekty reprezentujące węzły i iteratory by wyglądały.

Zajęcia 2017-03-28

Omawiane zagadnienia:

Zadania do wykonania podczas zajęć bądź w domu:

Zajęcia 2017-04-04

Omawiane zagadnienia: zawartość modułu 5 (klasy cech) i ogólne spojrzenie na moduł 6 (funkcje typów).

Zadania do wykonania podczas zajęć bądź w domu:

Zajęcia 2017-04-11

Kolokwium nr 1 (zakres tematyczny: patrz początek tej strony). Należy spodziewać się pisania i analizowania fragmentów kodu, ale będziemy to robić na papierze.

Zajęcia 2017-04-25

Pojedyncze zajęcia między dwoma długimi weekendami, więc może nie róbmy na nich niczego nowego. Poświęcimy je projektowi zaliczeniowemu i m.in. przedyskutujemy co jeszcze drzewo powinno mieć.

Zadanie domowe: napisać choć kilka banalnych testów dla drzewa, w drugiej kolejności popracować nad dokumentacją. Jeśli ktoś jeszcze nie zaimplementował przeglądania drzewa, to proszę to odłożyć na później. Na pierwszych zajęciach w maju obowiązkowo trzeba mieć zaimplementowany co najmniej jeden test jednostkowy.

Zajęcia 2017-05-09

Omawiane zagadnienia: idea metaprogramowania opartego o szablony (patrz moduł 8), wprowadzone w C++11 funkcje i wartości constexpr. Następnie praca własna nad projektem i wymienianie się testami.

Zadania do wykonania podczas zajęć bądź w domu:

Zajęcia 2017-05-16

Omawiane nowe zagadnienia: funktory (patrz moduł 11).

Oprócz tego wróciliśmy jeszcze na chwilę do funkcji constexpr, a potem do projektu zaliczeniowego. Wszyscy studenci proszeni są o przesłanie aktualnej wersji plików źródłowych, tak aby prowadzący mógł oszacować ile już zostało zrobione. Wysyłkę najłatwiej zrobić za pomocą programiku dostępnego na pracowni po zalogowaniu się w trybie linuksowym. Program nazywa się /home/palacz/kolokwia/submit-files, należy mu podać jako argumenty nazwy plików do wysłania. Na przykład, jeśli oprócz implementacji drzewa mamy dwa pliki z testami, to w linii poleceń należy wydać takie polecenie:

/home/palacz/kolokwia/submit-files drzewo.hpp tests01.cpp tests02.cpp

Zajęcia 2017-05-23

Dzisiaj mieliśmy mówić o wyrażeniach lambda, ale przesuńmy to na następny tydzień.

Zamiast tego zajmijmy się zarządzaniem pamięcią przy pomocy inteligentych wskaźników. W module 10 na ważniaku znajdziecie ogólne omówienie problemu oraz opis klasy auto_ptr. Ta klasa jest przestarzała — we współczesnym kodzie używa się unique_ptr oraz shared_ptr. Proszę się z nimi samodzielnie wstępnie zapoznać, za tydzień wspólnie je przedyskutujemy i podsumujemy.

Przejrzenie przesłanych w zeszłym tygodniu projektów wykazało że tylko niektórzy z Was zabrali się za pisanie dokumentacji. Proszę to nadgonić, Doxygen przecież nie jest czymś skomplikowanym.

W niektórych projektach brakuje też stowarzyszonych definicji typów (Drzewo<double>::value_type, Drzewo<double>::iterator::reference_type, itd.). Bardzo proszę uzupełnić te braki.

Uzupełniony kod można mi przesłać tak samo jak w zeszłym tygodniu, tzn. przy pomocy programiku submit-files. Proszę zrobić to do piątku, w weekend powinienem mieć wolną chwilę na przejrzenie Waszych plików.

Zajęcia 2017-05-30

Wyrażenia lambda jako ulepszenie funktorów. Wyjaśnienie podstaw na prostym przykładzie, a po pełny opis funktorów odsyłam Państwa do artykułu z czasopisma Dr. Dobb's oraz do notatek z kursu C++ prowadzonego w Michigan.

W drugiej kolejności: omówienie zastosowań unique_ptr oraz shared_ptr (przy okazji również weak_ptr).

Potem praca własna. Oprócz przeczytania materiałów o wyrażeniach lambda proszę przejrzeć moduł 14 z ważniaka, tak aby zdobyć ogólne pojęcie o alokatorach i dowiedzieć się co robi program C++ gdy zabraknie mu wolnej pamięci.

Zajęcia 2017-06-06

Kilka prostych zadań do wykonania z użyciem wyrażeń lambda:

Zapoznaj się z funkcjami std::max_element i std::min_element. Jakie są konsekwencje tego że w C++17 dodano w ich deklaracjach słowo kluczowe constexpr?

Zajęcia 2017-06-13

Kolokwium numer dwa (papierowe, tak samo jak poprzednie). A że to ostatnie zajęcia w semestrze, to przejrzeć ocenione odpowiedzi i o nich ewentualnie podyskutować będzie można na dowolnym z dyżurów w sesji.

Zakres materiału: patrz góra strony.