• Nie Znaleziono Wyników

Języki programowania

N/A
N/A
Protected

Academic year: 2021

Share "Języki programowania"

Copied!
108
0
0

Pełen tekst

(1)

Podstawy Programowania

Wykład XII

Języki programowania

Robert Muszyński

Katedra Cybernetyki i Robotyki, PWr

Zagadnienia: generacje języków progamowania, kod maszynowy, asem- bler, drzewo genealogiczne języków wysokiego poziomu, języki:

imperatywne, aplikatywne, deklaratywne, symboliczne, obiektowe;

środowiska programistyczne, języki idealnie nieproceduralne, ge- neratory aplikacji, inteligentne systemy wiedzy.

Copyright c 2007–2018 Robert Muszyński

Niniejszy dokument zawiera materiały do wykładu na temat podstaw programowania w językach wysokiego poziomu. Jest on udostępniony pod warunkiem wykorzystania wyłącznie do własnych, prywatnych potrzeb i może być kopiowany wyłącznie w całości,

(2)

Generacje języków programowania

Pierwsza generacja — kod maszynowy

(3)

Języki programowania ←- ,→ 1

Generacje języków programowania

Pierwsza generacja — kod maszynowy

Druga generacja — asemblery

(4)

Generacje języków programowania

Pierwsza generacja — kod maszynowy

Druga generacja — asemblery

Trzecia generacja — języki wysokiego poziomu

? języki imperatywne (proceduralne)

? języki aplikatywne (funkcjonalne)

? języki deklaratywne (regułowe)

? języki symboliczne

? języki obiektowe

(5)

Języki programowania ←- ,→ 1

Generacje języków programowania

Pierwsza generacja — kod maszynowy

Druga generacja — asemblery

Trzecia generacja — języki wysokiego poziomu

? języki imperatywne (proceduralne)

? języki aplikatywne (funkcjonalne)

? języki deklaratywne (regułowe)

? języki symboliczne

? języki obiektowe

;-) Generacja trzy i pół — środowiska programistyczne

(6)

Generacje języków programowania

Pierwsza generacja — kod maszynowy

Druga generacja — asemblery

Trzecia generacja — języki wysokiego poziomu

? języki imperatywne (proceduralne)

? języki aplikatywne (funkcjonalne)

? języki deklaratywne (regułowe)

? języki symboliczne

? języki obiektowe

;-) Generacja trzy i pół — środowiska programistyczne

Czwarta generacja — języki idealnie nieproceduralne,

(7)

Języki programowania ←- ,→ 1

Generacje języków programowania

Pierwsza generacja — kod maszynowy

Druga generacja — asemblery

Trzecia generacja — języki wysokiego poziomu

? języki imperatywne (proceduralne)

? języki aplikatywne (funkcjonalne)

? języki deklaratywne (regułowe)

? języki symboliczne

? języki obiektowe

;-) Generacja trzy i pół — środowiska programistyczne

Czwarta generacja — języki idealnie nieproceduralne, generatory aplikacji

Piąta generacja — inteligentne systemy wiedzy

(8)

Przykłady języków wysokiego poziomu

? języki imperatywne (proceduralne) — Fortran, ALGOL, COBOL, C

(9)

Języki programowania ←- ,→ 2

Przykłady języków wysokiego poziomu

? języki imperatywne (proceduralne) — Fortran, ALGOL, COBOL, C

? języki aplikatywne (funkcjonalne) — Lisp, Scheme, Haskel

(10)

Przykłady języków wysokiego poziomu

? języki imperatywne (proceduralne) — Fortran, ALGOL, COBOL, C

? języki aplikatywne (funkcjonalne) — Lisp, Scheme, Haskel

? języki deklaratywne (regułowe) — Prolog, CLIPS, SQL

(11)

Języki programowania ←- ,→ 2

Przykłady języków wysokiego poziomu

? języki imperatywne (proceduralne) — Fortran, ALGOL, COBOL, C

? języki aplikatywne (funkcjonalne) — Lisp, Scheme, Haskel

? języki deklaratywne (regułowe) — Prolog, CLIPS, SQL

? języki symboliczne — Lisp, Prolog, Mathematica, Maple

(12)

Przykłady języków wysokiego poziomu

? języki imperatywne (proceduralne) — Fortran, ALGOL, COBOL, C

? języki aplikatywne (funkcjonalne) — Lisp, Scheme, Haskel

? języki deklaratywne (regułowe) — Prolog, CLIPS, SQL

? języki symboliczne — Lisp, Prolog, Mathematica, Maple

? języki obiektowe — Smalltalk, Ada95, Lisp, C++, Java

(13)

Języki programowania ←- ,→ 2

Przykłady języków wysokiego poziomu

? języki imperatywne (proceduralne) — Fortran, ALGOL, COBOL, C

? języki aplikatywne (funkcjonalne) — Lisp, Scheme, Haskel

? języki deklaratywne (regułowe) — Prolog, CLIPS, SQL

? języki symboliczne — Lisp, Prolog, Mathematica, Maple

? języki obiektowe — Smalltalk, Ada95, Lisp, C++, Java

Środowisko programistyczne

Język programowania wysokiego poziomu + wbudo- wane funkcje dla systemów informacyjnych (obsłu- ga ekranu, bazy danych itp.) + interfejs graficzny — buildery i wizardy

