SlideShare a Scribd company logo
6.092: Introduction to Java

6: Design, Debugging,

Interfaces
Assignment 5: main()
Programs start at a main() method, but
many classes can have main()
public class SimpleDraw {
/* ... stuff ... */
public static void main(String args[]) {
SimpleDraw content = new SimpleDraw(new DrawGraphics());
/* ... more stuff ... */
}
}
Assignment 5: main()

Programs start at a main() method, but
many classes can have main()
public class SimpleDraw {
/* ... stuff ... */
public static void main(String args[]) {
SimpleDraw content = new SimpleDraw(new DrawGraphics());
/* ... more stuff ... */
}
}
public class DrawGraphics {
BouncingBox box;
public DrawGraphics() {
box = new BouncingBox(200, 50, Color.RED);
}
public void draw(Graphics surface) {

surface.drawLine(50, 50, 250, 250);

box.draw(surface);

}
}
public class DrawGraphics {
BouncingBox box; // a field or member variable
public DrawGraphics() {
box = new BouncingBox(200, 50, Color.RED);
}
public void draw(Graphics surface) {

surface.drawLine(50, 50, 250, 250);

box.draw(surface);

}
}
public class DrawGraphics {
BouncingBox box;
public DrawGraphics() { // constructor
box = new BouncingBox(200, 50, Color.RED);
}
public void draw(Graphics surface) {

surface.drawLine(50, 50, 250, 250);

box.draw(surface);

}
}
public class DrawGraphics {
public void draw(Graphics surface) {
surface.drawLine(50, 50, 250, 250);
box.draw(surface);
surface.fillRect (150, 100, 25, 40);
surface.fillOval (40, 40, 25, 10);
surface.setColor (Color.YELLOW);
surface.drawString ("Mr. And Mrs. Smith", 200, 10);
}
}
public class DrawGraphics {
ArrayList<BouncingBox> boxes = new ArrayList<BouncingBox>();
public DrawGraphics() {

boxes.add(new BouncingBox(200, 50, Color.RED));

boxes.add(new BouncingBox(10, 10, Color.BLUE));

boxes.add(new BouncingBox(100, 100, Color.GREEN));

boxes.get(0).setMovementVector(1, 0);

boxes.get(1).setMovementVector(-3, -2);

boxes.get(2).setMovementVector(1, 1);

}
public void draw(Graphics surface) {
for (BouncingBox box : boxes) {
box.draw(surface);
}
}
}
Outline
Good program design
Debugging
Interfaces
What is a good program?
Correct / no errors
Easy to understand
Easy to modify / extend
Good performance (speed)
Consistency
Writing code in a consistent way makes it
easier to write and understand
Programming “style” guides: define rules
about how to do things
Java has some widely accepted

“standard” style guidelines
Naming
Variables: Nouns, lowercase first letter, capitals
separating words

x, shape, highScore, fileName
Methods: Verbs, lowercase first letter


getSize(), draw(), drawWithColor()

Classes: Nouns, uppercase first letter


Shape, WebPage, EmailAddress
Good Class Design
Good classes: easy to understand and use
•	 Make fields and methods private by default

•	 Only make methods public if you need to
•	 If you need access to a field, create a
method:
public int getBar() { return bar; }
Debugging
The process of finding and correcting an
error in a program
A fundamental skill in programming
Step 1: Donʼt Make Mistakes
Donʼt introduce errors in the first place
Step 1: Donʼt Make Mistakes
Donʼt introduce errors in the first place
•	 Reuse: find existing code that does
what you want
•	 Design: think before you code
•	 Best Practices: Recommended
procedures/techniques to avoid
common problems
Design: Pseudocode
A high-level, understandable description

of what a program is supposed to do

Donʼt worry about the details, worry about
the structure
Pseudocode: Interval Testing

Example:

Is a number within the interval [x, y)?
If number < x return false
If number > y return false
Return true
Design

