Języki i paradygmaty programowania. I. Wprowadzenie

Podobne dokumenty
Programowanie w języku C++ Podstawowe paradygmaty programowania

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

Paradygmaty programowania

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

Wykład 1 Informacje Podstawowe

Wykład 1 Informacje Podstawowe

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

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

Paradygmaty programowania

Języki programowania deklaratywnego

Programowanie komputerów

Wstęp do informatyki Paradygmaty programowania

Paradygmaty Programowania dr inŝ. Cezary Bolek

InŜynieria oprogramowania. Język UML

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

Programowanie Obiektowe i C++

Programowanie obiektowe - 1.

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

Wykład 0 Informacje Podstawowe

Modelowanie i Programowanie Obiektowe

Języki programowania deklaratywnego

Historia modeli programowania

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

Wykład 1 Informacje Podstawowe

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

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

Języki i paradygmaty programowania

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

Języki programowania imperatywnego

Programowanie Obiektowe i C++ Marcin Benke

Wykład 1 Wiadomości wstępne

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

Wstęp do Informatyki. Program, proces tworzenia programu Środowisko programistyczne Języki programowania

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

Algorytm. Krótka historia algorytmów

Wstęp do Informatyki dla bioinformatyków

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

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

Zapisywanie algorytmów w języku programowania

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

Programowanie w języku Python. Grażyna Koba

Języki i metodyka programowania

Język programowania PASCAL

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

Podstawy Programowania Obiektowego

Programowanie obiektowe

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

Podstawy programowania. Wprowadzenie

Podstawy programowania

GUI - projektowanie interfejsów cz. II

Technologie informacyjne - wykład 12 -

Podstawy programowania w języku C

Wstęp do programowania

PRYWATNA WYŻSZA SZKOŁA BUSINESSU, ADMINISTRACJI I TECHNIK KOMPUTEROWYCH S Y L A B U S

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

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

Podstawy programowania

Metodyka i Technika Programowania 1

PRZEWODNIK PO PRZEDMIOCIE

WYKŁAD. Jednostka prowadząca: Wydział Techniczny. Kierunek studiów: Elektronika i telekomunikacja. Nazwa przedmiotu: Język programowania C++

Język programowania. Andrzej Bobyk

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA realizacja w roku akademickim 2016/2017

Języki i paradygmaty programowania

Style programowania - krótki przeglad

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

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

Translacja i translatory Translacja

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

Języki programowania zasady ich tworzenia

Wprowadzenie. Organizacja pracy i środowisko programistyczne. Mirosław Ochodek

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

Języki programowania wprowadzenie

Programowanie funkcyjne wprowadzenie Specyfikacje formalne i programy funkcyjne

Technologie i usługi internetowe cz. 2

Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści

Programowanie niskopoziomowe. dr inż. Paweł Pełczyński

ECDL Podstawy programowania Sylabus - wersja 1.0

Algorytmy, reprezentacja algorytmów.

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

PRZEWODNIK PO PRZEDMIOCIE

INTUICJE. Zespół norm, wzorców, reguł postępowania, które zna każdy naukowiec zajmujący się daną nauką (Bobrowski 1998)

PRZEWODNIK PO PRZEDMIOCIE

KARTA KURSU. Wstęp do programowania

Metody Programowania

Algorytmy i struktury danych

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

Programowanie I. Wprowadzenie. Proces programowania

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA realizacja w roku akademickim 2016/2017

2.8. Algorytmy, schematy, programy

Podstawy programowania wykład

Języki programowania do zastosowań biomedycznych

Kurs programowania. Wykład 12. Wojciech Macyna. 7 czerwca 2017

przedmiot kierunkowy (podstawowy / kierunkowy / inny HES) obowiązkowy (obowiązkowy / nieobowiązkowy) polski semestr I

PODSTAWY ALGORYTMIKI

Wykład 1. Projektowanie efektywnych algorytmów przetwarzania danych w sieciowych systemach usług, rzeczy i multimediów.

Podstawy programowania. Wykład 1 Wstęp. Krzysztof Banaś Podstawy programowania 1

PARADYGMATY PROGRAMOWANIA

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

Wprowadzenie do programowania paradygmaty programowania. dr hab. inż. Mikołaj Morzy

Transkrypt:

Języki i paradygmaty programowania I. Wprowadzenie

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

O przedmiocie prowadzący: dr Jarosław Bylina email: jmbylina@hektor.umcs.lublin.pl 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-3

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

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

Paradygmat? z greckiego: παράδειγμα (parádeigma) wzorzec przykład 2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-6

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

Wielcy John von Neumann Niklaus E. Wirth Donald E. Knuth 2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-8

2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-9

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

I. Programowanie imperatywne Najbardziej pierwotny sposób programowania, w którym program postrzegany jest jako ciąg poleceń dla komputera 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 2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-11

I. Programowanie imperatywne Ten sposób patrzenia na programy związany jest ś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 2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-12

I. Programowanie imperatywne 2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-13

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ą wynik w 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-14

2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-15

Ia. Programowanie proceduralne Podział zadania programistycznego na podzadania i ich niezależna (od siebie nawzajem) implementacja w postaci podprogramów (procedur) Niezalecanie korzystania z efektów ubocznych (rozumianych w sensie tradycyjnym, jako zmiana wartości zmiennych globalnych), lecz przekazywanie danych i wyników w parametrach procedur 2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-16

Ia. Programowanie proceduralne 2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-17

Ia. Programowanie proceduralne metodologia programowania bottom-up 2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-18

2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-19

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

Ib. Programowanie strukturalne 2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-21

Ib. Programowanie strukturalne metodologia programowania top-down 2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-22

2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-23

Ic./II. Programowanie obiektowe 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 Programowanie obiektowe jest do pewnego stopnia rozszerzeniem paradygmatu programowania proceduralnego i strukturalnego 2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-24

Ic./II. Programowanie obiektowe Ważną cechą jest tu powią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 2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-25

Ic./II. Programowanie obiektowe Inne ważne cechy programowania obiektowego to: wysoki stopień abstrakcji danych enkapsulacja danych polimorfizm 2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-26

Ic./II. Programowanie obiektowe Zwolennicy programowania obiektowego uważają, że ten paradygmat dobrze odzwierciedla sposó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 2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-27

Ic./II. Programowanie obiektowe 2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-28

2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-29

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

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

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

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

III. Programowanie funkcyjne 2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-34

2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-35

IV. Programowanie logiczne Na program składa się zbiór zależności (przesłanek) oraz pewne stwierdzenie/pytanie (cel) 2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-36

IV. Programowanie logiczne Wykonanie programu to próba udowodnienia celu w 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-37

IV. Programowanie logiczne 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

2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-41

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

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

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ść 2008-02-23 Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie I-44