Kĩ thuật lập trình - Methods: a deeper look
Enumerations
Programmer-declared types consisting of sets of constants
enum keyword
A type name (e.g. Status)
Enumeration constants (e.g. WON, LOST and CONTINUE)
cannot be compared against ints
88 trang |
Chia sẻ: huyhoang44 | Lượt xem: 717 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Kĩ thuật lập trình - Methods: a deeper look, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
6Methods: A Deeper Look1The greatest invention of the nineteenth century was the invention of the method of invention.Alfred North WhiteheadCall me Ishmael. Herman MelvilleWhen you call me that, smile! Owen Wister 2Answer me in one word. William ShakespeareO! call back yesterday, bid time return. William ShakespeareThere is a point at which methods devour themselves. Frantz Fanon3OBJECTIVESIn this chapter you will learn: How static methods and fields are associated with an entire class rather than specific instances of the class.To use common Math methods available in the Java API.To understand the mechanisms for passing information between methods.How the method call/return mechanism is supported by the method call stack and activation records.How packages group related classes.How to use random-number generation to implement game-playing applications.How the visibility of declarations is limited to specific regions of programs.What method overloading is and how to create overloaded methods.46.1 Introduction6.2 Program Modules in Java6.3 static Methods, static Fields and Class Math6.4 Declaring Methods with Multiple Parameters6.5 Notes on Declaring and Using Methods6.6 Method Call Stack and Activation Records6.7 Argument Promotion and Casting6.8 Java API Packages6.9 Case Study: Random-Number Generation 6.9.1 Generalized Scaling and Shifting of Random Numbers 6.9.2 Random-Number Repeatability for Testing and Debugging56.10 Case Study: A Game of Chance (Introducing Enumerations)6.11 Scope of Declarations6.12 Method Overloading6.13 (Optional) GUI and Graphics Case Study: Colors and Filled Shapes6.14 (Optional) Software Engineering Case Study: Identifying Class Operations6.15 Wrap-Up66.1 Introduction Divide and conquer techniqueConstruct a large program from smaller pieces (or modules)Can be accomplished using methodsstatic methods can be called without the need for an object of the classRandom number generationConstants76.2 Program Modules in Java Java Application Programming Interface (API)Also known as the Java Class LibraryContains predefined methods and classesRelated classes are organized into packagesIncludes methods for mathematics, string/character manipulations, input/output, databases, networking, file processing, error checking and more8Good Programming Practice 6.1Familiarize yourself with the rich collection of classes and methods provided by the Java API (java.sun.com/javase/6/docs/api/). In Section 6.8, we present an overview of several common packages. In Appendix G, we explain how to navigate the Java API documentation.9Software Engineering Observation 6.1Don’t try to reinvent the wheel. When possible, reuse Java API classes and methods. This reduces program development time and avoids introducing programming errors.106.2 Program Modules in Java (Cont.)MethodsCalled functions or procedures in some other languagesModularize programs by separating its tasks into self-contained unitsEnable a divide-and-conquer approachAre reusable in later programsPrevent repeating code11Software Engineering Observation 6.2To promote software reusability, every method should be limited to performing a single, well-defined task, and the name of the method should express that task effectively. Such methods make programs easier to write, debug, maintain and modify.12Error-Prevention Tip 6.1A small method that performs one task is easier to test and debug than a larger method that performs many tasks.13Software Engineering Observation 6.3If you cannot choose a concise name that expresses a method’s task, your method might be attempting to perform too many diverse tasks. It is usually best to break such a method into several smaller method declarations.146.3 static Methods, static Fields and Class Math static method (or class method)Applies to the class as a whole instead of a specific object of the classCall a static method by using the method call:ClassName.methodName( arguments )All methods of the Math class are staticexample: Math.sqrt( 900.0 )15Fig. 6.1 | Hierarchical boss-method/worker-method relationship. 16Software Engineering Observation 6.4Class Math is part of the java.lang package, which is implicitly imported by the compiler, so it is not necessary to import class Math to use its methods.176.3 static Methods, static Fields and Class Math (Cont.)ConstantsKeyword finalCannot be changed after initialization static fields (or class variables)Are fields where one copy of the variable is shared among all objects of the classMath.PI and Math.E are final static fields of the Math class18Fig. 6.2 | Math class methods. 196.3 static Methods, static Fields and Class Math (Cont.)Method mainmain is declared static so it can be invoked without creating an object of the class containing mainAny class can contain a main methodThe JVM invokes the main method belonging to the class specified by the first command-line argument to the java command206.4 Declaring Methods with Multiple Parameters Multiple parameters can be declared by specifying a comma-separated list.Arguments passed in a method call must be consistent with the number, types and order of the parametersSometimes called formal parameters21OutlineMaximumFinder.java(1 of 2)Call method maximumDisplay maximum value22OutlineMaximumFinder.java(2 of 2)Declare the maximum methodCompare y and maximumValueCompare z and maximumValueReturn the maximum value23OutlineMaximumFinderTest.javaCreate a MaximumFinder objectCall the determineMaximum method24Common Programming Error 6.1Declaring method parameters of the same type as float x, y instead of float x, float y is a syntax error-a type is required for each parameter in the parameter list.25Software Engineering Observation 6.5A method that has many parameters may be performing too many tasks. Consider dividing the method into smaller methods that perform the separate tasks. As a guideline, try to fit the method header on one line if possible.266.4 Declaring Methods with Multiple Parameters (Cont.)Reusing method Math.maxThe expression Math.max( x, Math.max( y, z ) ) determines the maximum of y and z, and then determines the maximum of x and that valueString concatenationUsing the + operator with two Strings concatenates them into a new StringUsing the + operator with a String and a value of another data type concatenates the String with a String representation of the other valueWhen the other value is an object, its toString method is called to generate its String representation27Common Programming Error 6.2It is a syntax error to break a String literal across multiple lines in a program. If a String does not fit on one line, split the String into several smaller Strings and use concatenation to form the desired String.28Common Programming Error 6.3Confusing the + operator used for string concatenation with the + operator used for addition can lead to strange results. Java evaluates the operands of an operator from left to right. For example, if integer variable y has the value 5, the expression "y + 2 = " + y + 2 results in the string "y + 2 = 52", not "y + 2 = 7", because first the value of y (5) is concatenated with the string "y + 2 = ", then the value 2 is concatenated with the new larger string "y + 2 = 5". The expression "y + 2 = " + (y + 2) produces the desired result "y + 2 = 7".296.5 Notes on Declaring and Using Methods Three ways to call a method:Use a method name by itself to call another method of the same classUse a variable containing a reference to an object, followed by a dot (.) and the method name to call a method of the referenced objectUse the class name and a dot (.) to call a static method of a classstatic methods cannot call non-static methods of the same class directly306.5 Notes on Declaring and Using Methods (Cont.)Three ways to return control to the calling statement:If method does not return a result:Program flow reaches the method-ending right brace orProgram executes the statement return;If method does return a result:Program executes the statement return expression;expression is first evaluated and then its value is returned to the caller31Common Programming Error 6.4Declaring a method outside the body of a class declaration or inside the body of another method is a syntax error. 32Common Programming Error 6.5Omitting the return-value-type in a method declaration is a syntax error.33Common Programming Error 6.6Placing a semicolon after the right parenthesis enclosing the parameter list of a method declaration is a syntax error.34Common Programming Error 6.7Redeclaring a method parameter as a local variable in the method’s body is a compilation error.35Common Programming Error 6.8Forgetting to return a value from a method that should return a value is a compilation error. If a return value type other than void is specified, the method must contain a return statement that returns a value consistent with the method’s return-value-type. Returning a value from a method whose return type has been declared void is a compilation error.366.6 Method Call Stack and Activation Records StacksLast-in, first-out (LIFO) data structuresItems are pushed (inserted) onto the topItems are popped (removed) from the topProgram execution stackAlso known as the method call stackReturn addresses of calling methods are pushed onto this stack when they call other methods and popped off when control returns to them376.6 Method Call Stack and Activation Records (Cont.)A method’s local variables are stored in a portion of this stack known as the method’s activation record or stack frameWhen the last variable referencing a certain object is popped off this stack, that object is no longer accessible by the programWill eventually be deleted from memory during “garbage collection”Stack overflow occurs when the stack cannot allocate enough space for a method’s activation record386.7 Argument Promotion and Casting Argument promotionJava will promote a method call argument to match its corresponding method parameter according to the promotion rulesValues in an expression are promoted to the “highest” type in the expression (a temporary copy of the value is made)Converting values to lower types results in a compilation error, unless the programmer explicitly forces the conversion to occurPlace the desired data type in parentheses before the valueexample: ( int ) 4.539Fig. 6.5 | Promotions allowed for primitive types. 40Common Programming Error 6.9Converting a primitive-type value to another primitive type may change the value if the new type is not a valid promotion. For example, converting a floating-point value to an integral value may introduce truncation errors (loss of the fractional part) into the result.416.8 Java API Packages Including the declarationimport java.util.Scanner;allows the programmer to use Scanner instead of java.util.ScannerJava API documentationjava.sun.com/javase/6/docs/api/Overview of packages in Java SE 6java.sun.com/javase/6/docs/api/overview-summary.html42Fig. 6.6 | Java API packages (a subset). (Part 1 of 2) 43Fig. 6.6 | Java API packages (a subset). (Part 2 of 2)44Good Programming Practice 6.2The online Java API documentation is easy to search and provides many details about each class. As you learn a class in this book, you should get in the habit of looking at the class in the online documentation for additional information.456.9 Case Study: Random-Number Generation Random-number generationstatic method random from class MathReturns doubles in the range 0.0 <= x < 1.0class Random from package java.utilCan produce pseudorandom boolean, byte, float, double, int, long and Gaussian values Is seeded with the current time of day to generate different sequences of numbers each time the program executes46OutlineRandomIntegers.java(1 of 2)Import class Random from the java.util packageCreate a Random objectGenerate a random die roll47OutlineRandomIntegers.java(2 of 2)Two different sets of results containing integers in the range 1-648OutlineRollDie.java(1 of 2)Import class Random from the java.util packageDeclare frequency countersCreate a Random object49OutlineRollDie.java(2 of 2)Iterate 6000 timesGenerate a random die rollswitch based on the die roll50OutlineRollDie.java(3 of 3)Display die roll frequencies516.9.1 Generalized Scaling and Shifting of Random Numbers To generate a random number in certain sequence or rangeUse the expressionshiftingValue + differenceBetweenValues * randomNumbers.nextInt( scalingFactor )where:shiftingValue is the first number in the desired range of valuesdifferenceBetweenValues represents the difference between consecutive numbers in the sequencescalingFactor specifies how many numbers are in the range526.9.2 Random-Number Repeatability for Testing and Debugging To get a Random object to generate the same sequence of random numbers every time the program executes, seed it with a certain valueWhen creating the Random object:Random randomNumbers = new Random( seedValue );Use the setSeed method:randomNumbers.setSeed( seedValue );seedValue should be an argument of type long53Error-Prevention Tip 6.2While a program is under development, create the Random object with a specific seed value to produce a repeatable sequence of random numbers each time the program executes. If a logic error occurs, fix the error and test the program again with the same seed value-this allows you to reconstruct the same sequence of random numbers that caused the error. Once the logic errors have been removed, create the Random object without using a seed value, causing the Random object to generate a new sequence of random numbers each time the program executes.54OutlineCraps.java(1 of 4)Import class Random from the java.util packageCreate a Random objectDeclare an enumerationDeclare constants55OutlineCraps.java(2 of 4)Call rollDice methodPlayer wins with a roll of 7 or 11Player loses with a roll of 2, 3 or 12Set and display the point56OutlineCraps.java(3 of 4)Call rollDice methodPlayer wins by making the pointPlayer loses by rolling 7Display outcome57OutlineCraps.java(4 of 4)Generate two dice rollsDeclare rollDice methodDisplay dice rolls and their sum58OutlineCrapsTest.java(1 of 2)596.10 Case Study: A Game of Chance (Introducing Enumerations) EnumerationsProgrammer-declared types consisting of sets of constantsenum keywordA type name (e.g. Status)Enumeration constants (e.g. WON, LOST and CONTINUE)cannot be compared against ints60Good Programming Practice 6.3Use only uppercase letters in the names of constants. This makes the constants stand out in a program and reminds the programmer that enumeration constants are not variables.61Good Programming Practice 6.4Using enumeration constants (like Status.WON, Status.LOST and Status.CONTINUE) rather than literal integer values (such as 0, 1 and 2) can make programs easier to read and maintain.626.11 Scope of Declarations Basic scope rulesScope of a parameter declaration is the body of the method in which appearsScope of a local-variable declaration is from the point of declaration to the end of that blockScope of a local-variable declaration in the initialization section of a for header is the rest of the for header and the body of the for statementScope of a method or field of a class is the entire body of the class636.11 Scope of Declarations (Cont.)ShadowingA field is shadowed (or hidden) if a local variable or parameter has the same name as the fieldThis lasts until the local variable or parameter goes out of scope64Common Programming Error 6.10A compilation error occurs when a local variable is declared more than once in a method.65Error-Prevention Tip 6.3Use different names for fields and local variables to help prevent subtle logic errors that occur when a method is called and a local variable of the method shadows a field of the same name in the class.66OutlineScope.java(1 of 2)Shadows field xDisplay value of local variable x67OutlineScope.java(2 of 2)Shadows field xDisplay value of local variable xDisplay value of field x68OutlineScopeTest.java696.12 Method Overloading Method overloadingMultiple methods with the same name, but different types, number or order of parameters in their parameter listsCompiler decides which method is being called by matching the method call’s argument list to one of the overloaded methods’ parameter listsA method’s name and number, type and order of its parameters form its signatureDifferences in return type are irrelevant in method overloadingOverloaded methods can have different return typesMethods with different return types but the same signature cause a compilation error70OutlineMethodOverload.javaCorrectly calls the “square of int” methodCorrectly calls the “square of double” methodDeclaring the “square of int” methodDeclaring the “square of double” method71OutlineMethodOverloadTest.java72OutlineMethodOverloadError.javaSame method signatureCompilation error73Common Programming Error 6.11 Declaring overloaded methods with identical parameter lists is a compilation error regardless of whether the return types are different.746.13 (Optional) GUI and Graphics Case Study: Colors and Filled Shapes Color class of package java.awtRepresented as RGB (red, green and blue) valuesEach component has a value from 0 to 25513 predefined static Color objects:Color.Black, Coor.BLUE, Color.CYAN, Color.DARK_GRAY, Color.GRAY, Color.GREEN, Color.LIGHT_GRAY, Color.MAGENTA, Color.ORANGE, Color.PINK, Color.RED, Color.WHITE and Color.YELLOW756.13 (Optional) GUI and Graphics Case Study: Colors and Filled Shapes (Cont.)fillRect and fillOval methods of Graphics classSimilar to drawRect and drawOval but draw rectangles and ovals filled with colorFirst two parameters specify upper-left corner coordinates and second two parameters specify width and heightsetColor method of Graphics classSet the current drawing color (for filling rectangles and ovals drawn by fillRect and fillOval)76OutlineDrawSmiley.javaImport Color classSet fill colorsDraw filled shapes77OutlineDrawSmileyTest.java78Fig. 6.18 | A bull’s-eye with two alternating, random colors. 79Fig. 6.19 | Randomly generated shapes. 806.14 (Optional) Identifying Class Operations Identifying operationsExamine key verbs and verb phrases in the requirements documentModeling operations in UMLEach operation is given an operation name, a parameter list and a return type:operationName( parameter1, parameter2, , parameterN ) : return typeEach parameter has a parameter name and a parameter typeparameterName : parameterType816.14 (Optional) Identifying Class Operations (Cont.)Some operations may not have return types yetRemaining return types will be added as design and implementation proceedIdentifying and modeling operation parametersExamine what data the operation requires to perform its assigned taskAdditional parameters may be added later on82Fig. 6.20 | Verbs and verb phrases for each class in the ATM system. 83Fig. 6.21 | Classes in the ATM system with attributes and operations. 84Fig. 6.22 | Class BankDatabase with operation parameters.85Fig. 6.23 | Class Account with operation parameters. 86Fig. 6.24 | Class Screen with operation parameters.87Fig. 6.25 | Class CashDispenser with operation parameters.88
Các file đính kèm theo tài liệu này:
- javahtp7e_06_3621_71.ppt