Visual design for objects, or how a
program works
Donʼt worry about specific notation, just
do something that makes sense for you
Scrap paper is useful
SimpleDraw
DrawGraphics
ArrayList
BouncingBox BouncingBox BouncingBox
Step 2: Find Mistakes Early
Easier to fix errors the earlier you find
them
• Test your design
• Tools: detect potential errors
• Test your implementation
• Check your work: assertions
Testing: Important Inputs
Want to check all “paths” through the
program.
Think about one example for each “path”

Example:

Is a number within the interval [x, y)?
Intervals: Important Cases
Below the lower bound
Equal to the lower bound
Within the interval
Equal to the upper bound
Above the upper bound
Intervals: Important Cases
What if lower bound > upper bound?
What if lower bound == upper bound?
(hard to get right!)
Pseudocode: Interval Testing

Is a number within the interval [x, y)?
If number < x return false
If number > y return false
Return true
Pseudocode: Interval Testing

Is a number within the interval [x, y)?
Is 5 in the interval [3, 5)?
If number < x return false
If number > y return false
Return true
Pseudocode: Interval Testing

Is a number within the interval [x, y)?
Is 5 in the interval [3, 5)?
If number < x return false
If number >= y return false
Return true
Tools: Eclipse Warnings
Warnings: may not be a mistake, but it
likely is.
Suggestion: always fix all warnings
Extra checks: FindBugs and related tools

Unit testing: JUnit makes testing easier
Assertions
Verify that code does what you expect
If true: nothing happens
If false: program crashes with error
Disabled by default (enable with ‐ea)
assert difference >= 0;
void printDifferenceFromFastest(int[] marathonTimes) {
int fastestTime = findMinimum(marathonTimes);
for (int time : marathonTimes) {

int difference = time - fastestTime;

assert difference >= 0;

System.out.println("Difference: " + difference);

}
}
Step 3: Reproduce the Error
• Figure out how to repeat the error
• Create a minimal test case
Go back to a working version, and
introduce changes one at a time until
the error comes back
Eliminate extra stuff that isnʼt used
Step 4: Generate Hypothesis

What is going wrong?

What might be causing the error?

Question your assumptions: “x canʼt be
possible:” What if it is, due to something
else?
Step 5: Collect Information
If x is the problem, how can you verify?
Need information about what is going
on inside the program
System.out.println() is very powerful
Eclipse debugger can help
Step 6: Examine Data
Examine your data
Is your hypothesis correct?
Fix the error, or generate a new
hypothesis
Why Use Methods?
Write and test code once, use it multiple
times: avoid duplication
Eg. Library.addBook()
Why Use Methods?

Use it without understanding how it works: 

encapsulation / information hiding

Eg. How does System.out.println() work?
Why Use Objects?

Objects combine a related set of variables
and methods
Provide a simple interface
(encapsulation again)
Implementation / Interface

Library
Book[] books;
int numBooks;
String address;
void addBook(Book b) {
books[numBooks] = b;
numBooks++;
}
Library
void addBook(Book b);
Java Interfaces
Manipulate objects, without knowing how
they work
Useful when you have similar but not
identical objects
Useful when you want to use code written
by others
Interface Example: Drawing
public class BouncingBox {
public void draw(Graphics surface) {
// … code to draw the box …
}
}
// … draw boxes …
for (BouncingBox box : boxes) {
box.draw(surface);
}
Interface Example: Drawing
public class Flower {
public void draw(Graphics surface) {
// … code to draw a flower …
}
}
// … draw flowers …
for (Flower flower : flowers) {
flower.draw(surface);
}
public class DrawGraphics {
ArrayList<BouncingBox> boxes = new ArrayList<BouncingBox>();
ArrayList<Flower> flowers = new ArrayList<Flower>();
ArrayList<Car> cars = new ArrayList<Car>();
public void draw(Graphics surface) {

for (BouncingBox box : boxes) {

box.draw(surface);

}

for (Flower flower : flowers) {

flower.draw(surface);

}

for (Car car : cars) {

car.draw(surface);
}
}
}
public class DrawGraphics {
ArrayList<Drawable> shapes = new ArrayList<Drawable>();
ArrayList<Flower> flowers = new ArrayList<Flower>();

ArrayList<Car> cars = new ArrayList<Car>();

public void draw(Graphics surface) {

for (Drawable shape : shapes) {

shape.draw(surface);

}

for (Flower flower : flowers) {
flower.draw(surface);

}

for (Car car : cars) {

car.draw(surface);

}

}
}
Interfaces

