josh bloch charlie garrod
play

Josh Bloch Charlie Garrod School of Computer Science 17-214 1 - PowerPoint PPT Presentation

Principles of Software Construction tis a Gift to be Simple or Cleanliness is Next to Godliness Midterm 1 and Homework 3 Post-Mortem Josh Bloch Charlie Garrod School of Computer Science 17-214 1 Administrivia Homework 4a due Thursday,


  1. Principles of Software Construction ’tis a Gift to be Simple or Cleanliness is Next to Godliness Midterm 1 and Homework 3 Post-Mortem Josh Bloch Charlie Garrod School of Computer Science 17-214 1

  2. Administrivia • Homework 4a due Thursday, 11:59 p.m. – Design review meeting is mandatory 17-214 2

  3. Outline I. Midterm exam post-mortem II. Permutation generator post-mortem III. Cryptarithm post-mortem 17-214 3

  4. Midterm exam results 17-214 4

  5. Anyone know a simpler expression for this? if (myDog.hasFleas()) { return true; } else { return false; } 17-214 5

  6. Hint: it’s not this return myDog.hasFleas() ? true : false; 17-214 6

  7. Please do it this way from now on We reserve the right to deduct points if you don’t return myDog.hasFleas(); 17-214 7

  8. DnaStrand should be immutable • Much safer – value can’t change underneath you • Trivial to use concurrently – no synchronization necessary • More efficient – can share instances • Always make simple value classes immutable! 17-214 8

  9. What’s the best representation for a base? 17-214 9

  10. What’s the best internal representation for a strand? 17-214 10

  11. In a real-world setting, performance concerns might intrude • The human genome has about 3 billion base pairs – Would take up 24 GB with our current representation – But each base pair has only 2 bits of actual information – So you could cut this down by a factor of 16 • This implies a bit-vector representation – Strand would be represented as an array of (say) int – Where each int represents 16 bases • But you don’t do this sort of thing until you know you have to – Avoid premature optimization • It would have been wrong to do this for the exam 17-214 11

  12. What are best input types for constructor (or factory)? 17-214 12

  13. A good, basic solution – Base enum (1/4) 17-214 13

  14. A good, basic solution – field and constructor (2/4) 17-214 14

  15. A good, basic solution – Object methods (3/4) 17-214 15

  16. A good, basic solution – complementarity methods (4/4) 17-214 16

  17. API is good – client code is pretty 17-214 17

  18. Why is this solution ¼ the length of many we received? 17-214 18

  19. Why is this solution ¼ the length of many we received? • Good choice of internal representation – Fighting with representation adds verbosity • Makes good use of the facilities provided for us by the platform • Makes good use of itself – Code reuse vs. copy-and-paste 17-214 19

  20. Outline I. Midterm exam post-mortem II. Permutation generator post-mortem III. Cryptarithm post-mortem 17-214 20

  21. Design comparison for permutation generator • Command pattern – Easy to code – Reasonably pretty to use: PermGen.doForAllPermutations(list, (perm) -> { if (isSatisfactory(perm)) doSomethingWith(perm); }); • Iterator pattern – Tricky to code because algorithm is recursive and Java lacks generators – Really pretty to use because it works with for -each loop for (List<Foo> perm : Permutations.of(list)) if (isSatisfactory(perm)) doSomethingWith(perm); • Performance is similar 17-214 21

  22. A complete (!), general-purpose permutation generator using the command pattern 17-214 22

  23. How do you test a permutation generator? Make a list of items to permute (consecutive integers do nicely) For each permutation of the list { Check that it’s actually a permutation of the list Check that we haven’t seen it yet Put it in the set of permutations that we have seen } Check that the set of permutations we’ve seen has right size (n!) Do this for all reasonable values of n, and you’re done! 17-214 23

  24. And now, in code – this is the whole thing! 17-214 24

  25. Pros and cons of exhaustive testing • Pros and cons of exhaustive testing + Gives you “absolute assurance” that the unit works + Exhaustive tests can be short and elegant + You don’t have to worry about what to test − Rarely feasible; Infeasible for: • Nondeterministic code, including most concurrent code • Large state spaces • If you can test exhaustively, do! • If not, you can often approximate it with random testing 17-214 25

  26. Outline • Midterm exam post-mortem • Permutation generator post-mortem • Cryptarithm post-mortem – Cryptarithm class (6 slides) – CryptarithmWordExpression (2 slides) – Main program (1 slide) 17-214 26

  27. Cryptarithm class (1/6) – fields 17-214 27

  28. Cryptarithm class (2/6) – constructor / parser Sample input argument: ["send", "+", "more", "=", "money"] 17-214 28

  29. Cryptarithm class (3/6) – word parser 17-214 29

  30. Cryptarithm class (4/6) – operator parser 17-214 30

  31. Cryptarithm class (5/6) – solver 17-214 31

  32. Cryptarithm class (6/6) – solver helper functions 17-214 32

  33. CryptarithmExpressionContext Naïve version; solves 10-digit cryptarithms in about 1 s. 17-214 33

  34. CryptarithmWordExpression Naïve version; solves 10-digit cryptarithms in about 1 s. 17-214 34

  35. Cryptarithm solver command line program 17-214 35

  36. Conclusion • Good habits really matter – “The way to write a perfect program is to make yourself a perfect programmer and then just program naturally.” – Watts S. Humphrey, 1994 • Don’t just hack it up and say you’ll fix it later – You probably won’t – but you will get into the habit of just hacking it up • Representations matter! Choose carefully. – If your code is getting ugly, step back and rethink it – “A week of coding can often save a whole hour of thought.” • Not enough to be merely correct; code must be clearly correct – Try to avoid nearly correct. 17-214 36

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend