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 sposob łączą podstawową wiedzę z zakresu baz
danych i inżynierii oprogramowania w obszarze projektowania obiektowego w
wybranych wspołczesnych realiach technologicznych.
Wymagania: przyda się znajomość paradygmatu obiektowego, pojęć obiektu,
konstruktora, dziedziczenia, polimorfizmu i jego realizacji we wspoł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, obiektow, 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. wyzwalacze
5. indeksy
6. 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 typow, dynamiczne/luźne typowanie
5. obiekty, właściwości
6. specyfika **this** \- wiązanie kontekstowe
7. listy/tablice
8. enumeracja składowych obiektow vs enumeracja elementow tablic
9. funkcje jako typy pierwszoklasowe (first class citizens)
10. memoizacja
11. redefinicje funkcji
12. domknięcia
13. tworzenie obiektow - 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 - podejście CommonJS vs RequireJS
21. obiekty hostow - 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ęzykow do Javascript (m.in. LLVM, emscripten, inne)
6. wzorce projektowe i wzorce architektury
1. wzorce kreacyjne - singleton, factory
2. wzorce strukturalne - decorator, proxy, adapter
3. wzorce czynnościowe - composite, interpreter, observer, event aggregator, memento, state, chain of responsibility
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. zarządzanie budowaniem aplikacji (Grunt/Gulp)
3. sposob działania, instalacja
4. podstawowe moduły, m.in. filesystem, http
5. framework Compact - idea middleware
6. framework Express - routing, wzorzec MVC, silnik Embedded JS
7. framework sails.js
8. autentykacja/autoryzacja
9. komunikacja z bazą danych
9. testy jednostkowe aplikacji Javascript - framework Mocha
Część dodatkowa - wykłady o charakterze uzupełniającym, przedstawienie podstaw
wybranych zaawansowanych technologii wytwarzania aplikacji przy użyciu
Javascript, m.in.
* WebGL, grafika 3D
* aplikacje mobilne - framework Cordova/PhoneGap
* wybrane ramy wytwarzania aplikacji w przeglądarce (ExtJS, AngularJS)
Pracownia
Pracownia będzie polegała na uzupełnieniu materiału z wykładu szeregiem zadań
o charakterze praktycznym. Przewiduje się listy zadań odpowiadajace
poszczegolnym partiom materiału z wykładu.