Program zajęć PK: UML

Plan na zajęcia (laboratoria):

  1. Organizacja + bonus
  2. UML: diagram przypadków użycia
  3. UML: same przypadki użycia, diagram maszyny stanowej, diagram sekwencji
  4. UML: diagram klas/obiektów i kodzenie w oparciu o niego
  5. Wzorce projektowe + kodzenie w oparciu o diagram klas
  6. jw. + refaktoryzacja
  7. Konsolidacja całości i przedstawienie aplikacji z całego semestru

Zajęcia 1:

  1. Kwestie organizacyjne
    1. Warunki zaliczenia
    2. Ustalenie terminu wykładu
    3. Ustalenie terminów laboratoriów
  2. Kolokwium dodatkowe bez negatywnych konsekwencji, zakres materiału -przedmiot WDP z pierwszego roku, a dokładniej z książki Opus Magnum tom I (bez rozdziału o std::string i std::vector)
  3. Na następny raz: znać diagramy przypadków użycia (i to dobrze), umieć je opisywać

Zajęcia 2:

  1. Modelowanie diagramu przypadków użycia [45 min] np. w: https://yuml.me/ ,lub https://www.draw.io/ , lista narzędzi do modelowania UML
    1. Za to można dostać do 1 p dla tych co zasłużą w odpowiednim czasie
    2. Przykładowe diagramy
  2. Opis przypadków użycia (opis 3 przypadków po 1 p za przypadek)
    1. Nazwa przypadku
    2. Opis
    3. Aktorzy
    4. Warunki początkowe
    5. Scenariusz główny
    6. Scenariusz alternatywny
    7. Warunki końcowe
    8. Wymagania niefunkcjonalne
  3. Zadanie: Miesiąc na przypomnienie materiału z pierwszego roku z Wstępu do programowania np. z dobrej książki Opus Magnum (bez operacji wejścia-wyjścia, chociaż polecam), potem szczegółowe kolokwium
  4. Zadanie do 28 marca: proszę wysłać samodzielnie zrobiony diagram sekwencji/przebiegu [do 1,5 p, ale pierwsze 5 osób może dostać o 0,5 więcej].
    1. Treść zadania: co student musi zrobić aby zaliczyć rok na PK, oczywiście nie musi być nie wiadomo jak wiele szczegółów, zależy mi na przemyśleniu zagadnienia i zastosowaniu poprawnym maksymalnie dużo możliwości tego diagramu
    2. Zadanie można wysłać wyłącznie przez ELF
  5. Zadanie do 13 marca 13 kwietnia: proszę wysłać samodzielnie zrobiony diagram stanów (zwany diagramem maszyny stanowej) [do 1,5 p, ale pierwsze 5 osób może dostać o 0,5 więcej]
    1. Treść zadania: zdobywanie inżyniera na PK
    2. Zadanie można wysłać wyłącznie przez ELF

Zajęcia 3:

  1. Wzmianka o wzorcach projektowych
    1. Dlaczego uważać z ich stosowaniem
    2. Dlaczego uważać z ich stosowaniem 2 (wg Ericsona)
    3. Ponoć warte poznania wzorce projektowe 1, 2
  2. Wzorzec kompozyt
  3. Zadanie praktyczne
  4. Punktacja (za pełne, poprawne zrobienie zadania):
    1. Trzy pierwsze osoby: 3p
    2. Kolejne trzy osoby: 2,5p
    3. Kolejne trzy osoby: 2p
    4. Reszta osób, które skończą wszystko do końca zajęć: 1,5p
  5. Uwaga:
    1. Za udostępnienie swojego zadania innym -1 punkt, na każdego, komu udostępniono
    2. Aby punkty zdobyte na zajęciach się liczyły proszę załączyć na elfa.
  6. Wymagania na maksa punktów (na zasadzie wszystko albo nic):
      1. pełna implementacja diagramu
      2. virtualny destruktor gdzie trzeba
      3. enkapsulacja jak należy
      4. rozbicie na pliki (ze strażnikami nagłówków, plik nagłówkowy + źródłowy)
      5. przykładowe dane: testy
        1. Mają być użyte wszystkie bramki
        2. Ma występować zagnieżdżenie bramek (wszak po to implementujemy to)!
        3. Ma działać!
      6. porządne override i const gdzie należy
      7. sprawdzanie czy nie wprowadzono błędnych danych
      8. wcięcia (mogą być automatyczne)
  7. Przypomnienie -proszę sobie przypominać materiał z pierwszego roku o C++,
    a najlepiej z dobrej książki np. Opus Magnum.

