Wstęp do informatyki Paradygmaty programowania

Podobne dokumenty
Paradygmaty Programowania dr inŝ. Cezary Bolek

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

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

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

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

Wykład 1 Informacje Podstawowe

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

Podstawy Programowania Obiektowego

ZMODYFIKOWANY Szczegółowy opis przedmiotu zamówienia

Wykład 0 Informacje Podstawowe

Programowanie Obiektowe i C++

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

Języki i paradygmaty programowania

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

Historia modeli programowania

Programowanie obiektowe

Języki programowania imperatywnego

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

Programowanie funkcyjne wprowadzenie Specyfikacje formalne i programy funkcyjne

Programowanie w języku Python. Grażyna Koba

Technologie cyfrowe semestr letni 2018/2019

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

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

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

Programowanie Obiektowe i C++ Marcin Benke

Języki programowania deklaratywnego

Języki programowania zasady ich tworzenia

Wstęp do programowania

Jerzy Nawrocki, Wprowadzenie do informatyki

Podstawy programowania. Wprowadzenie

Język programowania. Andrzej Bobyk

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

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

Języki i metodyka programowania

Praktyka 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

Programowanie komputerów

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

Wstęp do programowania

Jerzy Nawrocki, Wprowadzenie do informatyki

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

Magistrala systemowa (System Bus)

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

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

15. Funkcje i procedury składowane PL/SQL

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

PARADYGMATY PROGRAMOWANIA

Wstęp do Informatyki dla bioinformatyków

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

Technologie informacyjne - wykład 12 -

1 Wprowadzenie do algorytmiki

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

2.8. Algorytmy, schematy, programy

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

Programowanie obiektowe. Wprowadzenie

Wykład 1 Wiadomości wstępne

Wprowadzenie do programowania

Programowanie I. Wprowadzenie. Proces programowania

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

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

Algorytm. a programowanie -

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

Programowanie obiektowe

Metodyka i Technika Programowania 1

Technologie cyfrowe semestr letni 2018/2019

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

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

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

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: -

Komputer nie myśli. On tylko wykonuje nasze polecenia. Nauczmy się więc wydawać mu rozkazy

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

Kod doskonały : jak tworzyć oprogramowanie pozbawione błędów / Steve McConnell. Gliwice, cop Spis treści. Wstęp 15.

Transkrypt:

Czym jest paradygmat Wstęp do informatyki Paradygmaty programowania Cezary Bolek cbolek@ki.uni.lodz.pl Uniwersytet Łódzki Wydział Zarządzania Katedra Informatyki 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 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 2 Paradygmaty programowania 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 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 3 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 4 1

Język programowania W czym zawiera się wsparcie paradygmatu? 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 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 niezainicjowanych obiektów czy teŝ niedozwolonych trybów aktywacji ich metod Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 5 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 6 W czym zawiera się wsparcie paradygmatu? Paradygmat imperatywny 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 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. Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 7 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 8 2

imperatywne 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. 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. Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 9 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 10 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) 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) (praktycznie 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 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 11 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 12 3

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 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ń Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 13 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 14 Paradygmat zdarzeniowy Paradygmat obiektowy 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 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 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 15 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 16 4

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);... 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 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 17 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 18 Paradygmat funkcyjny funkcyjne Program jest złoŝoną funkcja (w sensie matematycznym), która otrzymawszy dane wejściowe wylicza pewien wynik 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 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. (DEFINE (suma m n) (IF (> m n) 0 (+ m (suma (+ m 1) n)) ) ) Przykładowy program (definicja funkcji) w języku funkcyjnym (Scheme) Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 19 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 20 5

w logice (programowanie logiczne) w logice Na program składa się zbiór zaleŝności (przesłanki) i pewne stwierdzenie (cel) 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: 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ć. ojciec(jan, jerzy). ojciec(jerzy, janusz). ojciec(jerzy, józef). dziadek(x, Z) :- ojciec(x, Y), ojciec(y, Z).?- dziadek(x, janusz). Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 21 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 22 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 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. Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 23 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 24 6

Podział języków? Mnogość 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 http://www.oreilly.com/news/graphics/prog_lang_poster.pdf Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 25 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 26 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ść Jaki paradygmat jest najpopularniejszy? Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 27 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 28 7