Paradygmaty programowania: Różnice pomiędzy wersjami
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
(Nie pokazano 15 wersji utworzonych przez 6 użytkowników) | |||
Linia 3: | Linia 3: | ||
== Opis == | == Opis == | ||
Kurs omawia paradygmaty pojawiające się we | Kurs omawia cztery najistotniejsze paradygmaty pojawiające się we współczesnym programowaniu: programowanie imperatywne, obiektowe, funkcyjne i programowanie w logice. Skrótowo wspomniane są również inne paradygmaty. Kurs pozwala spojrzeć szerzej na programowanie, a w szczególności pogłębić znajomość języków programowania i zrozumieć podstawowe zagadnienia implementacyjne. | ||
== Sylabus == | == Sylabus == | ||
=== Autor === | === Autor === | ||
* Włodzimierz Moczurad | * Małgorzata Moczurad — Uniwersytet Jagielloński | ||
* Włodzimierz Moczurad — Uniwersytet Jagielloński | |||
=== Wymagania wstępne === | === Wymagania wstępne === | ||
Linia 17: | Linia 18: | ||
=== Zawartość === | === Zawartość === | ||
* Pojęcia ogólne | * 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 operatorów i podprogramów | ||
** | ** polimorfizm | ||
* Programowanie imperatywne | * 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 | * Programowanie obiektowe: | ||
** | ** klasy jako abstrakcyjne typy danych | ||
** | ** dziedziczenie | ||
** | ** późne (dynamiczne) wiązanie wywołań | ||
** | ** polimorfizm | ||
** | ** szablony i klasy rodzajowe | ||
** | ** przykłady z języków C++, Java, C#, Ada 95, Smalltalk | ||
* Programowanie funkcyjne | * Programowanie funkcyjne: | ||
** | ** funkcje jako model programowania | ||
** | ** rachunek lambda | ||
** | ** dopasowywanie wzorca | ||
** | ** nadawanie typów | ||
** | ** rekursja | ||
** | ** leniwa ewaluacja | ||
** | ** funkcje wyższego rzędu | ||
** | ** przykłady z języków Lisp, Scheme, ML, Haskell | ||
* Programowanie w logice | * Programowanie w logice: | ||
** | ** rachunek predykatów w Prologu | ||
** | ** rezolucja | ||
** | ** listy | ||
=== Literatura === | === 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 | ||
# | # K. Arnold, J. Gosling, ''The Java Programming Language'' Addison Wesley, 2005 | ||
# | # R. Bird, ''Introduction to Functional Programming using Haskell'', Prentice Hall, 1988 | ||
# M. Moczurad, ''Wybrane zagadnienia z teorii rekursji'', Wydawnictwo UJ, 2002 | |||
# M. Abadi, L. Cardelli, ''A Theory of Objects'', Springer, 1996. | |||
# J. Reynolds, ''Theories of Programming Languages'', Cambridge University Press, 1998 | |||
# F. Kluźniak, S. Szpakowicz, ''Prolog'', Wydawnictwa Naukowo-Techniczne, 1983 | |||
# U. Nilsson, J. Małuszyński, ''Logic, Programming and Prolog'', John Wiley & Sons, 1995 | |||
==Moduły== | ==Moduły== | ||
# [[Paradygmaty programowania/Wykład 1: Co to jest paradygmat programowania?|Co to jest paradygmat programowania?]] ([[Paradygmaty programowania/Ćwiczenia 1: Co to jest paradygmat programowania?|ćwiczenia]]) | # [[Paradygmaty programowania/Wykład 1: Co to jest paradygmat programowania?|Co to jest paradygmat programowania?]] ([[Paradygmaty programowania/Ćwiczenia 1: Co to jest paradygmat programowania?|ćwiczenia]]) ([[Paradygmaty programowania/Test 1: Co to jest paradygmat programowania?|test]]) | ||
# [[Paradygmaty programowania/Wykład 2: Semantyka zmiennych|Semantyka zmiennych]] ([[Paradygmaty programowania/Ćwiczenia 2: Semantyka zmiennych|ćwiczenia]]) | # [[Paradygmaty programowania/Wykład 2: Semantyka zmiennych|Semantyka zmiennych]] ([[Paradygmaty programowania/Ćwiczenia 2: Semantyka zmiennych|ćwiczenia]]) ([[Paradygmaty programowania/Test 2: Semantyka zmiennych|test]]) | ||
# [[Paradygmaty programowania/Wykład 3: Typy, typy abstrakcyjne|Typy, typy abstrakcyjne]] ([[Paradygmaty programowania/Ćwiczenia 3: Typy, typy abstrakcyjne|ćwiczenia]]) | # [[Paradygmaty programowania/Wykład 3: Typy, typy abstrakcyjne|Typy, typy abstrakcyjne]] ([[Paradygmaty programowania/Ćwiczenia 3: Typy, typy abstrakcyjne|ćwiczenia]]) ([[Paradygmaty programowania/Test 3: Typy, typy abstrakcyjne|test]]) | ||
# [[Paradygmaty programowania/Wykład 4: Podprogramy|Podprogramy]] ([[Paradygmaty programowania/Ćwiczenia 4: Podprogramy|ćwiczenia]]) | # [[Paradygmaty programowania/Wykład 4: Podprogramy|Podprogramy]] ([[Paradygmaty programowania/Ćwiczenia 4: Podprogramy|ćwiczenia]]) ([[Paradygmaty programowania/Test 4: Podprogramy|test]]) | ||
# [[Paradygmaty programowania/Wykład 5: Programowanie obiektowe — przegląd|Programowanie obiektowe — przegląd]] ([[Paradygmaty programowania/Ćwiczenia 5: Programowanie obiektowe — przegląd|ćwiczenia]]) | # [[Paradygmaty programowania/Wykład 5: Programowanie obiektowe — przegląd|Programowanie obiektowe — przegląd]] ([[Paradygmaty programowania/Ćwiczenia 5: Programowanie obiektowe — przegląd|ćwiczenia]]) ([[Paradygmaty programowania/Test 5: Programowanie obiektowe — przegląd|test]]) | ||
# [[Paradygmaty programowania/Wykład 6: Programowanie funkcyjne — przegląd|Programowanie funkcyjne — przegląd]] ([[Paradygmaty programowania/Ćwiczenia 6: Programowanie funkcyjne — przegląd|ćwiczenia]]) | # [[Paradygmaty programowania/Wykład 6: Programowanie funkcyjne — przegląd|Programowanie funkcyjne — przegląd]] ([[Paradygmaty programowania/Ćwiczenia 6: Programowanie funkcyjne — przegląd|ćwiczenia]]) ([[Paradygmaty programowania/Test 6: Programowanie funkcyjne — przegląd|test]]) | ||
# [[Paradygmaty programowania/Wykład 7: Programowanie w logice - przegląd|Programowanie w logice — przegląd]] ([[Paradygmaty programowania/Ćwiczenia 7: Programowanie w logice - przegląd|ćwiczenia]]) | # [[Paradygmaty programowania/Wykład 7: Programowanie w logice - przegląd|Programowanie w logice — przegląd]] ([[Paradygmaty programowania/Ćwiczenia 7: Programowanie w logice - przegląd|ćwiczenia]]) ([[Paradygmaty programowania/Test 7: Programowanie w logice - przegląd|test]]) | ||
# [[Paradygmaty programowania/Wykład 8: U podstaw programowania funkcyjnego — rachunek lambda|U podstaw programowania funkcyjnego — rachunek lambda]] ([[Paradygmaty programowania/Ćwiczenia 8: U podstaw programowania funkcyjnego — rachunek lambda|ćwiczenia]]) | # [[Paradygmaty programowania/Wykład 8: U podstaw programowania funkcyjnego — rachunek lambda|U podstaw programowania funkcyjnego — rachunek lambda]] ([[Paradygmaty programowania/Ćwiczenia 8: U podstaw programowania funkcyjnego — rachunek lambda|ćwiczenia]]) ([[Paradygmaty programowania/Test 8: U podstaw programowania funkcyjnego — rachunek lambda|test]]) | ||
# [[Paradygmaty programowania/Wykład 9: U podstaw programowania obiektowego — rachunek sigma|U podstaw programowania obiektowego — rachunek sigma]] ([[Paradygmaty programowania/Ćwiczenia 9: U podstaw programowania obiektowego — rachunek sigma|ćwiczenia]]) | # [[Paradygmaty programowania/Wykład 9: U podstaw programowania obiektowego — rachunek sigma|U podstaw programowania obiektowego — rachunek sigma]] ([[Paradygmaty programowania/Ćwiczenia 9: U podstaw programowania obiektowego — rachunek sigma|ćwiczenia]]) ([[Paradygmaty programowania/Test 9: U podstaw programowania obiektowego — rachunek sigma|test]]) | ||
# [[Paradygmaty_programowania/ | # [[Paradygmaty_programowania/Wykład 10: Programowanie funkcyjne w Haskellu I|Programowanie funkcyjne w Haskellu I]] ([[Paradygmaty_programowania/Ćwiczenia 10: Programowanie funkcyjne w Haskellu I|ćwiczenia]]) ([[Paradygmaty_programowania/Test 10: Programowanie funkcyjne w Haskellu I|test]]) | ||
# [[Paradygmaty programowania/Wykład 11: Programowanie funkcyjne w Haskellu II|Programowanie funkcyjne w Haskellu II]] ([[Paradygmaty programowania/Ćwiczenia 11: Programowanie funkcyjne w Haskellu II|ćwiczenia]]) ([[Paradygmaty programowania/Test 11: Programowanie funkcyjne w Haskellu II|test]]) | |||
# [[Paradygmaty programowania/Wykład 12: Programowanie funkcyjne w Haskellu III|Programowanie funkcyjne w Haskellu III]] ([[Paradygmaty programowania/Ćwiczenia 12: Programowanie funkcyjne w Haskellu III|ćwiczenia]]) ([[Paradygmaty programowania/Test 12: Programowanie funkcyjne w Haskellu III|test]]) | |||
# [[Paradygmaty programowania/Wykład 13: Programowanie w logice w Prologu I|Programowanie w logice w Prologu I]] ([[Paradygmaty programowania/Ćwiczenia 13: Programowanie w logice w Prologu I|ćwiczenia]]) ([[Paradygmaty programowania/Test 13: Programowanie w logice w Prologu I|test]]) | |||
# [[Paradygmaty programowania/Wykład 14: Programowanie w logice w Prologu II|Programowanie w logice w Prologu II]] ([[Paradygmaty programowania/Ćwiczenia 14: Programowanie w logice w Prologu II|ćwiczenia]]) ([[Paradygmaty programowania/Test 14: Programowanie w logice w Prologu II|test]]) | |||
# [[Paradygmaty programowania/Wykład 15: Inne paradygmaty warte wspomnienia|Inne paradygmaty warte wspomnienia]] ([[Paradygmaty programowania/Ćwiczenia 15: Inne paradygmaty warte wspomnienia|ćwiczenia]]) ([[Paradygmaty programowania/Test 15: Inne paradygmaty warte wspomnienia|test]]) | |||
# [[Paradygmaty programowania/Wykład 11: Programowanie funkcyjne w Haskellu II|Programowanie funkcyjne w Haskellu II]] ([[Paradygmaty programowania/Ćwiczenia 11: Programowanie funkcyjne w Haskellu II|ćwiczenia]]) | |||
# [[Paradygmaty programowania/Wykład 12: Programowanie funkcyjne w Haskellu III|Programowanie funkcyjne w Haskellu III]] ([[Paradygmaty programowania/Ćwiczenia 12: Programowanie funkcyjne w Haskellu III|ćwiczenia]]) | |||
# [[Paradygmaty programowania/Wykład 13: Programowanie w logice w Prologu I|Programowanie w logice w Prologu I]] ([[Paradygmaty programowania/Ćwiczenia 13: Programowanie w logice w Prologu I|ćwiczenia]]) | |||
# [[Paradygmaty programowania/Wykład 14: Programowanie w logice w Prologu II|Programowanie w logice w Prologu II]] ([[Paradygmaty programowania/Ćwiczenia 14: Programowanie w logice w Prologu II|ćwiczenia]]) | |||
# [[Paradygmaty programowania/Wykład 15: Inne paradygmaty warte wspomnienia|Inne paradygmaty warte wspomnienia]] ([[Paradygmaty programowania/Ćwiczenia 15: Inne paradygmaty warte wspomnienia|ćwiczenia]]) |
Aktualna wersja na dzień 13:33, 27 wrz 2006
Forma zajęć
Wykład (30 godzin) + laboratorium (30 godzin)
Opis
Kurs omawia cztery najistotniejsze paradygmaty pojawiające się we współczesnym programowaniu: programowanie imperatywne, obiektowe, funkcyjne i programowanie w logice. Skrótowo wspomniane są również inne paradygmaty. Kurs pozwala spojrzeć szerzej na programowanie, a w szczególności pogłębić znajomość języków programowania i zrozumieć podstawowe zagadnienia implementacyjne.
Sylabus
Autor
- 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
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 operatorów i podprogramów
- 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 rodzajowe
- przykłady z języków C++, Java, C#, Ada 95, Smalltalk
- Programowanie funkcyjne:
- funkcje jako model programowania
- rachunek lambda
- dopasowywanie wzorca
- nadawanie typów
- rekursja
- leniwa ewaluacja
- 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
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
- K. Arnold, J. Gosling, The Java Programming Language Addison Wesley, 2005
- R. Bird, Introduction to Functional Programming using Haskell, Prentice Hall, 1988
- M. Moczurad, Wybrane zagadnienia z teorii rekursji, Wydawnictwo UJ, 2002
- M. Abadi, L. Cardelli, A Theory of Objects, Springer, 1996.
- J. Reynolds, Theories of Programming Languages, Cambridge University Press, 1998
- F. Kluźniak, S. Szpakowicz, Prolog, Wydawnictwa Naukowo-Techniczne, 1983
- U. Nilsson, J. Małuszyński, Logic, Programming and Prolog, John Wiley & Sons, 1995
Moduły
- Co to jest paradygmat programowania? (ćwiczenia) (test)
- Semantyka zmiennych (ćwiczenia) (test)
- Typy, typy abstrakcyjne (ćwiczenia) (test)
- Podprogramy (ćwiczenia) (test)
- Programowanie obiektowe — przegląd (ćwiczenia) (test)
- Programowanie funkcyjne — przegląd (ćwiczenia) (test)
- Programowanie w logice — przegląd (ćwiczenia) (test)
- U podstaw programowania funkcyjnego — rachunek lambda (ćwiczenia) (test)
- U podstaw programowania obiektowego — rachunek sigma (ćwiczenia) (test)
- Programowanie funkcyjne w Haskellu I (ćwiczenia) (test)
- Programowanie funkcyjne w Haskellu II (ćwiczenia) (test)
- Programowanie funkcyjne w Haskellu III (ćwiczenia) (test)
- Programowanie w logice w Prologu I (ćwiczenia) (test)
- Programowanie w logice w Prologu II (ćwiczenia) (test)
- Inne paradygmaty warte wspomnienia (ćwiczenia) (test)