Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 Gentle Introduction to Programming Session 5: Memory Model, Object Oriented Programming.

Similar presentations


Presentation on theme: "1 Gentle Introduction to Programming Session 5: Memory Model, Object Oriented Programming."— Presentation transcript:

1 1 Gentle Introduction to Programming Session 5: Memory Model, Object Oriented Programming

2 2 Review Recursive vs. Iterative Arrays Arrays in memory Initialization and usage foreach, filter Arrays as functions arguments Multi-dimensional arrays References to array Sorting, searching and time-complexity analysis Binary search Bubble sort, Merge sort

3 3 Today Home work review Scala memory model Guest lecture by Prof. Ronitt Rubinfeld 11:10 Object-oriented programming (OOP) Classes and Objects Functional Objects (Rational Numbers example) Home work

4 4 Exercise 1 Write a program that gets 10 numbers from the user. It then accepts another number and checks to see if that number was one of the previous ones. Example 1: Please enter 10 numbers: 1 2 3 4 5 6 7 8 9 10 Please enter a number to search for: 8 Found it! Example 2: Please enter 10 numbers: 1 2 3 4 5 6 7 8 9 10 Please enter a number to search for: 30 Sorry, it’s not there

5 5 Solution FindNumber.scala

6 6 Exercise 2 Implement a function that accepts two integer arrays and returns true if they are equal, false otherwise. The arrays are of the same size Write a program that accepts two arrays of integers from the user and checks for equality

7 7 Solution CompareArrays.scala

8 8 Solution (main) CompareArrays.scala

9 9 Exercise 3 Read, understand and implement selection/insertion sort algorithm http://en.wikipedia.org/wiki/Selection_sort http://en.wikipedia.org/wiki/Insertion_sort

10 10 Selection Sort

11 11 Solution

12 12 Today Home work review Scala memory model Guest lecture by Prof. Ronitt Rubinfeld Object-oriented programming (OOP) Classes and Objects Functional Objects (Rational Numbers example) Home work

13 13 Passing Arguments to Functions When a function is called, arguments’ values are attached to function’s formal parameters by order, and an assignment occurs before execution Values are copied to formal parameters “Call by value” Function’s parameters are defined as vals

14 14 Passing Arguments to Functions A reference is also passed by value Example: arrays Objects (?) This explains why we can change an array’s content within a function 456789 a

15 15 Local Names Arguments names do not matter! Local variable name hides in-scope variables with the same name Different x!

16 16 Everything is an Object (in Scala) In Java: primitives vs. objects In Scala everything is an Object But: special treatment for primitives Why do we care? val x = 5 var y = x y = 6 val ar1 = Array(1,2,3) val ar2 = ar1 ar2(0) = 4 ?

17 17 ? val x = 5 var y = x y = 6 val ar1 = Array(1,2,3) val ar2 = ar1 ar2(0) = 4

18 18 Memory Image 1 val x = 5 var y = x y = 6 x5 y5 y 6

19 19 Memory Image 2 val ar1 = Array(1,2,3) val ar2 = ar1 ar2(0) = 4 ar1123 ar2 4

20 20 Scala Memory Model Based on Java… Stack: local variables and arguments, every function uses a certain part of the stack Stack variables “disappear” when scope ends Heap: global variables and object, scope independent Garbage Collector Partial description

21 21 How to Change a Variable via Functions? The arguments are passed as vals thus can not be changed So how can a method change an outer variable? By its return value By accessing heap-based memory (e.g., arrays)

22 22 Today Home work review Scala memory model Guest lecture by Prof. Ronitt Rubinfeld Object-oriented programming (OOP) Classes and Objects Functional Objects (Rational Numbers example) Home work

23 23 Programming in Scala Chapter 4: Classes and Objects Chapter 6: Functional Objects

24 24 Singletone Objects All programs written so far in this course are Signletone objects File start with the reserved word object Contain functions that can be used elsewhere Application: singeltone object with a main function (Actually singeltone objects are more then that) (Java programmers: think of it as a holder of static methods)

25 25 A Car How would you represent a car? Parts / features: 4 wheels, steering wheel, horn, color,… Functionality: drive, turn left, honk, repaint,… In Scala???

26 26 Object-Oriented Programming (OOP) Represent problem-domain entities using a computer language When building a software in a specific domain, describe the different components of the domain as types and variables Thus we can take another step up in abstraction

27 27 Class as a Blueprint A class is a blueprint of objects

28 28 Class as a Blueprint A class is a blueprint of objects

29 29 Classes as Data Types Classes define types that are a composition of other types and have unique functionality An instance of a class is named an object Every instance may contain: Data members / fields Methods Constructors Instances are accessed only through reference

