Paradygmaty Programowania dr inŝ. Cezary Bolek

Podobne dokumenty
Wstęp do informatyki Paradygmaty programowania

Programowanie w języku C++ Podstawowe paradygmaty programowania

Programowanie obiektowo zorientowane. Mirosław Głowacki Wykład w języku C++

Języki i paradygmaty programowania. I. Wprowadzenie

Wstęp do Programowania Obiektowego. Wykład 13 Paradygmaty. Składnia i semantyka.

Paradygmaty programowania

Paradygmaty programowania

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

dr inż. Paweł Myszkowski Wykład nr 5 ( )

Wykład 1 Informacje Podstawowe

Paradygmaty i języki programowania. Wprowadzenie. dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 1

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

Wykład 1 Informacje Podstawowe

Informatyczna Wieża Babel, czyli o różnych językach programowania. Informatyczna Wieża Babel, czyli o różnych językach programowania

Programowanie obiektowe - 1.

Programowanie. Pascal - język programowania wysokiego poziomu. Klasa 2 Lekcja 9 PASCAL

Języki programowania deklaratywnego

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

InŜynieria oprogramowania. Język UML

Modelowanie i Programowanie Obiektowe

Język programowania PASCAL

Wykład 0 Informacje Podstawowe

ZMODYFIKOWANY Szczegółowy opis przedmiotu zamówienia

Podstawy Programowania Obiektowego

Programowanie obiektowe

Języki programowania imperatywnego

Programowanie Obiektowe i C++

Języki i paradygmaty programowania

Programowanie w języku C++ Grażyna Koba

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/ / 24

Historia modeli programowania

Programowanie obiektowe Wykład 1. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

Programowanie funkcyjne wprowadzenie Specyfikacje formalne i programy funkcyjne

Technologie cyfrowe semestr letni 2018/2019

Programowanie w języku Python. Grażyna Koba

Programowanie. Projektowanie funkcje programu tworzenie algorytmu i struktur danych. Programowanie implementacja algorytmu kompilacja programu

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Paradygmaty i języki programowania. Wprowadzenie. dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 1

Programowanie Obiektowe i C++ Marcin Benke

Języki programowania deklaratywnego

Wstęp do informatyki. System komputerowy. Magistrala systemowa. Architektura komputera. Cezary Bolek

Języki programowania zasady ich tworzenia

Wstęp do programowania

Wstęp do programowania

Jerzy Nawrocki, Wprowadzenie do informatyki

Podstawy programowania. Wprowadzenie

Język programowania. Andrzej Bobyk

Programowanie komputerów

Praktyka Programowania

Języki i metodyka programowania

Wykład 4. Algorytmy i programy. Algorytmy + struktury danych = programy. Niklaus Wirth. Algorytm = logika + sterowanie.

GUI - projektowanie interfejsów cz. II

Programowanie współbieżne i rozproszone

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Architektura komputera. Cezary Bolek. Uniwersytet Łódzki. Wydział Zarządzania. Katedra Informatyki. System komputerowy

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Jerzy Nawrocki, Wprowadzenie do informatyki

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Technologie informacyjne - wykład 12 -

PARADYGMATY PROGRAMOWANIA

Wstęp do Informatyki dla bioinformatyków

Podstawy programowania wykład

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Algorytm. Krótka historia algorytmów

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Style programowania - krótki przeglad

Metody Programowania

Wykład 1 Wiadomości wstępne

15. Funkcje i procedury składowane PL/SQL

Programowanie obiektowe

Informatyka II stopień (I stopień / II stopień) Ogólnoakademicki (ogólno akademicki / praktyczny) Kierunkowy (podstawowy / kierunkowy / inny HES)

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Magistrala systemowa (System Bus)

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

1 Wprowadzenie do algorytmiki

Wstęp do programowania obiektowego. Wykład 1 Algorytmy i paradygmaty Podstawowe pojęcia PO

2.8. Algorytmy, schematy, programy

Programowanie obiektowe. Wprowadzenie

Kierunek: Informatyka Poziom studiów: Studia I stopnia Forma i tryb studiów: Stacjonarne. Wykład Ćwiczenia

Wprowadzenie do programowania

Programowanie I. Wprowadzenie. Proces programowania

Wstęp do programowania

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Algorytm. a programowanie -

Technologie i usługi internetowe cz. 2

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

ECDL Podstawy programowania Sylabus - wersja 1.0

Technologie cyfrowe semestr letni 2018/2019

Metodyka i Technika Programowania 1

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

Zadanie analizy leksykalnej

Wstęp do Informatyki Programowanie komputerów PC c.d.

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

Analiza leksykalna 1. Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki

Rok akademicki: 2012/2013 Kod: ZIE s Punkty ECTS: 3. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

Transkrypt:

Kontakt Paradygmaty Programowania dr inŝ. Cezary Bolek email: cbolek@ki.uni.lodz.pl Katedra Informatyki Wydział Zarządzania Uniwersytet Łódzki Cezary Bolek Katedra Informatyki UŁ konsultacje (p.142): wtorek: 15:00-15:45 czwartek: 11:30-13:00 materiały: http://ki.uni.lodz.pl/cbolek Paradygmaty programowania Cezary Bolek 2 Czym jest paradygmat Paradygmaty programowania Paradygmat to przyjęty sposób widzenia rzeczywistości w danej dziedzinie, doktrynie itp. [Słownika Języka Polskiego PWN] Paradygmat programowania - wzorzec programowania przedkładany w danym okresie rozwoju Informatyki ponad inne lub szczególnie ceniony w pewnych okolicznościach lub zastosowaniach lub ogół środków, metod, konwencji stosowany w pewnym sposobie programowania Paradygmaty programowania Cezary Bolek 3 Paradygmaty programowania Cezary Bolek 4 1

Paradygmat Co róŝni paradygmaty między sobą? sposób patrzenia na dane sposób patrzenia na kod sposób wiązania kodu z danymi sposób patrzenia na przepływ sterowania Program = Kod + Dane Kod = Algorytm + Język programowania Dane = Struktury + Język programowania = przejście od nieformalnego opisu problemu do formalnego opisu implementacji rozwiązania Sposób przejścia narzuca paradygmat Język programowania Język programowania środek do realizacji załoŝeń paradygmatu Język moŝe: wspierać paradygmat: zawiera środki pozwalające wyraŝać paradygmat wprost umoŝliwiać paradygmat: pozwala wyraŝać pewien paradygmat ale kosztem dodatkowej pracy programisty Np.: język C++ wspiera programowania obiektowe język C umoŝliwia programowania obiektowe Paradygmaty programowania Cezary Bolek 5 Paradygmaty programowania Cezary Bolek 6 W czym zawiera się wsparcie paradygmatu? Konstrukcje języka instrukcje wywołania procedury, utworzenia obiektu, aktywacji metody, zdefiniowanie reguły, etc. Diagnostyka kompilatora wykrywanie odstępstw od paradygmatu i odrzucanie programów sprzecznych z paradygmatem, np. drogą sprawdzania zgodności typów Diagnostyka czasu wykonania (run-time) np. poprzez wykrywanie niezaicjowanych obiektów czy teŝ niedozwolonych trybów aktywacji ich metod W czym zawiera się wsparcie paradygmatu? Biblioteki standardowe dostarczają udogodnień zgodnych z paradygmatem: procedur, funkcji, obiektów, reguł Środowisko programisty narzędzie ułatwiające realizację paradygmatu np. specjalizowane edytory, debuggery, etc. Ten sam język programowania moŝe w róŝnym stopniu wspierać i umoŝliwiać bardzo róŝne paradygmaty! np. C++: wspiera paradygmaty: strukturalny, proceduralny, obiektowy,... umoŝliwia: paradygmat zdarzeniowy, funkcyjny Paradygmaty programowania Cezary Bolek 7 Paradygmaty programowania Cezary Bolek 8 2

