Paradygmat programowania
Transkrypt
Paradygmat programowania
Paradygmaty i języki programowania Wykład 1 Informacje Podstawowe dr Robert Kowalczyk, Katedra Analizy 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 dr Robert Kowalczyk, Katedra Analizy 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 dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 3 Podział paradygmatów Programowanie Imperatywne Deklaratywne Strukturalne Proceduralne Logiczne Obiektowe Generyczne SQL, XML Współbieżne Funkcyjne Zdarzeniowe dr Robert Kowalczyk, Katedra Analizy 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). dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 5 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] dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 6 Cztery główne paradygmaty Paradygmat programowania Proceduralnego/Strukturalnego Paradygmat programowania Obiektowego Paradygmat programowania Funkcyjnego Paradygmat programowania Logicznego dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 7 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. dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 8 Programowanie Proceduralne/Strukturalne - przykład dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 9 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. dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 10 Programowanie Obiektowe - przykład dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 11 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. dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 12 Programowanie Funkcyjne - przykład dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 13 Programowanie Funkcyjne – przykład inny dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 14 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. dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 15 Programowanie w logice - przykład dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 16 Programowanie w logice – przykład 2 dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 17 Popularność języków a cztery główne paradygmaty źródło: www.tiobe.com dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 18 Informacje Ogólne Zaliczenie ćwiczeń: 2 kolokwia+referat Zaliczenie wykładu: test Ocena z przedmiotu: 50% ćwiczenia + 50% wykład Wykłady i Ćwiczenia na: www.math.uni.lodz.pl/~kowalcr/ParadygmatyDzienne Dyżur: pokój A327, Środa 14.00-16.00 dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 19 Wykład 1 Wprowadzenie 18 luty 2015 (Robert Kowalczyk) 1. 2. 3. Ćwiczenie i wykład - informacje ogólne o charakterze zajęć Podział referatów Wiadomości wstępne i przedmiocie dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 20 Wykład 2 Powtórzenie 25 luty 2015 (Robert Kowalczyk) 1. Ćwiczenia z C++ (oceny za aktywność) dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 21 Wykład 3 Wprowadzenie do języków funkcyjnych 4 marzec 2015 (Robert Kowalczyk) 1. 2. 3. 4. Programowanie funkcyjne - wstęp Przegląd języków funkcyjnych Wprowadzenie do Haskella Podstawy Haskella dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 22 Wykład 4 Haskell 1 11 marzec 2015 (Poniatowski, Reszczyński, Woźniczka) Rozdział 2 Starting Out Rozdział 3 Types and Typeclasses z książki Learn You a Haskell for Great Good! autorstwa Mirana Lipovaca dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 23 Wykład 5 Haskell 2 18 marzec 2015 (Ciołek) Rozdział 4 Syntax in Functions Rozdział 5 Recursion z książki Learn You a Haskell for Great Good! autorstwa Mirana Lipovaca dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 24 Wykład 6 Haskell 3 25 marzec 2015 (Bugajny, Antoszkiewicz,Rogulski) Rozdział 6 Higher order functions Rozdział 7 Modules z książki Learn You a Haskell for Great Good! autorstwa Mirana Lipovaca dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 25 Wykład 7 Haskell 4 1 kwiecień 2015 (Szamburski, Bocheński) Rozdział 8 Making Our Own Types and Typeclasses Rozdział 9 Input and Output z książki Learn You a Haskell for Great Good! autorstwa Mirana Lipovaca dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 26 Wykład 8 Powtórzenie Haskell 8 kwiecień 2015 (Robert Kowalczyk) dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 27 Wykład 9 Kolokwium Haskell 15 kwiecień 2015 (Robert Kowalczyk) dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 28 Wykład 9 Wprowadzenie do języków logiki 15 kwiecień 2015 (Robert Kowalczyk) 1. 2. 3. 4. Programowanie w logice - wstęp Przegląd języków logiki Wprowadzenie do Prologa Podstawy Prologa dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 29 Wykład 10 Prolog 1 22 kwiecień 2015 (Anglart, Juśkiewicz, Mikołajczyk) Rozdział 1 Introducing Prolog Rozdział 2 Constructing Prolog Programs z książki Prolog Programming in Depth autorstwa Michael A. Covington, Donald Nute, André Vellino dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 30 Wykład 11 Prolog 2 29 kwiecień 2015 (Przybylski, Podkowiński) Rozdział 3 Data Structures and Computation z książki Prolog Programming in Depth autorstwa Michael A. Covington, Donald Nute, André Vellino dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 31 Wykład 12 Prolog 3 6 maj 2015 (Gacek, Gajewski) Rozdział 4 Expressing Procedural Algorithms z książki Prolog Programming in Depth autorstwa Michael A. Covington, Donald Nute, André Vellino dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 32 Wykład 13 Prolog 4 13 maj 2015 (Jacek Jaskólski) Rozdział 5 Reading Data in Foreign Formats Rozdział 7 Advanced Techniques z książki Prolog Programming in Depth autorstwa Michael A. Covington, Donald Nute, André Vellino dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 33 Wykład 14 Powtórzenie Prolog 20 maj 2015 (Robert Kowalczyk) dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 34 Wykład 15 Kolokwium Prolog 27 maj 2015 (Robert Kowalczyk) dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 35 Literatura do przedmiotu 1. Learn You a Haskell for Great Good! Miron Lipovaca 2. Prolog Programming in Depth autorstwa Michael A. Covington, Donald Nute, André Vellino 3. Strony www i książki poświęcone językom programowania: Haskell i Prolog dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 36 Dziękuję za Uwagę!!! dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 37