MIMINF:Języki i paradygmaty programowania

From Studia Informatyczne

Spis treści

Forma zajęć

Wykład (30 godzin) + laboratorium (60 godzin)

Opis

W ramach tego przedmiotu będą omawiane cztery najistotniejsze obecnie paradygmaty programowania (programowanie imperatywne, obiektowe, funkcyjne i programowanie w logice) oraz związane z nimi języki programowania. Zajęcia te mają dać uczestnikom szersze spojrzenie na programowanie, pokazać cechy wspólne i różnice pomiędzy typowymi dla tych paradygmatów językami oraz pokazać metody kompilacji i realizacji programów zapisanych w tych językach. Przedsatwione zostaną poszczególne fazy kompilacji (analiza leksykalna, składniowa i kontekstowa oraz generacja kodu wynikowego) jak również zagadnienia czasu wykonania (takie jak zarządzanie pamięcią). Istotna cechą tych zajęć jest duża liczba praktycznych ćwiczeń, dających studentom możliwości praktycznego zastosowania prezentowanych paradygmatów (szczególnie tych z którymi dotąd nie mieli do czynienia w czasie studiów) oraz poznania konkretnych narzędzi pozwalających szybko tworzyć parsery i kompilatory.

Sylabus

Autor

Janusz Jabłonowski na podstawie materiałów z Ważniaka autorstwa:

  • Małgorzata Moczurad — Uniwersytet Jagielloński
  • Włodzimierz Moczurad — Uniwersytet Jagielloński

Wymagania wstępne

  • Logika i teoria mnogości
  • Wstęp do programowania
  • Algorytmy i struktury danych
  • Języki, automaty i obliczenia

Zawartość

  • Pojęcia ogólne:
    • opis składni i semantyki języków programowania
    • typy
    • przekazywanie parametrów do podprogramów
    • abstrakcyjne typy danych
    • przeciążanie nazw
    • polimorfizm
  • Programowanie imperatywne:
    • zmienne
    • struktura blokowa
    • wiązanie statyczne i dynamiczne
    • organizacja wywołań podprogramów
    • przydział pamięci na stosie i na stercie
    • przykłady z języków Ada, C, Pascal
  • Programowanie obiektowe:
    • klasy jako abstrakcyjne typy danych
    • dziedziczenie
    • późne (dynamiczne) wiązanie wywołań
    • polimorfizm
    • szablony i klasy uogólnione
    • przykłady z języków C++, Java, C#, Ada 95, Smalltalk
  • Programowanie funkcyjne:
    • funkcje jako model programowania
    • rachunek lambda
    • dopasowywanie wzorca
    • uzgadnianie typów
    • rekursja
    • leniwe wyliczanie
    • funkcje wyższego rzędu
    • przykłady z języków Lisp, Scheme, ML, Haskell
  • Programowanie w logice:
    • rachunek predykatów w Prologu
    • rezolucja
    • listy
  • Zagadnienia kompilacji
    • Analiza leksykalna
    • Analiza składniowa
    • Analiza kontekstowa
    • Generowanie kodu
  • Zagadnienia czasu wykonania
    • Realizacja wywołań procedur (funkcji) i metod
    • Zarządzanie pamięcią
    • Przechowywanie środowisk

Literatura

  1. R. Sebesta, Concepts of Programming Languages, Addison Wesley, 2005
  2. P. Van Roy, S. Haridi, Concepts, Techniques, and Models of Computer Programming, MIT Press, 2004
  3. J. Reynolds, Theories of Programming Languages, Cambridge University Press, 1998
  4. K. Arnold, J. Gosling, The Java Programming Language Addison Wesley, 2005
  5. R. Bird, Introduction to Functional Programming using Haskell, Prentice Hall, 1988
  6. F. Kluźniak, S. Szpakowicz, Prolog, Wydawnictwa Naukowo-Techniczne, 1983
  7. A.V. Aho, M.S. Lam, R. Sethi, J.D. Ullman, Compilers: Principles, Techniques, and Tools, 2/E, Addison Wesley, 2006 (w języku polskim dostępne jest tłumaczenie poprzedniej wersji tej książki z 1986 roku: A.V. Aho, M.S. Lam, R. Sethi, J.D. Ullman, Kompilatory. Reguły, metody i narzędzia, Wydawnictwa Naukowo-Techniczne, Warszawa 2002).
  8. W.M. Waite,G. Goos, Konstrukcja kompilatorów, Wydawnictwa Naukowo-Techniczne, Warszawa 1989.