Paradygmat imperatywny imperatywne Podstawowy i naczelny współczesny paradygmat programowania Kod jest sekwencją instrukcji Program moŝna uznać za ciąg zdań rozkazujących (stąd nazwa paradygmatu) Ściślej, obliczenia rozumiemy tu jako sekwencję 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ów i znaczników procesora. imperatywne Związany ściśle z budową sprzętu komputerowego o architekturze von Neumanna, w którym poszczególne instrukcje (w kodzie maszynowym) to właśnie polecenia zmieniające ów globalny stan. Języki wysokiego poziomu takie jak Fortran, Algol, Pascal, Ada lub C posługują się pewnymi abstrakcjami, ale wciąŝ odpowiadają paradygmatowi programowania imperatywnego. Przykładowo, instrukcje podstawienia działają na danych pobranych z pamięci i umieszczają wynik w tejŝe pamięci, zaś abstrakcją komórek pamięci są zmienne. Paradygmaty programowania Cezary Bolek 9 Paradygmaty programowania Cezary Bolek 10 imperatywne Bardzo wiele współczesnych języków programowania jest silnie imperatywna mimo, Ŝe często wspierają inne paradygmaty! Przykładowy program w języku imperatywnym (Pascal): program pierwszy; var i, n, s: integer; begin read(n); s := 1; for i := 2 to n do s := s * i; write(s) end. Paradygmaty programowania Cezary Bolek 11 Paradygmat strukturalny Podparadygmat programowania imperatywnego. Tworzenie programów z kilku dobrze zdefiniowanych konstrukcji takich jak instrukcja warunkowa, pętla, za to bez skoków (go to) UŜycie tylko trzech rodzajów struktur sterujących: Sekwencja (lub konkatenacja) wykonanie instrukcji w określonej kolejności. Selekcja wykonanie jednej z kilku instrukcji zaleŝnie od stanu programu. Przykładem jest if-then-else i switch/case. Cykl powtarzanie instrukcji tak długo, jak długo spełniony (lub niespełniony) jest dany warunek. Pętle, np. while, repeat-until, for itp. Cel: sprzyjanie pisaniu programów przejrzystych, łatwych w rozumieniu i utrzymaniu (w rozumieniu imperatywnym Paradygmaty programowania Cezary Bolek 12 3

Paradygmat proceduralny Najstarsze dziecko paradygmatu imperatywnego Ciągle jeden z najpowszechniejszych, mimo presji nowszych paradygmatów Środki wsparcia paradygmatu proceduralnego: wydzielanie porcji kodu pod postacią procedur, podprogramów, funkcji istnienie mechanizmu przekazywania parametrów przez kopię (FORTRAN) (zanikł) przez nazwę (Algol) (zanikł) przez wartość (C, Pascal) przez zmienną (Pascal) przez wskazanie/adres (C) przez referencję (C++) istnienie mechanizmu zwracania wartości przez funkcje Paradygmat modularny Rozwinięcie paradygmatu proceduralnego, wymuszone przez wzrost złoŝoności i objętości programów Nieodzowny w przypadku projektów rozproszonych i/lub wieloosobowych Języki umoŝliwiające paradygmat modularny C/C++ i pochodne Języki wspierające paradygmat modularny: Modula2, Ada Środki wsparcia paradygmatu modularnego: deklaracje bytów zdefiniowanych w innych modułach (import i eksport) np. w języku C deklaracje extern deklaracje ukrywające pewne byty przed uŝytkownikami modułu (hermetyzacja modułu) kontrolowanie hierarchii modułów np. w pakiety w języku Ada moŝliwości parametryzowania modułów np. pakiety rodzajowe (generic) w języku Ada Paradygmaty programowania Cezary Bolek 13 Paradygmaty programowania Cezary Bolek 14 Paradygmat zdarzeniowy Sposób implementacji rozwiązania problemu, w którym istotną rolę odgrywają napływające do systemu zdarzenia Nie moŝna w Ŝaden sposób przewidzieć ani kolejności, ani rodzaju zgłaszanych zdarzeń Opisuje się nie to, jaką ścieŝkę program wybierze w reakcji na zdarzenia, a deklaruje się zestaw czynności, które coś wykona, kiedy zajdzie taka konieczność Coś = dyspozytor zdarzeń Paradygmat zdarzeniowy Paradygmat zdarzeniowy moŝe być implementowany we wszystkich paradygmatach imperatywnych, jednak... Najwygodniej czyni się to środkami obiektowymi. Prawie nie sposób jest napisać nietrywialną aplikację z GUI (Graphical User Interface) nie stosując paradygmatu zdarzeniowego Rodzaje zdarzeń napływają do programu: od uŝytkownika od systemu operacyjnego od innych aplikacji ze świata zewnętrznego Paradygmaty programowania Cezary Bolek 15 Paradygmaty programowania Cezary Bolek 16 4

Paradygmat obiektowy W programowaniu obiektowym program to zbiór porozumiewających się ze sobą obiektów, czyli jednostek zawierających pewne dane i umiejących wykonywać na nich pewne operacje WaŜną cechą jest powiązanie danych (czyli stanu) z operacjami na nich (czyli poleceniami) w całość, stanowiącą odrębną jednostkę obiekt. Mechanizm dziedziczenia, czyli moŝliwość definiowania nowych, bardziej złoŝonych obiektów, na bazie obiektów juŝ istniejących. Zwolennicy programowania obiektowego uwaŝają, Ŝe ten paradygmat dobrze odzwierciedla sposób, w jaki ludzie myślą o świecie Paradygmaty programowania Cezary Bolek 17 obiektowe obiektowe zdobyło ogromną popularność i wypada je uznać za paradygmat obecnie dominujący. Przykładowy kod w języku obiektowym (Java): class Pomieszczenie { private int szer, dlug, szer, wys; } Pomieszczenie(int s, int d, int w) { szer = s; dlug = d; wys = w; } int podloga() { return szer * dlug; } int sciana() { return 2*(szer*wys + dlug*wys); } Paradygmaty programowania Cezary Bolek 18... Pomieszczenie pokoj = new Pomieszczenie(3, 4, 2); Pomieszczenie kuchnia = new Pomieszczenie(2, 3, 2); int powierz; int sciany; powierz=pokoj.podloga() + kuchnia.podloga(); sciany =pokoj.sciana() + kuchnia.sciana();... Paradygmat deklaratywny Program nie jest ciągiem instrukcji, a zbiorem recept, których stosowanie definiuje problem lub sposób rozwiązania Innymi słowy, program jest sekwencją zdań oznajmujących kolejność stosowania recept nie jest znana przed wykonaniem problemu Jak wykonać deklaratywny program na imperatywnym sprzęcie? Konieczny interpreter Paradygmat funkcyjny Program jest złoŝoną funkcja (w sensie matematycznym), która otrzymawszy dane wejściowe wylicza pewien wynik Zasadniczą róŝnicą w stosunku do poprzednich paradygmatów jest brak stanu maszyny: nie ma zmiennych, a co za tym idzie nie ma Ŝadnych efektów ubocznych. Paradygmaty programowania Cezary Bolek 19 Paradygmaty programowania Cezary Bolek 20 5

funkcyjne Nie ma teŝ imperatywnych z natury, tradycyjnie rozumianych pętli (wymagają zmiennych do sterowania ich przebiegiem). Konstruowanie programów to składanie funkcji, zazwyczaj z istotnym wykorzystaniem rekurencji. Charakterystyczne jest definiowanie funkcji wyŝszego rzędu, czyli takich, dla których argumentami i których wynikami mogą być funkcje (DEFINE (suma m n) ) (IF (> m n) ) 0 (+ m (suma (+ m 1) n)) Przykładowy program (definicja funkcji) w języku funkcyjnym (Scheme) Paradygmaty programowania Cezary Bolek 21 w logice (programowanie logiczne) Na program składa się zbiór zaleŝności (przesłanki) i pewne stwierdzenie (cel) Wykonanie programu to próba udowodnienia celu w oparciu o podane przesłanki. Wykonanie programu jest poszukiwaniem celu Podobnie jak w programowaniu funkcyjnym, nie wydajemy rozkazów, a jedynie opisujemy, co wiemy i co chcemy uzyskać. Paradygmaty programowania Cezary Bolek 22 w logice Program decyduje, jakich reguł uŝyć i w jakiej kolejności, aby stwierdzić, czy cel jest osiągalny. Najbardziej znany język programowania logicznego Prolog bogactwo odmian i dialektów podstawowy język w badaniach nad sztuczną inteligencją Przykładowy program w języku logicznym: ojciec(jan, jerzy). ojciec(jerzy, janusz). ojciec(jerzy, józef). dziadek(x, Z) :- ojciec(x, Y), ojciec(y, Z).?- dziadek(x, janusz). Paradygmaty programowania Cezary Bolek 23 Inne paradygmaty Istnieje wiele innych paradygmatów Często obejmują one tylko niektóre aspekty programowania, więc moŝna je uznać za podzbiór tych wspomnianych wcześniej Przykładowo: paradygmat programowania proceduralnego jest istotnym składnikiem programowania imperatywnego. Paradygmaty nawzajem się przenikają: Przykładowo: programowanie na poziomie wartości (w odróŝnieniu do programowania wyŝszego rzędu - na poziomie funkcji) moŝna traktować jako jedną z cech typowych dla programowania imperatywnego, choć jest równieŝ obecna w programowaniu obiektowym i funkcyjnym. Inny przykład to programowanie skalarne i macierzowe - rozróŝnienie odnoszące się do tego, czy działamy na pojedynczych wartościach, czy na całych tablicach Paradygmaty programowania Cezary Bolek 24 6

Paradygmaty w językach programowania Konkretny język programowania ucieleśnia jeden lub więcej paradygmatów Fortran, Pascal i C to języki pozwalające stosować paradygmat programowania imperatywnego (języki imperatywne) ale pozwalają stosować paradygmaty strukturalne, proceduralne, zdarzeniowe Java, C# to z kolei języki obiektowe, w których typowe programowanie imperatywne zostało mocno ograniczone ale istnieje Natomiast C++ jest językiem zarówno obiektowym, jak i imperatywnym. Do pewnego stopnia moŝna zresztą uznać, Ŝe programowanie imperatywne to szczególny, wynaturzony przypadek programowania obiektowego, gdzie wszystko rozgrywa się wewnątrz jednego superobiektu. Podział języków? Wieloparadygmatowe Ada Clojure Common Lisp D Icon Nemerle Ruby Snobol Python Ocaml AWK C COBOL Forth Fortran Modula-2 Oberon Pascal Perl REXX ActionScript C++ C# Delphi Eiffel Java JavaScript Object Pascal Objective-C Oxygene Smalltalk Clojure Erlang F# Haskell Lisp ML Ocaml Scheme Prolog, Goedel Paradygmaty programowania Cezary Bolek 25 Paradygmaty programowania Cezary Bolek 26 Mnogość języków http://www.oreilly.com/news/graphics/prog_lang_poster.pdf http://www.tiobe.com/tpci.htm Który język jest najpopularniejszy? Ranking TIOBE porównanie popularności języków programowania Prowadzenie badań w oparciu o róŝne wyszukiwarki i źródła danych (WWW, grupy dyskusyjne, blogi) Nie najlepsza miara powszechności stosowania ale dająca ogólny pogląd. Określa częstość wzmiankowania w Internecie, czyli popularność Paradygmaty programowania Cezary Bolek 27 Paradygmaty programowania Cezary Bolek 28 7

Który język jest najpopularniejszy? Paradygmaty programowania Cezary Bolek 29 8