(14)

Drzewo genealogiczne języków wysokiego poziomu (domniemane)

Prolog Lisp COBOL FORTRAN ALGOL 60

APL

FORTRAN 77 Basic ALGOL 68

ALGOL W

Pascal

Ada Modula-2

ML

Hope

BCPL

Simula

Smalltalk

B

C

Java C++

C#

D

Haskell

ABC

PL/I

FORTRAN 90

(15)

Języki programowania ←- ,→ 3

Drzewo genealogiczne języków wysokiego poziomu (domniemane)

Prolog Lisp COBOL FORTRAN ALGOL 60

APL

FORTRAN 77 Basic ALGOL 68

ALGOL W

Pascal

Ada Modula-2

ML

Hope

BCPL

Simula

Smalltalk

B

C

Java C++

C#

D

Haskell

ABC

PL/I

FORTRAN 90

Perl

Prolog Lisp COBOL FORTRAN ALGOL 60

APL

FORTRAN 77 Basic ALGOL 68

ALGOL W

Pascal

Ada Modula-2

ML

Hope

BCPL

Simula

Smalltalk

B

C

Java C++

C#

D

Haskell

ABC

PL/I

FORTRAN 90

(16)

Drzewo genealogiczne języków wysokiego poziomu (domniemane)

Prolog Lisp COBOL FORTRAN ALGOL 60

APL

FORTRAN 77 Basic ALGOL 68

ALGOL W

Pascal

Ada Modula-2

ML

Hope

BCPL

Simula

Smalltalk

B

C

Java C++

C#

D

Haskell

ABC

PL/I

FORTRAN 90

Prolog Lisp COBOL FORTRAN ALGOL 60

APL

FORTRAN 77 Basic ALGOL 68

ALGOL W

Pascal

Ada Modula-2

ML

Hope

BCPL

Simula

Smalltalk

B

C

Java C++

C#

D

Haskell

ABC

PL/I

FORTRAN 90

Prolog Lisp COBOL FORTRAN ALGOL 60

APL

FORTRAN 77 Basic ALGOL 68

ALGOL W

Pascal

Ada Modula-2

ML

Hope

BCPL

Simula

Smalltalk

B

C

Java C++

C#

D

Haskell

ABC

PL/I

FORTRAN 90

(17)

Języki programowania ←- ,→ 4

Co więc wybrać

Wyjątki z listy 50 najbardziej popularnych języków programowania

(www.tiobe.com/tiobe-index/):

16 Asembler (1949) 39 Fortran (1957) 27 Lisp (1958)

13 BASIC (1964) (Visual Basic .NET (2001) 6 miejsce) 37 Prolog (1972)

(18)

Co więc wybrać

Wyjątki z listy 50 najbardziej popularnych języków programowania

(www.tiobe.com/tiobe-index/):

16 Asembler (1949) 39 Fortran (1957) 27 Lisp (1958)

13 BASIC (1964) (Visual Basic .NET (2001) 6 miejsce) 37 Prolog (1972)

2 C (1972) (15% rynku, przyrost 8,09%) 3 C++ (1985) (8% rynku, przyrost 2,61%)

(19)

Języki programowania ←- ,→ 4

Co więc wybrać

Wyjątki z listy 50 najbardziej popularnych języków programowania

(www.tiobe.com/tiobe-index/):

16 Asembler (1949) 39 Fortran (1957) 27 Lisp (1958)

13 BASIC (1964) (Visual Basic .NET (2001) 6 miejsce) 37 Prolog (1972)

2 C (1972) (15% rynku, przyrost 8,09%) 3 C++ (1985) (8% rynku, przyrost 2,61%) 14 Perl (1987)

4 Python (1990)

(20)

Co więc wybrać

Wyjątki z listy 50 najbardziej popularnych języków programowania

(www.tiobe.com/tiobe-index/):

16 Asembler (1949) 39 Fortran (1957) 27 Lisp (1958)

13 BASIC (1964) (Visual Basic .NET (2001) 6 miejsce) 37 Prolog (1972)

2 C (1972) (15% rynku, przyrost 8,09%) 3 C++ (1985) (8% rynku, przyrost 2,61%) 14 Perl (1987)

4 Python (1990)

1 Java (1995) (15% rynku, przyrost 0,88%)

(21)

Języki programowania ←- ,→ 4

Co więc wybrać

Wyjątki z listy 50 najbardziej popularnych języków programowania

(www.tiobe.com/tiobe-index/):

16 Asembler (1949) 39 Fortran (1957) 27 Lisp (1958)

13 BASIC (1964) (Visual Basic .NET (2001) 6 miejsce) 37 Prolog (1972)

2 C (1972) (15% rynku, przyrost 8,09%) 3 C++ (1985) (8% rynku, przyrost 2,61%) 14 Perl (1987)

4 Python (1990)

1 Java (1995) (15% rynku, przyrost 0,88%)

Wniosek:

Nowe języki powstają ustawicznie i koegzystują ze starszymi

(22)

Jak wybrać

Obserwacja:

Typowy programista, inżynier oprogramowania (architekt:) z kilkuletnim do- świadczeniem programuje w kilkunastu językach

(23)

Języki programowania ←- ,→ 5

Jak wybrać

