Featherweight Java Overview higher & first-order syntax - - PowerPoint PPT Presentation

featherweight java overview
SMART_READER_LITE
LIVE PREVIEW

Featherweight Java Overview higher & first-order syntax - - PowerPoint PPT Presentation

Concepts of Program Design Featherweight Java Overview higher & first-order syntax inference rules, induction tools to talk about languages abstract machines big step and small step operational semantics -calculus and de Bruijn


slide-1
SLIDE 1

Concepts of Program Design

Featherweight Java

slide-2
SLIDE 2

Overview

semantic features tools to talk about languages

static & dynamic scoping static & dynamic typing

language concepts

functional procedural/imperative higher & first-order syntax big step and small step operational semantics abstract machines λ-calculus and de Bruijn indices inference rules, induction (algebraic) data types partial application/function closures value & type environments control stacks parametric polymorphism/ generics explicit & implicit typing

  • bject oriented
slide-3
SLIDE 3
  • What are the characteristics of an object oriented language?
  • objects bundle data and behaviour
  • the object knows what to do
  • inheritance
  • subclass relationship in the type system
  • method overloading as a form of polymorphism
  • abstraction (or encapsulation):
  • hiding implementation details from the user, interaction through restricted interface

Object oriented languages

slide-4
SLIDE 4
  • We will look a these language features today (apart from abstraction) using

Featherweight Java, a simple object oriented language

Object oriented languages

slide-5
SLIDE 5
  • Minimal OO language

Featherweight Java

Classes c ::= class c extends c {c f ; k d} Constructors k ::= c (c x) {super (x); this.f = x;} Methods d ::= c m (c x) {return e;} Types τ ::= c Expressions e ::= x | e.f | e.m(e) | new c (e) | (c)e

  • f : field name
  • c : class name
  • m : method name
  • x : variable name
  • e : abbreviation for e1, e2,….
  • c x: abbreviation for c1 x1; ….
  • TinyC like expressions and statements could be added to make it a proper

language

  • would not add anything of interest for our purposes
slide-6
SLIDE 6
  • Class expressions

Featherweight Java

class c extends c’ {c1 f1; c2 f2; … k d1 d2 … }

declares a class

  • c to be a subclass of c’
  • with additional fields c1 f1
  • a single constructor k
  • methods di
slide-7
SLIDE 7
  • Constructor expressions

Featherweight Java

c (c1’ x1’;…;c1 x1;…){ super (x1’,…) this.f1 = x1; this.f2= x2; … }

declares a constructor for a class

  • with arguments c’1 x’1 corresponding to a superclass
  • with arguments c1 x1 corresponding to the new fields of the subclass
  • x’1 are initialised via the superclass
  • this.fi = xi fields initialised in the subclass
slide-8
SLIDE 8
  • Method expressions

Featherweight Java

c m (c1 x1 , c2 x2 , …) {return e;}

declares a method m

  • which returns a value of class c
  • with arguments xi of class ci
  • and a body returning the value of expression e
slide-9
SLIDE 9
  • Field selection

Featherweight Java

e.f

select a field f from instance e

e.m (e1, e2, …)

invoke a method m of instance e with arguments e1, e2, …

  • Method invocation
slide-10
SLIDE 10
  • Instance creation

Featherweight Java

new c (e1, e2, …)

creates new instance of class c with arguments e1, e2, …

(c)e

casts a value e to class c

  • Casting
slide-11
SLIDE 11
  • Types
  • the set of types is limited to the set of class names
  • in examples, we assume the presence of types like int and bool, but we will not

discuss the semantics of these types there is a class Object

  • all other classes are subclasses of Object

a special variable this referring to the instance itself

Featherweight Java

slide-12
SLIDE 12
  • Subclass/superclass relationship
  • similar to the subtype/supertype relationship
  • if c is a subclass of c’, the c has at least as many fields as c’
  • objects of class c can be coerced to c’ by deleting the additional fields
  • we write c <: c’ to denote the subclass relationship

Subclasses and Subtypes

slide-13
SLIDE 13

