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

Podobne dokumenty