Obserwacja:

Typowy programista, inżynier oprogramowania (architekt:) z kilkuletnim do- świadczeniem programuje w kilkunastu językach

Zamiast pytać:

Jaki język programowania jest obecnie najpopularniejszy?

warto zapytać:

Który język programowania jest obecnie niedoceniany i pozwala robić rzeczy, których inni programiści nie są w stanie zrobić, tym samym dając mi unikalne umiejętności?

(24)

Popularne kryteria wyboru języka programowania do nauki:

Wysokość uposażenia

(25)

Języki programowania ←- ,→ 6

Popularne kryteria wyboru języka programowania do nauki:

Wysokość uposażenia

Popularność – ogrom różnorodnych ofert pracy

(26)

Popularne kryteria wyboru języka programowania do nauki:

Wysokość uposażenia

Popularność – ogrom różnorodnych ofert pracy

Wzrostowa tendencja popularności

(27)

Języki programowania ←- ,→ 6

Popularne kryteria wyboru języka programowania do nauki:

Wysokość uposażenia

Popularność – ogrom różnorodnych ofert pracy

Wzrostowa tendencja popularności

Łatwość nauczenia, komfort pracy

(28)

Popularne kryteria wyboru języka programowania do nauki:

Wysokość uposażenia

Popularność – ogrom różnorodnych ofert pracy

Wzrostowa tendencja popularności

Łatwość nauczenia, komfort pracy

Języki, które „dobrze rokują”:

Python

Perl

C#

(29)

Języki programowania ←- ,→ 6

Popularne kryteria wyboru języka programowania do nauki:

Wysokość uposażenia

Popularność – ogrom różnorodnych ofert pracy

Wzrostowa tendencja popularności

Łatwość nauczenia, komfort pracy

Języki, które „dobrze rokują”:

Python

Perl

C#

Ruby

Rust

Elixir

Scala

R

(30)

Popularne kryteria wyboru języka programowania do nauki:

Wysokość uposażenia

Popularność – ogrom różnorodnych ofert pracy

Wzrostowa tendencja popularności

Łatwość nauczenia, komfort pracy

Języki, które „dobrze rokują”:

Python

Perl

C#

Ruby

Rust

Elixir

Scala

R

plus biblioteki!

(31)

Języki programowania ←- ,→ 6

Popularne kryteria wyboru języka programowania do nauki:

Wysokość uposażenia

Popularność – ogrom różnorodnych ofert pracy

Wzrostowa tendencja popularności

Łatwość nauczenia, komfort pracy

Języki, które „dobrze rokują”:

Python

Perl

C#

Ruby

Rust

Elixir

Scala

R

plus biblioteki!

Warto zapamiętać także, że:

Tworzone aplikacje działają w jakimś środowisku sprzętowym, zazwyczaj pod nadzorem jakiegoś systemu operacyjnego, więc. . .

(32)

Popularność według dziedzin

oprogramowanie niskiego poziomu, sprzętowe, jądro systemu: C, asembler

oprogramowanie zorientowane sprzętowo: C/C++, asembler, Lua, Java

(33)

Języki programowania ←- ,→ 7

Popularność według dziedzin

oprogramowanie niskiego poziomu, sprzętowe, jądro systemu: C, asembler

oprogramowanie zorientowane sprzętowo: C/C++, asembler, Lua, Java

automatyka przemysłowa:PLC Ladder(Siemens, Allen-Bradley, Mitsubishi Electric, Beckhoff), SCA- DA, DCS −→ Industrial IoT (Python, Java, C/C++ z protokołami komunikacji), MATLAB, LabVIEW (język G)

(34)

Popularność według dziedzin

oprogramowanie niskiego poziomu, sprzętowe, jądro systemu: C, asembler

oprogramowanie zorientowane sprzętowo: C/C++, asembler, Lua, Java

automatyka przemysłowa:PLC Ladder(Siemens, Allen-Bradley, Mitsubishi Electric, Beckhoff), SCA- DA, DCS −→ Industrial IoT (Python, Java, C/C++ z protokołami komunikacji), MATLAB, LabVIEW (język G)

robotyka: C/C++, Python, Java, C#/.NET, Matlab, asembler, HDLs (FPGA), Lisp,

(35)

Języki programowania ←- ,→ 7

Popularność według dziedzin

oprogramowanie niskiego poziomu, sprzętowe, jądro systemu: C, asembler

oprogramowanie zorientowane sprzętowo: C/C++, asembler, Lua, Java

automatyka przemysłowa:PLC Ladder(Siemens, Allen-Bradley, Mitsubishi Electric, Beckhoff), SCA- DA, DCS −→ Industrial IoT (Python, Java, C/C++ z protokołami komunikacji), MATLAB, LabVIEW (język G)

robotyka: C/C++, Python, Java, C#/.NET, Matlab, asembler, HDLs (FPGA), Lisp, języki programowania robotów – RAPID (ABB), KRL (Kuka), Karel (Fanuc), AS (Kawasaki), INFORM

(Yaskawa), VAL3 (Staubli), URScript (Universal Robots), ROS Industrial

(36)

Popularność według dziedzin

oprogramowanie niskiego poziomu, sprzętowe, jądro systemu: C, asembler

oprogramowanie zorientowane sprzętowo: C/C++, asembler, Lua, Java

