MIMINF:Języki i paradygmaty programowania: Różnice pomiędzy wersjami
Nie podano opisu zmian |
|||
(Nie pokazano 8 pośrednich wersji utworzonych przez tego samego użytkownika) | |||
Linia 3: | Linia 3: | ||
== Opis == | == Opis == | ||
W ramach tego przedmiotu | 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 == | == Sylabus == | ||
=== Autor === | === Autor === | ||
Janusz Jabłonowski na podstawie materiałów z Ważniaka autorstwa: | |||
* Małgorzata Moczurad — Uniwersytet Jagielloński | * Małgorzata Moczurad — Uniwersytet Jagielloński | ||
* Włodzimierz Moczurad — Uniwersytet Jagielloński | * Włodzimierz Moczurad — Uniwersytet Jagielloński | ||
Linia 24: | Linia 26: | ||
** przekazywanie parametrów do podprogramów | ** przekazywanie parametrów do podprogramów | ||
** abstrakcyjne typy danych | ** abstrakcyjne typy danych | ||
** przeciążanie | ** przeciążanie nazw | ||
** polimorfizm | ** polimorfizm | ||
Linia 40: | Linia 42: | ||
** późne (dynamiczne) wiązanie wywołań | ** późne (dynamiczne) wiązanie wywołań | ||
** polimorfizm | ** polimorfizm | ||
** szablony i klasy | ** szablony i klasy uogólnione | ||
** przykłady z języków C++, Java, C#, Ada 95, Smalltalk | ** przykłady z języków C++, Java, C#, Ada 95, Smalltalk | ||
Linia 47: | Linia 49: | ||
** rachunek lambda | ** rachunek lambda | ||
** dopasowywanie wzorca | ** dopasowywanie wzorca | ||
** | ** uzgadnianie typów | ||
** rekursja | ** rekursja | ||
** | ** leniwe wyliczanie | ||
** funkcje wyższego rzędu | ** funkcje wyższego rzędu | ||
** przykłady z języków Lisp, Scheme, ML, Haskell | ** przykłady z języków Lisp, Scheme, ML, Haskell | ||
Linia 57: | Linia 59: | ||
** rezolucja | ** rezolucja | ||
** listy | ** 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 === | === Literatura === | ||
Linia 62: | Linia 75: | ||
# R. Sebesta, ''Concepts of Programming Languages'', Addison Wesley, 2005 | # R. Sebesta, ''Concepts of Programming Languages'', Addison Wesley, 2005 | ||
# P. Van Roy, S. Haridi, ''Concepts, Techniques, and Models of Computer Programming'', MIT Press, 2004 | # P. Van Roy, S. Haridi, ''Concepts, Techniques, and Models of Computer Programming'', MIT Press, 2004 | ||
# J. Reynolds, ''Theories of Programming Languages'', Cambridge University Press, 1998 | |||
# K. Arnold, J. Gosling, ''The Java Programming Language'' Addison Wesley, 2005 | # K. Arnold, J. Gosling, ''The Java Programming Language'' Addison Wesley, 2005 | ||
# R. Bird, ''Introduction to Functional Programming using Haskell'', Prentice Hall, 1988 | # R. Bird, ''Introduction to Functional Programming using Haskell'', Prentice Hall, 1988 | ||
# F. Kluźniak, S. Szpakowicz, ''Prolog'', Wydawnictwa Naukowo-Techniczne, 1983 | # F. Kluźniak, S. Szpakowicz, ''Prolog'', Wydawnictwa Naukowo-Techniczne, 1983 | ||
# | # 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). | ||
# W.M. Waite,G. Goos, ''Konstrukcja kompilatorów'', Wydawnictwa Naukowo-Techniczne, Warszawa 1989. | |||
Aktualna wersja na dzień 10:52, 19 paź 2006
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
- R. Sebesta, Concepts of Programming Languages, Addison Wesley, 2005
- P. Van Roy, S. Haridi, Concepts, Techniques, and Models of Computer Programming, MIT Press, 2004
- J. Reynolds, Theories of Programming Languages, Cambridge University Press, 1998
- K. Arnold, J. Gosling, The Java Programming Language Addison Wesley, 2005
- R. Bird, Introduction to Functional Programming using Haskell, Prentice Hall, 1988
- F. Kluźniak, S. Szpakowicz, Prolog, Wydawnictwa Naukowo-Techniczne, 1983
- 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).
- W.M. Waite,G. Goos, Konstrukcja kompilatorów, Wydawnictwa Naukowo-Techniczne, Warszawa 1989.