Paradygmaty programowania: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Gracja (dyskusja | edycje)
 
(Nie pokazano 14 wersji utworzonych przez 5 użytkowników)
Linia 3: Linia 3:


== Opis ==
== Opis ==
Kurs omawia paradygmaty pojawiające się we współczesnych językach programowania: programowanie imperatywne, obiektowe, funkcyjne i programowanie w logice. Pozwala to pogłębić znajomość języków programowania, a także zrozumieć podstawowe zagadnienia implementacyjne.
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
** opis składni i semantyki języków programowania
** Typy
** typy
** Przekazywanie parametrów do podprogramów
** przekazywanie parametrów do podprogramów
** Abstrakcyjne typy danych
** abstrakcyjne typy danych
** Przeładowywanie operatorów i podprogramów
** przeciążanie operatorów i podprogramów
** Polimorfizm
** polimorfizm


* Programowanie imperatywne
* Programowanie imperatywne:
** Zmienne
** zmienne
** Struktura blokowa
** struktura blokowa
** Wiązanie statyczne i dynamiczne
** wiązanie statyczne i dynamiczne
** Organizacja wywołań podprogramów
** organizacja wywołań podprogramów
** Przydział pamięci na stosie i na stercie
** przydział pamięci na stosie i na stercie
** Przykłady z języków C, Fortran, Pascal
** przykłady z języków Ada, C, Pascal


* Programowanie obiektowe
* Programowanie obiektowe:
** Klasy jako abstrakcyjne typy danych
** klasy jako abstrakcyjne typy danych
** Dziedziczenie
** dziedziczenie
** Późne wiązanie wywołań
** późne (dynamiczne) wiązanie wywołań
** Polimorfizm
** polimorfizm
** Szablony i klasy rodzajowe
** szablony i klasy rodzajowe
** Przykłady z języków C++, Java, C#, Ada 95, Smalltalk
** przykłady z języków C++, Java, C#, Ada 95, Smalltalk


* Programowanie funkcyjne
* Programowanie funkcyjne:
** Funkcje jako model programowania
** funkcje jako model programowania
** Rachunek lambda
** rachunek lambda
** Dopasowywanie wzorca
** dopasowywanie wzorca
** Otypianie
** nadawanie typów
** Rekursja
** rekursja
** Leniwa ewaluacja
** leniwa ewaluacja
** 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


* Programowanie w logice
* Programowanie w logice:
** Rachunek predykatów w Prologu
** rachunek predykatów w Prologu
** Rezolucja
** rezolucja
** Listy
** listy


=== Literatura ===
=== Literatura ===


# Robert Sebesta: Concepts of Programming Languages. Addison Wesley, 2005
# R. Sebesta, ''Concepts of Programming Languages'', Addison Wesley, 2005
# Peter Van Roy, Seif 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
# Ken Arnold, James Gosling: The Java Programming Language. Addison Wesley, 2005 / Java. Wydawnictwa Naukowo-Techniczne, 1999
# K. Arnold, J. Gosling, ''The Java Programming Language'' Addison Wesley, 2005  
# Jeffrey Ullman: Elements of ML Programming. Prentice Hall, 1997
# 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/Moduł 10| Programowanie funkcyjne w Haskellu I]] ([[Paradygmaty_programowania/Ćwiczenia 10|ćwiczenia]])
# [[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/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/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/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/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/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]])

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

  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. K. Arnold, J. Gosling, The Java Programming Language Addison Wesley, 2005
  4. R. Bird, Introduction to Functional Programming using Haskell, Prentice Hall, 1988
  5. M. Moczurad, Wybrane zagadnienia z teorii rekursji, Wydawnictwo UJ, 2002
  6. M. Abadi, L. Cardelli, A Theory of Objects, Springer, 1996.
  7. J. Reynolds, Theories of Programming Languages, Cambridge University Press, 1998
  8. F. Kluźniak, S. Szpakowicz, Prolog, Wydawnictwa Naukowo-Techniczne, 1983
  9. U. Nilsson, J. Małuszyński, Logic, Programming and Prolog, John Wiley & Sons, 1995

Moduły

  1. Co to jest paradygmat programowania? (ćwiczenia) (test)
  2. Semantyka zmiennych (ćwiczenia) (test)
  3. Typy, typy abstrakcyjne (ćwiczenia) (test)
  4. Podprogramy (ćwiczenia) (test)
  5. Programowanie obiektowe — przegląd (ćwiczenia) (test)
  6. Programowanie funkcyjne — przegląd (ćwiczenia) (test)
  7. Programowanie w logice — przegląd (ćwiczenia) (test)
  8. U podstaw programowania funkcyjnego — rachunek lambda (ćwiczenia) (test)
  9. U podstaw programowania obiektowego — rachunek sigma (ćwiczenia) (test)
  10. Programowanie funkcyjne w Haskellu I (ćwiczenia) (test)
  11. Programowanie funkcyjne w Haskellu II (ćwiczenia) (test)
  12. Programowanie funkcyjne w Haskellu III (ćwiczenia) (test)
  13. Programowanie w logice w Prologu I (ćwiczenia) (test)
  14. Programowanie w logice w Prologu II (ćwiczenia) (test)
  15. Inne paradygmaty warte wspomnienia (ćwiczenia) (test)