automatyka przemysłowa:PLC Ladder(Siemens, Allen-Bradley, Mitsubishi Electric, Beckhoff), SCA- DA, DCS −→ Industrial IoT (Python, Java, C/C++ z protokołami komunikacji), MATLAB, LabVIEW (język G)

robotyka: C/C++, Python, Java, C#/.NET, Matlab, asembler, HDLs (FPGA), Lisp, języki programowania robotów – RAPID (ABB), KRL (Kuka), Karel (Fanuc), AS (Kawasaki), INFORM

(Yaskawa), VAL3 (Staubli), URScript (Universal Robots), ROS Industrial

aplikacje www: np. Java, Python, Ruby (wraz z platformami takimi jak Django, Ruby on Rails itp.)

aplikacje mobilne: HTML, Swift, C++, C#, Java

gry: C/C++, Java, C#, Visual Basic .NET, Swift, Lua, Python, Lisp, Perl, Smalltalk z dedykowanymi bibliotekami (SDL, Allegro), API i SDK

(37)

Języki programowania ←- ,→ 7

Popularność według dziedzin

oprogramowanie niskiego poziomu, sprzętowe, jądro systemu: C, asembler

oprogramowanie zorientowane sprzętowo: C/C++, asembler, Lua, Java

automatyka przemysłowa:PLC Ladder(Siemens, Allen-Bradley, Mitsubishi Electric, Beckhoff), SCA- DA, DCS −→ Industrial IoT (Python, Java, C/C++ z protokołami komunikacji), MATLAB, LabVIEW (język G)

robotyka: C/C++, Python, Java, C#/.NET, Matlab, asembler, HDLs (FPGA), Lisp, języki programowania robotów – RAPID (ABB), KRL (Kuka), Karel (Fanuc), AS (Kawasaki), INFORM

(Yaskawa), VAL3 (Staubli), URScript (Universal Robots), ROS Industrial

aplikacje www: np. Java, Python, Ruby (wraz z platformami takimi jak Django, Ruby on Rails itp.)

aplikacje mobilne: HTML, Swift, C++, C#, Java

gry: C/C++, Java, C#, Visual Basic .NET, Swift, Lua, Python, Lisp, Perl, Smalltalk z dedykowanymi bibliotekami (SDL, Allegro), API i SDK

chmury obliczeniowe: SQL, XML, R, Clojure, Haskell, Scala, OCaml, F#, Common Lisp, Scheme

blockchain: C++, Java, Python, Simplicity, Solidity, Serpent, LLL

(38)

Popularność według dziedzin

oprogramowanie niskiego poziomu, sprzętowe, jądro systemu: C, asembler

oprogramowanie zorientowane sprzętowo: C/C++, asembler, Lua, Java

automatyka przemysłowa:PLC Ladder(Siemens, Allen-Bradley, Mitsubishi Electric, Beckhoff), SCA- DA, DCS −→ Industrial IoT (Python, Java, C/C++ z protokołami komunikacji), MATLAB, LabVIEW (język G)

robotyka: C/C++, Python, Java, C#/.NET, Matlab, asembler, HDLs (FPGA), Lisp, języki programowania robotów – RAPID (ABB), KRL (Kuka), Karel (Fanuc), AS (Kawasaki), INFORM

(Yaskawa), VAL3 (Staubli), URScript (Universal Robots), ROS Industrial

aplikacje www: np. Java, Python, Ruby (wraz z platformami takimi jak Django, Ruby on Rails itp.)

aplikacje mobilne: HTML, Swift, C++, C#, Java

gry: C/C++, Java, C#, Visual Basic .NET, Swift, Lua, Python, Lisp, Perl, Smalltalk z dedykowanymi bibliotekami (SDL, Allegro), API i SDK

chmury obliczeniowe: SQL, XML, R, Clojure, Haskell, Scala, OCaml, F#, Common Lisp, Scheme

blockchain: C++, Java, Python, Simplicity, Solidity, Serpent, LLL

(39)

Języki programowania ←- ,→ 8

Kod maszynowy i asemblery

Dodanie dwóch liczb na MC68HC705J1A (Motorola, 8-bitowy)

Kod maszynowy

'

&

$

%

Komorka Pamieci Zawartosc 0300 A6

0301 02 0302 AB 0303 02 0304 CC 0305 03 0306 04 07FE 03 07FF 00

(40)

Kod maszynowy i asemblery

Dodanie dwóch liczb na MC68HC705J1A (Motorola, 8-bitowy)

Kod maszynowy

'

&

$

%

Komorka Pamieci Zawartosc 0300 A6

0301 02 0302 AB 0303 02 0304 CC 0305 03 0306 04 07FE 03 07FF 00

To samo w S-rekordach

#

(41)

Języki programowania ←- ,→ 8

Kod maszynowy i asemblery

Dodanie dwóch liczb na MC68HC705J1A (Motorola, 8-bitowy)

Kod maszynowy

'

&

$

%

Komorka Pamieci Zawartosc 0300 A6

0301 02 0302 AB 0303 02 0304 CC 0305 03 0306 04 07FE 03 07FF 00

To samo w S-rekordach

#

" !

S10C0300A602AB02CC0304C8 S10507FE0300F2

S9030000FC

Asembler

