![Page 1: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/1.jpg)
JĘZYKI WYSOKIEGO POZIOMU: – FUNKCJE I PROGRAMOWANIE BEZKLASOWE
Sebastian Poręba
λ
![Page 2: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/2.jpg)
1. WPROWADZENIE
![Page 3: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/3.jpg)
1. WPRO
WADZEN
IEKlasyfikacja języków programowania
• Łatwość nauki• Popularność• Poziom abstrakcji języka
Ze względu na:
Poziom abstrakcji
niski wysoki
Przykłady:
• PHP4 – łatwa nauka• Assembler, Cobol –
niski poziom abstrakcji• C++, Java – wysoki (?)
poziom abstrakcji, akceptowalny poziom trudności
![Page 4: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/4.jpg)
1. WPRO
WADZEN
IEKlasyfikacja języków programowania
popularność
Poziom abstrakcji
Assembler
C
C++
JavaC#
Ruby
Python
?
Pascal
Cobol
![Page 5: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/5.jpg)
1. WPRO
WADZEN
IEPo co programiście gier języki wyższego poziomu?
OpenGLgamedev == C++DirectX
performance (Java, C, Assembler)
Języki skryptowe w silnikach gier Lua, Python
QuakeC, UnrealScript
![Page 6: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/6.jpg)
2. – FUNKCJE λ
![Page 7: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/7.jpg)
2. FUN
KCJE LAMBDA
Co się dzieje kiedy definiujemy funkcję w C++
class Elephant { void step() { // do some stuff }};
*stepElephant
// do some stufffunction step
*stepElephant
*stepElephant
![Page 8: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/8.jpg)
2. FUN
KCJE LAMBDA
Funkcje lambda
step = function () { // do some stuff}
step();
Funkcje lambda pozwalają na samodzielne zarządzanie wskaźnikiem do funkcji
![Page 9: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/9.jpg)
2. FUN
KCJE LAMBDA
Do czego to się przydaje?
Funkcję można:• zmieniać• zwracać jako wynik innej funkcji• podawać jako argument do funkcji
![Page 10: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/10.jpg)
2. FUN
KCJE LAMBDA
Zmiana wskaźnika na funkcję
#define RK4#ifdef, #ifndef
Niewygodne zarządzanie kodemZarządzanie kodem tylko przy kompilacji
If/switch wybierający funkcję
ify przy każdej iteracji pętli programu
Przechowywanie niepotrzebnych funkcji w pamięci
C++:
![Page 11: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/11.jpg)
2. FUN
KCJE LAMBDA
Zmiana wskaźnika na funkcję
Funkcja lambda
• Podmiana funkcji w locie• Brak ifów• Zwolnienie pamięci po funkcji do której
nie ma żadnego wskaźnika
![Page 12: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/12.jpg)
2. FUN
KCJE LAMBDA
Generatory funkcji
Możliwość zwracania funkcji jako wynik funkcji
Przykład: funkcja zwracająca algorytm kompresujący na
podstawie parametrów pliku do skompresowania
![Page 13: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/13.jpg)
2. FUN
KCJE LAMBDA
Memoizacja
int fib(int n) { return n<=2 ? 1 : fib(n-1) + fib(n-2);}
fib(100) -> 708 * 1018 wywołań fib( )
long long memo[101]; // zainicjalizowane na 0int memofib(int n) { if(memo[n]) return memo[n]; memo[n] = memofib(n-1) + memofib(n-2); return memo[n];}
![Page 14: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/14.jpg)
2. FUN
KCJE LAMBDA
Funkcja jako argument – modyfikatory funkcji
function memoize (func) { var memo = {}; return function (key) { if(!memo[key]) {memo[key] = func(key); }
return memo[key]; };};
var fib = function (n) {return n<=2 ? 1 : fib(n-1) + fib(n-2);}var memofib = memoize(fib);memofib(100);
![Page 15: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/15.jpg)
2. FUN
KCJE LAMBDA
Funkcje lambda
Wprowadzenie tak nieznacznej modyfikacji jak funkcje lambda
udostępnia cały wachlarz nowych technik programowania
![Page 16: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/16.jpg)
3. PROGRAMOWANIE BEZKLASOWE
![Page 17: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/17.jpg)
3. PROGRAM
OW
ANIE BEZKLASO
WE
Powtórka z filozofii
Platon
![Page 18: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/18.jpg)
3. PROGRAM
OW
ANIE BEZKLASO
WE
Dlaczego w takim razie programujemy z wykorzystaniem klas?
MIT – Structure and Interpretation of Computer Programs,Wykład 2b, ~36:00
prof. Harold Abelson (rok 1986)
![Page 19: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/19.jpg)
3. PROGRAM
OW
ANIE BEZKLASO
WE
Dziedziczenie klasowe
foo()bar()baz
Obj1
![Page 20: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/20.jpg)
3. PROGRAM
OW
ANIE BEZKLASO
WE
Dziedziczenie klasowe
foo()Obj2
foo()bar()baz
Obj1 Klasa, która wykonuje pewne zadania w inny sposób
![Page 21: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/21.jpg)
3. PROGRAM
OW
ANIE BEZKLASO
WE
Dziedziczenie klasowe
Obj2bar()baz
Obj1
Klasa, która nie zawiera pewnych pól
foo()ObjBase
![Page 22: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/22.jpg)
3. PROGRAM
OW
ANIE BEZKLASO
WE
Dziedziczenie klasowe
Obj2bar()baz
Obj1
Różne pola w różnych klasach
foo()ObjBase
abcadf
Obj12
fooObj21
mattDamonjimmyKimmeltime
Obj72
![Page 23: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/23.jpg)
3. PROGRAM
OW
ANIE BEZKLASO
WE
Dziedziczenie klasowe
![Page 24: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/24.jpg)
3. PROGRAM
OW
ANIE BEZKLASO
WE
Powtórka z filozofii
Arystoteles
![Page 25: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/25.jpg)
3. PROGRAM
OW
ANIE BEZKLASO
WE
Programowanie klasowe vs bezklasowe
• Definiujemy klasę pewnych obiektów i zależności między nimi
• Tworzymy instancje klasy
• Obiekty zawierają pola swoje i swoich klas nadrzędnych oraz tablicę wskaźników na metody
• Tworzymy obiekty
• Obiekty zawierają pola, wskaźniki na swoje metody oraz wskaźnik na prototyp
Klasowe Bezklasowe
![Page 26: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/26.jpg)
3. PROGRAM
OW
ANIE BEZKLASO
WE
Dziedziczenie klasowe
class A {int pampararam;method abc (param : int) { … }}
class B inheriting A {method abc (param: int) { … }}
b = new B( );
Enkapsulacja
Obiekt B
Obiekt A
![Page 27: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/27.jpg)
3. PROGRAM
OW
ANIE BEZKLASO
WE
Dziedziczenie prototypowe
a = {int pampararam;method abc (param : int) { … }}
b = {method abc (param: int) { … }}b.prototype = a;
Obiekt B
Obiekt A
*prototype
Wskaźnik na prototyp
![Page 28: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/28.jpg)
3. PROGRAM
OW
ANIE BEZKLASO
WE
Jaka jest praktyczna różnica?
Klasowe Bezklasowe
• Każdy obiekt klasy potomnej zawiera w sobie obiekt klasy nadrzędnej
• Obiekty klas dziedziczących po innych klasach mogą zawierać pola, które nie są używane
• Obiekty przechowują jedynie wskaźnik na obiekt nadrzędny
• Jeżeli odczytujemy wartość pola pampararam (z przykładu, w klasie nadrzędnej), jest on szukany w prototype chain
• Jeżeli chcemy zapisać wartość pampararam, zostanie utworzone nowe pole w obiekcie B, prototype chain nie będzie potrzebny
![Page 29: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/29.jpg)
3. PROGRAM
OW
ANIE BEZKLASO
WE
Dziedziczenie klasowe
Obj2bar()baz
Obj1
Różne pola w różnych klasach
foo()ObjBase
abcadf
Obj12
foo()Obj21
mattDamonjimmyKimmeltime
Obj72
![Page 30: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/30.jpg)
3. PROGRAM
OW
ANIE BEZKLASO
WE
Dziedziczenie prototypowe
Obj2 = {};
Obj2.prototype = { foo: ObjBase.foo, adf: Obj12.adf, time: Obj72.time, foo2: Obj21.foo, bar: Obj1.bar };
Możemy stworzyć nowy, złożony obiekt nie modyfikując w ogóle innych obiektów.
![Page 31: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/31.jpg)
3. PROGRAM
OW
ANIE BEZKLASO
WE
Klonowanie obiektów
A co jeśli chcemy mieć wiele obiektów z tymi samymi metodami?
Obj2 = {};
Obj2.prototype = { foo: ObjBase.foo, adf: Obj12.adf, time: Obj72.time, cookies: Obj21.cookies, bar: Obj1.bar };
Obj2
fooadftimecookiesbar
prototype
Obj3Obj3 = Obj2.clone();
![Page 32: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/32.jpg)
3. PROGRAM
OW
ANIE BEZKLASO
WE
Klonowanie obiektu
Prototyp obiektu nie ma nazwy, nie zaśmieca namespace – jedynym
odwołaniem do niego jest wskaźnik w obiektach Obj2 i Obj3.
![Page 33: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/33.jpg)
3. PROGRAM
OW
ANIE BEZKLASO
WE
Zmiana delegacji obiektu
Prototyp obiektu może zawierać zmienne dzielone dla wielu obiektów.W C++ zmienne klasy nadrzędnej mają
rezerwowaną osobną pamięć dla każdej instancji.
![Page 34: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/34.jpg)
3. PROGRAM
OW
ANIE BEZKLASO
WE
Zmiana delegacji obiektu
Prototyp obiektu jest określony za pomocą wskaźnika – nic nie stoi więc na przeszkodzie, żeby zmienić go w
czasie wykonywania programu.
![Page 35: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/35.jpg)
3. PROGRAM
OW
ANIE BEZKLASO
WE
Zmiana delegacji obiektu
talkTo();attack();giveSandwich();
NPC
// somethingPirate
talkTo() { return „I see dead people”;};attack();giveSandwich();
DeadNPC
If(Pirate.isA(DeadNPC)) { // do stuff }
![Page 36: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/36.jpg)
3. PROGRAM
OW
ANIE BEZKLASO
WE
Testy wydajnościowe
C version Lisaac version Rate (%)
Code line count 9852 6176 37,31 % less
binary size 99 kB 109 kB 10,10% more
Memory used at runtime 1352 kB 1332 kB
Run time (s) 3,60 3,67 1,94 % more
Benchmark kodeka MPEG 1/2 – C vs Lisaac
![Page 37: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/37.jpg)
WN
IOSKI
Wnioski
Poznawanie nowych języków programowania może być pożyteczne!
![Page 38: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/38.jpg)
BIBLIOGRAFIA
Bibliografia
1. MIT SICP 101 - http://www.academicearth.org/2. Douglas Crockford, YIU Theather - http://crockford.com/javascript/3. Funkcje Lambda w C# http://
blogs.msdn.com/b/sriram/archive/2005/08/07/448722.aspx4. Antero Taivalsaari, Classes vs. Prototypes:
Some Philosophical and Historical Observations http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.56.4713&rep=rep1&type=pdf
5. Prototypes with multiple dispatch - http://tunes.org/~eihrul/ecoop.pdf6. Lisaac - http://isaacos.loria.fr/li.html7. Lua - http://www.lua.org/
![Page 39: Języki wysokiego poziomu: – funkcje i programowanie bezklasowe](https://reader035.vdocuments.pub/reader035/viewer/2022081421/56816774550346895ddc68e9/html5/thumbnails/39.jpg)
THE END
Q&A?