1 / 28

Lecture 4: Communication

CSC 313 – Advanced Programming Topics. Lecture 4: Communication. Why Does This Matter?. } catch (IOException ioe) { if ( n == 0 ) { spec.harness.Context.out.println("Empty database"); return; }

jela
Download Presentation

Lecture 4: Communication

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CSC 313 – Advanced Programming Topics Lecture 4:Communication

  2. Why Does This Matter?

  3. } catch (IOException ioe) { if ( n == 0 ) { spec.harness.Context.out.println("Empty database"); return; } spec.harness.Context.out.println("ERROR opening/reading input file \""+filename+"\""); // System.exit(1); }; entry = new Entry(); spec.harness.Context.out.print("OK\nBuilding database ..."); spec.harness.Context.out.flush(); n = buffer.length; s = e = 0; while ( (e < n) && (s < n) ) { // Check for CR also - rrh 2/18/98 while ( (e < n) && (buffer[e] != '\n') && (buffer[e] != '\r') ) e++; if ( e < n ) { if ( buffer[s] == '#' ) { add(entry); entry = new Entry(); } else entry.items.addElement(new String(buffer, 0, s, e-s)); // Discard CR & LF - rrh 2/18/98 … Spot the Bug public void read_db(String filename) { Entry entry; inti; intn = 0, act = 0, e, s; boolean OK; byte buffer[] = null; spec.harness.Context.out.print("Reading database "+dbname+" ... "); spec.harness.Context.out.flush(); try { spec.io.FileInputStreamsif = new spec.io.FileInputStream(filename); n = sif.getContentLength(); buffer = new byte[n]; intbytes_read; while ( (bytes_read = sif.read(buffer, act , (n - act))) > 0){ act = act + bytes_read; } sif.close(); sif = null; // 03/11/98 rrh if ( act != n ){ spec.harness.Context.out.println("ERROR reading input file"); //System.exit(1); return; }

  4. Brevity is the soul of wit Complexity kills. It sucks the life out of developers, it makes products difficult to plan, build and test, it introduces security challenges and it causes end-user and administrator frustration. Ray Ozzie

  5. Spot the Bug public booleanisPrime(intn) {for (inti = 1; i < n; i++) { if ((n % i) == 0) { return false; }}return true; }

  6. Spot the Bug public booleanisPrime(intn) {for (inti = 2; i < n; i++) { if ((n % i) == 0) { return false; }}return true; }

  7. Which Line Is Yours?

  8. Shared Vocabulary Necessary • Hints: Wise Creative Humorous Attractive Impatient Lazy Full of hubris Person assigning grades

  9. Shared Vocabulary Necessary • Hints: Tool Useless Lack of talent Waste of Time AI Host Dr. Hertz’s odd fascination

  10. Shared Vocabulary Necessary

  11. Shared Vocabulary Necessary

  12. public interface Greeter {public void greet(String name); } public class Formal implementsGreeter {public void greet(String name) {System.out.println(“Hello ” + name);} } public class Informal implementsGreeter {public void greet(String name) {System.out.println(“Hiya ” + name);} } public class French implementsGreeter {public void greet(String name) {System.out.println(“Bonjour ” + name);} }

  13. public interface Greeter {public void greet(String name); } public abstract class Interpersonal{protected Greeter g; } public class Workerextends Interpersonal {private String person;public void greet() { g.greet(person); } } public class DrHertzextendsInterpersonal {public void greet() { g.greet(“Bob”); } } public class Flanders extendsInterpersonal {private String person; public void greet() {g.greet(person+ “doodly”);} }

  14. Strategy Pattern • Define interface for family of algorithms • Method signature created for entire family • Coded up so each Strategy interchangeable • Each algorithm encapsulated in class of its own • Separates the Behaviorfrom Context • Implies client uses 1 strategy at a time • Also implies can change Strategydynamically

  15. Shared Vocab. Not Sufficient

  16. Brevity is the soul of wit The competent programmer is fully aware of the strictly limited size of his own skull; therefore he approaches the programming task in full humility, and among other things he avoids clever tricks like the plague. Edsger Dijkstra

  17. Not a Free Gift • Design patterns are useful… • Provide solutions at design level • Enable shared vocabulary • … but are not panacea • Do not prevent complex designs • Programs continue having box

  18. Not a Free Gift • Design patterns are useful… • Provide solutions at design level • Enable shared vocabulary • … but are not panacea • Do not prevent complex designs • Programs continue having box • Are not “gift” in the box

  19. Elevator Talk • VIP in elevator asks, “What are you working on?” • You have elevator ride to explain it all • Need to impress, but will lose them with BS • Boss comes by and asks, “How is it going?” • Does not care/have time to get into details • Have 90 seconds to get out important issues

  20. This Matters • Need to market your ideas & designs • Requires explaining to lazy, impatient coders • Well before your time is up, they are bored • If cannot explain design in elevator talk • Code created from design will have bugs • Will require major effort to get to work

  21. This Matters • Need to market your ideas & designs • Requires explaining to lazy, impatient coders • Well before your time is up, they are bored • If cannot explain design in elevator talk • Code created from design will have bugs • Will require major effort to get to work • Coders are lazy and HATEeffort and work

  22. This Matters • Need to market your ideas & designs • Requires explaining to lazy, impatient coders • Well before your time is up, they are bored • If cannot explain design in elevator talk • Code created from design will have bugs • Will require major effort to get to work • Coders are lazy and HATEeffort and work IT IS TOO COMPLEX

  23. More Marketing • Explanations must be brief • Coders should not see only necessary details • Detail needed to code or not an important details Before software can be reusable it first has to be usable. -- Ralph Johnson An API that isn't comprehensible isn't usable. -- James Gosling

  24. Why Comments are Useful If the code and the comments disagree, then both are probably wrong. Norm Schryer

  25. Why Comments are Useful As you're about to add a comment, ask yourself, 'How can I improve the code so that this comment isn't needed?' Improve the code and then document it to make it even clearer. Steve McConnell

  26. Your Turn • Give elevator speech on your current project

  27. …and finally For every complex problem there is an answer that is clear, simple, and wrong. -- H L Mencken

  28. For Next Lecture • Two (short) readings available on web • Will start looking into how code is optimized • Begin by investigating how programs actually run • Also look at some of the simplest optimizations • Important to understand to improve code written

More Related