Rachunek Lambda + Obiektowość część 1. – motywacja na podstawie: [1] A Lambda Calculus of Objects and Method Specialization [2] Matching [for] the Lambda Calculus of Objects
Plan Prezentacji Przykłady motywujące Formalizm: Rachunek Lambda z Obiektami System Typów dla powyższego
Przykłady motywujące
JavaScript, Przykład 1. Metody niezdefiniowane w obiekcie (message-not-understood)
JavaScript, Przykład 2. Specjalizacja metod klasowych (method specialization) cp:
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
Cel: formalizm – abstrakcja obiektowości Środek: rachunek lambda rozszerzony o obiekty
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, ...
Rachunek lambda + obiekty (Untyped Lambda Calculus of Objects)
Rachunek lambda + obiekty (Untyped Lambda Calculus of Objects) Przykład
Rachunek lambda + obiekty (Untyped Lambda Calculus of Objects) Funkcyjna forma rozszerzania obiektów: : Object → Method → Object
Rachunek lambda + obiekty (Untyped Lambda Calculus of Objects) Modelowanie self za pomocą λ-abstrakcji (funkcji):
obserwacje na temat Rachunku Lambda z Obiektami
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
Rachunku Lambda z Obiektowością System typów dla Rachunku Lambda z Obiektowością Przykład wyprowadzenia
Reguły typowania obiektów czyli specjalizacja raz jeszcze (ale teraz formalniej)
Java, Przykład 2. Specjalizacja metod klasowych (method specialization) cp:
Reguły typowania obiektów
Interpretacja metody poza kontekstem jej definicji
Specjalizacja metod klasowych – inne prace like 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.
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.
obserwacje na temat Systemu Typów dla Rachunku Lambda z Obiektami
[1] pokazuje poprawność systemu typów [1]: problem "czy typowalne termy są równe" jest nierozstrzygalny w tym systemie typów
pytania?
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