1.7k

# CSE564 Lecture 03

Software Design
Refinement
(202101)

## Javier Gonzalez-SanchezPRO

September 03, 2020

## Transcript

1. jgs
CSE 564
Software Design
Lecture 03: Refinement
Dr. Javier Gonzalez-Sanchez
[email protected]
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

5. jgs
00000011
Case Study

6. jgs
00000011
Homework
§ You won’t submit yet
§ Draft the source code. It will be discussed in our next lecture
Problem to solve:
1. A data structure to store flow charts
2. Nodes?
3. Types?
4. Data / Content?
5. How to connect?
6. Who does the checking? When?

7. jgs
Case Study
A translator

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

9. jgs
00000011
The Blob
public class Main {
public static void main(String[] args) throws Exception {
String text;
File file = new File("/Users/Desktop/input.txt");
String str;
while ((str = br.readLine()) != null) {
text = text + str;
System.out.println(str);
}
// split words
Vector tokens = new Vector();
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...

10. jgs
00000011
Top-Down Stepwise Refinement (step 1)
public class Main {
public static void main(String[] args) throws Exception {
Vector tokens = splitWords (text);
translate (tokens);
}

11. jgs
00000011
Top-Down Stepwise Refinement (step 2)
public static String readTextFile (String path) {
File file = new File (path);
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 ...
}

12. jgs
00000011
Top-Down Stepwise Refinement (step 3)
public static void createToken (int row, String line) {
if ( ... ) {
} else if ( ... ) {
} else if ( ... ) {
// etc.
}
}

13. jgs
00000011
main () {
home
if(){
if(){
while() {
whatever
}
}
}
} [ - < < ( - ) > > ]
Input:
Output:

14. 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()

15. jgs
Summary

16. 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)

17. jgs
00000011
Homework