Uniwersytet Warszawski University of Warsaw
Wyszukiwarka
 W bieżącym katalogu

Wydział Matematyki, Informatyki i Mechaniki

 

Magisterskie Studia Uzupełniające
na kierunku informatyka

 

Program zajęć - ROK I

Matematyczne podstawy informatyki I (teoria mnogości i algebra)

Rodzaj: wykład (20) z ćwiczeniami (20), egzamin, I trymestr
Autorzy programu: P. Urzyczyn, I. Walukiewicz
Sylabus:

  1. Zbiory, relacje, funkcje:
  • operacje na zbiorach,
  • rodzaje relacji,
  • relacja równoważności, zasada abstrakcji,
  • funkcje, obrazy, przeciwobrazy
  • Porządki częściowe, kresy, punkty stałe:
    • pojęcie porządku, elementy wyróżnione,
    • ograniczenia i kresy,
    • lemat Kuratowskiego-Zorna,
    • twierdzenie Tarskiego o punkcie stałym.
  • Liczby naturalne, moce porządki dobre, indukcja:
    • aksjomaty Peano,
    • liczby von Neumeanna,
    • zbiory przeliczalne i nieprzeliczalne,
    • rozumowanie przekątniowe na przykładzie twierdzenia Cantora,
    • uporządkowanie dobre i częściowe dobre (dobre ufundowanie),
    • indukcja w zbiorach dobrze ufundowanych.
  • Algebry, homomorfizmy, kongruencje:
    • sygnatura algebraiczna,
    • pojęcie podalgebry, homomorfizmu, kongruencji,
    • pierwsze twierdzenie o homomorfiźmie.
  • Słowa, drzewa, termy:
    • algebry słów i drzew binarnych,
    • pojęcie termu i równania,
    • definiowanie równościowe klas algebr,
    • indukcja strukturalna.
  • Unifikacja:
    • algorytm unifikacji,
    • poprawność,
    • złożoność,
    • zastosowania unifikacji.
  • Dwuwartościowy rachunek zdań:
    • algebra Boole'a,
    • funkcjonalna zupełność,
    • analogia z algebrą zbiorów, wartościowania w ciałach zbiorów.
  • Słowa i języki:
    • operacje na słowach i językach,
    • języki regularne jako rozwiązania równań (punkty stałe),
    • algebra wyrażeń regularnych,
    • charakteryzacja regularności przez ilorazy.
  • Języki bezkontekstowe:
    • jezyki bezkontekstowe jako punkty stałe,
    • gramatyki bezkontekstowe.
  • Rezerwa
  • Literatura:
    1. J. Tiuryn, "Wstęp do teorii mnogości i logiki", skrypt dla studentów UW, 1997.
    2. J. Hopcroft, J. Ullman, "Wprowadzenie do teorii automatów, języków i obliczeń", PWN, 1994.

    3. D. Kozen, "Automata and Computability", Springer, 1997.

    Matematyczne podstawy informatyki II (teoria obliczeń)

    Rodzaj: wykład (20) z ćwiczeniami (20), egzamin, II trymestr
    Autorzy programu: P. Urzyczyn, I. Walukiewicz
    Sylabus:

    1. Automaty skończone:
    • automaty deterministyczne i niedeterministyczne,
    • charakteryzacja języków regularnych przez automaty,
    • lemat o pompowaniu.
  • Automaty ze stosem:
    • charakteryzacja języków bezkontekstowych przez automaty,
    • lemat o pompowaniu,
    • języki kontekstowe - przykłady.
  • Deterministyczne języki bezkontekstowe:
    • definicja i przykłady,
    • klasy LR(k), zastosowania w kompilatorach,
    • własności domknięcia języków bezkontekstowych.
  • Obliczalność:
    • gramatyki typu 0,
    • maszyny Turinga,
    • teza Churcha, inne modele obliczeń.
  • Problemy rozstrzygalne i nierozstrzygalne I:
    • zbiory rekurencyjnie przeliczalne (algorytmy częściowe),
    • problem stopu,
    • problem odpowiedniości Posta,
    • rozstrzygalne i nierozstrzygalne problemy z teorii jezyków.
  • Problemy rozstrzygalne i nierozstrzygalne II:
    • konkretne (z praktyki matematyczno/informatycznej) problemy rozstrzygalne i nierozstrzygalne, wg. wyboru prowadzącego.
  • Złożoność obliczeniowa:
    • pojęcie złożoności czasowej i pamięciowej,
    • zależności między klasami złożoności,
    • złożoność wielomianowa.
  • NP-zupełność:
    • problem spełnialności,
    • inne problemy NP-zupełne,
    • informacja o klasie co-NP.
  • Inne ważne klasy złożoności:
    • klasa PSPACE, rachunek zdań drugiego rzędu,
    • przykłady zadań trudnych dla czasu wykładniczego,
    • sieci Boolowskie, klasa NC.
  • Rezerwa.
  • Literatura:
    1. J. Hopcroft, J. Ullman, "Wprowadzenie do teorii automatów, języków i obliczeń", PWN, 1994.
    2. D. Kozen, "Automata and Computability", Springer-Verlag, 1997.
    3. D. Niwiński, Notatki do wykładu "Języki, automaty i obliczenia".

    Matematyczne podstawy informatyki III (logika)

    Rodzaj: wykład (20) z ćwiczeniami (20), egzamin, III trymestr
    Autorzy programu: P. Urzyczyn, I. Walukiewicz
    Sylabus:

    1. Klasyczny rachunek zdań i rachunek predykatów:
    • składnia i formalna semantyka.
  • Tautologie logiczne, dowodzenie twierdzeń:
    • tautologie pierwszego rzędu, przykłady,
    • wnioskowanie w rachunku zdań (w stylu Hilberta),
    • wnioskowanie w rachunku pierwszego rzędu.
  • Twierdzenie o pełności:
    • pojęcie pełności systemu dowodzenia,
    • szkic dowodu pełności dla rachunku zdań,
    • informacja o pełności rachunku kwantyfikatorów.
  • Elementy teorii modeli:
    • twierdzenie o zwartości, przykładowe konsekwencje,
    • pojęcie zupełności, przykłady teorii rozstrzygalnych,
    • nierozstrzygalność logiki klasycznej pierwszego rzędu,
    • informacja o niezupełności i nierozstrzygalności arytmetyki.
  • Rachunek sekwentów:
    • wnioskowanie w stylu Gentzena,
    • informacja o twierdzeniu o eliminacji cięcia.
  • Rezolucja:
    • dowodzenie klauzul Horna z aksjomatów,
    • rezolucja jako wariant eliminacji cięcia,
    • informacja o programowaniu w logice.
  • Logika a typy danych:
    • naturalna dedukcja,
    • analogie między formułami i typami,
    • normalizacja.
  • Logiki programów:
    • logiki Hoare'a,
    • logika algorytmiczna i dynamiczna,
    • logiki temporalne.
  • Logika we współczesnej informatyce:
    • tematyka do wyboru przez prowadzącego, np. rachunek lambda lub teoria skończonych modeli.
  • Rezerwa.
  • Literatura:
    1. J. Tiuryn, "Wstęp do teorii mnogości i logiki", skrypt dla studentów UW, 1997.
    2. H.-D. Ebbinghaus, J. Flum, W. Thomas, "Mathematical Logic", Springer-Verlag, 1984.
    3. J.H. Gallier, "Logic for Computer Science", Harper and Row, 1986.
    4. N. Wirth, "Wstęp do programowania systematycznego", WNT, 1978.

    Matematyka dyskretna

    Rodzaj: wykład (20) z ćwiczeniami (20), egzamin, I trymestr
    Autorzy programu: B. Chlebus, K. Diks
    Sylabus:

    1. Równania rekurencyjne:
    • funkcje tworzące,
    • liczby harmoniczne, Fibonacciego, Catalana.
  • Asymptotyka:
    • notacje asymptotyczne,
    • szacowanie rozwiązań równań typu "dziel i rządź",
  • Permutacje:
    • rozkład na cykle,
    • inwersje i znak permutacji,
    • algorytmy generowania permutacji.
  • Zliczanie konfiguracji kombinatorycznych:
    • współczynniki dwumianowe,
    • zasada włączania-wyłączania.
  • Grafy I:
    • drogi, cykle, drzewa,
    • składowe: spójne, silnie spójne, 2-spójne,
    • cykle Eulera.
  • Grafy II:
    • grafy planarne, wzór Eulera,
    • kolorowania grafów, liczba chromatyczna,
    • twierdzenie Brooksa i twierdzenie Visinga.
  • Problemy optymalizacji w sieciach:
    • minimalne drzewa rozpinające, algorytm Kruskala,
    • algorytmy zachłanne i matroidy,
    • przepływy w sieciach.
  • Problemy ekstremalne:
    • tw. Mengera o rozłącznych drogach w grafach,
    • tw. Dilwortha o częściowych porządkach,
    • tw. Halla o systemach różnych reprezentantów,
    • tw. Koeniga, skojarzenia w grafach dwudzielnych,
    • tw. Ramseya,
    • cykle Hamiltona i tw. Ore.
  • Teoria liczb:
    • podzielność, NWD, algorytm Euklidesa,
    • liczby pierwsze, podstawowe tw. arytmetyki,
    • chińskie tw. o resztach,
    • małe tw. Fermata i uogólnienie Eulera,
    • poprawność metody RSA szyfrowania z kluczem jawnym.
  • Rachunek prawdopodobieństwa dla przestrzeni dyskretnych:
    • prawdopodobieństwo warunkowe i niezależność,
    • zmienne losowe, wartość oczekiwana, wariancja, nierówność Czebyszewa,
    • funkcje tworzące rozkładów prawdopodobieństwa,
    • metoda probabilistyczna.
    Literatura:
    1. W. Feller, "Wstęp do rachunku prawdopodobieństwa", PWN, 1987.
    2. R.L. Graham, D. E. Knuth, O. Patashnik, "Matematyka konkretna", PWN, 1996.
    3. W. Lipski, "Kombinatoryka dla programistów", WNT, 1982.
    4. V. Bryant, "Aspekty kombinatoryki", WNT, 1997.

    Struktury danych

    Rodzaj: wykład (20) z ćwiczeniami (20), egzamin, II trymestr
    Autorzy programu: B. Chlebus, K. Diks
    Sylabus:

    1. Poprawność i złożoność obliczeniowa algorytmów:
    • niezmienniki i częściowa poprawność,
    • własność stopu,
    • rodzaje złożoności obliczeniowej: czasowa, pamięciowa, pesymistyczna, średnia, amortyzowana.
  • Haszowanie:
    • haszowanie łańcuchowe,
    • adresowanie otwarte: liniowe, kwadratowe, podwójne; algorytm Brenta,
    • haszowanie zewnętrzne,
    • funkcje haszujące, uniwersalne rodziny funkcji haszujących.
  • Wyszukiwanie:
    • wyszukiwanie sekwencyjne, listy samoorganizujące się,
    • wyszukiwanie binarne w tablicach uporządkowanych,
    • wyszukiwanie interpolacyjne,
    • drzewa wyszukiwań binarnych.
  • Zrównoważone drzewa wyszukiwań binarnych:
    • 2-3 drzewa,
    • drzewa AVL,
    • drzewa samoorganizujące się,
    • B-drzewa, pliki indeksowe.
  • Selekcja, kolejki priorytetowe:
    • algorytmy selekcji: Hoare'a i "magicznych piątek",
    • kopce: drzewa lewicowe, kolejki dwumianowe i kopce Fibonacciego,
    • kolejka van Emde-Boasa.
  • Sortowanie:
    • dolne granice,
    • QuickSort, HeapSort, RadixSort,
    • sortowanie zewnętrzne: sortowanie wielofazowe, zewnętrzny QuickSort.
    Literatura:
    1. A.V. Aho, J.E. Hopcroft, J.D. Ullman, "Projektowanie i analiza algorytmów komputerowych", PWN, 1983.
    2. L. Banachowski, K. Diks, W. Rytter, "Algorytmy i struktury danych", WNT, 1996.
    3. T.H. Cormen, C.E. Leiserson, R.L. Rivest, "Wprowadzenie do algorytmów", WNT, 1997.

    Algorytmy sekwencyjne I

    Rodzaj: wykład (20) z ćwiczeniami (20), egzamin, III trymestr
    Autorzy programu: B. Chlebus, K. Diks
    Sylabus:

    1. Algorytmy grafowe:
    • komputerowe reprezentacje grafu,
    • algorytm Floyda-Warshalla,
    • metody przeszukiwania grafu,
    • znajdowanie składowych: spójnych, 2-spójnych, silnie-spójnych.
  • Algorytmy geometrii obliczeniowej:
    • wyszukiwanie geometryczne,
    • otoczka wypukła,
    • problemy bliskości, diagramy Voronoi,
    • geometria prostokątów.
  • Algorytmy dla tekstów:
    • wyszukiwanie wzorca w tekście: algorytmy KMP i BM,
    • kompresja tekstów: statyczne i dynamiczne kodowanie Huffmana,
    • kompresja Ziv-Lempela.
  • Algorytmy semi-numeryczne:
    • dyskretna i szybka transformacja Fouriera,
    • algorytmy dla wielomianów,
    • szybkie mnożenie Schoenhage-Strassena.
  • Algorytmy teorioliczbowe:
    • arytmetyka modularna,
    • randomizowane rozpoznawanie liczb pierwszych,
    • implementacja i bezpieczeństwo RSA.
    Literatura:
    1. A.V. Aho, J.E. Hopcroft, J.D. Ullman, "Projektowanie i analiza algorytmow komputerowych", PWN, 1983.
    2. E. Bach, J. Shallit, "Algorithmic Number Theory", MIT Press, 1996.
    3. L. Banachowski, K. Diks, W. Rytter, "Algorytmy i struktury danych", WNT, 1996.
    4. T.H. Cormen, C.E. Leiserson, R.L. Rivest, "Wprowadzenie do algorytmów", WNT, 1997.

    Języki i paradygmaty programowania I (programowanie imperatywne)

    Rodzaj: wykład (20) z ćwiczeniami (20), egzamin, I trymestr
    Autorzy programu:  P. Chrząstowski, J. Jabłonowski, A. Zaroda
    Sylabus:

    1. Wstęp:
    • poprawność programów, niezmienniki, warunek stopu,
    • składnia i semantyka języków programowania,
    • języki programowania:
      • historia,
      • klasyfikacja (języki niskiego i wysokiego poziomu, paradygmaty programowania),
    • realizacja języków programowania: interpreter, kompilator,
    • budowa kompilatora,
    • czas życia programu.
  • Opis składni języka programowania:
    • gramatyki regularne, wyrażenia regularne, automaty skończone,
    • gramatyki bezkontekstowe, BNF, diagramy składniowe, automaty ze stosem.
  • Leksykalna budowa programu, składnia programu I:
    • program jako ciąg leksemów,
    • preprocesor,
    • analiza leksykalna,
    • składnia konkretna i abstrakcyjna języka, drzewo struktury,
    • gramatyki niejednoznaczne,
    • analiza składniowa.
  • Składnia programu II:
    • metoda zejść rekurencyjnych,
    • edytory strukturalne,
    • translacja sterowana składnią,
    • gramatyki atrybutywne,
    • narzędzia wspomagające budowanie analizatorów leksykalnych i składniowych,
    • opis pozostałych elementów języka programowania:
      • kontekstowe warunki poprawności programów,
      • semantyka języka.
  • Maszyny docelowe, typy, reprezentacja wartości:
    • przykłady budowy maszyn rzeczywistych,
    • maszyny abstrakcyjne,
    • asembler i postać binarna programów,
    • typy proste i reprezentacja ich wartości:
      • liczby całkowite i rzeczywiste,
      • typy wyliczeniowe,
      • wartości logiczne, pełne i skrócone obliczanie,
      • wskaźniki (więcej na ich temat przy omawianiu zarządzania pamięcią),
    • typy złożone i reprezentacja wartości:
      • tablice o statycznych i dynamicznych zakresach,
      • rekordy, rekordy z wariantami,
      • zbiory,
      • napisy.
  • Typy (dokończenie), instrukcje:
    • wyrażenia,
    • podtypy,
    • kontrola typów, system typów,
    • równoważność typów,
    • koercje, przeciążenie operatorów i identyfikacja operacji,
    • polimorfizm (typ jako parametr),
    • przypisanie i instrukcje złożone (IF, WHILE, CASE itd.) oraz ich tłumaczenie.
  • Procedury i funkcje:
    • struktura blokowa,
    • statyczne i dynamiczne wiązanie deklaracji,
    • tablica symboli,
    • procedury i funkcje w językach programowania,
    • rekordy aktywacji, stos, rekursja,
    • protokół wywołania i powrotu z procedury/funkcji,
    • sposoby przekazywania parametrów,
    • procedury/funkcje jako parametry,
    • adresowanie w zagnieżdżonych procedurach/funkcjach, SL, display.
  • Procedury i funkcje (dokończenie), zarządzanie pamięcią:
    • inne tematy zwiazane z procedurami i funkcjami:
      • rozwijanie procedury w miejscu wywołania,
      • rekursja końcowa,
      • wywołanie procedury wirtualnej,
      • współprogramy,
      • wyjątki,
    • alokacja statyczna i dynamiczna, organizacja pamięci,
    • kopiec (heap),
    • zarządzanie wolną pamięcią,
    • wskaźniki, powiewające odwołania,
    • odśmiecanie: przykładowe algorytmy.
  • Generacja kodu i optymalizacja:
    • reprezentacje pośrednie programu:
      • drzewo struktury,
      • ciągi czwórek,
      • proste bloki,
      • graf przepływu sterowania,
    • techniki generacji kodu:
      • wybór instrukcji,
      • zarządzanie rejestrami,
    • cele i możliwości optymalizacja kodu,
    • podstawowe techniki optymalizacji:
      • optymalizacje lokalne,
      • problemy z aliasami,
      • optymalizacja pętli,
      • inne optymalizacje globalne,
      • postoptymalizacja.
  • Dokończenie i podsumowanie:
    • podział programu na moduły,
    • niezależna kompilacja,
    • biblioteki,
    • scalanie,
    • narzędzia wspomagające pracę programisty:
      • odpluskwianie,
      • badanie profilu dynamicznego programu,
      • generatory interfejsu użytkownika itp.,
    • przegląd języków programowania i dostępnych realizacji, kryteria wyboru.
    Literatura:
    1. R. Sethi, "Programming Languages. Concepts & constructs", 2 wyd, Addison-Wesley, 1996.
    2. A. Aho, R. Sethi, J.D. Ullman, "Compilers: Principles, Techniques and Tools", Addison-Wesley, 1986.
    3. C.N. Fisher, R.J. LeBlanc, "Crafting a Compiler", Benjamin Cummings, 1988.
    4. H.F. Ledgard, "Mała księga programowania obiektowego", WNT, 1998.

    Języki i paradygmaty programowania II (programowanie obiektowe i współbieżne)

    Rodzaj: wykład (20) z ćwiczeniami (20), egzamin, II trymestr
    Autorzy programu: P. Chrząstowski, J. Jabłonowski, A. Zaroda
    Sylabus:

    Część pierwsza: programowanie obiektowe

    1.  Wstep: podejście obiektowe:
    • co to jest podejście obiektowe,
    • obiekty i klasy,
    • polimorfizm,
    • komunikaty i metody postępowania,
    • ukrywanie informacji,
    • hierarchie klas i dziedziczenie,
    • relacje is-a i has-a,
    • zalety programowania obiektowego.
    Ćwiczenia:
    Projektowanie przykładowych hierarchii klas (bez implementacji, ale z deklarowaniem w klasach metod i atrybutów oraz uwzględnianiem dziedziczenia)
    • prosty przykład (np. hierarchia klas pojazdów z podziałem na jeżdżące, latające, pływające, silnikowe i bezsilnikowe, przeznaczone do przewozu osob/towarów itp.),
    • wyrażenia arytmetyczne.
  • Realizacja podejścia obiektowego w Smalltalku:
    • obiekty i klasy,
    • komunikaty i metody,
    • metody obiektowe i klasowe,
    • zmienne obiektowe i klasowe,
    • operator ^, operacja :=, self,
    • dziedziczenie.
    Ćwiczenia:
    Prezentacja Smalltalku (przy komputerach):
    • definiowanie klas i podklas,
    • pisanie i wykonywanie zestawów instrukcji Smalltalku,
    • przyrostowe pisanie i testowanie programu.
    Wszystkie powyższe elementy będą pokazane na małym przykładzie (np. zestaw filtrów generujących liczby pierwsze), bez omawiania szczegółów danej implementacji Smalltalku.
  • Bardziej zaawansowane konstrukcje Smalltalku:
    • dopasowywanie metody do komunikatu, super,
    • liczby, wartości logiczne,
    • blok,
    • metoda perform,
    • realizacja instrukcji sterujących w Smalltalku (klasy Boolean, Context, Number).
    Ćwiczenia:
    Implementacja hierarchii wyrażeń z pierwszych ćwiczeń,
  • Ważniejsze klasy wbudowane w Smalltalku I:
    • klasa Collection,
    • hierarchia klas kolekcji,
    • komunikaty rozumiane przez wszystkie kolekcje, konwersje,
    • klasy Array, OrderedCollection.
    Ćwiczenia:
    Przykłady użycia kolekcji.
  • Ważniejsze klasy wbudowane w Smalltalk II:
    • dalsze przykłady kolekcji (klasy Dictionary, Set, Bag, SortedCollection, String),
    • strumienie.
    Ćwiczenia:
    Przykładowy większy program w Smalltalku (przy komputerze): klasa Graf (zrealizowana przy pomocy kolekcji) wraz z algorytmem obchodzenia sparametryzowanym strukturą danych
    • omówienie realizacji grafu w Smalltalku i zapisanie metod (wspólnie przy tablicy),
    • uruchomienie programu tworzącego graf i obchodzącego go z wypisywaniem wierzchołków (indywidualnie na komputerach).
    Literatura:
    1. P. Coad, J. Nicola, "Programowanie obiektowe", Oficyna Wydawnicza README, 1994.
    2. J. Martin, J.J. Odell, "Podstawy metod obiektowych", WNT, 1998.
    Uwagi:
    1. Celem pierwszego wykładu jest przedstawienie obiektowego sposobu myślenia, dlatego (poza ostatnim punktem) nie mówi się w nim o programowaniu obiektowym (temu będą poświecone następne wykłady), lecz o podejściu obiektowym.
    2. Komputery będą wykorzystywane tylko na dwóch zajęciach (ze względu na małą liczbę zajęć).
    3. Piąte ćwiczenia wymagają przygotowania dla studentów gotowych klas Stos i Kolejka.
    Część druga: programowanie współbieżne
    1.  Wprowadzenie, podstawowe pojęcia:
    • współbieżność w sprzęcie i systemach operacyjnych, procesy,
    • systemy z podziałem czasu procesora, systemy wieloprocesorowe, sieci komputerowe,
    • programy współbieżne: synchronizacja i komunikacja procesów,
    • poprawność programów współbieżnych (zapewnianie, żywotność) i jej brak (zagłodzenie, blokada), dowodzenie (pojęcie przeplotu),
    • kryteria dobrego rozwiązania problemu współbieżnego,
    • dzielenie zasobów: problem jedzących filozofów, przykład blokady,
    • pamięć dzielona, konflikty przy dostępie,
    • rozwiązanie problemu sekcji krytycznej algorytmem Dekkera (na ćwiczeniach).
  • Programowanie w systemach ze wspólną pamięcią I; semafory:
    • potrzeba istnienia mechanizmów wspierających programowanie współbieżne,
    • definiacje semaforów, semafory binarne, inne typy semaforów,
    • realizacja semafora,
    • rozwiązanie problemu producentów i konsumentów,
    • rozwiązanie problemu jedzących filozofów,
    • rozwiązanie problemu czytelników i pisarzy (na ćwiczeniach).
  • Programowanie w systemach ze wspólną pamięcią II; semafory (dokończenie), monitory:
    • semafory i pamięć dzielona w Unixie,
    • niestrukturalność semaforów,
    • monitory: przykład definicji, związki z abstrakcyjnymi typami danych i jądrem systemu operacyjnego,
    • rozwiązanie problemu producentów i konsumentów przy pomocy monitorów,
    • odpowiedniki monitorów w Adzie 95,
    • realizacja semaforów przy pomocy monitorów i odwrotnie (na ćwiczeniach),
    • rozwiązanie problemu czytelników i pisarzy przy pomocy monitorów (na ćwiczeniach).
  • Programowanie w systemach rozproszonych I:
    • systemy bez dzielonej pamięci,
    • synchronizacja przez spotkanie (na przykładzie języka Ada),
    • rozwiązanie problemu czytelników i pisarzy,
    • rozwiązanie problemu producentów i konsumentów (na ćwiczeniach).
  • Programowanie w systemach rozproszonych II i podsumowanie:
    • inne mechanizmy programowania rozproszonego (CSP/occam, Linda, PVM, MPI),
    • programowanie rozproszone w systemie Unix,
    • porównanie mechanizmów programowania współbieżnego i podsumowanie.
    Literatura:
    1. M. Ben-Ari, "Podstawy programowania współbieżnego i rozproszonego", WNT, 1996
    2. Z. Weiss, T. Gruźlewski, "Programowanie współbieżne i rozproszone w przykładach i zadaniach", WNT, 1993.
    Uwagi:
      Przykładowe programy będziemy pisać w Adzie.

    Języki i paradygmaty programowania III
    (programowanie deklaratywne: funkcyjne i w logice)

    Rodzaj: wykład (20) z ćwiczeniami (20), egzamin, III trymestr
    Autorzy programu: P. Chrząstowski, J. Jabłonowski, A. Zaroda
    Sylabus:

    Część pierwsza: programowanie funkcyjne

    1.  Wstęp: podstawowe konstrukcje:
    • literały (liczbowe, znakowe, napisowe, logiczne), wyrażenia, arytmetyka, if,
    • let - deklaracje nazw lokalnych dla wartości prostych i dla funkcji,
    • rekurencja (rec), wzajemna rekurencja, wywołanie ogonowe.
    Ćwiczenia:
    • proste wyrażenia logiczne i arytmetyczne,
    • przykłady let z zasłanianiem (struktura blokowa),
    • funkcje arytmetyczne: dodawanie, wyliczanie pierwiastków wielomianów 2 stopnia, silnia, funkcja Fibonacciego (w wersji naiwnej i w wersji z akumulatorem jako przykład definicji funkcji lokalnej), NWD, potęgowanie przez połowienia, sprawdzanie pierwszości liczby, liczenie odstępu między danymi datami (podanymi w postaci trójek liczb).
  • Wzorce, listy:
    • dopasowywanie wzorcOw (match),
    • listy - konstruktory, listy liczb,
    • przykłady: generacja listy liczb pierwszych, względnie pierwszych.
    Ćwiczenia:
    • silnia i funkcja Fibonacciego zapisane z użyciem dopasowywania wzorców,
    • listy liczb: długość (z akumulatorem i bez), sumowanie elementow listy, wymnażanie elementów listy,
    • operacje na dużych liczbach zapisanych jako listy cyfr (dodawanie i odejmowanie, może także mnożenie i najprostsze dzielenie)
    • reprezentacja macierzy prostokątnych w postaci listy list i operacje macierzowe (dodawanie i mnożenie macierzy, transpozycja),
    • quicksort i mergesort listy.
  • Typy i funkcje:
    • typy bazowe i typy funkcyjne (monomorficzne),
    • function, proste funkcje anonimowe (inc, dec, odd, even),
    • deklaracja funkcji postaci let id=function ...,
    • dalsze przykłady: testowanie pierwszości liczby,
    • funkcja iteracji (powtarzanie aplikacji funkcji do spełnienia warunku) i przykładowe zastosowanie (np. sumowanie szeregów arytmetycznych),
    • definicje funkcji w postaci Curry'ego.
    Ćwiczenia:
    • zastosowanie funkcji iteracji z wykładu: aproksymowanie miejsc zerowych funkcji rzeczywistych, całkowanie numeryczne,
    • funkcja fold i zapisanie przy jej użyciu typowych operacji listowych,
    • realizacja słownika w postaci funkcji wyższego rzędu ze zmiennymi lokalnymi.
  • Typy cd., wyjątki:
    • algebraiczne typy danych
    • przykłady: własna definicja list liczb, drzewa binarne i operacje na nich, (wyszukiwanie elementu, spłaszczanie drzewa, wyliczanie wysokości, odbicie lustrzane),
    • drzewa o dowolnym stopniu wierzchołka (i operacje jak dla drzew binarnych),
    • wyjątki - głowa listy pustej, brak elementu w liście lub drzewie, wyjątki standardowe.
    Ćwiczenia:
    • drzewa BST (bez operacji usuwania elementow), obchodzenie drzewa w typowych porządkach, sortowanie przez spłaszczanie,
    • symboliczna reprezentacja wyrażeń algebraicznych, wyliczanie wartości, różniczkowanie symboliczne.
  • Polimorfizm:
    • typy polimorficzne,
    • przykłady: listy polimorficzne (i operacje member, map itp.),
    • drzewa polimorficzne,
    • słowniki z powtórzeniami elementów (i operacjami wstawiania, usunięcia, wyszukania, wyszukania wszystkich).
    Ćwiczenia:
    • implementacja słownika w oparciu o drzewa BST,
    • rekursory dla drzew i przykłady ich wykorzystania (wyliczanie wartości drzewa, wyszukiwanie elementu).
  • Wejscie-wyjscie, struktury danych cd.
    • wejście-wyjście, znaki specjalne (np. \n), strumienie stdin, stdout, stderr, operacje plikowe,
    • tablice,
    • referencje,
    • modyfikowalne struktury danych.
    Ćwiczenia:
    • liczenie słów w pliku, kopiowanie plików, histogram częstości występowania słów w pliku (z wykorzystaniem tablic),
    • prosta arytmetyka macierzy - tym razem na tablicach,
    • rozwiązywanie układów równań liniowych (np. eliminacja Gaussa).
  • Moduły i funktory:
    • moduły - struktury, sygnatury, (porządek, równość, liczby zespolone),
    • funktory - sortowanie.
    Ćwiczenia:
    • struktury dla stosów i kolejek z różnymi implementacjami (np. przy użyciu list, tablic).
    Literatura:
    1. J. D. Ullman, "Elements of ML Programming", Prentice Hall, 1994.
    2. L. C. Paulson, "ML for the Working Programmer", 2 wyd., Cambridge University Press, 1996.
    Uwagi:
    Proponowanym językiem programowania na te zajęcia jest Objective Caml.
    Część druga: programowanie w logice
    1.  Wstęp, teoretyczne podstawy programowania w logice:
    • deklaratywność: program jako specyfikacja problemu (program = logika + sterowanie),
    • zastosowania (ogólnie),
    • przypomnienie logiki pierwszego rzędu,
    • reguły wnioskowania, reguła rezolucji,
    • programy w logice (klauzule Horna),
    • algorytm uzgadniania,
    • SLD-rezolucja, tw. o poprawności i pełności,
    • przykład: program slow_sort.
  • Programowanie w logice i Prolog I:
    • semantyka deklaratywna i operacyjna programów w logice,
    • przestrzeń poszukiwań (SLD-drzewo),
    • mechanizm przeszukiwania i nawracania
    • wielofunkcyjność programów w logice (klasyczny przykład append),
    • zmienne logiczne (przykład: kolorowanie mapy),
    • programowanie deklaratywne w Prologu,
    • mechanizmy sterowania (odcięcie - zielone i czerwone).
  • Programowanie w logice i Prolog II:
    • reprezentacje struktur danych (termy, klauzule),
    • przykłady obu sposobów reprezentacji (binarne drzewa wyszukiwan, grafy),
    • techniki programowania w Prologu, technika "generuj i testuj" (przykład: problem n hetmanów),
    • dynamiczne modyfikowanie programu i programy uczące się,
    • wejście/wyjście i arytmetyka w Prologu (na ćwiczeniach),
    • listy różnicowe (na ćwiczeniach).
    Literatura:
    1. U. Nilsson, J. Małuszyński, "Logic, Programming and Prolog", 2 wyd., John Wiley, 1995.
    2. L. Sterling, E. Shapiro, "The Art of Prolog", 2 wyd., MIT, 1994.
    3. F.Kluźniak, S.Szpakowicz, "Prolog for Programmers", Academic Press,1985.

    Laboratorium programowania (C++)

    Rodzaj: laboratorium (40), zaliczenie na ocenę, I trymestr
    Autorzy programu: P. Chrząstowski, J. Jabłonowski, A. Zaroda
    Sylabus:

    1. Wstęp, niektóre konstrukcje C++:
    • powtórzenie C,
    • przeciążanie funkcji,
    • argumenty domyślne,
    • referencje,
    • uwagi o stylu, komentowanie i dokumentowanie programów,
    • do zrealizowania przez studentów: prosty program ilustrujący poznane, mechanizmy (podobnie przez trzy następne tygodnie).
  • Abstrakcyjne typy danych I:
    • klasa jako połączenie danych i operacji,
    • konstruktory i destruktory,
    • zarządzanie pamięcią,
    • publiczne i prywatne składowe klasy.
  • Abstrakcyjne typy danych II:
    • przeciążanie operatorów,
    • przypisanie i konstruktor kopiujący,
    • funkcje i klasy zaprzyjaźnione,
    • składowe statyczne,
    • operatory konwersji.
  • Abstrakcyjne typy danych III:
    • wejście-wyjście programu, strumienie,
    • szablony,
    • kolekcje i iteratory.
  • Moduły I:
    • wyróżnienie interfejsu i implementacji,
    • pliki nagłówkowe i programy "wieloplikowe",
    • omówienie treści zadania zaliczeniowego i początek prac nad nim (do końca trymestru część każdych zajęć będzie przeznaczona na prace nad tym zadaniem).
  • Moduły II:
    • niezależna kompilacja, łączenie,
    • program "make",
    • tworzenie bibliotek,
    • praca zespołowa, "programming by contract".
  • Wyjątki.
  • Narzędzia programisty I:
    • przykład: LEX (w zakresie potrzebnym do realizacji zadania zaliczeniowego),
    • wykorzystanie narzędzia przy tworzeniu programu zaliczeniowego.
  • Narzedzia programisty II:
    • przykład: YACC (w zakresie potrzebnym do realizacji zadania zaliczeniowego),
    • podstawy analizy składniowej metodą LR.
  • Zakończenie:
    • zakończenie prac nad programem zaliczeniowym,
    • podsumowanie.
    Literatura:
    1. B. Stroustrup, "Jezyk C++", WNT, 1995.
    Uwagi:
    1. Zadanie zaliczeniowe powinno uwzględniać podział na moduły oraz implementację abstrakcyjnej struktury danych. Każdy student będzie pracował indywidualnie nad modułem według specyfikacji przygotowanej przez prowadzącego zajęcia, który przygotuje także moduł, z którym będą łączone programy studenckie. Cześć zadania wymagająca użycia programów LEX i YACC nie powinna być kluczowa, tzn. program powinien dać się uruchomić także bez niej, gdyż pozwoli to studentom na wczesne testowanie swoich modułów.
    2. Zajęcia mają się składać z dwóch części. Pierwsza zawiera omówienie tematu danych zajęć (przez prowadzącego), połączone z uruchomieniem małych przykładów na komputerze (przez studentów). Druga jest przeznaczona na realizację przez studentów zadania semestralnego oraz na konsultacje. Podział czasu między te dwie części jest płynny, w szczególności początkowo (dopóki nie zostanie sformulowane zadanie semestralne) cześć druga będzie pusta, zaś pod koniec semestru ta cześć będzie zajmowała wiekszość czasu zajęć (w szczególności całe przedostatnie zajęcia). Podobne zasady pracy będą obowiazywaly na zajęciach laboratoryjnych w pozostalych dwóch trymestrach.

    Laboratorium programowania (HTML i Java)

    Rodzaj: laboratorium (40), zaliczenie na ocenę, II trymestr
    Autorzy programu: P. Chrząstowski, J. Jabłonowski, A. Zaroda
    Sylabus:

    1. Wstęp, dokumenty HTML
    • udostępnianie informacji w Internecie,
    • struktura dokumentu w HTML, nagłówki, paragrafy,
    • formatowanie tekstu,
    • listy, tabele,
    • ilustracje,
    • połączenia z innymi zasobami,
    • pierwsze zadanie zaliczeniowe: prosta strona HTML.
  • HTML - dokończenie:
    • ramki,
    • inne elementy HTML,
    • dobry styl dokumentów w HTML,
    • przykład edytora stron HTML,
    • zakończenie pracy nad pierwszym zadaniem zaliczeniowym.
  • Język Java: wprowadzenie:
    • realizacja Javy, uruchamianie programów, przenośność,
    • różnice w stosunku do C++ (których konstrukcji w Javie nie ma),
    • podstawy jezyka:
      • zmienne i typy proste, operatory, wyrażenia
      • instrukcje strukturalne,
      • tablice i napisy,
    • klasy i ich instancje, konstruktory,
    • wywołanie metody,
    • prezentacja wybranego środowiska zintegrowanego dla Javy,
    • na tych oraz następnych ćwiczeniach wprowadzane pojęcia ilustrujemy prostymi programami zaliczeniowymi.
  • Jezyk Java, cd.:
    • zarządzanie pamięcią,
    • finalizacja obiektu,
    • kontrola dostępu do elementów klas,
    • dziedziczenie,
    • odwołania do metod nadklasy,
    • klasy i metody abstrakcyjne,
    • zmienne i metody klasowe.
  • Jezyk Java, cd.:
    • klasy i metody finalne,
    • zagnieżdżanie klas,
    • interfejsy,
    • pakiety, deklaracje importu,
    • wyjątki,
    • początek pracy nad dużym zadaniem zaliczeniowym, na razie bez interfejsu użytkownika.
  • Standardowa biblioteka klas, interfejs użytkownika I:
    • wejście-wyjście,
    • kolekcje,
    • inne klasy standardowe,
    • budowa programu z interfejsem użytkownika,
    • podstawowe komponenty interfejsu użytkownika.
  • Interfejs użytkownika II:
    • programy sterowane zdarzeniami,
    • komponenty interfejsu użytkownika, cd.
    • do zadania zaliczeniowego dodajemy interfejs użytkownika.
  • Aplety
    • połączenie ze stronami HTML,
    • czas życia apletu,
    • standardowe elementy interfejsu użytkownika,
    • prosty aplet jako zadanie dla studentów.
  • Aplety i wątki:
    • tworzenie wątków,
    • synchronizacja,
    • dodajemy (o ile będzie to możliwe) wielowątkowość do zadania zaliczeniowego.
  • Zakończenie:
    • inne tematy związane z Javą (programowanie sieciowe, JavaScript, JavaBeans itd.)
    • zakończenie prac nad programem zaliczeniowym.
    Literatura:
    1. K. Arnold, J. Gossling, "The Java Programming Language", WNT, 1998.
    Uwagi:
      Naszym celem jest przedstawienie problematyki zwiazanej z "programowanie Internetu", czyli tworzeniem stron WWW z wykorzystaniem HTML i apletów w Javie. Chcemy także przedstawić Javę jako język umożliwiający pisanie dużych aplikacji, ze szczególnym uwzględnieniem programowania obiektowego. Przy omawianiu każdej konstrukcji związanej z programowaniem obiektowym w Javie będziemy podawać jej odpowiednik (o ile taki istnieje) w C++, ale bez jego dłuższego omawiania.

    Laboratorium programowania (programowanie wizualne na przykładzie Delphi)

    Rodzaj: laboratorium (40), zaliczenie na ocenę, III trymestr
    Autorzy programu: P. Chrząstowski, J. Jabłonowski, A. Zaroda
    Sylabus:

    1. Programowanie wizualne:
    • co to jest,
    • dlaczego wiąże się z programowaniem obiektowym,
    • dlaczego nie zastępuje zwykłego programowania,
    • co to jest komponent, jakie ma cechy, czy musi byc widoczny,
    • jak powinien wyglądać dobry interfejs programu,
    • przegląd kompenentow w Delphi (tzn. ogólne omowienie grup komponentów oraz szczegółowe omówienie kilku wybranych).
  • Realizacja obiektowości w Delphi I:
    • deklarowanie klas (pola, metody, własności),
    • rodzaje składowych (published, public, protected, private),
    • rodzaje metod (statyczne, wirtualne, dynamiczne, metody abstrakcyjne),
    • konstruktory i destruktory,
    • self,
    • struktura programu w Delphi.
  • Realizacja obiektowości w Delphi II:
    • dziedziczenie,
    • operatory is i as,
    • obsługa komunikatów (w stylu Windows),
    • metody klasowe,
    • klasy TObject i TClass.
  • Omówienie struktur danych dostępnych w Delphi:
    • przedstawienie rodzajów struktur danych,
    • dokładne omówienie kilku przykładów,
    • przedstawienie zadania semestralnego.
  • Tworzenie własnych komponentów:
    • struktura komponentu,
    • etapy tworzenia komponentu i włączania go do środowiska.
  • Omówienie specyficznych własności Pascala w Delphi I
    • biblioteki DLL.
  • Omówienie specyficznych własności Pascala w Delphi II:
    • komponenty realizujące DDE/OLE,
    • uwagi o architekturze klient/serwer.
  • Omówienie specyficznych własności Pascala w Delphi III:
    • wyjątki,
    • typ Variant,
    • typ Pchar.
  • Praca nad programem semestralnym.
  • Zajęcia kończące:
    • podsumowanie,
    • odbiór prac semestralnych.
    Uwagi:
    1. Program semestralny ma być realizowany w zespołach (najlepiej 3-osobowych). Przeznaczenie stosunkowo dużej części zajęć na realizację zadania semstralnego jest podyktowane tym, że będzie to największy program uruchamiany przez studentów w trakcie studiów.
    2. Tematem tej pracowni jest programowanie wizualne. W tym projekcie jako przykładu użyto Delphi. Oczywiście może to być inne środowisko (i inny system operacyjny, np. UNIX). Większość przedstawionych tu tematów będzie miała swoje odpowiedniki w jakimkolwiek innym środowisku programowania wizualnego. Dotyczy to także tych zagadnień, które nie sa bezpośrednio związane z programowaniem wizualnym (np. biblioteki DLL). W projekcie świadomie nie omówiono wszystkich własności środowiska Delphi (np. obsługi baz danych), gdyż wykraczałyby one tematycznie poza ramy tych zajęć.

    Współczesne systemy operacyjne (przegląd)

    Rodzaj: wykład (20), egzamin, I trymestr
    Autorzy programu: T. Fornalik, G. Grudziński, J. Mincer (S. Kurpiewski, J. Deminet)
    Sylabus:

    1. Unix:
    • historia i wersje systemu,
    • architektura systemu,
    • budowa i zasada działania jądra.
  • Unix - zarzadząnie procesami:
    • struktury danych do obsługi procesów,
    • stany procesów,
    • kontekst, przełączanie kontekstu,
    • szeregowanie procesów,
    • funkcje systemowe do obsługi procesów (tworzenie, niszczenie, wykonywanie procesów),
    • wątki.
  • Unix - zarządzanie pamięcią:
    • wprowadzenie: pamięć wirtualna,
    • struktury danych do obsługi pamięci
    • stronicowanie na żądanie,
    • wymiana (ang. swapping),
    • zarządzanie pamięcią jądra.
  • Unix - podsystem wejścia-wyjścia:
    • zarządzanie pamięcią podręczną,
    • struktury danych do obsługi operacji wejścia-wyjścia,
    • programy sterujące urządzeń,
    • obsługa urządzeń blokowych i znakowych.
  • Unix - system plików:
    • struktury danych do obsługi plików,
    • funkcje systemowe systemu plików,
    • wirtualny system plików,
    • montowanie plików,
    • obsługa katalogów i plików specjalnych.
  • OS/400 I
  • OS/400 II
  • Open VMS I:
    • wprowadzenie (koncepcja ogólna, podstawowe cechy, budowa warstwowa i jej związek z wielopoziomową strukturą ochrony dostępu),
    • przełączanie kontekstu i szeregowanie,
    • zarządzanie pamięcią (stronicowanie, realizacja pamięci podręcznej).
  • Open VMS II:
    • ochrona dostępu (mechanizmy sprzętowe i programowe),
    • wielopoziomowy mechanizm przerwań,
    • struktura dysku,
    • mechanizmy synchronizacji.
  • QNX
    • architektura systemu: mikrojądro i procesy systemowe,
    • budowa i funkcje mikrojądra,
    • przesyłanie komunikatów,
    • szeregowanie procesów,
    • zarządzanie siecią i komunikacja w sieci,
    • zdalny dostęp do zasobów sieciowych,
    • udogodnienia na potrzeby zadań czasu rzeczywistego.
    Literatura:
    1. A. Silberschatz, J. Peterson, P. Galvin, "Podstawy systemów operacyjnych", WNT, 1993.
    2. M. Bach , "Budowa systemu operacyjnego Unix", WNT, 1995.
    3. B. Goodheart, J. Cox, "The Magic Garden Explained: The Internals of Unix System V Release 4. An Open System Design." oraz, pod tym samym tytulem, "Solutions Manual", 1994. (Ukaże się nakładem WNT.)
    4. K. Sacha, "QNX - system operacyjny", X-serwis, Warszawa 1995.
    5. W. Lerch, "System operacyjny QNX", Quantum Corp., 1994.
    6. QNX Software Systems, "QNX Operating System. System Architecture", 1997.
    7. D. Miller, "VAX/VMS. Operating System Concepts", Digital Press.
    8. Projekt Linux: http://rainbow.mimuw.edu.pl/SO/Linux i projekt LabLinux: http://rainbow.mimuw.edu.pl/LabLinux.
    9. F. Soltis, "Inside the AS/400", Duke Comm. Int. 1995.
    10. H. Custer, "Inside Windows NT", Microsoft Press 1993.
    Uwagi:
    1.  Wymienione systemy należy traktować jako propozycje systemów, które w danym czasie dominują na rynku lub są znane ze względu na ciekawe rozwiązania projektowe. Wykładowca powinien uaktualniać tę listę przykładów. Inni kandydaci: MVS, Windows/NT.
    2. Część wykładu poświęcona systemowi Unix powinna dotyczyć jednej z następujących wersji systemu:

    3.      (a) Unix System V Wersja 4,
           (b) Unix BSD (najnowsza wersja),
           (c) Linux.
      Za wyborem (a) przemawia b. dobry podrecznik ([3]), który wkrótce będzie dostępny po polsku, za wyborem (b) i (c) - dostępność źródeł systemu, za wyborem (c) dodatkowo dostępność tego systemu w SLK

    Architektura współczesnych systemów komputerowych (przegląd)

    Rodzaj: wykład (20), egzamin, I trymestr
    Autorzy programu: T. Fornalik, G. Grudziński, J. Mincer (S. Kurpiewski, J. Deminet)
    Sylabus:

    1. System komputerowy i jego główne składowe:
    • model von Neumanna
    • cykl pracy procesora, sposoby adresacji, repertuar instrukcji, rejestry,
    • system przerwań,
    • struktura połączeń, szyny,
    • pamięć, RAM, ROM, adresacja, pojemność, cykl pracy pamięci,
    • urządzenia wejścia-wyjścia,
    • ocena wydajności.
  • Procesor I:
    • składowe procesora, ALU, rejestry uniwersalne i specjalne,
    • tory przesyłania danych, komunikacja z pamięcią,
    • mikroprogramowanie,
    • przetwarzanie potokowe,
    • architektura superskalarna.
  • Procesor II:
    • CISC vs RISC,
    • przewidywanie skoków, data forwarding, data bypassing,
    • kolejkowanie instrukcji,
    • procesory z długim słowem instrukcji,
    • pamięć podręczna (cache) procesora (wielopoziomowość, strategie zarządzania).
  • Struktura połączeń wewnętrznych komputera:
    • architektura połączeń,
    • porty, przerwania, DMA,
    • transmisja równoległa i szeregowa,
    • zdarzenia: synchroniczne, asynchroniczne (bus timing),
    • zarządzanie dostępem do szyny,
    • SSA, ISA, EISA, VESA, PCI, FutureBus+.
  • Pamięci zewnętrzne:
    • programowanie wejścia-wyjścia,
    • DMA,
    • sterowniki dysków, np. IDE, SCSI,
    • technologia RAID,
    • dyski optyczne,
    • taśmy, streamery,
    • dyskietki.
  • Wsparcie sprzętowe dla systemów operacyjnych:
    • tryby pracy,
    • pamięć wirtualna (translacja adresów, pamięć asocjacyjna).
  • Architektury niestandardowe:
    • systemy wieloprocesorowe,
      • silnie powiązane,
      • luźno powiązane,
      • klastering,
    • Lisp-maszyna,
    • dataflow.
  • Przykładowa architektura I.
  • Przykładowa architektura II.
  • Przykładowa architektura III.
  • Literatura:
    1. B.S. Chalk, "Computer Organisation and Architecture", ukaże się nakładem WNT.
    2. W. Stallings, "Computer Organization and Architecture", 4th ed., ukaże się nakładem WNT.
    Uwagi:
    1.  Ostatnie wykłady należy poświęcić na omówienie przykładowych architektur. Powinny być to architektury systemów komputerowych dostępnych w Polsce i w miarę nowoczesnych. Przykładowo: najnowszy model IBM PC, AS/400, HP/SUN/DEC Alpha, Cray (por. ICM).

    Wstęp do sieci komputerowych

    Rodzaj: wykład (20), egzamin, II trymestr
    Autorzy programu: T. Fornalik, G. Grudziński, J. Mincer (S. Kurpiewski, J. Deminet)
    Sylabus:

    1. Zasadnicze idee i pojęcia związane z sieciami komputerowymi (sieci lokalne i rozległe, różne rodzaje technologii sieci fizycznych: Ethernet, łącza szeregowe, intersieci i niezależność od technologii fizycznych itd.). Model warstwowy ISO/OSI. Przeznaczenie urządzeń sieciowych takich jak most, ruter, brama.
    2. Technologie fizyczne - sieci Ethernet (rodzaje Ethernetu, mechanizm detekcji kolizji itd.). Modemy. ISDN.
    3. Intersieci - miejsce poszczególnych protokołów w modelu warstwowym. Omówienie architektury sieci TCP/IP. Protokół IP i protokoły pomocnicze (ARP, RARP, ICMP, IGMP). Adresy IP, maska sieci, tworzenie podsieci i nadsieci. Zagadnienia ustalania trasy pakietu.
    4. Protokoly transportowe (TCP, UDP). Automat skończony TCP.
    5. DNS, DHCP, BOOTP, SNMP.
    6. Protokoły pocztowe (SMTP, POP2, POP3, IMAP).
    7. Protokoły użytkowe (TELNET, SSH, RPC).
    8. Protokoły użytkowe (FTP, TFTP, NFS, HTTP).
    Literatura:
    1. D.E. Comer: tom1: "Sieci komputerowe TCP/IP. Zasady, protokoły i architektura", WNT, 1997.
    2. W. Stallings, "Data and Computer Communications" (5th ed.), Prentice-Hall, 1997 (ukaże się nakładem WNT).

    Programowanie sieciowe

    Rodzaj: laboratorium (20), zaliczenie na ocenę, II trymestr
    Autorzy programu: T. Fornalik, G. Grudziński, J. Mincer (S. Kurpiewski, J. Deminet)
    Sylabus:

    1. Usługi zdalne w środowisku Unixa:
    • telnet, ftp, tftp, rlogin, ssh, rsh, rexec, finger,
    • poczta elektroniczna,
    • porty, sprawdzanie zajętości portów, port-mapper,
    • adresy sieciowe,
    • zagrożenia i podstawowe zabezpieczenia,
    • różne standardy programowania sieciowego:
      • warstwa łącza (DLPI),
      • warstwa transportowa (gniazda, XTI),
      • warstwa sesji (RPC).
  • Gniazda I:
    • model klient-serwer,
    • protokoły połączeniowe i bezpołączeniowe, cechy, różnice,
    • struktury danych do obsługi gniazd,
    • funkcje do obsługi gniazd - podstawowe, pomocnicze,
    • serwer iteracyjny pracujący na bazie protokołu połączeniowego.
  • Gniazda II:
    • serwer współbieżny, kiedy stosować, problem "zombie", problem dostępu do wspólnej struktury danych,
    • użycie select.
  • Gniazda III:
    • gniazda UDP,
    • gniazda a sygnały.
  • Gniazda IV:
    • implementacja gniazd w Linuxie,
    • surowe gniazda.
  • RPC I:
    • omówienie mechanizmu RPC, semantyka RPC,
    • identyfikacja zdalnie wołanych procedur,
    • podstawowe funkcje,
    • użyteczne polecenia (np. rpcinfo),
    • format XDR, podstawowe funkcje, definowanie własnych filtrów.
  • RPC II:
    • RPC niskopoziomowe,
    • sprawdzanie tożsamości,
    • obsługa błędów,
    • rozgłaszanie.
  • RPC III:
    • tworzenie klienta i serwera przy użyciu rpcgen.
  • PVM (lub MPI) I:
    • architektura systemu,
    • konfigurowanie maszyny wirtualnej,
    • interfejs użytkownika,
    • modele przetwarzania rozproszonego.
  • PVM (lub MPI) II:
    • obsługa błędów,
    • przykłady aplikacji.
    Literatura:
    1. W. Richard Stevens:
    • "Advanced Programming in the Unix Environment", Prentice-Hall, 1992.
    • "Programowanie zastosowań sieciowych w systemie Unix", WNT, 1995.
    • "Unix Network Programming. Networking APIs: Sockets and XTI", Prentice-Hall, 1998 (ukaże się nakładem WNT).
    • "Unix Network Programming. IPC: Interprocess Communication", Prentice-Hall, ukaże się wkrótce.
    • "Unix Network Programming. Applications", Prentice-Hall, ukaże się wkrótce.
    • "TCP/IP Illustrated, Volume 1", Prentice-Hall, 1994.
    • "TCP/IP Illustrated, Volume 2" (wspolnie z Wrightem), Prentice-Hall, 1995.
    • "TCP/IP Illustrated, Volume 3", Prentice-Hall, 1996.
  • C. Brown, "Unix Distributed Programming", Prentice Hall, 1994.
  • M. Gabassi, B. Dupouy, "Przetwarzanie rozproszone w systemie Unix", Lupus, 1995.
  • D.E. Comer:
    • tom1: "Sieci komputerowe TCP/IP. Zasady, protokoły i architektura",
    • tom2: "Sieci komputerowe TCP/IP. Projektowanie i realizacja protokołów",
    • tom3: "Sieci komputerowe TCP/IP. Programowanie w trybie klient-serwer. Wersja BSD." WNT, 1997.
  • A. Geist i inni, "PVM: Parallel Virtual Machine", podręcznik rozprowadzany razem z oprogramowaniem.
  • MPI Forum, "MPI: A Message-Passing Interface Standard", podręcznik rozprowadzany razem z oprogramowaniem.

  • Bazy danych

    Rodzaj: wykład (20), egzamin, III trymestr
    Autorzy programu:
    Sylabus:
    Literatura:

    1. J. D. Ullman, "Wprowadzenie do baz danych", WNT, Warszawa ???.
    2. J. D. Ullman, J. Widom, "A First Course in Database Systems", Prentice Hall 1997.
    3. Date ???

    Metoda realizacji baz danych

    Rodzaj: laboratorium (20), zaliczenie na ocenę, III trymestr
    Autorzy programu:
    Sylabus:
    Literatura: