6.092: Introduction to Java 6: Design, Debugging,InterfacesAssignment 5: main() Programs start at a main() method, butmany 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, butmany 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 boxes = new ArrayList(); 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 iteasier to write and understand Programming “style” guides: define rulesabout how to do things Java has some widely accepted“standard” style guidelinesNaming Variables: Nouns, lowercase first letter, capitalsseparating words x, shape, highScore, fileName Methods: Verbs, lowercase first lettergetSize(), draw(), drawWithColor()Classes: Nouns, uppercase first letterShape, WebPage, EmailAddressGood 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 amethod: public int getBar() { return bar; } Debugging The process of finding and correcting anerror 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 doeswhat you want • Design: think before you code • Best Practices: Recommended procedures/techniques to avoidcommon problems Design: Pseudocode A high-level, understandable descriptionof what a program is supposed to doDonʼt worry about the details, worry aboutthe structure Pseudocode: Interval TestingExample: Is a number within the interval [x, y)? If number < x return false If number > y return false Return true DesignVisual design for objects, or how aprogram works Donʼt worry about specific notation, justdo 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 findthem • 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 TestingIs a number within the interval [x, y)? If number < x return false If number > y return false Return true Pseudocode: Interval TestingIs 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 TestingIs 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 itlikely is. Suggestion: always fix all warnings Extra checks: FindBugs and related toolsUnit testing: JUnit makes testing easierAssertionsVerify that code does what you expectIf true: nothing happensIf false: program crashes with errorDisabled 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, andintroduce changes one at a time untilthe error comes back Eliminate extra stuff that isnʼt used Step 4: Generate HypothesisWhat is going wrong?What might be causing the error?Question your assumptions: “x canʼt be possible:” What if it is, due to somethingelse? 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 newhypothesis Why Use Methods? Write and test code once, use it multipletimes: avoid duplication Eg. Library.addBook() Why Use Methods?Use it without understanding how it works: encapsulation /information hidingEg. How does System.out.println() work?Why Use Objects?Objects combine a related set of variablesand methods Provide a simple interface (encapsulation again) Implementation /InterfaceLibrary 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 howthey work Useful when you have similar but notidentical objects Useful when you want to use code writtenby 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 boxes = new ArrayList(); ArrayList flowers = new ArrayList(); ArrayList cars = new ArrayList(); 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 shapes = new ArrayList(); ArrayList flowers = new ArrayList();ArrayList cars = new ArrayList();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);}} } InterfacesSet of classes that share methods Declare an interface with the common methods Can use the interface, without knowing anobjectʼs specific type Interfaces: Drawable import java.awt.Graphics; interface Drawable { void draw(Graphics surface); void setColor(Color color); } Implementing Interfaces Implementations provide completemethods: 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 ofinterface 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 DrawableCasting If you know that a variable holds aspecific 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 OpenCourseWarehttp://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.
Description
In this particular lecture notes we will be learnt about Design, debugging, interfaces in java.1.Design Good classes: easy to understand and use ,2. Debugging: The process of finding and correcting anerror in a program
A fundamental skill in programming.3.Java Inter faces Manipulate objects, without knowing howthey work Useful when you have similar but not identical objects Useful when you want to use code writtenby others.
“Level:Undergraduate Instructors:Evan Jones,Adam Marcus,Eugene Wu ,6.092-6 Design, debugging, interfaces 6.092 Introduction to Programming in Java,Electrical Engineering and Computer Science, Engineering, Massachusetts Institute of Technology: MIT Open Course Ware,http://ocw.mit.edu (30-08-2011).License: Creative Commons BY-NC-SA: http://ocw.mit.edu/terms/#cc".