'

&

$

%

org $0300

DODAJ lda #2 ;zaladuj do akumulatora 2 add #2 ;dodaj do akumulatora 2 PETLA jmp PETLA ;skocz do PETLA

org $07FE

dw DODAJ ;adres startu po resecie

(42)

Kod maszynowy i asemblery

Dodanie dwóch liczb na MC68HC705J1A (Motorola, 8-bitowy)

Kod maszynowy

'

&

$

%

Komorka Pamieci Zawartosc 0300 A6

0301 02 0302 AB 0303 02 0304 CC 0305 03 0306 04 07FE 03 07FF 00

To samo w S-rekordach

#

Asembler

'

&

$

%

org $0300

DODAJ lda #2 ;zaladuj do akumulatora 2 add #2 ;dodaj do akumulatora 2 PETLA jmp PETLA ;skocz do PETLA

org $07FE

dw DODAJ ;adres startu po resecie

Po przetworzeniu

' $

0300 1 org $0300

0300 A602 2 DODAJ lda #2

0302 AB02 3 add #2

0304 CC0304 4 PETLA jmp PETLA

07FE 5 org $07FE

(43)

Języki programowania ←- ,→ 9

Języki wysokiego poziomu

język imperatywny — C

'

&

$

%

int dodaj() { int a = 2;

int b = 2;

return(a + b);}

(44)

język imperatywny — C

'

&

$

%

int dodaj() { int a = 2;

int b = 2;

return(a + b);}

int l = dodaj();

(45)

Języki programowania ←- ,→ 9

Języki wysokiego poziomu

język imperatywny — C

'

&

$

%

int dodaj() { int a = 2;

int b = 2;

return(a + b);}

int l = dodaj();

język aplikatywny — Lisp

'

&

$

%

(defun dodaj() ;aplikatywnie ((lambda (x y) (+ x y)) 2 2))

(46)

język imperatywny — C

'

&

$

%

int dodaj() { int a = 2;

int b = 2;

return(a + b);}

int l = dodaj();

język aplikatywny — Lisp

'

&

$

%

(defun dodaj() ;aplikatywnie ((lambda (x y) (+ x y)) 2 2))

(defun dodaj() ;imperatywnie (let (x y)(setq x 2)(setq y 2)(+ x y)))

(47)

Języki programowania ←- ,→ 9

Języki wysokiego poziomu

język imperatywny — C

'

&

$

%

int dodaj() { int a = 2;

int b = 2;

return(a + b);}

int l = dodaj();

język aplikatywny — Lisp

'

&

$

%

(defun dodaj() ;aplikatywnie ((lambda (x y) (+ x y)) 2 2))

(defun dodaj() ;imperatywnie (let (x y)(setq x 2)(setq y 2)(+ x y))) (dodaj)

(48)

język imperatywny — C

'

&

$

%

int dodaj() { int a = 2;

int b = 2;

return(a + b);}

int l = dodaj();

język aplikatywny — Lisp

'

&

$

%

(defun dodaj() ;aplikatywnie ((lambda (x y) (+ x y)) 2 2))

(defun dodaj() ;imperatywnie (let (x y)(setq x 2)(setq y 2)(+ x y))) (dodaj)

język deklaratywny — Prolog

(49)

Języki programowania ←- ,→ 9

Języki wysokiego poziomu

język imperatywny — C

'

&

$

%

int dodaj() { int a = 2;

int b = 2;

return(a + b);}

int l = dodaj();

język aplikatywny — Lisp

'

&

$

%

(defun dodaj() ;aplikatywnie ((lambda (x y) (+ x y)) 2 2))

(defun dodaj() ;imperatywnie (let (x y)(setq x 2)(setq y 2)(+ x y))) (dodaj)

język deklaratywny — Prolog

'

&

$

%

dodaj(X) :- X is 2 + 2.

dodaj(X).

(50)

język imperatywny — C

'

&

$

%

int dodaj() { int a = 2;

int b = 2;

return(a + b);}

int l = dodaj();

język aplikatywny — Lisp

'

&

$

%

(defun dodaj() ;aplikatywnie ((lambda (x y) (+ x y)) 2 2))

(defun dodaj() ;imperatywnie (let (x y)(setq x 2)(setq y 2)(+ x y))) (dodaj)

język deklaratywny — Prolog

język symboliczny — Mathematica







dodaj := Module[{a = 2, b = 2}, a + b];

(51)

Języki programowania ←- ,→ 9

Języki wysokiego poziomu

język imperatywny — C

'

&

$

%

int dodaj() { int a = 2;

int b = 2;

return(a + b);}

int l = dodaj();

język aplikatywny — Lisp

'

&

$

%

(defun dodaj() ;aplikatywnie ((lambda (x y) (+ x y)) 2 2))

(defun dodaj() ;imperatywnie (let (x y)(setq x 2)(setq y 2)(+ x y))) (dodaj)

język deklaratywny — Prolog

'

&

$

%

dodaj(X) :- X is 2 + 2.

dodaj(X).

język symboliczny — Mathematica







dodaj := Module[{a = 2, b = 2}, a + b];

l = dodaj;

(52)

język imperatywny — C

'

&

$

%

int dodaj() { int a = 2;

int b = 2;

return(a + b);}

int l = dodaj();