class Point extends Object { int x; int y; Point (int x, int y) { super (); this.x = x; this.y = y; } } class ColourPoint extends Point { Colour c; ColourPoint (int x, int y, Colour c) { super (x, y);
 this.c = c; }
 Colour getc () {return this.c;} } class Colour extends Object { int red; int green; int blue; Colour (int r, int g, int b) { super (); this.red = r % 256; this.green = g % 256; this.blue = b % 256; } }

slide-14
SLIDE 14
  • The static semantics is defined by the following judgements:

Static Semantics

  • A program consists of a class table T (sequence of class declarations) and

an expression e.

  • We use the class table T as implicit parameter in the following.
  • We only look at some interesting aspects of the static semantics.

subclass relationship expression typing well formed method well formed class well formed class table field lookup method type

τ <: τ′ Γ ⊢ e : τ d ok in c C ok T ok fields(c) = {c1 f1, c2 f2, …} type(m, c) = c → c

slide-15
SLIDE 15
  • Fields
  • we define a judgement to determine the field names and the types of a

given class:

Static Semantics

fields(홾횋횓횎회횝) = ∙

T(c) = 회횕횊횜횜 c 횎횡횝횎횗획횜 c′{c f; …} fields(c′) = c′f′ fields(c) = c′f′, c f

fields(className) = className1 fieldName1, … fields(홿횘횒횗횝) = 횒횗횝 횡, 횒횗횝 횢 fields(홲횘횕횘횞횛홿횘횒횗횝) = 횒횗횝 횡, 횒횗횝 횢, 홲횘횕횘횞횛 회

slide-16
SLIDE 16
  • Typing judgment for expressions of the language
  • Every variable has to be declared

Static semantics

  • Types of fields are defined in the class table

x : τ ∈ Γ Γ ⊢ x : τ

Γ ⊢ e0 : c0 fields(c0) = c1f1… Γ ⊢ e0 . fi : ci

Γ ⊢ e : τ

slide-17
SLIDE 17
  • Argument and result types of methods are defined in the class table
  • methods of super types can be applied without cast

Static Semantics

  • Instantiation

Γ ⊢ e0 : c0 Γ ⊢ e : c type(m, c0) = c′ → c1 c <: c′ Γ ⊢ e0 . m(e) : c1 Γ ⊢ e : c c <: c′ fields(c) = c′f Γ ⊢ 횗횎횠 c(e) : c

slide-18
SLIDE 18
  • All casts are statically valid (could be more restrictive)

Static Semantics

Γ ⊢ e0 : c′ Γ ⊢ (c)e0 : c

slide-19
SLIDE 19
  • Subclass relationship

Static Semantics

τ <: τ τ1 <: τ2 τ2 <: τ3 τ1 <: τ3

T(c) = 회횕횊횜횜 c 횎횡횝횎횗획횜 c′{…} c <: c′

slide-20
SLIDE 20
  • Well-formed classes:

Static Semantics

fields of super class fields of new class constructor methods

fields(c′) = c′f′ m ok in c 회횕횊횜횜 c extends c′ {c f; k m} ok

