1 Rachunek Lambda + Obiektowość część 1. – motywacjana podstawie: [1] A Lambda Calculus of Objects and Method Specialization [2] Matching [for] the Lambda Calculus of Objects
2 Plan Prezentacji Przykłady motywująceFormalizm: Rachunek Lambda z Obiektami System Typów dla powyższego
3 Przykłady motywujące
4 JavaScript, Przykład 1. Metody niezdefiniowane w obiekcie (message-not-understood)
5 JavaScript, Przykład 2. Specjalizacja metod klasowych (method specialization)cp:
6 Cele 1. papieru zamodelować rozszerzanie obiektów...… pamiętając o specjalizacji metod zrozumieć jak zmienia się znaczenie metody w zależności od zmiany this / self przy dziedziczeniu analiza znaczenia metody w oderwaniu od miejsca deklaracji
7 Cel: formalizm – abstrakcja obiektowościŚrodek: rachunek lambda rozszerzony o obiekty
8 Klasy vs Prototypy obiektowośćtworzenie obiektów wg klas (class-based) Java, Python, Smalltalk, ... tworzenie obiektów wg instancji (delegation-based, prototype-based) JavaScript, Self, ...
9 Rachunek lambda + obiekty (Untyped Lambda Calculus of Objects)
10 Rachunek lambda + obiekty (Untyped Lambda Calculus of Objects) Przykład
11 Rachunek lambda + obiekty (Untyped Lambda Calculus of Objects)Funkcyjna forma rozszerzania obiektów: : Object → Method → Object
12 Rachunek lambda + obiekty (Untyped Lambda Calculus of Objects)Modelowanie self za pomocą λ-abstrakcji (funkcji):
13 obserwacje na temat Rachunku Lambda z Obiektami
14 Wzajemnie rekursywne metody (mutually recursive methods)chcemy wykrywać takie błędy: x niezdefiniowane!: ok: problem gdy 2 metody: m() {n()}, n() {m()} są wzajemnie rekursywne
15 Rachunku Lambda z ObiektowościąSystem typów dla Rachunku Lambda z Obiektowością Przykład wyprowadzenia
16
17
18 Reguły typowania obiektówczyli specjalizacja raz jeszcze (ale teraz formalniej)
19 Java, Przykład 2. Specjalizacja metod klasowych (method specialization)cp:
20 Reguły typowania obiektów
21 Interpretacja metody poza kontekstem jej definicji
22 Specjalizacja metod klasowych – inne pracelike Current zaproponowane do języka Eiffel Przykład 2.: nie trzeba rzutować cp.move() z Point na ColoredPoint W.R. Cook. A proposal for making Eiffel type- safe. W European Conf. on Object-Oriented Programming, strony 57–72, 1989.
23 Specjalizację metod opisano także w:J.C. Mitchell. Toward a typed foundation for method specialization and inheritance. W Proc. 17th ACM Symp. on Principles of Programming Languages, strony 109–124, Styczeń 1990.
24 obserwacje na temat Systemu Typów dla Rachunku Lambda z Obiektami
25 [1] pokazuje poprawność systemu typów[1]: problem "czy typowalne termy są równe" jest nierozstrzygalny w tym systemie typów
26 pytania?
27 Bibliografia [1] Kathleen Fisher, Furio Honsell, John C. Mitchell. A Lambda Calculus of Objects and Method Specialization W Nordic Journal of Computing, 1(1):3–37 1994 [2] Viviana Bono, Michele Bugliesi. Matching [for] the Lambda Calculus of Objects W Theoretical Computer Science, 212(1-2):101–140 1999