Set of classes that share methods
Declare an interface with the common
methods
Can use the interface, without knowing an
objectʼs specific type
Interfaces: Drawable
import java.awt.Graphics;
interface Drawable {
void draw(Graphics surface);
void setColor(Color color);
}
Implementing Interfaces
Implementations provide complete
methods:
import java.awt.Graphics;
class Flower implements Drawable {
// ... other stuff ...
public void draw(Graphics surface) {
// ... code to draw a flower here ...
}
}
Interface Notes
Only have methods (mostly true)
Do not provide code, only the definition
(called signatures)
A class can implement any number of
interface
Using Interfaces
Can only access stuff in the interface.

Drawable d = new BouncingBox(…);

d.setMovementVector(1, 1);
The method setMovementVector(int, int) 

is undefined for the type Drawable
Casting
If you know that a variable holds a
specific type, you can use a cast:
Drawable d = new BouncingBox(…);
BouncingBox box = (BouncingBox) d;
box.setMovementVector(1, 1);
Assignment: More graphics
Start a new project: code has changed.
MIT OpenCourseWare
http://ocw.mit.edu
6.092 Introduction to Programming in Java
January (IAP) 2010
For information about citing these materials or our Terms of Use, visit: http://ocw.mit.edu/terms.

More Related Content

PPT
Java
tintinsan
 
PDF
Methods in Java
Jussi Pohjolainen
 
PPT
01-ch01-1-println.ppt java introduction one
ssuser656672
 
PPTX
Java method present by showrov ahamed
Md Showrov Ahmed
 
PPTX
Programming Fundamentals
Trivuz ত্রিভুজ
 
PPTX
Test Design For Everyone
Alan Page
 
PDF
c++ lab manual
Shrunkhala Wankhede
 
PPT
06 abstract-classes
Abhishek Khune
 
Java
tintinsan
 
Methods in Java
Jussi Pohjolainen
 
01-ch01-1-println.ppt java introduction one
ssuser656672
 
Java method present by showrov ahamed
Md Showrov Ahmed
 
Programming Fundamentals
Trivuz ত্রিভুজ
 
Test Design For Everyone
Alan Page
 
c++ lab manual
Shrunkhala Wankhede
 
06 abstract-classes
Abhishek Khune
 

Similar to LECTURE 6 DESIGN, DEBUGGING, INTERFACES.pdf (20)

PDF
A la découverte de TypeScript
Denis Voituron
 
PPTX
classes object fgfhdfgfdgfgfgfgfdoop.pptx
arjun431527
 
PPTX
Software Design
mohamedsaad24
 
PDF
Javascript Best Practices
Christian Heilmann
 
PPTX
C# .NET: Language Features and Creating .NET Projects, Namespaces Classes and...
yazad dumasia
 
PPT
SystemVerilog OOP Ovm Features Summary
Amal Khailtash
 
PPT
06 abstract-classes
Anup Burange
 
PPTX
Session 04 communicating results
bodaceacat
 
PPTX
Session 04 communicating results
Sara-Jayne Terp
 
PPTX
Chapter 2.4
sotlsoc
 
ODP
Bring the fun back to java
ciklum_ods
 
PPT
Lesson plan 2 matt 3
Max Friel
 
PDF
Debug - MITX60012016-V005100
Ha Nguyen
 
PDF
Introduction to r
Alberto Labarga
 
PDF
OOPS JavaScript Interview Questions PDF By ScholarHat
Scholarhat
 
DOCX
Module Six Assignment Guidelines and Rubric.htmlOverviewMa.docx
roushhsiu
 
PPT
C Tutorials
Sudharsan S
 
PPTX
Comparitive Analysis of Algorithm strategies
Talha Shaikh
 
PPT
Vb introduction.
sagaroceanic11
 
PDF
Dutch PHP Conference 2013: Distilled
Zumba Fitness - Technology Team
 
