JĘZYKI WYSOKIEGO POZIOMU: λ FUNKCJE I PROGRAMOWANIE BEZKLASOW E Sebastian Poręba

Podobne dokumenty
Technologie cyfrowe semestr letni 2018/2019

Wykład. Materiały bazują częściowo na slajdach Marata Dukhana

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja

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

Technologie cyfrowe semestr letni 2018/2019

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

Enkapsulacja, dziedziczenie, polimorfizm

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

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

Programowanie obiektowe

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Dziedziczenie. Tomasz Borzyszkowski

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Programowanie obiektowe

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Materiały do zajęć VII

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

Wprowadzenie do programowanie obiektowego w języku C++

Wykład 4: Klasy i Metody

Programowanie obiektowe

Typy klasowe (klasy) 1. Programowanie obiektowe. 2. Założenia paradygmatu obiektowego:

Podstawy Programowania Obiektowego

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc

Wstęp. Ale po co? Implementacja

Wstęp do programowania obiektowego. Wykład 2

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

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

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Programowanie obiektowe - 1.

Definiowanie własnych klas

Spis treści. 1 Java T M

Referencje do zmiennych i obiektów

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

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

Programowanie obiektowe

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Modelowanie i Programowanie Obiektowe

Programowanie obiektowe

Programowanie Obiektowe i C++ Marcin Benke

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

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Programowanie obiektowe

Kurs WWW. Paweł Rajba.

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Funkcje i instrukcje języka JavaScript

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Podstawy programowania. Wprowadzenie

Język C++ wykład VII. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VII. dr Jarosław Mederski. Spis.

Aplikacje w środowisku Java

Dokumentacja do API Javy.

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

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut.

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

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Różne właściwości. Różne właściwości. Różne właściwości. C++ - klasy. C++ - klasy C++ - KLASY

Programowanie współbieżne Wykład 6. Iwona Kochaoska

Języki i metody programowania Java. Wykład 2 (część 2)

Początki Javy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 8

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

Aplikacje w środowisku Java

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

Programowanie Obiektowe i C++

Typy zmiennych proste i złożone. Programowanie komputerów. Tablica. Złożone typy zmiennych. Klasa. Struktura

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Java Język programowania

KOTLIN. Język programowania dla Androida

Programowanie obiektowe

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

Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2015

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

PHP 5 język obiektowy

Projektowanie obiektowe oprogramowania Wykład 9 Wzorce architektury aplikacji (1) Wiktor Zychla 2013

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

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2017

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

Programowanie obiektowe

Programista gier, silników i innych takich

Programowanie, część I

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Informatyka na UG... Witold Bołt

Wywoływanie metod zdalnych

EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++

Programowanie obiektowe

Podstawy programowania. Wykład PASCAL. Wstęp do programowania obiektowego. dr Artur Bartoszewski - Podstawy programowania, sem.

Programowanie gier eventy. Dalton & Cartman KNTG Polygon, 21 grudnia 2015 r.

Paradygmaty programowania

Lab 9 Podstawy Programowania

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

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Zaawansowane programowanie w języku C++ Klasy w C++

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Transkrypt:

JĘZYKI WYSOKIEGO POZIOMU: Sebastian Poręba λ FUNKCJE I PROGRAMOWANIE BEZKLASOW E

1. WPROWADZENIE

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

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

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

2. λ FUNKCJE

Co się dzieje kiedy definiujemy funkcję w C++ class Elephant { void step() { // do some stuff } }; 2. FUNKCJE LAMBDA *step Elephant function step // do some stuff *step Elephant Elephant *step

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

Do czego to się przydaje? Funkcję można: zmieniad zwracad jako wynik innej funkcji podawad jako argument do funkcji 2. FUNKCJE LAMBDA

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

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 2. FUNKCJE LAMBDA

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

Memoizacja int fib(int n) { return n<=2? 1 : fib(n-1) + fib(n-2); } 2. FUNKCJE LAMBDA fib(100) -> 708 * 10 18 wywołao fib( ) long long memo[101]; // zainicjalizowane na 0 int memofib(int n) { if(memo[n]) return memo[n]; memo[n] = memofib(n-1) + memofib(n-2); return memo[n]; }

Funkcja jako argument modyfikatory funkcji function memoize (func) { var memo = {}; return function (key) { if(!memo[key]) {memo[key] = func(key); } return memo[key]; }; }; 2. FUNKCJE LAMBDA var fib = function (n) {return n<=2? 1 : fib(n-1) + fib(n-2);} var memofib = memoize(fib); memofib(100);

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

Powtórka z filozofii Platon

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)

Dziedziczenie klasowe foo() bar() baz Obj1

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

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

Dziedziczenie klasowe bar() baz Obj1 foo() ObjBase Obj2 abc adf Obj12 foo Obj21 Obj72 mattdamon jimmykimmel time Różne pola w różnych klasach

Dziedziczenie klasowe

Powtórka z filozofii Arystoteles

Programowanie klasowe vs bezklasowe Klasowe 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 Bezklasowe Tworzymy obiekty Obiekty zawierają pola, wskaźniki na swoje metody oraz wskaźnik na prototyp

Dziedziczenie klasowe class A { int pampararam; method abc (param : int) { } } class B inheriting A { method abc (param: int) { } } Enkapsulacja Obiekt A Obiekt B b = new B( );

Dziedziczenie prototypowe a = { int pampararam; method abc (param : int) { } } b = { method abc (param: int) { } } b.prototype = a; Wskaźnik na prototyp Obiekt A *prototype Obiekt B

Jaka jest praktyczna różnica? Klasowe Każdy obiekt klasy potomnej zawiera w sobie obiekt klasy nadrzędnej Obiekty klas dziedziczących po innych klasach mogą zawierad pola, które nie są używane Bezklasowe Obiekty przechowują jedynie wskaźnik na obiekt nadrzędny Jeżeli odczytujemy wartośd pola pampararam (z przykładu, w klasie nadrzędnej), jest on szukany w prototype chain Jeżeli chcemy zapisad wartośd pampararam, zostanie utworzone nowe pole w obiekcie B, prototype chain nie będzie potrzebny

Dziedziczenie klasowe bar() baz Obj1 foo() ObjBase Obj2 abc adf Obj12 foo() Obj21 Obj72 mattdamon jimmykimmel time Różne pola w różnych klasach

Dziedziczenie prototypowe Obj2 = {}; Obj2.prototype = { foo: ObjBase.foo, adf: Obj12.adf, time: Obj72.time, foo2: Obj21.foo, bar: Obj1.bar }; Możemy stworzyd nowy, złożony obiekt nie modyfikując w ogóle innych obiektów.

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

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

Zmiana delegacji obiektu Prototyp obiektu może zawierad zmienne dzielone dla wielu obiektów. W C++ zmienne klasy nadrzędnej mają rezerwowaną osobną pamięd dla każdej instancji.

Zmiana delegacji obiektu Prototyp obiektu jest określony za pomocą wskaźnika nic nie stoi więc na przeszkodzie, żeby zmienid go w czasie wykonywania programu.

Zmiana delegacji obiektu NPC talkto(); attack(); givesandwich(); Pirate // something DeadNPC talkto() { return I see dead people ; }; attack(); givesandwich(); If(Pirate.isA(DeadNPC)) { // do stuff }

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 Benchmark kodeka MPEG 1/2 C vs Lisaac 1352 kb 1332 kb Run time (s) 3,60 3,67 1,94 % more

Wnioski WNIOSKI Poznawanie nowych języków programowania może byd pożyteczne!

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.aspx 4. 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.pdf 6. Lisaac - http://isaacos.loria.fr/li.html 7. Lua - http://www.lua.org/ BIBLIOGRAFIA

Q&A? THE END