język aplikatywny — Lisp

'

&

$

%

(defun dodaj() ;aplikatywnie ((lambda (x y) (+ x y)) 2 2))

(defun dodaj() ;imperatywnie (let (x y)(setq x 2)(setq y 2)(+ x y))) (dodaj)

język deklaratywny — Prolog

język symboliczny — Mathematica







dodaj := Module[{a = 2, b = 2}, a + b];

l = dodaj;

język obiektowy — C++' $

class CDodaj { public:

int a;

int b;

CDodaj() { a = 2;

b = 2;};

int Dodaj()

{ return(a + b);}

};

(53)

Języki programowania ←- ,→ 9

Języki wysokiego poziomu

język imperatywny — C

'

&

$

%

int dodaj() { int a = 2;

int b = 2;

return(a + b);}

int l = dodaj();

język aplikatywny — Lisp

'

&

$

%

(defun dodaj() ;aplikatywnie ((lambda (x y) (+ x y)) 2 2))

(defun dodaj() ;imperatywnie (let (x y)(setq x 2)(setq y 2)(+ x y))) (dodaj)

język deklaratywny — Prolog

'

&

$

%

dodaj(X) :- X is 2 + 2.

dodaj(X).

język symboliczny — Mathematica







dodaj := Module[{a = 2, b = 2}, a + b];

l = dodaj;

język obiektowy — C++' $

class CDodaj { public:

int a;

int b;

CDodaj() { a = 2;

b = 2;};

int Dodaj()

{ return(a + b);}

};

/*statycznie*/

Cdodaj d;

int l = d.Dodaj();

(54)

język imperatywny — C

'

&

$

%

int dodaj() { int a = 2;

int b = 2;

return(a + b);}

int l = dodaj();

język aplikatywny — Lisp

'

&

$

%

(defun dodaj() ;aplikatywnie ((lambda (x y) (+ x y)) 2 2))

(defun dodaj() ;imperatywnie (let (x y)(setq x 2)(setq y 2)(+ x y))) (dodaj)

język deklaratywny — Prolog

język symboliczny — Mathematica







dodaj := Module[{a = 2, b = 2}, a + b];

l = dodaj;

język obiektowy — C++' $

class CDodaj { public:

int a;

int b;

CDodaj() { a = 2;

b = 2;};

int Dodaj()

{ return(a + b);}

};

/*statycznie*/

Cdodaj d;

(55)

Języki programowania ←- ,→ 10

Języki czwartej generacji

Elementy składowe języka czwartej generacji:

fizyczny słownik danych

(56)

Języki czwartej generacji

Elementy składowe języka czwartej generacji:

fizyczny słownik danych

formater ekranu

(57)

Języki programowania ←- ,→ 10

Języki czwartej generacji

Elementy składowe języka czwartej generacji:

fizyczny słownik danych

formater ekranu

generator raportów

(58)

Języki czwartej generacji

Elementy składowe języka czwartej generacji:

fizyczny słownik danych

formater ekranu

generator raportów

język zapytań

(59)

Języki programowania ←- ,→ 10

Języki czwartej generacji

Elementy składowe języka czwartej generacji:

fizyczny słownik danych

formater ekranu

generator raportów

język zapytań

specyfikator dialogu

(60)

Języki czwartej generacji

Elementy składowe języka czwartej generacji:

fizyczny słownik danych

formater ekranu

generator raportów

język zapytań

specyfikator dialogu

generator kodu

(61)

Języki programowania ←- ,→ 10

Języki czwartej generacji

Elementy składowe języka czwartej generacji:

fizyczny słownik danych

formater ekranu

generator raportów

język zapytań

specyfikator dialogu

generator kodu

język wysokiego poziomu

(62)

Języki czwartej generacji:

CASE — Computer Aided Software Engineering

(63)

Języki programowania ←- ,→ 11

Języki czwartej generacji:

CASE — Computer Aided Software Engineering

Oracle — Komercyjny pakiet zawierający:

? maszynę relacyjnej bazy danych;

? interfejs bazy danych

? narzędzia do integracji baz danych z językami wysokiego po- ziomu;

? kreator formularzy;

? kreator raportów;

? kreator reprezentacji graficznych;

? narzędzia do wyszukiwania

(64)

Języki czwartej generacji:

CASE — Computer Aided Software Engineering

Oracle — Komercyjny pakiet zawierający:

? maszynę relacyjnej bazy danych;

? interfejs bazy danych

? narzędzia do integracji baz danych z językami wysokiego po- ziomu;

? kreator formularzy;

? kreator raportów;

? kreator reprezentacji graficznych;

? narzędzia do wyszukiwania

(65)

Języki programowania ←- ,→ 12

UML

Dodanie dwóch liczb

Dodaj a = 2 b = 2

dodaj(){return(a+b)}

(66)

Dodanie dwóch liczb

Dodaj a = 2 b = 2

dodaj(){return(a+b)}

Symulacja systemu robotycznego

1..*

* Robot Nazwa

Stan

KolejkaZadañ() DodajZadanie() UsuñZadanie()

Cz³onek

1..* *

Cz³onek SystemWizyjny Nazwa

Stan

PobierzObraz() UstawKamery()

Kamera Nr

Po³o¿enie PobierzObraz() Przesuñ() Ma

