Paradygmaty i języki programowania Wprowadzenie Nieliniowej, WMiI UŁ 1
Czym jest paradygmat? Paradygmat to przyjęty sposób widzenia rzeczywistości w danej dziedzinie, doktrynie itp. Zespół form fleksyjnych (deklinacyjnych lub koniugacyjnych) właściwy danemu typowi wyrazów. źródło: słownik języka polskiego, PWN Nieliniowej, WMiI UŁ 2
Czym jest paradygmat programowania? Paradygmat programowania (z ang. programming paradigm), to wzorzec programowania przedkładany w danym okresie rozwoju informatyki ponad inne lub szczególnie ceniony w pewnych okolicznościach lub zastosowaniach. Paradygmat programowania definiuje sposób patrzenia programisty na przepływ sterowania i wykonywanie programu komputerowego. źródło: www.wikipedia.pl Nieliniowej, WMiI UŁ 3
Podział paradygmatów Programowanie Imperatywne Deklaratywne Strukturalne Proceduralne Logiczne Funkcyjne Obiektowe Generyczne SQL, XML Współbieżne Zdarzeniowe Nieliniowej, WMiI UŁ 4
Skąd taki podział? Programowanie imperatywne to paradygmat programowania, który opisuje proces wykonywania jako sekwencję instrukcji zmieniających stan programu. Podobnie jak tryb rozkazujący w lingwistyce wyraża żądania jakichś czynności do wykonania, programy imperatywne składają się z ciągu komend do wykonania przez komputer. Programowanie deklaratywne to paradygmat programowania, w którym programista zamiast definiowania sposobu rozwiązania, czyli sekwencji kroków prowadzących do uzyskania wyniku, opisuje samo rozwiązanie. Innymi słowy programowanie w tych językach polega na opisywaniu tego co nas interesuje a nie jak to zrobić (brak opisu przepływu sterowania). Nieliniowej, WMiI UŁ 5
Programowanie imperatywne vs. deklaratywne dr Robert Kowalczyk WMiI UŁ 6
Przykład programowanie imperatywne a deklaratywne Imperatywne programowanie: var numbers = [1,2,3,4,5] var doubled = [] for(var i = 0; i < numbers.length; i++) { var newnumber = numbers[i] * 2 doubled.push(newnumber) } console.write(doubled) //=> [2,4,6,8,10] Deklaratywne programowanie var numbers = [1,2,3,4,5] var doubled = numbers.map(function(n) { return n * 2 }) console.log(doubled) //=> [2,4,6,8,10] Nieliniowej, WMiI UŁ 7
Cztery główne paradygmaty Paradygmat programowania Proceduralnego/Strukturalnego Paradygmat programowania Obiektowego Paradygmat programowania Funkcyjnego Paradygmat programowania Logicznego Nieliniowej, WMiI UŁ 8
Programowanie Proceduralne/Strukturalne Paradygmat programowania proceduralnego (z ang. procedural programming), to paradygmat programowania zalecający dzielenie kodu na procedury, czyli fragmenty wykonujące ściśle określone operacje. Procedury nie powinny korzystać ze zmiennych globalnych (w miarę możliwości), lecz pobierać i przekazywać wszystkie dane (czy też wskaźniki do nich) jako parametry wywołania. Paradygmat programowania strukturalnego (z ang. structured programming), to paradygmat zalecający hierarchiczne dzielenie kodu na bloki, z jednym punktem wejścia i jednym lub wieloma punktami wyjścia. Chodzi przede wszystkim o nieużywanie (lub ograniczenie) instrukcji skoku (goto). Trzema kluczowy strukturami są: - sekwencja (instrukcja_1; instrukcja_2; ; instrukcja_n), - wybór (if, if...else, switch, case), - powtarzanie (while, repeat, for). Strukturalność zakłócają instrukcje typu: break, continue, które jednak w niektórych przypadkach znacząco podnoszą czytelność kodu i elastyczność kodu. Kluczowe koncepcje: zmienne, typy, procedury i dane abstrakcyjne. Zastosowania: oprogramowanie sieciowe, systemy operacyjne. Języki charakterystyczne dla tych paradygmatów, to m.in.: Fortran (lata 50. XX wieku), Cobol (lata 60. XX wieku), Pascal (lata 70. XX wieku), C (lata 70. XX wieku), C++ (lata 80. XX wieku), i inne. Nieliniowej, WMiI UŁ 9
Programowanie Proceduralne/Strukturalne - przykład Nieliniowej, WMiI UŁ 10
Programowanie Obiektowe Paradygmat programowania obiektowego (ang. object-oriented programming), to paradygmat programowania, w którym programy definiuje się za pomocą obiektów - elementów łączących stan (czyli dane, nazywane najczęściej polami) i zachowanie (czyli procedury, tu: metody). Obiektowy program komputerowy wyrażony jest jako zbiór takich obiektów, komunikujących się pomiędzy sobą w celu wykonywania zadań. Kluczowe koncepcje: klasy i obiekty, dziedziczenie, enkapsulacja, polimorfizm. Zastosowania: aplikacje WWW i aplikacje desktopowe współczesny rynek oprogramowania. Języki charakterystyczne dla tego typu paradygmatu, to m.in.: Simula (lata 60. XX wieku), Smalltalk (lata 80. XX wieku), C++ (lata 90. XX wieku), C# (początek XXI wieku), Java (lata 90. XX wieku), i inne. Nieliniowej, WMiI UŁ 11
Obcject-oriented programming - example dr Robert Kowalczyk WMiI UŁ 12
Programowanie Funkcyjne Paradygmat programowania funkcyjnego lub paradygmat programowania funkcjonalnego (z ang. functional programming), to paradygmat programowanie będący odmianą programowania deklaratywnego, w której funkcje należą do wartości podstawowych, a nacisk kładzie się na wartościowanie (często rekurencyjnych) funkcji, a nie na wykonywanie poleceń. Podstawą teoretyczną programowania funkcyjnego był opracowany w latach 30. XX wieku przez Alonzo Churcha rachunek lambda, a dokładnie rachunek lambda z typami. Kluczowe koncepcje: funkcje, rachunek lambda, parametryczny polimorfizm. Zastosowania: teoretyczne, telekomunikacja, obliczenia finansowe. Języki charakterystyczne dla tego typu paradygmatu, to m.in.: Lisp (lata 50. XX wieku), ML (lata 70. XX wieku), Haskell (lata 80. XX wieku), H# (lata 80. XX wieku), Erlang (lata 80. XX wieku) i inne. Nieliniowej, WMiI UŁ 13
Programowanie funkcyjne - przykład dr Robert Kowalczyk WMiI UŁ 14
Programowanie funkcyjne - przykład Nieliniowej, WMiI UŁ 15
Programowanie w logice Paradygmat programowania logicznego lub paradygmat programowania w logice (z ang. logic programming), to będąca odmianą programowania deklaratywnego metoda programowania, w której program podawany jest jako pewien zestaw zależności, i relacji zachodzących między tymi zależnościami. Kluczowe koncepcje: fakty, relacje i zapytania. Zastosowania: teoretyczne, sztuczna inteligencja (przetwarzanie języka naturalnego, rozpoznawanie obrazów). Języki charakterystyczne dla tego typu paradygmatu, to m.in.: Gödel (lata 70. XX wieku), Fril (lata 70. XX wieku), Prolog (lata 70. XX wieku), i inne. Nieliniowej, WMiI UŁ 16
Programowanie w logice - przykład Nieliniowej, WMiI UŁ 17
Programowanie w logice przykład Nieliniowej, WMiI UŁ 18
Popularność języków index TIOBE źródło: www.tiobe.com Nieliniowej, WMiI UŁ 19
Informacje Ogólne Zaliczenie ćwiczeń: kolokwium + referat Zaliczenie wykładu: test (15 pytań otwartych + 5 pytań zamkniętych) Ocena z przedmiotu: 50% ćwiczenia + 50% wykład Wykłady i Ćwiczenia na: www.math.uni.lodz.pl/~kowalcr/pzn Dyżur: pokój A327, Czwartek 14.00-16.00 Nieliniowej, WMiI UŁ 20
Wprowadzenie 20 luty 2016 (Robert Kowalczyk) 1. Ćwiczenie i wykład - informacje ogólne o charakterze zajęć 2. Podział referatów 3. Wiadomości wstępne i przedmiocie Nieliniowej, WMiI UŁ 21
Haskell 0 6 marca 2016 (Robert Kowalczyk) 1. Wprowadzenie do Haskella Nieliniowej, WMiI UŁ 22
Haskell 1 6 marca 2016 (Marcin Zabost) Rozdział 3 Types and Typeclasses Rozdział 4 Syntax in Functions z książki Learn You a Haskell for Great Good! autorstwa Mirana Lipovaca Nieliniowej, WMiI UŁ 23
Haskell 2 6 marca 2016 (Michał Walczak) Rozdział 5 Recursion Rozdział 6 Higher order functions z książki Learn You a Haskell for Great Good! autorstwa Mirana Lipovaca Nieliniowej, WMiI UŁ 24
Haskell 3 13 marca 2016 (Tomasz Jawolski) Rozdział 7 Modules Rozdział 8 Making Our Own Types and Typeclasses z książki Learn You a Haskell for Great Good! autorstwa Mirana Lipovaca Nieliniowej, WMiI UŁ 25
Haskell 4 13 marca 2016 (Maciej Czapla i Agnieszka Ptaszek) Rozdział 9 Input and Output Rozdział 11 Functors, Applicative Functors and Monoids z książki Learn You a Haskell for Great Good! autorstwa Mirana Lipovaca Nieliniowej, WMiI UŁ 26
Zadania Haskell 2 kwietnia 2016 (wszyscy) Nieliniowej, WMiI UŁ 27
Prolog 0 2 kwietnia 2016 (Robert Kowalczyk) 1. Wprowadzenie do Prologa Nieliniowej, WMiI UŁ 28
Prolog 1 2 kwietnia 2016 (Paweł Madej, Wojciech Besler) Rozdział 1 Tutorial Introduction Rozdział 2 A Closer Look z książki Programming in Prolog autorstwa William Clocksin, Christopher S. Mellish Nieliniowej, WMiI UŁ 29
Prolog 2 7 maja 2016 (Karolina Supera, Michał Krajewski) Rozdział 3 Using Data Structures Rozdział 4 Backtracking and the Cut z książki Programming in Prolog autorstwa William Clocksin, Christopher S. Mellish Nieliniowej, WMiI UŁ 30
Prolog 3 7 maja 2016 (Michał Makowski) Rozdział 5 Input and Output Rozdział 6 Built-in Predicates z książki Programming in Prolog autorstwa William Clocksin, Christopher S. Mellish Nieliniowej, WMiI UŁ 31
Zadania Prolog 21 maja 2016 (wszyscy) Nieliniowej, WMiI UŁ 32
Referaty dodatkowe Prolog i Haskell 21 maja 2016 (studenci) Nieliniowej, WMiI UŁ 33
Kolokwium Haskell i Prolog Egzamin 0 5 czerwca 2016 (Robert Kowalczyk) Nieliniowej, WMiI UŁ 34
Literatura do przedmiotu 1. Learn You a Haskell for Great Good! Miron Lipovaca 2. Programming in Prolog William Clocksin, Christopher S. Mellish 3. Strony www i książki poświęcone językom programowania: Haskell i Prolog Nieliniowej, WMiI UŁ 35
Dziękuję za Uwagę!!! Nieliniowej, WMiI UŁ 36