A la découverte de TypeScript
Denis Voituron
 
classes object fgfhdfgfdgfgfgfgfdoop.pptx
arjun431527
 
Software Design
mohamedsaad24
 
Javascript Best Practices
Christian Heilmann
 
C# .NET: Language Features and Creating .NET Projects, Namespaces Classes and...
yazad dumasia
 
SystemVerilog OOP Ovm Features Summary
Amal Khailtash
 
06 abstract-classes
Anup Burange
 
Session 04 communicating results
bodaceacat
 
Session 04 communicating results
Sara-Jayne Terp
 
Chapter 2.4
sotlsoc
 
Bring the fun back to java
ciklum_ods
 
Lesson plan 2 matt 3
Max Friel
 
Debug - MITX60012016-V005100
Ha Nguyen
 
Introduction to r
Alberto Labarga
 
OOPS JavaScript Interview Questions PDF By ScholarHat
Scholarhat
 
Module Six Assignment Guidelines and Rubric.htmlOverviewMa.docx
roushhsiu
 
C Tutorials
Sudharsan S
 
Comparitive Analysis of Algorithm strategies
Talha Shaikh
 
Vb introduction.
sagaroceanic11
 
Dutch PHP Conference 2013: Distilled
Zumba Fitness - Technology Team
 
Ad

More from SHASHIKANT346021 (8)

PPTX
Civil Engineering Departmental PPT 1.pptx
SHASHIKANT346021
 
PPTX
Electronics and Computer Engineering PPT.pptx
SHASHIKANT346021
 
PPTX
Introducing-the-Python-Interpreter. What is Python Interpreter
SHASHIKANT346021
 
PPTX
Course Presentation: Electronic & Computer Engineering
SHASHIKANT346021
 
PPT
Parallel Programming Models: Shared variable model, Message passing model, Da...
SHASHIKANT346021
 
PPTX
Parallel Programming Models: Shared variable model
SHASHIKANT346021
 
PDF
Classes in Java great learning.pdf
SHASHIKANT346021
 
PDF
LECTURE 3 LOOPS, ARRAYS.pdf
SHASHIKANT346021
 
Civil Engineering Departmental PPT 1.pptx
SHASHIKANT346021
 
Electronics and Computer Engineering PPT.pptx
SHASHIKANT346021
 
Introducing-the-Python-Interpreter. What is Python Interpreter
SHASHIKANT346021
 
Course Presentation: Electronic & Computer Engineering
SHASHIKANT346021
 
Parallel Programming Models: Shared variable model, Message passing model, Da...
SHASHIKANT346021
 
Parallel Programming Models: Shared variable model
SHASHIKANT346021
 
Classes in Java great learning.pdf
SHASHIKANT346021
 
LECTURE 3 LOOPS, ARRAYS.pdf
SHASHIKANT346021
 
Ad

Recently uploaded (20)

PPTX
Memorandum and articles of association explained.pptx
Keerthana Chinnathambi
 
PDF
askOdin - An Introduction to AI-Powered Investment Judgment
YekSoon LOK
 
PPTX
E-commerce and its impact on business.
pandeyranjan5483
 
PPTX
Mining Services and Iron Ore Transportation in India.pptx
Naaraayani Minerals Pvt.Ltd
 
PPTX
Is Your Brand Ready for Expansion? A Strategic Guide to Scaling Successfully
RUPAL AGARWAL
 
PPT
How to Protect Your New York Business from the Unexpected
Sam Vohra
 
PPTX
Creating the Ultimate SOP Manual: Streamline, Standardize, and Scale
RUPAL AGARWAL
 
PPTX
Virbyze_Our company profile_Preview.pptx
myckwabs
 
PDF
2025 07 29 The Future, Backwards Agile 2025.pdf
Daniel Walsh
 
PPTX
Buy Chaos Software – V-Ray, Enscape & Vantage Licenses in India
PI Software
 
PPTX
6 Timeless Japanese Concepts to Improve Business Processes
RUPAL AGARWAL
 