Zajęcia 4:

  1. Implementacja diagramu klas, będzie nim wzorzec Odwiedzający. Tę funkcjonalność będziemy dopisywać do tego co mieliśmy na ostatnich zajęciach, Z TEJ SAMEJ GRUPY!
  2. Punkty 4-7 jw.
  3. Przypominam o przypominaniu sobie programowania w C++ z I roku, po I-szym wykładzie bardzo szczegółowe kolokwium.
  4. Zadanie: Mieć na następny raz porządną, ładną implementacje, w przyszłości nie przyjmuję jedno-plikowców!

Zajęcia 5 (11 i 18 maja)

  1. Przygotowanie do zajęć:
    1. Kod w wielu plikach, z podziałem na nagłówki i definicje
    2. Zaimplementowane bramki: AND, OR, XOR, NOT
    3. Umieć zastosować inteligentny wskaźnik shared_ptr
    4. Umieć zapisać do/odczytać z pliku tekstowego w C++.
  2. Wytyczne do zadań, jak z zajęć 3 a ponadto:
    1. Nie przyjmuję już więcej jednoplikowców.
    2. Za wrzucenie na elfa dwóch takich samych plików -0,1 p.
    3. Za niewysłanie kodu będzie przyznana połowa z przyznanych punktów z zajęć.
    4. Za implementowanie w plikach stdfx -0,5 p.
    5. Proszę aby nie pisać metod, które w dokładnie takiej formie zostaną wygenerowane przez kompilator.

Zajęcia 6 (25 maja i 8 czerwca)

  1. Przygotowanie do zajęć:
    1. Kolokwium od 18:00
    2. Wymagania jw.
    3. Mieć działających wizytatorów, których się implementowało i wszystko na shared_ptr
    4. Wiedzieć po co przeciążamy operatory, oraz wiedzieć jak przeciążyć przykładowy operator (ostatni wykład lub inne przykładowe materiały)
    5. Najlepiej mieć implementacje zgodnie z treściami danej grupy
    6. Umiejętność odczytywania podanych argumentów programu
    7. Umieć odczytać z pliku tekstowego
  2. Wytyczne do oddawanych zadań, jak z zajęć 5, a ponadto:
    1. Wizytatory mają działać w oddawanym kodzie.
  3. 25 maja kolokwium o 18:00 w sali A3

