announcements - university of maryland · 2013-06-12 · announcements •lab 03 inbase – late...

48
Announcements Lab 03 inBase – late submissions Midterm #1 Friday Covers everything through basics of OOP Project 2 is posted Due next Wednesday All about nested loops – good exam practice Coding style is part of the grade Evan Golub’s slides Avoiding Redundant code

Upload: others

Post on 15-Mar-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Announcements

• Lab 03 inBase – late submissions

• Midterm #1 Friday – Covers everything through basics of OOP

• Project 2 is posted – Due next Wednesday

– All about nested loops – good exam practice

– Coding style is part of the grade • Evan Golub’s slides

• Avoiding Redundant code

Page 2: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Basics of Object Oriented Programming

Cont’d

Page 3: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

The keyword

Memory

Object 01 x

3

Object 02 x

-1

Object 03 x

101

Class Refers to whichever object is currently executing the instruction

Page 4: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow public class MyObj { //A sample class definition int data; //instance field public MyObj(int dat) { //Constructor this.data = dat; } //Instance methods public void grow(int more) { this.data = this.data + more; } public void gift(MyObj other) { other.data = other.data + this.data; this.data = 0; } }

Page 5: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow

public class MyObj { //A sample class definition int data; //instance field public MyObj(int dat) { //Constructor this.data = dat; } //Instance methods public void grow(int more) { this.data = this.data + more; } public void gift(MyObj other) { other.data = other.data + this.data; this.data = 0; } }

Page 6: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow //A main method somewhere else public static void main(String[] args) { MyObj obj1 = new MyObj(1); MyObj obj2 = new MyObj(2); MyObj obj3 = new MyObj(3); obj1.grow(3); obj2.grow(3); obj1.gift(obj2); }

Page 7: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow //A main method somewhere else public static void main(String[] args) { MyObj obj1 = new MyObj(1); MyObj obj2 = new MyObj(2); … }

obj1

data

Page 8: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow //A main method somewhere else public static void main(String[] args) { MyObj obj1 = new MyObj(1); MyObj obj2 = new MyObj(2); … }

obj1

data

dat 1

Page 9: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow public class MyObj { //A sample class definition … public MyObj(int dat) { //Constructor this.data = dat; } … } dat 1

obj1

data

Page 10: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow public class MyObj { //A sample class definition … public MyObj(int dat) { //Constructor this.data = dat; } … }

obj1

data 1

dat 1

this.data

Page 11: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow //A main method somewhere else public static void main(String[] args) { … MyObj obj1 = new MyObj(1); MyObj obj2 = new MyObj(2); … }

obj1

data 1

Page 12: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow //A main method somewhere else public static void main(String[] args) { … MyObj obj1 = new MyObj(1); MyObj obj2 = new MyObj(2); … }

obj1

data 1 obj2

data

Page 13: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow //A main method somewhere else public static void main(String[] args) { … MyObj obj1 = new MyObj(1); MyObj obj2 = new MyObj(2); … }

obj1

data 1 obj2

data

dat 2

Page 14: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow public class MyObj { //A sample class definition … public MyObj(int dat) { //Constructor this.data = dat; } … } dat 2

obj1

data

obj2

data 1

Page 15: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow public class MyObj { //A sample class definition … public MyObj(int dat) { //Constructor this.data = dat; } … }

obj1

data 1

dat 2

obj2

data 2

this.data

Page 16: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow //A main method somewhere else public static void main(String[] args) { … MyObj obj1 = new MyObj(1); MyObj obj2 = new MyObj(2); … }

obj1

data 1 obj2

data 2

Page 17: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow //A main method somewhere else public static void main(String[] args) { … MyObj obj2 = new MyObj(2); MyObj obj3 = new MyObj(3); … }

obj1

data 1 obj2

data 2

Page 18: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow //A main method somewhere else public static void main(String[] args) { … MyObj obj2 = new MyObj(2); MyObj obj3 = new MyObj(3); … }

obj1

data 1 obj2

data 2 obj3

data 3

Page 19: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow //A main method somewhere else public static void main(String[] args) { … MyObj obj3 = new MyObj(3); obj1.grow(3); … }

obj1

data 1 obj2

data 2 obj3

data 3

more 3

Page 20: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow //A main method somewhere else public static void main(String[] args) { … MyObj obj3 = new MyObj(3); obj1.grow(3); … }

obj1

data 1 obj2

data 2 obj3

data 3

more 3

Page 21: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow public class MyObj { … public void grow(int more) { this.data = this.data + more; } … }

obj1

data 1 obj2

data 2 obj3

data 3

more 3

Page 22: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow public class MyObj { … public void grow(int more) { this.data = this.data + more; } … }

obj1

data 1

this.data

obj2

data 2 obj3

data 3

more 3

Page 23: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow public class MyObj { … public void grow(int more) { this.data = this.data + more; } … }

obj1

data 4

this.data

obj2

data 2 obj3

data 3

more 3

Page 24: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow //A main method somewhere else public static void main(String[] args) { … MyObj obj3 = new MyObj(3); obj1.grow(3); … }

obj1

data 4 obj2

data 2 obj3

data 3

Page 25: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow //A main method somewhere else public static void main(String[] args) { … obj1.grow(3); obj2.grow(3); … }

obj1

data 4 obj2

data 2 obj3

data 3

more 3

Page 26: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow //A main method somewhere else public static void main(String[] args) { … obj1.grow(3); obj2.grow(3); … }

obj1

data 4 obj2

data 2 obj3

data 3

more 3

Page 27: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow public class MyObj { … public void grow(int more) { this.data = this.data + more; } … }

obj1

data 4 obj2

data 2 obj3

data 3

more 3

Page 28: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow public class MyObj { … public void grow(int more) { this.data = this.data + more; } … }

obj1

data 4 obj2

data 2 obj3

data 3

more 3

this.data

Page 29: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow public class MyObj { … public void grow(int more) { this.data = this.data + more; } … }

obj1

data 4 obj2

data 5 obj3

data 3

more 3

this.data

Page 30: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow //A main method somewhere else public static void main(String[] args) { … obj1.grow(3); obj2.grow(3); … }

obj1

data 4 obj2

data 5 obj3

data 3

Page 31: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow //A main method somewhere else public static void main(String[] args) { … obj2.grow(3); obj1.gift(obj2); … }

obj1

data 4 obj2

data 5 obj3

data 3

other obj2

Page 32: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow //A main method somewhere else public static void main(String[] args) { … obj2.grow(3); obj1.gift(obj2); … }

obj1

data 4 obj2

data 5 obj3

data 3

other obj2

Page 33: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow public class MyObj { … public void gift(MyObj other) { other.data = other.data + this.data; this.data = 0; } }

obj1

data 4 obj2

data 5 obj3

data 3

other obj2

Page 34: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow public class MyObj { … public void gift(MyObj other) { other.data = other.data + this.data; this.data = 0; } }

obj1

data 4 obj2

data 5 obj3

data 3

other obj2

Page 35: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow public class MyObj { … public void gift(MyObj other) { other.data = other.data + this.data; this.data = 0; } }

obj1

data 4 obj2

data 5 obj3

data 3

other obj2

other.data

Page 36: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow public class MyObj { … public void gift(MyObj other) { other.data = other.data + this.data; this.data = 0; } }

obj1

data 4 obj2

data 5 obj3

data 3

other obj2

this.data

Page 37: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow public class MyObj { … public void gift(MyObj other) { other.data = other.data + this.data; this.data = 0; } }

obj1

data 4 obj2

data 9 obj3

data 3

other obj2

this.data

Page 38: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow public class MyObj { … public void gift(MyObj other) { other.data = other.data + this.data; this.data = 0; } }

obj1

data 4 obj2

data 9 obj3

data 3

other obj2

this.data

Page 39: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow public class MyObj { … public void gift(MyObj other) { other.data = other.data + this.data; this.data = 0; } }

obj1

data 0 obj2

data 9 obj3

data 3

other obj2

this.data

Page 40: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Execution flow //A main method somewhere else public static void main(String[] args) { … obj2.grow(3); obj1.gift(obj2); … }

obj1

data 0 obj2

data 9 obj3

data 3

Page 41: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Omit the this keyword?

• If you reference an instance field or method, and omit the this keyword, Java assumes you are referring to the current object.

• Standard practice is to omit this in all but a few special cases.

Page 42: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Omit the this keyword? public class MyObj { //A sample class definition int data; //instance field public MyObj(int dat) { //Constructor this.data = dat; } //Instance methods public void grow(int more) { this.data = this.data + more; } public void gift(MyObj other) { other.data = other.data + this.data; this.data = 0; } }

Page 43: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Omit the this keyword? public class MyObj { //A sample class definition int data; //instance field public MyObj(int dat) { //Constructor data = dat; } //Instance methods public void grow(int more) { data = data + more; } public void gift(MyObj other) { other.data = other.data + data; data = 0; } }

Page 44: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

When to use this

• In a constructor: public MyObj(int dat) { //Constructor data = dat; }

VS

public MyObj(int data) { //Constructor

this.data = data; }

• Review shadowing (Lec04 – ArgsAndParams and example)

Page 45: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

When to use this

• To return the object at the end. Compare:

public void grow(int more) { data = data + more; } …

//Somewhere else

obj1.grow(3) System.out.println(obj1);

Page 46: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

When to use this

• To return the object at the end. With: public MyObj grow(int more) { data = data + more; return this; } …

//Somewhere else

System.out.println(obj1.grow(3));

Page 47: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

A brief glance at access modifiers

• Control whether objects of one type can access members in objects of another type.

– public: Any object can access

– private: Only objects of the same type can access

• Gamble example

– If bias is a private field in Coin, Gambler objects can’t access it.

Page 48: Announcements - University Of Maryland · 2013-06-12 · Announcements •Lab 03 inBase – late submissions •Midterm #1 Friday –Covers everything through basics of OOP •Project

Real-world Objects

• Integer – compareTo, intValue – Static elements:

• parseInt

• BigInteger – Factorial without overflow – Static elements:

• ONE, TEN, ZERO • valueOf, probablePrime

• String – charAt, indexOf, substring – Static elements:

• valueOf, format