PDF
Unveiling the Latest Threat Intelligence Practical Strategies for Strengtheni...
Auxis Consulting & Outsourcing
 
PDF
The Digital Culture Challenge; Bridging the Employee-Leadership Disconnect
Brian Solis
 
PDF
MDR Services – 24x7 Managed Detection and Response
CyberNX Technologies Private Limited
 
PDF
Rodolfo Belcastro su All Around The Worlds Magazine - Febbraio 2025
Rodolfo Belcastro
 
PDF
Sample Presentation of Business Plan and Pitch deck
letstalkvc24
 
PDF
Data Sheet Cloud Integration Platform - dataZap
Chainsys SEO
 
PPTX
GenAI at FinSage Financial Wellness Platform
SUBHANKARGHOSH126678
 
PPTX
BIS-Certification-for-CCTV-Recorders ppt.pptx
Diligence Certification
 
PDF
TriStar Gold Corporate Presentation August 2025
Adnet Communications
 
Memorandum and articles of association explained.pptx
Keerthana Chinnathambi
 
askOdin - An Introduction to AI-Powered Investment Judgment
YekSoon LOK
 
E-commerce and its impact on business.
pandeyranjan5483
 
Mining Services and Iron Ore Transportation in India.pptx
Naaraayani Minerals Pvt.Ltd
 
Is Your Brand Ready for Expansion? A Strategic Guide to Scaling Successfully
RUPAL AGARWAL
 
How to Protect Your New York Business from the Unexpected
Sam Vohra
 
Creating the Ultimate SOP Manual: Streamline, Standardize, and Scale
RUPAL AGARWAL
 
Virbyze_Our company profile_Preview.pptx
myckwabs
 
2025 07 29 The Future, Backwards Agile 2025.pdf
Daniel Walsh
 
Buy Chaos Software – V-Ray, Enscape & Vantage Licenses in India
PI Software
 
6 Timeless Japanese Concepts to Improve Business Processes
RUPAL AGARWAL
 
Unveiling the Latest Threat Intelligence Practical Strategies for Strengtheni...
Auxis Consulting & Outsourcing
 
The Digital Culture Challenge; Bridging the Employee-Leadership Disconnect
Brian Solis
 
MDR Services – 24x7 Managed Detection and Response
CyberNX Technologies Private Limited
 
Rodolfo Belcastro su All Around The Worlds Magazine - Febbraio 2025
Rodolfo Belcastro
 
Sample Presentation of Business Plan and Pitch deck
letstalkvc24
 
Data Sheet Cloud Integration Platform - dataZap
Chainsys SEO
 
GenAI at FinSage Financial Wellness Platform
SUBHANKARGHOSH126678
 
BIS-Certification-for-CCTV-Recorders ppt.pptx
Diligence Certification
 
TriStar Gold Corporate Presentation August 2025
Adnet Communications
 

