Chair of Software Engineering

Languages in Depth Series: Java Programming Prof. Dr. Bertrand Meyer

Exercise Session 1 Adriana Ispas Today’s Exercise Session

Pattern of the Day  The Quizzes  What is the Result?  Class Initialisation  Instance Initialisation Assignment I  Calculator Component

Languages in Depth series: Java Programming 2 The Visitor Pattern

Creates an external class to act on data in other classes Useful if  Fair number of instances of a small number of classes  Need to perform some operation that involves all or most of them

Languages in Depth series: Java Programming 3 Motivation

Similar code for drawing each object class

Different drawing methods

 But all use utility functions duplicated in each class

Closely related functions scattered throughout several different classes

Solution

 Visitor class contains all the related draw methods and visits each object

Languages in Depth series: Java Programming 4 Visiting

Languages in Depth series: Java Programming 5 Example: Vacation Days Report

Languages in Depth series: Java Programming 6 Example: Visitor to Compute the Sum

No indication what the Visitor does with each class in either the client classes or the abstract Visitor class

Write different visitors that do different things

Languages in Depth series: Java Programming 7 Example: Visiting the Classes

Languages in Depth series: Java Programming 8 Example: Iterate

1. We move through a loop of all the Employees. 2. The Visitor calls each Employee’s accept method. 3. That instance of Employee calls the Visitor’s visit method. 4. The Visitor fetches the vacation days and adds them into the total. 5. The main program prints out the total when the loop is complete

Languages in Depth series: Java Programming 9 Double Dispatching

Visitor calls polymorphic accept method of a given object Accept method calls polymorphic visit method of the Visitor Thus  May add more operations on any class that has an accept method  New Visitor class can carry out operations using the data available in these classes

Languages in Depth series: Java Programming 10 Traversing a Series of Classes

The calling program that passes the class instances to the Visitor must know about all the existing instances of classes to be visited  Commonly used for abstract syntax trees

Languages in Depth series: Java Programming 11 Consequences

Useful when  Need to obtain data from a collection of unrelated classes and utilize it to compute a global calculation  But . Data needs to be made available through public methods Easy to add new operations  Visitor contains the code instead of each individual class  But . When new class needs to be visited need to update visitors accordingly

Languages in Depth series: Java Programming 12 Quiz 1: What is the result?

 true true 6 5 6  References f1, z, and f3 refer to the same instance  final assures that a reference variable cannot be referred to a different object . But final doesn’t keep the object’s state from changing

Languages in Depth series: Java Programming 13 Quiz 2: Class Initialization

Years left: -2004

Languages in Depth series: Java Programming 14 Object Creation Review

1. new allocates memory for a new instance 2. static fields are initialized at the defaults 3. static fields are initialized at chosen values 4. Non static fields are initialized at the defaults 5. Non static fields are initialized at chosen values 6. The constructor is invoked

Languages in Depth series: Java Programming 15 Quiz 2: Class Initialization …

1. Initialization of the class EuropeanFootballChampionship triggered by the VM's call to its main method 2. Static fields are set to their default values • INSTANCE is set to null • YEAR is set to 0 3. Static field initializers are executed in order of appearance • INSTANCE computed by invoking the constructor

• YEAR is still 0 • elapsedYears is – 2004 • …

Languages in Depth series: Java Programming 16 Quiz 2: Class Initialization ……

It is possible to observe a final static field before it is initialized to the chosen value Fix a class initialization cycle  Reorder the static field initializers so that each initializer appears before any initializers that depend on it

Languages in Depth series: Java Programming 17 Quiz 3: Instance Initialization

[4,2]:null

Languages in Depth series: Java Programming 18 Quiz 3: Instance Initialization …

It is possible to observe the value of a final instance field before its value has been assigned Problem  Constructor calls a method overridden in its subclass . The method runs before the instance has been initialized, when its declared fields still have their default values Avoid this problem  Never call overridable methods from constructors  Lazy initialization vs. eager initialization . Initialize field when first used vs. when instance created

Languages in Depth series: Java Programming 19 Quiz 3: Instance Initialization ……

Languages in Depth series: Java Programming 20 Assignment 1

Calculator Component

Languages in Depth series: Java Programming 21 Questions?

Languages in Depth series: Java Programming 22 Exercise Session 2

Pattern of the Day  The Quizzes Assignment I  Correction Assignment II  Hand-out

Languages in Depth series: Java Programming 23