k = c(c′x′, cx){횜횞횙횎횛(x′; 횝횑횒횜 . f = x; }

slide-21
SLIDE 21

Static Semantics

class ColourPoint extends Point { Colour c; ColourPoint (int x, int y, Colour c) { super (x, y);
 this.c = c; }
 Colour getc () {return this.c;} }

c c’ k c f m

fields(c′) = c′f′ m ok in c 회횕횊횜횜 c 횎횡횝횎횗획횜 c′ {c f; k m} ok

k = c(c′x′, cx){횜횞횙횎횛(x′; 횝횑횒횜 . f = x; }

slide-22
SLIDE 22
  • Method overriding: new subclass methods must have
  • the same argument type
  • the same result type

as the superclass method

Static Semantics

T(c) = 회횕횊횜횜 c 횎횡횝횎횗획횜 c′ {…} type(m, c′) = c → c0 x : c; 횝횑횒횜 : c ⊢ e0 : c0 c0 m(c x){횛횎횝횞횛횗 e0}; ok in c

slide-23
SLIDE 23

To find the type of a method m of a class c, we have to search upwards in the class hierarchy for the definition of m.

Static Semantics

T(c) = 회횕횊횜횜 c 횎횡횝횎횗획횜 c′ {…; …c′′} c′′

i = cimi(cix){횛횎횝횞횛횗 e}

type(m, c) = ci → ci T(c) = 회횕횊횜횜 c 횎횡횝횎횗획횜 c′ {…; …c′′} m ∉ c′′ type(m, c′) = ci → ci type(m, c) = ci → ci

slide-24
SLIDE 24
  • Properties
  • casts may fail at run time: checks required
  • method invocation is statically checked
  • field selection is statically checked

Static Semantics

slide-25
SLIDE 25
  • We discuss parts of the single step or structural operational semantics of

Featherweight Java

  • Values: an instance is a value if all of it’s arguments are values

in essence, an instance is just a collection of named fields, labelled with class names

Dynamic Semantics

v value 횗횎횠 c (v) value

slide-26
SLIDE 26
  • Field Selection
  • ci’ fi’: fields of a superclass
  • ci fi : fields of a class itself
  • retrieve values of field from either superclass or class itself

Dynamic Semantics

Note: contents of fields cannot be changed after initialisation. We could extend the language using the techniques described previously

fields(c) = c′f′; c f; 횗횎횠 c(v′, v) . f′

i ↦ v′ i

fields(c) = c′f′; c f; 횗횎횠 c(v′, v) . fj ↦ vj

slide-27
SLIDE 27
  • Method Invocation
  • method invocation relies on an auxiliary predicate, body (defined later)

which provides the list of formal arguments and the body of a method m defined in a class c

  • replace all formal parameters x by actual parameters v’
  • replace every occurrence of this by the instance itself

Dynamic Semantics

body(m, c) = x → e0 횗횎횠 c (v) . m(v′) ↦ e0[x := v′, 횝횑횒횜 := 횗횎횠 c (v)]

slide-28
SLIDE 28
  • Type Cast
  • if c’ is a super type of c, the cast is just ignored
  • otherwise, cause a checked run-time error

Dynamic Semantics

  • Evaluation order
  • usual rules to determine evaluation order

c <: c′ (c′)횗횎횠 c(e) ↦ 횗횎횠 c(e) c ≮: c′ (c′)횗횎횠 c(e) ↦ 횎횛횛횘횛

slide-29
SLIDE 29
  • Dynamic Dispatch
  • to find the body of a method m of a class c, we have to search upwards in

the class hierarchy for the first definition of m.

Dynamic Semantics

slide-30
SLIDE 30
  • Is Featherweight Java type save?
  • dynamic semantics of casts preserves actual type of an instance
  • the actual type of an expression may be “smaller” in the subtype ordering

during execution

  • Preservation:

If e:𝝊 and e ↦ e’, then e’:𝝊’ for some 𝝊’ such that 𝝊’ <: 𝜐

  • Progress

If e:𝝊 then either

  • 1. e is a value, or
  • 2. e contains a cast (c) new d (e’), with d <: c, or
  • 3. there exists e’, such that e ↦ e’

Type Safety

slide-31
SLIDE 31
  • What should the type of a conditional expression be?

Conditionals and subtyping if e then e1 else e2

slide-32
SLIDE 32
  • In Featherweight Java, the subclass relationship (inheritance) is a special form of

subtyping (we can coerce by ‘deleting’ fields)

  • Inheritance (subclassing) and sub typing are not the same
  • inheritance is a method of code re-use through extension
  • sub typing expresses a behavioural relationship
  • In Java
  • inheritance gives rise to subtype relationship
  • not every subtype relationship in Java arises through inheritance

Java

slide-33
SLIDE 33
  • Interfaces / abstract classes
  • private, public, protected
  • casts, similar to FWJ, but some casts are statically rejected
  • Multiple inheritance of interfaces (not regular classes)
  • typing of conditionals?

Java