30 30 Examples String Members: all private Methods: length, replace, startsWith, substring,… Constructors: String(), String(String),… http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html Array Members: all private Methods: length, filter, update,… Constructors: initiate with 1-9 dimensions http://www.scala-lang.org/docu/files/api/scala/Array.html

31 31 Car Example Members: 4 wheels, steering wheel, horn, color,… Every car instance has its own Methods: drive, turn left, honk, repaint,… Constructors: Car(String color), Car(Array[Wheels], Engine,…), …

32 32 Today Home work review Scala memory model Guest lecture by Prof. Ronitt Rubinfeld Object-oriented programming (OOP) Classes and Objects Functional Objects (Rational Numbers example) Home work

33 33 Rational Numbers A ration number is a number that can be expressed as a ration n/d (n,d integers, d not 0) Examples: 1/2, 2/3, 112/239, 2/1 Not an approximation

34 34 Specification Add, subtract, multiply, divide println should work smoothly Immutable (result of an operation is a new rational number) It should feel like native language support

35 35 Constructing a Rational How client programmer will create a new Rational object? Class parameters

36 36 Constructing a Rational The Scala compiler will compile any code placed in the class body, which isn’t part of a field or a method definition, into the primary constructor ?

37 37 Reimplementing toString toString method A more useful implementation of toString would print out the values of the Rational’s numerator and denominator override the default implementation

38 38 Usage Now we can remove the debug println…

39 39 Checking Preconditions Ensure the data is valid when the object is constructed Use require

40 40 Define “add” Method Immutable Define add:

41 41 Add Fields n, d are in scope in the add method Access then only on the object on which add was invoked 

42 42 Test Add, Access Fields

43 43 Self Reference (this) Define method lessThan: Define method max:

44 44 Auxiliary Constructors Constructors other then the primary Example: a rational number with a denominator of 1 (e.g., 5/1  5) We would like to do: new Rational(5) Auxiliary constructor first action: invoke another constructor of the same class The primary constructor is thus the single point of entry of a class

45 45 Revised Rational

46 46 Private Fields and Methods 66/42 = 11/7 To normalize divide the numerator and denominator by their greatest common divisor (gcd) gcd(66,42) = 6  (66/6)/(42/6) = 11/7 No need for Rational clients to be aware of this Encapsulation

47 47 Off Topic: Calculate gcd gcd(a,b) = g a = n * g b = m * g gcd(n,m)=1(otherwise g is not the gcd) a = t * b + r = t * m * g + r  g is a divisor of r gcd(a,b) = gcd(b,a%b) The Euclidean algorithm: repeat iteratively: if (b == 0) return a else repeat using a  b, b  a%b http://en.wikipedia.org/wiki/Euclidean_algorithm

48 48 Correctness Example: gcd(40,24)  gcd(24,16)  gcd(16,8)  gcd(8,0)  8 Prove: g = gcd(a,b) = gcd(b,a%b)= g1 g1 is a divisor of a (  g1 ≤ g ) There is no larger divisor of a (  g1 ≥ g ) ≤ : a = t * b + r  a = t * h * g1 + v * g1  g1 is a divisor of a ≥ : assume g > g1  a = t * b + r  g is a divisor of b and r  contradiction

49 49 Implementation

50 50 Revised Rational

51 51 Defining Operators Why not use natural arithmetic operators? Replace add by the usual mathematical symbol Operator precedence will be kept All operations are method calls

52 52 Revised Rational

53 53 Usage

54 54 Method Overloading Now we can add and multiply rational numbers! What about mixed arithmetic? r * 2 won’t work  r * new Rational(2) is not nice  Add new methods for mixed addition and multiplication Method overloading The compiler picks the correct overloaded method

55 55 Usage The * method invoked is determined in each case by the type of the right operand

56 56 Revised Rational

57 57 Implicit Conversions 2 * r  2.*(r)  method call on 2 (Int)  Int class contains no multiplication method that takes a Rational argument  Create an implicit conversion that automatically converts integers to rational numbers when needed

58 58 Companion Object

59 59 Revised Rational Define implicit conversion in Rational.scala, after defining object Rational

60 60 In Eclipse In Rational.scala: Companion object (object Rational) Rational class (class Rational) Place the main method in another file

61 61 Summary Customize classes so that they are natural to use fields, methods, primary constructor Method overriding Self reference (this) Define several constructors Encapsulation Define operators as method Method overloading Implicit conversions, companion object

62 62 Today Home work review Scala memory model Guest lecture by Prof. Ronitt Rubinfeld Object-oriented programming (OOP) Classes and Objects Functional Objects (Rational Numbers example) Home work

63 63 Exercise 1 Implement class Complex so it is natural to use complex numbers Examples:


Download ppt "1 Gentle Introduction to Programming Session 5: Memory Model, Object Oriented Programming."

Similar presentations


Ads by Google