1..*

Przegub Nr

Po³o¿enie Przesuñ() Zablokuj() Ma

1..*

1

* SystemRobotyczny

Nazwa Stan

KolejkaZadañ() DodajZadanie() UsuñZadanie()

Sterownik Nazwa

Stan

KolejkaRuchów() DodajRuch() UsuñRuch()

1 1

U¿ywa

*

*

Ma

Diagram klas

(67)

Języki programowania ←- ,→ 12

UML

Dodanie dwóch liczb

Dodaj a = 2 b = 2

dodaj(){return(a+b)}

Symulacja systemu robotycznego

1..*

* Robot Nazwa

Stan

KolejkaZadañ() DodajZadanie() UsuñZadanie()

Cz³onek

1..* *

Cz³onek SystemWizyjny Nazwa

Stan

PobierzObraz() UstawKamery()

Kamera Nr

Po³o¿enie PobierzObraz() Przesuñ() Ma

1..*

Przegub Nr

Po³o¿enie Przesuñ() Zablokuj() Ma

1..*

1

* SystemRobotyczny

Nazwa Stan

KolejkaZadañ() DodajZadanie() UsuñZadanie()

Sterownik Nazwa

Stan

KolejkaRuchów() DodajRuch() UsuñRuch()

1 1

U¿ywa

*

*

Ma

Diagram klas Do tego należy utworzyć:

diagram obiektów

diagram implementacji

diagram zachowań

diagram sekwencji

(68)

Symulacja systemu robotycznego cd.

C++

' $

