Podstawy inżynierii oprogramowaniaInżynieria oprogramowania (L)Programowanie i projektowanie obiektowe
Opis przedmiotu:
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 - obejmuje 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
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.