Zajęcia 7 (15 i 22 czerwca)

  1. Przygotowanie do zajęć -mieć zaimplementowane poniższe (nieważne czy ktoś to miał w swojej grupie czy nie):
    1. Wszystkie wymagania z wcześniejszych zajęć
    2. Finalną wersję kodu z wszystkich laboratoriów, swoją w 100% (mam program antyplagiatowy)!
    3. Bramki: AND, OR, XOR, NOT
    4. Wzorzec odwiedzający
    5. Wszystko na shared_ptr (tylko odwiedzający nie musi z nich korzystać)
    6. Jeden przykład metody wytwórczej
    7. Mieć zaimplementowany wzorzec prototyp
    8. Mieć przeciążone operatory: &(dwuargumentowy), |, !, ^, <<, ( ) zamiast operation
    9. Mieć gettery i settery do wszystkich pól w klasach
    10. Przeczytać o wytycznych co do programowania, gdyż będzie refaktorka kodu
  2. 15 czerwca kolokwium o 18:00-19:00 mamy 3 kolokwia (na 9 punktów, czyli:
    1. z wykładów 3i4  (co obowiązuje na poszczególnych wykładach) [3p]
    2. kontenery standardowe C++ (materiały dla kontenerów) [3p]:
      1. std::vector i std::string [zadania na 1 punkt]
        1. Utworzenie vectora dla dowolnego typu, nie wymagam vector<bool>
        2. Dostęp do dowolnego elementu
        3. Sprawdzenie czy jest pusty, pobranie rozmiaru
        4. Przygotowanie vectora aby miał zaalokowaną pamięć na co najmniej N elementów
        5. Dodanie elementu na koniec, usunięcie z końca
        6. Czyszczenie vectora
      2. std::list i std::deque [zadania na 1 punkt]
        1. punkty jak z vectora: 1, 2, 4, 5, 6
        2. Dodawanie elementu na początek/koniec, usuwanie z początku/końca, dostęp do pierwszego/ostatniego elementu
        3. Przeglądanie przy użyciu iteratora, zakresowa pętla for
      3. std::set i std::map [zadania na 1 punkt]
        1. Utworzenie kontenera dla dowolnego typu, ale z konieczną wiedzą jakie metody/funkcje/funktory musimy dostarczyć aby używać danego typu w tych kontenerach jako klucz.
        2. Dodanie elementu
        3. Sprawdzenie czy istnieje element dla danego klucza
        4. Usunięcie elementu o danym kluczu
        5. Przeglądanie przy użyciu iteratora
        6. Korzystanie z std::pair (potrzebne przy std::map)
    3. Algorytmy uogólnione (materiały dla algorytmów),  trzeba wiedzieć co musi posiadać dany typ, lub na co musimy dostarczyć funkcję/funktor/lambdę [3p]:
      1. Umieć użyć algorytmy nie modyfikujące sekwencje takie jak: [zadania na 1 punkt]
        1. std::count
        2. std::equal
        3. std::min_element i std::max_element
        4. std::find
      2. Umieć zastosować algorytmu modyfikujące sekwencje: [zadania na 1 punkt]
        1. std::copy
        2. std::replace
        3. std::fill
        4. std::unique, tutaj przy okazji znać warunek jaki musi spełniać dana kolekcja, oraz umieć wyczyścić nieunikalne wartości z kontenera standardowego
      3. Umieć zastosować algorytmy uogólnione z własną funkcją/funktorem a najlepiej lambdą: [zadania na 1 punkt]
        1. std::count_if
        2. std::for_each
        3. std::remove_if
        4. std::sort

18 czerwca na wykładzie kolokwium na 10 punktów z mojej części (ze wszystkich wykładów), od godziny 13:00  w sali A1 zaczynamy pisać, natomiast 15 min wcześniej można przyjść do sali jak na konsultacje. Zakres (kolokwium będzie na zasadzie pisania kodu na kartce (nie co wypisze program)):

  • porządne pisanie:
    • konstruktorów
    • destruktorów
    • konstruktorów kopiujących i przenoszących
    • operatorów przypisania i przenoszenia
  • parę algorytmów uogólnionych z listy (na ok 1 punkt z 10)
  • r- i l- referencje i jak je przyjmować
  • przeciążanie operatorów w i poza klasą
  • operatory strumienia
  • operatory i konstruktory konwertujące
  • kiedy dana metoda nie jest generowana automatycznie
  • operatory których się nie przeciąża umieć użyć
  • std::vector – pobranie i zmiana rozmiaru, oraz to co na stronie opisywałem

II tura kolokwium ze wszystkich wykładów, wg powyższych zagadnień, w sali 19, od 16:15 dnia 22giego (piątek). Zakresem są wszystkie 5 wykładów, czyli to co wyżej + parę drobiazgów (kolejny termin nie może być prostszy), m. in.:

  • std::list wg opisu z kolokwium z kontenerów, umieć wrzucać do niej elementy na daną pozycję, używać na niej iteratorów, wiedzieć jakie są konstruktory (oczywiście podmienianie allocatora sobie darujemy)
  • std::distance()
  • inne algorytmy ze spisu obowiązującego na kolokwium z algorytmów uogólnionych

Po kolokwium zrobimy zajęcia nr 7, tura II, zapewne od ok. 18:00 w sali 19. Można zdobyć tutaj do 2 punktów, ważne jest przygotowanie do zajęć wg opisu na stronie: https://programowaniec.wordpress.com/program-zajec/program-zajec-pk/program-zajec-pk-uml/ Tutaj również proszę o listę chętnych, max 18 osób.


Kolokwium poprawkowe: 4 września 2018, od godziny 17:00 sala 19.

Zakres materiału: to poprawka ze wszystkiego, więc wszystkie moje wykłady (ten ostatni również), oraz materiał z części mgr Sucheni. Kolokwium poprawkowe będzie BARDZO TRUDNE, dlatego polecam się przygotować, gdyż za rok na chwilę obecną nie ma UMLa!

Kolejne informacje będą się tutaj pojawiać, dlatego zachęcam do śledzenia.


Punktacja zdobyta do tej pory

Zachęcam do przejrzenia sugestii do stylu programowania