class CRobot { private:

int id public:

char Nazwa[42];

CStan Stan;

CPrzegub *Przeguby;

CRezolwer *Rezolwery;

CKolejka *Kolejka = NULL;

(69)

Języki programowania ←- ,→ 13

Symulacja systemu robotycznego cd.

C++

'

&

$

%

class CRobot { private:

int id public:

char Nazwa[42];

CStan Stan;

CPrzegub *Przeguby;

CRezolwer *Rezolwery;

CKolejka *Kolejka = NULL;

CRobot()

{ Przeguby=new CPrzegub[5]; /*...*/

Inicjuj(); /*...*/};

int KolejkaZadan(){/* definicja */};

int DodajZadanie(/*...*/){/* def. */};

int UsunZadanie(/*...*/){/* def. */};};

(70)

Symulacja systemu robotycznego cd.

C++

' $

class CRobot { private:

int id public:

char Nazwa[42];

CStan Stan;

CPrzegub *Przeguby;

CRezolwer *Rezolwery;

CKolejka *Kolejka = NULL;

CRobot()

{ Przeguby=new CPrzegub[5]; /*...*/

Inicjuj(); /*...*/};

int KolejkaZadan(){/* definicja */};

int DodajZadanie(/*...*/){/* def. */};

(71)

Języki programowania ←- ,→ 13

Symulacja systemu robotycznego cd.

C++

'

&

$

%

class CRobot { private:

int id public:

char Nazwa[42];

CStan Stan;

CPrzegub *Przeguby;

CRezolwer *Rezolwery;

CKolejka *Kolejka = NULL;

CRobot()

{ Przeguby=new CPrzegub[5]; /*...*/

Inicjuj(); /*...*/};

int KolejkaZadan(){/* definicja */};

int DodajZadanie(/*...*/){/* def. */};

int UsunZadanie(/*...*/){/* def. */};};

CRobot *Robot1 = new CRobot;

try{Robot1.DodajZadanie(/*...*/);}

catch(CException blad){/* obsluga */}

C

'

&

$

%

struct SRobot { int id

char Nazwa[42];

SStan Stan;

SPrzegub *Przeguby;

SRezolwer *Rezolwery;

SKolejka *Kolejka = NULL;};

(72)

Symulacja systemu robotycznego cd.

C++

' $

class CRobot { private:

int id public:

char Nazwa[42];

CStan Stan;

CPrzegub *Przeguby;

CRezolwer *Rezolwery;

CKolejka *Kolejka = NULL;

CRobot()

{ Przeguby=new CPrzegub[5]; /*...*/

Inicjuj(); /*...*/};

int KolejkaZadan(){/* definicja */};

int DodajZadanie(/*...*/){/* def. */};

C

' $

struct SRobot { int id

char Nazwa[42];

SStan Stan;

SPrzegub *Przeguby;

SRezolwer *Rezolwery;

SKolejka *Kolejka = NULL;};

int DodajRobota(SRobot *Robot)

{ Robot = malloc(sizeof(SRobot));

Robot->Przeguby=malloc(5*sizeof(SPrzegub));

Inicjuj(); /*...*/};

int UsunRobota(SRobot *Robot){/*...*/};

int KolejkaZadan(/*...*/){/* def. */};

int DodajZadanie(/*...*/){/* def. */};

int UsunZadanie(/*...*/){/* def. */};};

(73)

Języki programowania ←- ,→ 13

Symulacja systemu robotycznego cd.

C++

'

&

$

%

class CRobot { private:

int id public:

char Nazwa[42];

CStan Stan;

CPrzegub *Przeguby;

CRezolwer *Rezolwery;

CKolejka *Kolejka = NULL;

CRobot()

{ Przeguby=new CPrzegub[5]; /*...*/

Inicjuj(); /*...*/};

int KolejkaZadan(){/* definicja */};

int DodajZadanie(/*...*/){/* def. */};

int UsunZadanie(/*...*/){/* def. */};};

CRobot *Robot1 = new CRobot;

try{Robot1.DodajZadanie(/*...*/);}

catch(CException blad){/* obsluga */}

C

'

&

$

%

struct SRobot { int id

char Nazwa[42];

SStan Stan;

SPrzegub *Przeguby;

SRezolwer *Rezolwery;

SKolejka *Kolejka = NULL;};

int DodajRobota(SRobot *Robot)

{ Robot = malloc(sizeof(SRobot));

Robot->Przeguby=malloc(5*sizeof(SPrzegub));

Inicjuj(); /*...*/};

int UsunRobota(SRobot *Robot){/*...*/};

int KolejkaZadan(/*...*/){/* def. */};

int DodajZadanie(/*...*/){/* def. */};

int UsunZadanie(/*...*/){/* def. */};};

SRobot *Robot1;

DodajRobota(Robot1);

if blad = DodajZadanie(/*...*/) then /* obsluga */

(74)

Asembler i kod maszynowy' $

98: float CRobot::UstalKrok(float Krok, int Kp) 99: {

(75)

Języki programowania ←- ,→ 14

Symulacja systemu robotycznego cd.

Asembler i kod maszynowy' $

98: float CRobot::UstalKrok(float Krok, int Kp) 99: {

00402828 push ebp 00402829 mov ebp,esp 0040282B sub esp,0Ch

0040282E mov dword ptr [ebp-8],ecx

(76)

Asembler i kod maszynowy' $

98: float CRobot::UstalKrok(float Krok, int Kp) 99: {

00402828 push ebp 00402829 mov ebp,esp 0040282B sub esp,0Ch

0040282E mov dword ptr [ebp-8],ecx 100: float delta = 0.001;

00402831 mov dword ptr [delta],3A83126Fh

(77)

Języki programowania ←- ,→ 14

Symulacja systemu robotycznego cd.

Asembler i kod maszynowy' $

98: float CRobot::UstalKrok(float Krok, int Kp) 99: {

00402828 push ebp 00402829 mov ebp,esp 0040282B sub esp,0Ch

0040282E mov dword ptr [ebp-8],ecx 100: float delta = 0.001;

00402831 mov dword ptr [delta],3A83126Fh 101: switch(Kp){

00402838 mov eax,dword ptr [Kp]

0040283B mov dword ptr [ebp-0Ch],eax 0040283E cmp dword ptr [ebp-0Ch],0

00402842 je CRobot::UstalKrok(0x0040284c)+24h 00402844 cmp dword ptr [ebp-0Ch],1

00402848 je CRobot::UstalKrok(0x00402857)+2Fh 0040284A jmp CRobot::UstalKrok(0x00402862)+3Ah

(78)

Asembler i kod maszynowy' $

98: float CRobot::UstalKrok(float Krok, int Kp) 99: {

00402828 push ebp 00402829 mov ebp,esp 0040282B sub esp,0Ch

0040282E mov dword ptr [ebp-8],ecx 100: float delta = 0.001;

00402831 mov dword ptr [delta],3A83126Fh 101: switch(Kp){

00402838 mov eax,dword ptr [Kp]

0040283B mov dword ptr [ebp-0Ch],eax 0040283E cmp dword ptr [ebp-0Ch],0

00402842 je CRobot::UstalKrok(0x0040284c)+24h 00402844 cmp dword ptr [ebp-0Ch],1

00402848 je CRobot::UstalKrok(0x00402857)+2Fh 0040284A jmp CRobot::UstalKrok(0x00402862)+3Ah 102: case 0: Krok += delta;

0040284C fld dword ptr [Krok]

Cytaty

Powiązane dokumenty

Zdefiniowanie klasy zarządzającej Operatory1 w pakiecie operatory1, utworzonych podczas tworzenia projektu (slajd 5) oraz uruchomienie programu...

Typ tego wyjątku w bloku catch musi być albo identycznej klasy użytej w throws lub klasy, od której dziedziczy klasa wyjątku użyta w throws.. Zasada ta nie dotyczy

Interfejs (interface): abstrakcyjny typ danych, tworzący hierarchię typów powiązanych dziedziczeniem wielobazowym, które deklarują abstrakcyjne operacje na elementach

void writeChar(int v) – zapisuje znak jako 2-bajtową wartość void writeDouble(double v) – zapisuje 8-bajtową wartość do pliku void writeFloat(float v) –

Prototyp funkcji → deklaracja „uprzedzająca”, (objaśnienie identyfikatora funkcji) określa tylko nazwę funkcji oraz typy zwracanej wartości i parametrów (sam nagłówek

Definicja klasy ostream jest zawarta również w pliku <iostream.h>. Najważniejsze metody

void ∗malloc( size_t rozmiar ); // przydział bloku o zadanej wielkosci void ∗calloc( size_t il_elementow, size_t rozmiar); // przydział tablicy void free( void ∗wskaznik);

W przypadku wystąpienia końca pliku lub błędu, rezultatem funkcji jest liczba, potencjalnie zerowa, bezbłędnie zapisanych bloków.. size_t fwrite( void * ptr, size_t size, size_t