1 / 39

Języki wysokiego poziomu: – funkcje i programowanie bezklasowe

Języki wysokiego poziomu: – funkcje i programowanie bezklasowe. λ. Sebastian Poręba. 1. Wprowadzenie. Klasyfikacja języków programowania. Ze względu na:. Przykłady:. 1. Wprowadzenie. Łatwość nauki Popularność Poziom abstrakcji języka. PHP4 – łatwa nauka

anitra
Download Presentation

Języki wysokiego poziomu: – funkcje i programowanie bezklasowe

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Języki wysokiego poziomu: – funkcje i programowanie bezklasowe λ Sebastian Poręba

  2. 1. Wprowadzenie

  3. Klasyfikacja języków programowania • Ze względu na: • Przykłady: 1. Wprowadzenie • Łatwość nauki • Popularność • Poziom abstrakcji języka • PHP4 – łatwa nauka • Assembler, Cobol – niski poziom abstrakcji • C++, Java – wysoki (?) poziom abstrakcji, akceptowalny poziom trudności Poziom abstrakcji wysoki niski

  4. Klasyfikacja języków programowania 1. Wprowadzenie popularność C++ C# Java Ruby Python C Pascal Assembler ? Cobol Poziom abstrakcji

  5. Po co programiście gier języki wyższego poziomu? 1. Wprowadzenie OpenGL gamedev == C++ DirectX performance (Java, C, Assembler) QuakeC, UnrealScript Języki skryptowe w silnikach gier Lua, Python

  6. 2. – funkcje λ

  7. Co się dzieje kiedy definiujemy funkcję w C++ 2. Funkcje lambda classElephant{ voidstep(){ // do somestuff } }; function step // do somestuff Elephant Elephant Elephant *step *step *step

  8. Funkcje lambda 2. Funkcje lambda Funkcje lambda pozwalają na samodzielne zarządzanie wskaźnikiem do funkcji step=function(){ // do somestuff } step();

  9. Do czego to się przydaje? 2. Funkcje lambda • Funkcję można: • zmieniać • zwracać jako wynik innej funkcji • podawać jako argument do funkcji

  10. Zmiana wskaźnika na funkcję 2. Funkcje lambda C++: Niewygodne zarządzanie kodem #defineRK4 #ifdef, #ifndef Zarządzanie kodem tylko przy kompilacji ify przy każdej iteracji pętli programu If/switch wybierający funkcję Przechowywanie niepotrzebnych funkcji w pamięci

  11. Zmiana wskaźnika na funkcję 2. Funkcje lambda Funkcja lambda • Podmiana funkcji w locie • Brak ifów • Zwolnienie pamięci po funkcji do której nie ma żadnego wskaźnika

  12. Generatory funkcji 2. Funkcje lambda Możliwość zwracania funkcji jako wynik funkcji Przykład: funkcja zwracająca algorytm kompresujący na podstawie parametrów pliku do skompresowania

  13. Memoizacja 2. Funkcje lambda • intfib(intn){ • returnn<=2?1:fib(n-1)+fib(n-2); • } • fib(100) -> 708 * 1018wywołańfib( ) longlongmemo[101];// zainicjalizowane na 0 intmemofib(intn){ if(memo[n])returnmemo[n]; memo[n]=memofib(n-1)+memofib(n-2); returnmemo[n]; }

  14. Funkcja jako argument – modyfikatory funkcji 2. Funkcje lambda functionmemoize(func){ varmemo={}; returnfunction(key){ if(!memo[key]){memo[key]=func(key);} returnmemo[key]; }; }; varfib = function(n){returnn<=2?1:fib(n-1)+fib(n-2);} varmemofib=memoize(fib); memofib(100);

  15. Funkcje lambda 2. Funkcje lambda Wprowadzenie tak nieznacznej modyfikacji jak funkcje lambda udostępnia cały wachlarz nowych technik programowania

  16. 3. Programowanie bezklasowe

  17. Powtórka z filozofii 3. Programowanie bezklasowe Platon

  18. Dlaczego w takim razie programujemy z wykorzystaniem klas? 3. Programowanie bezklasowe MIT – Structure and Interpretation of Computer Programs,Wykład 2b, ~36:00prof. Harold Abelson (rok 1986)

  19. Dziedziczenie klasowe 3. Programowanie bezklasowe Obj1 foo() bar() baz

  20. Dziedziczenie klasowe 3. Programowanie bezklasowe Obj1 Klasa, która wykonuje pewne zadania w inny sposób foo() bar() baz Obj2 foo()

  21. Dziedziczenie klasowe 3. Programowanie bezklasowe ObjBase foo() Klasa, która nie zawiera pewnych pól Obj1 Obj2 bar() baz

  22. Dziedziczenie klasowe 3. Programowanie bezklasowe ObjBase foo() Obj12 abc adf Obj1 Obj2 bar() baz Obj72 mattDamon jimmyKimmel time Obj21 foo Różne pola w różnych klasach

  23. Dziedziczenie klasowe 3. Programowanie bezklasowe

  24. Powtórka z filozofii 3. Programowanie bezklasowe Arystoteles

  25. Programowanie klasowe vs bezklasowe • Klasowe • Bezklasowe 3. Programowanie 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

  26. Dziedziczenie klasowe 3. Programowanie bezklasowe classA{ intpampararam; methodabc(param:int){…} } classBinheritingA{ methodabc(param:int){…} } b=newB(); Enkapsulacja Obiekt B Obiekt A

  27. Dziedziczenie prototypowe 3. Programowanie bezklasowe Wskaźnik na prototyp a={ intpampararam; methodabc(param:int){…} } b={ methodabc(param:int){…} } b.prototype=a; Obiekt A Obiekt B *prototype

  28. Jaka jest praktyczna różnica? • Klasowe • Bezklasowe 3. Programowanie 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 prototypechain • Jeżeli chcemy zapisać wartość pampararam, zostanie utworzone nowe pole w obiekcie B, prototypechain nie będzie potrzebny

  29. Dziedziczenie klasowe 3. Programowanie bezklasowe ObjBase foo() Obj12 abc adf Obj1 Obj2 bar() baz Obj72 mattDamon jimmyKimmel time Obj21 foo() Różne pola w różnych klasach

  30. Dziedziczenie prototypowe 3. Programowanie bezklasowe 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 obiektnie modyfikując w ogóle innych obiektów.

  31. Klonowanie obiektów 3. Programowanie bezklasowe A co jeśli chcemy mieć wiele obiektów z tymi samymi metodami? prototype foo adf time cookies bar Obj2={}; Obj2.prototype= { foo: ObjBase.foo, adf: Obj12.adf, time: Obj72.time, cookies: Obj21.cookies, bar: Obj1.bar }; Obj3 = Obj2.clone(); Obj3 Obj2

  32. Klonowanie obiektu 3. Programowanie bezklasowe Prototyp obiektu nie ma nazwy, nie zaśmieca namespace – jedynym odwołaniem do niego jest wskaźnik w obiektach Obj2 i Obj3.

  33. Zmiana delegacji obiektu 3. Programowanie bezklasowe 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.

  34. Zmiana delegacji obiektu 3. Programowanie bezklasowe Prototyp obiektu jest określony za pomocą wskaźnika – nic nie stoi więc na przeszkodzie, żeby zmienić go w czasie wykonywania programu.

  35. Zmiana delegacji obiektu 3. Programowanie bezklasowe DeadNPC NPC talkTo() { return „I seedeadpeople”; }; attack(); giveSandwich(); talkTo(); attack(); giveSandwich(); Pirate // something If(Pirate.isA(DeadNPC)) { // do stuff }

  36. Testy wydajnościowe 3. Programowanie bezklasowe Benchmark kodeka MPEG 1/2 – C vs Lisaac

  37. Wnioski Wnioski Poznawanie nowych języków programowania może być pożyteczne!

  38. Bibliografia Bibliografia MIT SICP 101 - http://www.academicearth.org/ Douglas Crockford, YIU Theather - http://crockford.com/javascript/ Funkcje Lambda w C# http://blogs.msdn.com/b/sriram/archive/2005/08/07/448722.aspx 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 Prototypes with multipledispatch - http://tunes.org/~eihrul/ecoop.pdf Lisaac - http://isaacos.loria.fr/li.html Lua- http://www.lua.org/

  39. THE END Q&A?

More Related