510 likes | 644 Views
CS 303E Class 7 Part 1: Designing Complex Programs. The sooner you start to code, the longer your program will take. -Roy Carlson, U Wisconsin. Tally Grades (pp. 96–110). Request: A program to tally grades on a test. Analysis (details of input and output): Input: scores on a test.
E N D
CS 303E Class 7 Part 1:Designing Complex Programs The sooner you start to code, the longer your program will take.-Roy Carlson, U Wisconsin User Defined Methods
Tally Grades(pp. 96–110) Request: A program to tally grades on a test. Analysis (details of input and output): Input: scores on a test. Output: Number of As, Bs, Cs, Ds, Fs (tallies) and running average. Interface: Fields, buttons, etc. needed for I/O. Fields and labels for input (score) and outputs (tallies and average). Buttons to tally another score and to reset all. User Defined Methods
Design — Variables Window components. Global variables: Needed? Yes: Click Tally button for each score — “user loop”. Tallies, average, other variables must retain their values between button clicks. Global variables: tallyA, tallyB, …, tallyF, numberOfTests, totalOfTests, average. User Defined Methods
Method buttonClicked Determines which button was clicked and calls the appropriate method: buttonClicked if (reset button clicked) resetGlobalVariables (); else processScore (); set focus to score input field; User Defined Methods
Method resetGlobalVariables resetGlobalVariables set tallies to 0; // tallyA, … set totals to 0; // totalOfTests, … set average to 0; display 0 in score field; displayTalliesAndAverage (); Method call for last action because it will be needed again when processing scores. User Defined Methods
Method displayTalliesAndAverage displayTalliesAndAverage display the tallies and average on the screen; Computation done in global variables, but display done in fields or other window components. User Defined Methods
Method processScore processScore if (score is invalid) display error message; else { get score value from field; if (score < 0 or score > 100) display error message; else { updateTallies (score); updateAverage (score); displayTalliesAndAverage (); } } Separate methods for computations of a few lines or more. User Defined Methods
Update Methods updateTallies (int score); update the proper tally for score; updateAverage (score); update the totals for score; compute the average; Simple enough that pseudocode isn’t needed. User Defined Methods
Coding — Step 1 (pp. 99–101) Code: • the import, class, and method main. • all the window objects — labels, fields, and buttons declared. • method buttonClicked. Omit global variables — not needed yet. Stub out the methods buttonClicked calls. Run and debug. • What should you see? User Defined Methods
Coding — Step 2( pp. 100-101) Code the methods called by buttonClicked. Add global variables — needed now. Stub out the methods called by methods added above. Run and debug. • What should you see? User Defined Methods
Coding — Step 3(pp. 101-104) Code the rest of the methods, removing all stubs. Run and debug. • What should you see? User Defined Methods
Preconditions and Postconditions Preconditions: Statement of what must be true before a method can be invoked — inputs required in parameters or globals. Postconditions: Statement of what the method will guarantee to be true after it is executed if the preconditions are met — values computed and returned or changed, errors detected. User Defined Methods
Example Text pp. 94-96: // Preconditions: number is an integer >= 0. // Postconditions: The number of divisors in // number is returned. private int computeCount (int number) { . . . ; return count; } User Defined Methods
Call Stack — Run-time Errors Exception occurred during event dispatching: java.lang.ArithmeticException: / by zero at TallyGrades.updateAverage(TallyGrades.java) at TallyGrades.processScore(TallyGrades.java) at TallyGrades.buttonClicked(TallyGrades.java) at BreezyGUI.GBFrameButtonListener.actionPerformed (GBFrame.java:241) at java.awt.Button.processEvent(Button.java:281) at . . . Press Enter to continue User Defined Methods
CS 303E Class 7 Part 2Characters, Strings, and the Math class "The time has come, "the Walrus said, "To talk of many things: of shoes - and ships - and sealing wax - of cabbages - and kings - And why the sea is boiling hot - And whether pigs have wings." - Lewis Carroll, 1871, in Through the Lookinglass. User Defined Methods
Primitive Data Types • Numeric types: int, double, and others • Character type: char • Boolean type. User Defined Methods
Characters — type char • Type char represents the 64,768 characters (2 bytes) in the Unicode system. • The ASCII character set (representing English keyboard characters) is shown in Appendix D. • Char constants use single quotes: 'A'. User Defined Methods
Wrapper Classes and Objects • pages 371 - 373 in text • All primitive data types have a class associated with various methods. • These wrapper objects can also store one primitive data type value for each object. The usefulness of this is described later. • The wrapper class for a char is the Character class. User Defined Methods
Character Operations char letter = 'a', digit = '4'; System.out.println (Character.isLetter (letter)); System.out.println (Character.digit (digit, 10)); System.out.println (Character.digit (letter, 16)); int i = letter; System.out.println(i); Note: Characterchar User Defined Methods
Type Conversions • Each character value maps to an integer. • For the ASCII character set, these numbers range from 0 to 127. • Use (char) i to get a character value from an int. • Use (int) ch to get the ASCII value from a char. • examples of casting. User Defined Methods
Casting for ints • Java will not assign a value of a more inclusive type to a variable of a less inclusive type unless the code explicitly converts the type. • Each primitive type can be cast to any other primitive type, but information may be lost. • int i = 5; • double d = 3.5; • i = (int) d; // Cast operation • System.out.println (i); // Displays 3 • (int) truncates by dropping the fractional part. User Defined Methods
Strings (page 126) String str = "Hey Joe!"; System.out.println (str.length()); System.out.println (str.charAt(4)); System.out.println (str.indexOf('J')); System.out.println (str.toUpperCase()); A string is an array of chars: 'H' 'e' 'y' ' ' 'J' 'o' 'e' '!' 0 1 2 3 4 5 6 7 User Defined Methods
Standard String Processing Loop for (int i = 0; i < str.length(); i++) { char ch = str.charAt(i); <process ch> } 'H' 'e' 'y' ' ' 'J' 'o' 'e' '!' 0 1 2 3 4 5 6 7 User Defined Methods
Defining a String Method Write a method that tests a String to see whether or not it represents an integer. A String represents an integer if it is not empty and contains just decimal digits. // Input parameter: a String // Returns: true if the String is not empty and // contains just digits or false otherwise boolean validInt (String str) { . . . } User Defined Methods
Defining a String Method // Input parameter: a String // Returns: true if the String is not empty and // contains just digits or false otherwise. public boolean validInt (String str) { if (str.equals("")) return false; // Empty for (int i = 0; i < str.length(); i++) { char ch = str.charAt(i); if (! Character.isDigit(ch)) // Not digit return false; } return true; // Got through } User Defined Methods
Equality • Use == and != with primitive types and window objects. • Use equals and ! … equals with all other types, such as String. String a = "xyz", b = "xyz"; if (a == b) ... // Always false if (a.equals(b)) ... // Use this instead User Defined Methods
Lexicographical Order "Ann" < "Bill" < "bill" // Good idea, bad Java String str1 = "Ann", str2 = "Bill"; str1.compareTo("Ann"); // Returns 0 str1.compareTo(str2) // Returns int < 0 str2.compareTo(str1) // Returns int > 0 if (str1.compareTo(str2) < 0) // str1 comes before str2 User Defined Methods
Palindrome, pp. 129–130 — Example of String processing public void buttonClicked (Button buttonObj) { String aString = stringField.getText(); aString = aString.toUpperCase(); if (isPalindrome (aString)) messageBox ("Yes, you entered a palindrome."); else messageBox ("No, you did not enter a palindrome."); } private boolean isPalindrome (String s) { int lastPosition = s.length() - 1; int middlePosition = lastPosition / 2; int forward = 0; int backward = lastPosition; while (forward <= middlePosition){ if (s.charAt (forward) != s.charAt (backward)) return false; forward++; backward--; } return true; } User Defined Methods
The Math Class(pp. 134–135) Contains several useful methods and constants: abs (number) Returns the absolute value of number. sqrt (number) Returns the square root of number. pow (x, y) Returns xy (all double). PI Constant — double value closest to . double side = . . .; double area = Math.sqrt (side); Use the class name Math before the method name. User Defined Methods
Rounding Math.round rounds to the nearest whole number, as a long. int i = 5; double d = 3.5; i = (int) Math.round (d); // Round operation System.out.println (i); // Displays 4 User Defined Methods
Random Numbers Problem: Generate a random integer between 1 and 6 for rolling dice. Math.random() // Returns a double, d, where 0 <= d < 1 Math.random() * 6 // Returns a double, d, where 0 <= d < 6 (int) (Math.random() * 6) // Returns an int, i, where 0 <= i <= 5 (int) (Math.random() * 6) + 1 // Returns an int, i, where 1 <= i <= 6 User Defined Methods
Floating point arithmetic Limited precision: float a = 1; float b = 100000000; // 100,000,000 float c, d, e; c = b + 5; // Yields 100,000,008 d = b + (a+a+a+a+a); // Yields 100,000,008 d = b + a+a+a+a+a; // Yields 100,000,000 Less problem with double than float. User Defined Methods
CS 303E Class 7 Part 3:Data Structures I:Objects and Classes "I have a cat named Trash. In the current political climate it would seem that if I were trying to sell him (at least to a Computer Scientist), I would not stress that he is gentle to humans and is self-sufficient, living mostly on field mice. Rather, I would argue that he is object-oriented."- Roger King User Defined Methods
What Is a Data Structure? A data structure is a construct that collects several data items together to be treated as a unit. Examples: • a string (a collection of characters) • a bank account (a name, ID, and balance) User Defined Methods
What is an Object? An object is a data structure that collects information describing some thing so that a program can manipulate it — a collection of data that can be treated as a unit. Examples: • a person (name, ID, address, phone number, etc.) • a bank account (name, ID, balance, etc.) • a window (labels, fields, text areas, buttons, etc.) User Defined Methods
An Object Contains its own Data Each object has a separate area in memory and has space for a value for each datum. • E.g., each object of type Person might have space for the following data: name: ID: address: phoneNumber: int Strings User Defined Methods
What Is a Class? A class is a specifcation of — • the data needed in objects of the class type, and • methods for manipulating those objects. That is, a class is a set of related methods and data. Examples of classes: • BreezyGUI classes Label, IntegerField, DoubleField, Button, etc. • String and Math classes User Defined Methods
Example — Class DoubleField Specifies — • all the data needed for an object (window component) of type DoubleField such as the component’s location and extent, its initial value, the characters it contains, etc., and • the methods for manipulating objects of type DoubleField, such as addDoubleField, getNumber, setNumber, setPrecision, etc. User Defined Methods
Classes and Objects A class defines the methods and a template for the data for a set of objects. An object is an instance of a class. E.g.: DoubleField Class: Objects: balance transaction interestRate User Defined Methods
Software Design with Classes Like methods, classes are a convenient tool for structuring code — collecting of data (objects) and related methods. Classes are often useful when we need data structures in a program. A large system consists of several interacting classes. User Defined Methods
Clients and Servers Code that uses a class is also called a client. Code that implements a class is also called a server. To the client, the class provides an abstract data type (ADT), which is a black box that hides information about the details of the class from the client and provides only an interface to objects of the class type. User Defined Methods
One File per Class Java requires a separate file for each class. Your code will have: • A file with code that defines a class. • A separate file for code that uses the class. It will create objects and manipulate them using methods in the class. User Defined Methods
Example — Class Student(pp. 159–180) Analysis (design): What attributes (data) and behavior (methods) are needed by users for each object in the class (each student)? Attributes (data) (p. 159): • student name (type String) and • three test scores (each of type int). User Defined Methods
Declaring class Student and data public class Student extends Object { // Instance variables // Each Student object will have a // name and three test scores: private String name; private int test1; private int test2; private int test3; User Defined Methods
Declaring the class and data public class ClassName extends Object { // Declare Fields or Instance variables: private typename1; private typename2, name3; // etc. User Defined Methods
name: test1: test2: test3: An Object of type Student Each object of type Student occupies a separate area in memory and has space for a value for each instance variable: a String 3 ints User Defined Methods
Instantiation —Creating an object of a class type Code like the following goes in a program to use a class to create objects of the class type: String sentence = "A sentence fragment."; Frame frm = new AccountManager(); george = new Student(); User Defined Methods
Class Student - Behavior What can be done with a Student object from the client’s perspective? • instantiation -- create an object of type Student • set the name and the test scores • get the name and the test scores • get the student’s average, highest score, lowest score, etc. User Defined Methods
Methods - Constructors Constructor methods create or instantiate objects: // Constructor method // Initialize a new student's name to the empty // string and his test scores to zero: public Student() { name = ""; test1 = 0; test2 = 0; test3 = 0; } User Defined Methods
Design the method’s interface. E.g.: setName (aString) -- returns void getName () -- returns String These are object methods -- the object is implied and supplied before the method name with a dot. Calls: Student stu; stu.setName ("Bill Jones"); String stuName = stu.getName(); User Defined Methods