Paradygmaty programowania: Różnice pomiędzy wersjami

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


=== Autor ===  
=== Autor ===  
* Małgorzata Moczurad
* Małgorzata Moczurad — Uniwersytet Jagielloński
* Włodzimierz Moczurad
* Włodzimierz Moczurad — Uniwersytet Jagielloński


=== Wymagania wstępne ===
=== Wymagania wstępne ===
Linia 18: 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
** Przeciążanie 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 Ada, C, 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 (dynamiczne) 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
** Nadawanie typów
** 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  
# Richard Bird: Introduction to Functional Programming using Haskell. Prentice Hall, 1988
# R. Bird, ''Introduction to Functional Programming using Haskell'', Prentice Hall, 1988
# Małgorzata Moczurad: Wybrane zagadnienia z teorii rekursji. Wydawnictwo UJ, 2002
# M. Moczurad, ''Wybrane zagadnienia z teorii rekursji'', Wydawnictwo UJ, 2002
# Martin Abadi, Luca Cardelli: A Theory of Objects. Springer, 1996.
# M. Abadi, L. Cardelli, ''A Theory of Objects'', Springer, 1996.
# John Reynolds: Theories of Programming Languages. Cambridge University Press, 1998
# J. Reynolds, ''Theories of Programming Languages'', Cambridge University Press, 1998
# Feliks Kluźniak, Stanisław Szpakowicz: Prolog. Wydawnictwa Naukowo-Techniczne, 1983
# 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==
Linia 79: Linia 80:
# [[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 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/Test 9: U podstaw programowania obiektowego — rachunek sigma|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/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/Test 10|test]])
# [[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 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 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]])

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)