IO (Inżynieria oprogramowania)PiPO (Projektowanie i programowanie obiektowe)
Grupy efektów kształcenia
Podstawy inżynierii oprogramowaniaInżynieria oprogramowania (L)Programowanie i projektowanie obiektowe
Opis przedmiotu:
_Przedmiot dostępny w dwóch wersjach: kurs inżynierski za 5 ECTS oraz
przedmiot I1 z egzaminem za 6 ECTS (oba zaliczają te same grupy efektów
kształcenia). Wybór kursu (bez egzaminu) zaznacza się poprzez dodatkowe
zapisanie się do grupy ćwiczeniowej z etykietą "wykład okrojony"._
Celem zajęć jest przedstawienie studentom praktyki projektowania obiektowego
oprogramowania. Zajęcia w zwięzły sposób łączą podstawową wiedzę z zakresu baz
danych i inżynierii oprogramowania w obszarze projektowania obiektowego w
wybranych współczesnych realiach technologicznych.
Wymagania: przyda się znajomość paradygmatu obiektowego, pojęć obiektu,
konstruktora, dziedziczenia, polimorfizmu i jego realizacji we współczesnych
językach programowania.
Zajęcia są pomyślane jako zamiennik dla następujących kanonicznych zajęć:
* w części dotyczącej baz danych - Bazy danych
* w części dotyczącej projektowania obiektowego (wzorce projektowe) i inżynierii oprogramowania - Projektowanie obiektowe oprogramowania
* w części praktycznej dotyczącej wytwarzania aplikacji internetowych - specjalizowane kursy technologii wytwarzania aplikacji internetowych, m.in. kurs Projektowanie aplikacji ASP.NET, kurs Ruby on Rails, kurs WWW
## Wykład
Część podstawowa - obiejmuje materiał realizujący wymagania programowe:
1. podstawy projektowania obiektowego
1. analiza obiektowa
2. zbieranie wymagań
3. przypadki użycia
2. język UML
1. diagramy klas, obiektów, zachowań i sekwencji
3. od modelu pojęciowego do modelu relacyjnego
1. etap modelu pojęciowego
2. etap modelu obiektowego
3. etap modelu relacyjnego
4. podstawy praktyki baz danych
1. tabele, kolumny, więzy
2. klucze podstawowe, klucze obce
3. widoki, procedury składowane
4. indeksy
5. język SQL - zapytania SELECT, INSERT, UPDATE, DELETE, podzapytania, klauzule WHERE, ORDER, TOP, JOIN, złączenia wewnętrzne i zewnętrzne
5. język Javascript - nowoczesny hybrydowy język funkcyjno-obiektowy
1. filozofia języka - Javascript jako praktyczna realizacja idei Javy - write once run everywhere
2. historia, środowiska uruchomieniowe (Google V8, Microsoft Chakra)
3. podstawowe elementy języka, zasięg zmiennych, hoisting
4. system typów, dynamiczne/luźne typowanie
5. obiekty, właściwości
6. specyfika `this` \- wiązanie kontekstowe
7. listy/tablice
8. enumeracja składowych obiektów vs enumeracja elementów tablic
9. funkcje jako typy pierwszoklasowe (first class citizens)
10. memoizacja
11. redefinicje funkcji
12. domknięcia
13. tworzenie obiektów - funkcje konstruktorowe, prototypy, literały
14. dziedziczenie/enkapsulacja
15. IIFE (immediately-invoked function expressions)
16. lambda wyrażenia
17. klasy
18. generatory
19. callbacks vs promises vs async/await
20. modularyzacja
21. obiekty hostów - przeglądarka internetowa vs środowisko node.js
22. debugowanie kodu w przeglądarce
23. środowiska zintegrowane
24. narzędzia jakościowe: JSLint/JSHint/Closure
25. ekosystem/nadzbiory/transpilacja (Typescript/Coffeescript/ES6)
26. Javascript jako język frontendowy i backendowy - kompilacja innych języków do Javascript (m.in. LLVM, emscripten, inne)
7. aplikacja internetowa w przeglądarce
1. podstawy HTML5, elementy struktury dokumentu
2. podstawy CSS3, pozycjonowanie, wygląd, stylowanie responsywne
3. podstawy modelu Document Object Model (DOM)
4. model zdarzeniowy, pętla zdarzeń
5. obiekt canvas i podstawy grafiki bitmapowej
8. aplikacja internetowa na serwerze
1. środowisko node.js, pakiety npm
2. podstawowe moduły, m.in. filesystem, http
3. framework Express - routing, wzorzec MVC, silnik widoków EJS
4. framework Socket.IO
5. autentykacja/autoryzacja
6. komunikacja z wybraną bazą danych
9. testy jednostkowe aplikacji Javascript - framework Mocha, technologia Selenium
Pracownia
Pracownia będzie polegała na uzupełnieniu materiału z wykładu szeregiem zadań
o charakterze praktycznym. Przewiduje się listy zadań odpowiadajace
poszczególnym partiom materiału z wykładu.