Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CSE564 Lecture 03

CSE564 Lecture 03

Software Design
Refinement
(202101)

B546a9b97d993392e4b22b74b99b91fe?s=128

Javier Gonzalez

September 03, 2020
Tweet

Transcript

  1. jgs CSE 564 Software Design Lecture 03: Refinement Dr. Javier

    Gonzalez-Sanchez javiergs@asu.edu javiergs.engineering.asu.edu | javiergs.com PERALTA 230U Office Hours: By appointment
  2. jgs Previously

  3. jgs 00000011 Timeline 1971 Wirth

  4. jgs 00000011 Stepwise Refinement Complete Task Subtask 1 Subtask 1.a

    Subtask 1.b Subtask 2 Subtask 2.a Subtask 2.b Subtask 2.c
  5. jgs 00000010 [ - < < ( - ) >

    > ] [ ( < - > ) ] main () { home if(){ if(){ while() { whatever } } } } home () { while() { if() { something } } } Case Study
  6. jgs Next

  7. jgs 00000011 The Blob public class Main { public static

    void main(String[] args) throws Exception { String text; // read text file File file = new File("/Users/Desktop/input.txt"); BufferedReader br = new BufferedReader(new FileReader(file)); String str; while ((str = br.readLine()) != null) { text = text + str; System.out.println(str); } // split words Vector<Token> tokens = new Vector<Token>(); String line; int counterOfLines = 1; do { int eolAt = text.indexOf(/*System.lineSeparator()*/"\n"); if (eolAt >= 0) { line = text.substring(0, eolAt); if (text.length() > 0) text = text.substring(eolAt + 1); } else { line = text; text = ""; } splitLine(counterOfLines, line); counterOfLines++; } while (!text.equals("")); } // token classification int index = 0; char currentChar = ' ‘; String string = ""; if (line.equals("")) return; // etc...
  8. jgs 00000011 Top-Down Stepwise Refinement (step 1) public class Main

    { public static void main(String[] args) throws Exception { String text = readTextFile (path); Vector tokens = splitWords (text); translate (tokens); }
  9. jgs 00000011 Top-Down Stepwise Refinement (step 2) public static String

    readTextFile (String path) { File file = new File (path); BufferedReader br = new BufferedReader(new FileReader(file)); String str; while ((str = br.readLine()) != null) { text = text + str; } } public static String splitWords (String text) { // code here ... do { int eolAt = text.indexOf("\n"); if (eolAt >= 0) { // code here ... } else { // code here ... } // a lot of code here ! } while (!text.equals("")); } public static void translate (Vector tokens) { // more code ... }
  10. jgs 00000011 Top-Down Stepwise Refinement (step 3) public static void

    createToken (int row, String line) { if ( ... ) { } else if ( ... ) { } else if ( ... ) { // etc. } }
  11. jgs 00000011 What about translate? main () { home if(){

    if(){ while() { whatever } } } } [ - < < ( - ) > > ]
  12. jgs 00000011 Top-Down Stepwise Refinement (step 4) private static int

    currentToken=0; public static void translate (Vector tokens) { while (curentToken < tokens.size()) { checkMethod(); } } // checkMethod() // checkIf() // checkWhile() // checkInstruction()
  13. jgs 00000011 Summary § Split the problem in Tasks One

    method/function do one and only one specific Task § A Tasks enclose Steps (sequences, loops and conditions) Take advantage of recursion
  14. jgs 00000011 Homework | Assignment 01 Submit to Canvas (individually

    or pairs): a) Source Code in Java b) showcase your skills for readability (make your code easy to read) – Clean Code c) Use Javadoc d) If you are not familiar with Java Guidelines, review this: https://google.github.io/styleguide/javaguide.html e) Code SHOULD compile and run f) File path is to be received as parameter to main. g) Output is to be printed on screen
  15. jgs 00000011 Homework Read: § On the Criteria To Be

    Used in Decomposing Systems into Modules D.L. Parnas Communications of the ACM April 1972
  16. jgs CSE 564 Computer Systems Fundamentals Javier Gonzalez-Sanchez javiergs@asu.edu Fall

    2020 Disclaimer. These slides can only be used as study material for the class CSE564 at ASU. They cannot be distributed or used for another purpose.