feat: add first-semester C++ course
This commit is contained in:
@@ -14,7 +14,8 @@ INF · Informatyka
|
||||
│ ├── ASM · RV32I From Blinker to RISC-V [9]
|
||||
│ └── C · Freestanding RV32I and K&R [13]
|
||||
├── Rok 2
|
||||
│ ├── C++ [15]
|
||||
│ ├── C++ · semestr 1 [10 active]
|
||||
│ ├── C++ · semestr 2 [10 planned]
|
||||
│ ├── FreeRTOS C [15]
|
||||
│ ├── FreeRTOS C++ [15]
|
||||
│ ├── POSIX Threads [15]
|
||||
@@ -29,10 +30,11 @@ INF · Informatyka
|
||||
```
|
||||
|
||||
Pierwszy blok zawiera dokładnie 30 tematów: Bash 8 + ASM 9 + C 13.
|
||||
Drugi blok zawiera dokładnie 60 tematów: FreeRTOS C 15 + C++ 15 + FreeRTOS
|
||||
C++ 15 + POSIX Threads 15. OOP and Design Patterns jest osobnym kursem i nie
|
||||
jest wliczany do tych 60. `std::thread`/`std::jthread` i Boost.Asio są kolejnym
|
||||
etapem i nie są jeszcze częścią tego katalogu.
|
||||
Drugi rok zawiera dwusemestralny kurs teoretyczny C++ (10 + 10 lekcji) oraz
|
||||
osobne serie laboratoryjne FreeRTOS C, FreeRTOS C++ i POSIX Threads po 15
|
||||
kart. OOP and Design Patterns jest osobnym kursem odniesienia. Aktywna seria
|
||||
`cpp` obejmuje obecnie komplet pierwszego semestru. Biblioteka standardowa,
|
||||
`std::thread`/`std::jthread` i Boost.Asio należą do kolejnych semestrów.
|
||||
|
||||
Kolejność stosowania języków jest jawna:
|
||||
|
||||
|
||||
+49
-26
@@ -1,32 +1,55 @@
|
||||
# C++ — plan kart
|
||||
# C++ — plan wielosemestralny i stan wdrożenia
|
||||
|
||||
Status: plan, 15 tematów.
|
||||
Źródło zakresu: `/home/user/dev/keys/cxx.md`. Standard kursu: C++20 z
|
||||
wybranymi, jawnie oznaczonymi elementami C++23. Cykl obejmuje 53 lekcje
|
||||
teoretyczne. Projekty, FreeRTOS i praca na urządzeniu pozostają osobnymi
|
||||
zajęciami.
|
||||
|
||||
Seria uczy języka i modelu obiektu bez zależności od RTOS. Dopiero po niej
|
||||
uczeń przechodzi do FreeRTOS C++ i rozpoznaje, które zachowanie pochodzi z C++,
|
||||
a które z wrappera lub kernela. Kurs może być prowadzony równolegle z
|
||||
FreeRTOS C, ponieważ oba mają wspólny ukończony prerekwizyt C.
|
||||
| Etap | Lekcje | Oś merytoryczna | Stan |
|
||||
| --- | ---: | --- | --- |
|
||||
| Rok 2, semestr 1 | 10 | fundamenty języka, klasy, czas życia i RAII | **wdrożony** |
|
||||
| Rok 2, semestr 2 | 10 | OOP i C++ w systemach wbudowanych | plan |
|
||||
| Rok 3, semestr 1 | 16 | STL i biblioteka standardowa | plan |
|
||||
| Rok 3, semestr 2 | 17 | współbieżność, korutyny i Boost.Asio | plan |
|
||||
|
||||
## Rok 2, semestr 1 — aktywna seria `cpp`
|
||||
|
||||
Książka prowadząca: Bjarne Stroustrup, *A Tour of C++, 3rd Edition*.
|
||||
*The C++ Programming Language, 4th Edition* jest źródłem uzupełniającym dla
|
||||
nauczyciela. Karty parafrazują pojęcia i zawierają własne eksperymenty; nie
|
||||
kopiują treści książek.
|
||||
|
||||
```text
|
||||
C++
|
||||
├── CPP01 · Translation Units, Linkage and Namespaces
|
||||
├── CPP02 · Classes, Encapsulation and Invariants
|
||||
├── CPP03 · Construction, Destruction and RAII
|
||||
├── CPP04 · References, const and Value Categories
|
||||
├── CPP05 · Copy, Move and the Rule of Zero/Five
|
||||
├── CPP06 · Ownership and Resource Types
|
||||
├── CPP07 · Function and Class Templates
|
||||
├── CPP08 · Static Polymorphism and CRTP
|
||||
├── CPP09 · Inheritance, Interfaces and Dynamic Dispatch
|
||||
├── CPP10 · Operator Overloading and Strong Types
|
||||
├── CPP11 · Containers, Iterators and Algorithms
|
||||
├── CPP12 · Lambdas, Function Objects and Callables
|
||||
├── CPP13 · Error Models with and without Exceptions
|
||||
├── CPP14 · Object Layout, ABI and Binary Evidence
|
||||
└── CPP15 · Resource-type Integration Project
|
||||
C++ · Rok 2 · Semestr 1
|
||||
├── CPP01 · Oddzielna kompilacja, deklaracja, definicja, linkage i namespace
|
||||
├── CPP02 · Typy, inicjalizacja, auto, const, enum class i typ użytkownika
|
||||
├── CPP03 · Wskaźniki, referencje, tablice, nullptr i argumenty
|
||||
├── CPP04 · Funkcje, przeciążanie, wartości zwracane, zakres i modułowość
|
||||
├── CPP05 · Klasa i obiekt: pola, metody, dostęp, interfejs i implementacja
|
||||
├── CPP06 · Hermetyzacja, niezmienniki i odpowiedzialność klasy
|
||||
├── CPP07 · Konstruktory, destruktory i inicjalizacja obiektu
|
||||
├── CPP08 · Zakres i czas życia obiektów automatycznych, statycznych i dynamicznych
|
||||
├── CPP09 · RAII i powiązanie zasobu z czasem życia obiektu
|
||||
└── CPP10 · Kopiowanie, przenoszenie, Rule of Zero/Five i własność zasobu
|
||||
```
|
||||
|
||||
Kurs OOP/wzorców pozostaje osobną serią. Karty C++ mogą przygotowywać potrzebny
|
||||
mechanizm, ale nie udają, że każda cecha języka jest wzorcem GoF. Gdy w kodzie
|
||||
pojawia się rzeczywisty problem projektowy, karta C++ linkuje do odpowiedniej
|
||||
karty OOP jako rozwinięcia decyzji.
|
||||
Każda karta ma trzy niezależne programy, kompilację
|
||||
`-std=c++20 -Wall -Wextra -Wpedantic -Werror`, dokładny kontrakt stdout,
|
||||
testy Node, widok React, PDF A4 i akcje `build/test/run/debug` dla profilu
|
||||
`native-amd64`. Generator źródeł znajduje się w
|
||||
`tools/generate_cpp_y2s1.py` tego repozytorium.
|
||||
|
||||
## Granice kolejnych semestrów
|
||||
|
||||
- Semestr 2 rozpoczyna się od typów wartościowych i operatorów, a kończy
|
||||
teorią wrapperów `Task`, `StaticQueue<T,N>`, `Mutex` i `LockGuard`.
|
||||
- Rok 3, semestr 1 należy do STL: kontenery, iteratory, algorytmy, ranges,
|
||||
typy pomocnicze, smart pointery i narzędzia biblioteki standardowej.
|
||||
- Rok 3, semestr 2 obejmuje `thread`/`jthread`, synchronizację, atomiki,
|
||||
futures, korutyny i Boost.Asio.
|
||||
- Szczegóły API FreeRTOS, portu, ISR i uruchamiania na płytce pozostają w
|
||||
seriach FreeRTOS C oraz FreeRTOS C++.
|
||||
|
||||
Kurs OOP/wzorców jest osobną serią odniesienia. Karta C++ linkuje do niej
|
||||
dopiero wtedy, gdy występuje rzeczywisty problem projektowy, a nie tylko
|
||||
pojedynczy mechanizm języka.
|
||||
|
||||
Reference in New Issue
Block a user