LECTURE 6 DESIGN, DEBUGGING, INTERFACES.pdf

  • 1. 6.092: Introduction to Java
 6: Design, Debugging, Interfaces
  • 2. Assignment 5: main() Programs start at a main() method, but many classes can have main() public class SimpleDraw { /* ... stuff ... */ public static void main(String args[]) { SimpleDraw content = new SimpleDraw(new DrawGraphics()); /* ... more stuff ... */ } }
  • 3. Assignment 5: main() Programs start at a main() method, but many classes can have main() public class SimpleDraw { /* ... stuff ... */ public static void main(String args[]) { SimpleDraw content = new SimpleDraw(new DrawGraphics()); /* ... more stuff ... */ } }
  • 4. public class DrawGraphics { BouncingBox box; public DrawGraphics() { box = new BouncingBox(200, 50, Color.RED); } public void draw(Graphics surface) { surface.drawLine(50, 50, 250, 250); box.draw(surface); } }
  • 5. public class DrawGraphics { BouncingBox box; // a field or member variable public DrawGraphics() { box = new BouncingBox(200, 50, Color.RED); } public void draw(Graphics surface) { surface.drawLine(50, 50, 250, 250); box.draw(surface); } }
  • 6. public class DrawGraphics { BouncingBox box; public DrawGraphics() { // constructor box = new BouncingBox(200, 50, Color.RED); } public void draw(Graphics surface) { surface.drawLine(50, 50, 250, 250); box.draw(surface); } }
  • 7. public class DrawGraphics { public void draw(Graphics surface) { surface.drawLine(50, 50, 250, 250); box.draw(surface); surface.fillRect (150, 100, 25, 40); surface.fillOval (40, 40, 25, 10); surface.setColor (Color.YELLOW); surface.drawString ("Mr. And Mrs. Smith", 200, 10); } }
  • 8. public class DrawGraphics { ArrayList<BouncingBox> boxes = new ArrayList<BouncingBox>(); public DrawGraphics() { boxes.add(new BouncingBox(200, 50, Color.RED)); boxes.add(new BouncingBox(10, 10, Color.BLUE)); boxes.add(new BouncingBox(100, 100, Color.GREEN)); boxes.get(0).setMovementVector(1, 0); boxes.get(1).setMovementVector(-3, -2); boxes.get(2).setMovementVector(1, 1); } public void draw(Graphics surface) { for (BouncingBox box : boxes) { box.draw(surface); } } }
  • 10. What is a good program? Correct / no errors Easy to understand Easy to modify / extend Good performance (speed)
  • 11. Consistency Writing code in a consistent way makes it easier to write and understand Programming “style” guides: define rules about how to do things Java has some widely accepted “standard” style guidelines
  • 12. Naming Variables: Nouns, lowercase first letter, capitals separating words x, shape, highScore, fileName Methods: Verbs, lowercase first letter getSize(), draw(), drawWithColor() Classes: Nouns, uppercase first letter Shape, WebPage, EmailAddress
  • 13. Good Class Design Good classes: easy to understand and use • Make fields and methods private by default • Only make methods public if you need to • If you need access to a field, create a method: public int getBar() { return bar; }
  • 14. Debugging The process of finding and correcting an error in a program A fundamental skill in programming
  • 15. Step 1: Donʼt Make Mistakes Donʼt introduce errors in the first place
  • 16. Step 1: Donʼt Make Mistakes Donʼt introduce errors in the first place • Reuse: find existing code that does what you want • Design: think before you code • Best Practices: Recommended procedures/techniques to avoid common problems
  • 17. Design: Pseudocode A high-level, understandable description of what a program is supposed to do Donʼt worry about the details, worry about the structure
  • 18. Pseudocode: Interval Testing Example: Is a number within the interval [x, y)? If number < x return false If number > y return false Return true
  • 19. Design Visual design for objects, or how a program works Donʼt worry about specific notation, just do something that makes sense for you Scrap paper is useful
  • 21. Step 2: Find Mistakes Early Easier to fix errors the earlier you find them • Test your design • Tools: detect potential errors • Test your implementation • Check your work: assertions
  • 22. Testing: Important Inputs Want to check all “paths” through the program. Think about one example for each “path” Example: Is a number within the interval [x, y)?
  • 23. Intervals: Important Cases Below the lower bound Equal to the lower bound Within the interval Equal to the upper bound Above the upper bound
  • 24. Intervals: Important Cases What if lower bound > upper bound? What if lower bound == upper bound? (hard to get right!)
  • 25. Pseudocode: Interval Testing Is a number within the interval [x, y)? If number < x return false If number > y return false Return true
  • 26. Pseudocode: Interval Testing Is a number within the interval [x, y)? Is 5 in the interval [3, 5)? If number < x return false If number > y return false Return true
  • 27. Pseudocode: Interval Testing Is a number within the interval [x, y)? Is 5 in the interval [3, 5)? If number < x return false If number >= y return false Return true
  • 28. Tools: Eclipse Warnings Warnings: may not be a mistake, but it likely is. Suggestion: always fix all warnings Extra checks: FindBugs and related tools Unit testing: JUnit makes testing easier
  • 29. Assertions Verify that code does what you expect If true: nothing happens If false: program crashes with error Disabled by default (enable with ‐ea) assert difference >= 0;
  • 30. void printDifferenceFromFastest(int[] marathonTimes) { int fastestTime = findMinimum(marathonTimes); for (int time : marathonTimes) { int difference = time - fastestTime; assert difference >= 0; System.out.println("Difference: " + difference); } }
  • 31. Step 3: Reproduce the Error • Figure out how to repeat the error • Create a minimal test case Go back to a working version, and introduce changes one at a time until the error comes back Eliminate extra stuff that isnʼt used
  • 32. Step 4: Generate Hypothesis What is going wrong? What might be causing the error? Question your assumptions: “x canʼt be possible:” What if it is, due to something else?
  • 33. Step 5: Collect Information If x is the problem, how can you verify? Need information about what is going on inside the program System.out.println() is very powerful Eclipse debugger can help
  • 34. Step 6: Examine Data Examine your data Is your hypothesis correct? Fix the error, or generate a new hypothesis
  • 35. Why Use Methods? Write and test code once, use it multiple times: avoid duplication Eg. Library.addBook()
  • 36. Why Use Methods? Use it without understanding how it works: encapsulation / information hiding Eg. How does System.out.println() work?
  • 37. Why Use Objects? Objects combine a related set of variables and methods Provide a simple interface (encapsulation again)
  • 38. Implementation / Interface Library Book[] books; int numBooks; String address; void addBook(Book b) { books[numBooks] = b; numBooks++; } Library void addBook(Book b);
  • 39. Java Interfaces Manipulate objects, without knowing how they work Useful when you have similar but not identical objects Useful when you want to use code written by others
  • 40. Interface Example: Drawing public class BouncingBox { public void draw(Graphics surface) { // … code to draw the box … } } // … draw boxes … for (BouncingBox box : boxes) { box.draw(surface); }
  • 41. Interface Example: Drawing public class Flower { public void draw(Graphics surface) { // … code to draw a flower … } } // … draw flowers … for (Flower flower : flowers) { flower.draw(surface); }
  • 42. public class DrawGraphics { ArrayList<BouncingBox> boxes = new ArrayList<BouncingBox>(); ArrayList<Flower> flowers = new ArrayList<Flower>(); ArrayList<Car> cars = new ArrayList<Car>(); public void draw(Graphics surface) { for (BouncingBox box : boxes) { box.draw(surface); } for (Flower flower : flowers) { flower.draw(surface); } for (Car car : cars) { car.draw(surface); } } }
  • 43. public class DrawGraphics { ArrayList<Drawable> shapes = new ArrayList<Drawable>(); ArrayList<Flower> flowers = new ArrayList<Flower>(); ArrayList<Car> cars = new ArrayList<Car>(); public void draw(Graphics surface) { for (Drawable shape : shapes) { shape.draw(surface); } for (Flower flower : flowers) { flower.draw(surface); } for (Car car : cars) { car.draw(surface); } } }
  • 44. Interfaces Set of classes that share methods Declare an interface with the common methods Can use the interface, without knowing an objectʼs specific type
  • 45. Interfaces: Drawable import java.awt.Graphics; interface Drawable { void draw(Graphics surface); void setColor(Color color); }
  • 46. Implementing Interfaces Implementations provide complete methods: import java.awt.Graphics; class Flower implements Drawable { // ... other stuff ... public void draw(Graphics surface) { // ... code to draw a flower here ... } }
  • 47. Interface Notes Only have methods (mostly true) Do not provide code, only the definition (called signatures) A class can implement any number of interface
  • 48. Using Interfaces Can only access stuff in the interface. Drawable d = new BouncingBox(…); d.setMovementVector(1, 1); The method setMovementVector(int, int) is undefined for the type Drawable
  • 49. Casting If you know that a variable holds a specific type, you can use a cast: Drawable d = new BouncingBox(…); BouncingBox box = (BouncingBox) d; box.setMovementVector(1, 1);
  • 50. Assignment: More graphics Start a new project: code has changed.
  • 51. MIT OpenCourseWare http://ocw.mit.edu 6.092 Introduction to Programming in Java January (IAP) 2010 For information about citing these materials or our Terms of Use, visit: http://ocw.mit.edu/terms.