Języki i paradygmaty programowaniazuig.el.pcz.czest.pl/jackrat/progob/JPP_PREZENTACJA.ppt.pdf ·...
Transcript of Języki i paradygmaty programowaniazuig.el.pcz.czest.pl/jackrat/progob/JPP_PREZENTACJA.ppt.pdf ·...
Języki i paradygmaty programowania
I. Wprowadzenie
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-2
O źródłach● wykład został przygotowany w ogromnej części
w oparciu o serwis http://wazniak.mimuw.edu.pl/(zgodnie z licencją serwisu)
● inne źródła:– Wikipedia:http://pl.wikipedia.org/, http://en.wikipedia.org/
– niektóre przykłady fragmentów programów:http://www.im.pwr.wroc.pl/~przemko/prolog/ http://rudy.mif.pg.gda.pl/~bogdro/dos/
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-3
O przedmiocie● prowadzący: dr Jarosław Bylina● email: [email protected]● www: http://hektor.umcs.lublin.pl/~jmbylina/● 15 godzin wykładu (brak ćwiczeń)● 5 spotkań po 3 godziny lekcyjne● na każdym spotkaniu (poza pierwszym) krótki
teścik z poprzedniego wykładu● wyniki testów stanowią podstawę zaliczenia
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-4
Cel przedmiotu● Uświadomienie istotnej różnorodności
języków programowania● Zrozumienie sposobu działania implementacji
języków programowania● Nauczenie podejmowania lepszych decyzji co
do wyboru języka programowania odpowiedniego do postawionego problemu
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-5
Paradygmat?● słowo nadużywane przez filozofów, lingwistów,
informatyków...● SJP PWN:
– 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; wzorzec, model deklinacyjny lub koniugacyjny
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-6
Paradygmat?● z greckiego:
παράδειγμα (parádeigma)
– wzorzec– przykład
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-7
Paradygmat?● Nie chodzi o typowy, wzorcowy sposób pisania
programów!● Chodzi raczej o zbiór mechanizmów, jakich
programista używa, pisząc program, i o to, jak ów program jest następnie wykonywany przez komputer
● Jest to ogół oczekiwań programisty wobec języka programowania i komputera, na którym będzie działał program
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-8
Wielcy
John von Neumann
Niklaus E. Wirth
Donald E. Knuth
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-9
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-10
Paradygmaty programowania● Programowanie imperatywne
– opisujemy kolejne czynności, które wykonawca (komputer) ma wykonać, by osiągnąć cel
– w tym rodzaju programowaniu programista opisuje, jak komputer ma działać
● Programowanie deklaratywne– opisujemy cel, który wykonawca (komputer) ma
osiągnąć– w tym rodzaju programowaniu programista
opisuje, co komputer ma osiągnąć
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-11
I. Programowanie imperatywne● Najbardziej pierwotny sposób programowania,
w którym program postrzegany jest jakociąg poleceń dla komputera
● Obliczenia rozumiemy tu jakosekwencję poleceńzmieniających krok po kroku stan maszyny,aż do uzyskania oczekiwanego wyniku
● Stan maszyny należy z kolei rozumieć jako zawartość całej pamięci oraz rejestrówi znaczników procesora
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-12
I. Programowanie imperatywne● Ten sposób patrzenia na programy związany
jest ściśle z budową sprzętu komputerowegoo architekturze von Neumanna, w którym poszczególne instrukcje (w kodzie maszynowym) to właśnie polecenia zmieniające ów globalny stan
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-13
I. Programowanie imperatywne
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-14
I. Programowanie imperatywne● Języki wyższego (w stosunku do asemblera
i kodu maszynowego) poziomu — takie jak Fortran, Algol, Pascal, Ada lub C — posługują się pewnymi abstrakcjami, ale wciąż odpowiadają paradygmatowi programowania imperatywnego
● Instrukcje podstawienia działają na danych pobranych z pamięci i umieszczają wynikw tejże pamięci, zaśabstrakcją komórek pamięci są zmienne
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-15
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-16
Ia. Programowanie proceduralne● Podział zadania programistycznego na
podzadania i ich niezależna (od siebie nawzajem) implementacja w postaci podprogramów (procedur)
● Niezalecanie korzystaniaz efektów ubocznych(rozumianych w sensie tradycyjnym, jako zmiana wartości zmiennych globalnych), lecz przekazywanie danych i wynikóww parametrach procedur
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-17
Ia. Programowanie proceduralne
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-18
Ia. Programowanie proceduralne
metodologia programowania bottom-up
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-19
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-20
Ib. Programowanie strukturalne● używanie prostych, dobrze zdefiniowanych
struktur(konstrukcji programistycznych):– sekwencja– selekcja (instrukcja warunkowa)– iteracja (pętla)– wywołanie podprogramu
● unikanie skoków (wręcz ich zakaz!)
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-21
Ib. Programowanie strukturalne
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-22
Ib. Programowanie strukturalne
metodologia programowania top-down
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-23
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-24
Ic./II. Programowanie obiektowe● Program to zbiór
porozumiewających się ze sobą obiektów,czyli jednostek zawierających pewne danei umiejących wykonywać na nich pewne operacje
● Programowanie obiektowe jest do pewnego stopniarozszerzeniemparadygmatu programowaniaproceduralnego i strukturalnego
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-25
● Ważną cechą jest tupowiązanie danych(czyli stanu)z operacjami na nich(czyli poleceniami) w całość, stanowiącą odrębną jednostkę — obiekt
● Bardzo ważną cechą jest teżmechanizm dziedziczenia,czyli możliwość definiowania nowych, bardziej złożonych obiektów, na bazie obiektów już istniejących
Ic./II. Programowanie obiektowe
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-26
● Inne ważne cechy programowania obiektowego to:– wysoki stopień abstrakcji danych
– enkapsulacja danych– polimorfizm
Ic./II. Programowanie obiektowe
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-27
● Zwolennicy programowania obiektowego uważają, że ten paradygmat dobrze odzwierciedlasposób, w jaki ludzie myślą o świecie
● Nawet jeśli pogląd ten uznamy za przejaw pewnej egzaltacji, to niewątpliwie programowanie obiektowe zdobyło ogromną popularność i wypada je uznać za paradygmat obecnie dominujący
Ic./II. Programowanie obiektowe
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-28
Ic./II. Programowanie obiektowe
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-29
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-30
III. Programowanie funkcyjne● Program to po prostu złożona
funkcja (w sensie matematycznym),która otrzymawszy dane wejściowe wylicza pewien wynik
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-31
III. Programowanie funkcyjne● Zasadniczą różnicą w stosunku do poprzednich
paradygmatów jest brak dostępu do stanu maszyny
● Nie ma zmiennych● A co za tym idzie, nie ma
żadnych efektów ubocznych(rozumianych w sensie tradycyjnym, jako zmiana wartości zmiennych)
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-32
III. Programowanie funkcyjne● Nie ma tradycyjnie rozumianych pętli
(imperatywnych z natury)● Tradycyjne pętle wymagają bowiem zwykle
(poza przypadkami zdegenerowanymi, jak pętle nieskończone) zmiennych (lub innego dostępu do stanu maszyny) do sterowania ich przebiegiem
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-33
III. Programowanie funkcyjne● Konstruowanie programów to składanie funkcji● Zazwyczaj z istotnym wykorzystaniem
rekurencji (rekursji)(tam, gdzie w programowaniu imperatywnym wykorzystujemy pętle)
● Charakterystyczne jest również definiowanie funkcji wyższego rzędu, czyli takich, dla których argumentami i których wynikami mogą być funkcje (a nie tylko „proste” dane jak liczby lub napisy)
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-34
III. Programowanie funkcyjne
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-35
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-36
IV. Programowanie logiczne● Na program składa się
zbiór zależności (przesłanek)orazpewne stwierdzenie/pytanie (cel)
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-37
IV. Programowanie logiczne● Wykonanie programu to
próba udowodnienia celuw oparciu o podane przesłanki
● Obliczenia wykonywane są niejako „przy okazji” dowodzenia celu
● Podobnie jak w programowaniu funkcyjnym, nie wydajemy rozkazów,a jedynie opisujemy,co wiemy i co chcemy uzyskać
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-38
IV. Programowanie logiczne
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-39
IV. Programowanie logiczne
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-40
IV. Programowanie logiczne
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-41
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-42
Inne paradygmaty● Programowanie na poziomie wartości● Programowanie na poziomie funkcji● Programowanie skalarne● Programowanie wektorowe/macierzowe● Programowanie zdarzeniowe● Programowanie z własnym wątkiem sterowania● Programowanie aspektowe● Programowanie uogólnione● Programowanie równoległe/współbieżne/rozproszone
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-43
Języki a paradygmaty● asemblery, „stary” BASIC
– p. imperatywne (proceduralne?)● „stary” Pascal, C, Fortran
– p. imperatywne, proceduralne, strukturalne● C++, Object Pascal, Ada
– p. imperatywne, proceduralne, strukturalne, obiektowe● Smalltalk, C#, Java
– p. obiektowe● Lisp, Scheme, Logo, ML, Haskell
– p. funkcyjne● Planner, Prolog
– p. logiczne● Python
– p. proceduralne, strukturalne, obiektowe, funkcyjne● SQL
– p. deklaratywne (ani ściśle funkcyjne, ani ściśle logiczne)
2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-44
Architektura von Neumanna● Na razie wszystkie komputery działają
w oparciu o imperatywnąarchitekturę von Neumanna
● Tak więc każdy program, który chcemy uruchomić, musi być najpierw przetłumaczony do ciągu rozkazów w języku wewnętrznym konkretnej maszyny
● Różne paradygmaty mogą wymagać skomplikowanych metod tłumaczenia;różna jest też ich efektywność