Presentation is loading. Please wait.

Presentation is loading. Please wait.

6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM.

Similar presentations


Presentation on theme: "6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM."— Presentation transcript:

1 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

2 6.2 Modules, Classes and Procedures Framework Class Library –Provides a rich collection of “prepackaged” classes and methods for performing many operations Mathematical calculations String manipulations Character manipulations Input/output operations Error checking BZUPAGES.COM

3 6.2 Modules, Classes and Procedures Programmer-defined procedures –FCL cannot provide every conceivable feature that a programmer could want –Three types of procedures Sub procedures Function procedures Event procedures –A procedure is invoked by a procedure call BZUPAGES.COM

4 6.2 Modules, Classes and Procedures Division of code into procedures –Several motivations to divide code into procedures Divide-and-conquer approach makes program development more manageable Software reusability Avoids the repetition of code in a program BZUPAGES.COM

5 6.2 Modules, Classes and Procedures Earlier programs had only one procedure that called FCL methods Next program contains two customized procedures BZUPAGES.COM

6 Payment.vb Program Output 1 ' Fig. 6.2: Payment.vb 2 ' Sub procedure that prints payment information. 3 4 Module modPayment 5 6 Sub Main() 7 8 ' call Sub procedure PrintPay 4 times 9 PrintPay(40, 10.5) 10 PrintPay(38, 21.75) 11 PrintPay(20, 13) 12 PrintPay(50, 14) 13 14 Console.ReadLine() ' prevent window from closing 15 End Sub ' Main 16 17 ' print amount of money earned in command window 18 Sub PrintPay(ByVal hours As Double, ByVal wage As Decimal) 19 20 ' pay = hours * wage 21 Console.WriteLine("The payment is {0:C}", hours * wage) 22 End Sub ' PrintPay 23 24 End Module ' modPayment The payment is $420.00 The payment is $826.50 The payment is $260.00 The payment is $700.00 PrintPay executes when it is invoked by Main PrintPay receives the values of each argument and stores them in the parameters variables hours and wage Notice that PrintPay appears within modPayment. All procedures must be defined inside a module or a class BZUPAGES.COM

7 6.3 Sub Procedures Format of a procedure definition Sub procedure-name(parameter-list) declarations and statements End Sub Procedure header –The first line is known as the procedure header Procedure-name –Directly follows the Sub keyword –Can be any valid identifier –It is used to call this Sub procedure within the program Procedure body –The declarations and statements in the procedure definition form the procedure body BZUPAGES.COM

8 6.4 Function Procedures Similar to Sub procedures One important difference –Function procedures return a value to the caller BZUPAGES.COM

9 SquareInteger.vb 1 ' Fig. 6.3: SquareInteger.vb 2 ' Function procedure to square a number. 3 4 Module modSquareInteger 5 6 Sub Main() 7 Dim i As Integer ' counter 8 9 Console.WriteLine("Number" & vbTab & "Square" & vbCrLf) 10 11 ' square numbers from 1 to 10 12 For i = 1 To 10 13 Console.WriteLine(i & vbTab & Square(i)) 14 Next 15 16 End Sub ' Main 17 18 ' Function Square is executed 19 ' only when the function is explicitly called. 20 Function Square(ByVal y As Integer) As Integer 21 Return y ^ 2 22 End Function ' Square 23 24 End Module ' modSquareInteger The For structure displays the results of squaring the Integer s from 1-10 Square is invoked with the expression Square(i) The Return statement terminates execution of the procedure and returns the result of y ^ 2 BZUPAGES.COM

10 SquareInteger.vb Program Output Number Square 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81 10 100 BZUPAGES.COM

11 6.4 Function Procedures Format of a Function procedure definition Function procedure-name(parameter-list) As return-type declarations and statements End Function Return-type –Indicates the data type of the result returned from the Function to its caller Return expression –Can occur anywhere in a Function –It returns exactly one value –Control returns immediately to the point at which that procedure was invoked BZUPAGES.COM

12 6.5 Methods Definition of method –A method is any procedure that is contained within a class FCL methods Custom methods in programmer-defined classes BZUPAGES.COM

13 6.5 Methods Fig. 6.6IntelliSense feature of the Visual Studio.NET IDE. BZUPAGES.COM

14 6.5 Methods Fig. 6.7Math class methods. BZUPAGES.COM

15 6.5 Methods Fig. 6.7Math class methods. BZUPAGES.COM

16 6.6 Argument Promotion Coercion of arguments –The forcing of arguments to be appropriate data type so that they can be passed to a procedure Widening conversion –Occurs when a type is converted to another type without losing data Narrowing conversion –Occurs when there is potential for data loss during the conversion BZUPAGES.COM

17 6.6 Argument Promotion Fig. 6.8Widening conversions. BZUPAGES.COM

18 6.7 Option Strict and Data-Type Conversions Option Explicit –Set to On by default –Forces the programmer to declare explicitly all variables before they are used Option strict –Set to Off by default –When set to On, it forces the programmer to perform an explicit conversion for all narrowing conversions Class Convert –The methods in class Convert change data types explicitly BZUPAGES.COM

19 6.7 Option Strict and Data-Type Conversions Fig. 6.9Property Pages dialog with Option Strict set to On. BZUPAGES.COM

20 6.8 Value Types and Reference Types Variable of a value type –Contains the actual data –Used for a single piece of data Integer Double Variable of a reference type –Contains a location in memory where –Known as objects Literals –Values typed directly in program code –Corresponds to one of the primitive data types BZUPAGES.COM

21 6.8 Value Types and Reference Types Fig. 6.10Visual Basic primitive data types. BZUPAGES.COM

22 6.9 Passing Arguments: Pass-by-Value vs. Pass-by-Reference Pass-by-value –The program makes a copy of the argument’s value and passes that copy to the called procedure Pass-by-reference –The caller gives the called procedure the ability to access and modify the caller’s original data directly. BZUPAGES.COM

23 ByRefTest.vb 1 ' Fig. 6.12: ByRefTest.vb 2 ' Demonstrates passing by reference. 3 4 Module modByRefTest 5 6 ' squares three values ByVal and ByRef, displays results 7 Sub Main() 8 Dim number1 As Integer = 2 9 10 Console.WriteLine("Passing a value-type argument by value:") 11 Console.WriteLine("Before calling SquareByValue, " & _ 12 "number1 is {0}", number1) 13 SquareByValue(number1) ' passes number1 by value 14 Console.WriteLine("After returning from SquareByValue, " & _ 15 "number1 is {0}" & vbCrLf, number1) 16 17 Dim number2 As Integer = 2 18 19 Console.WriteLine("Passing a value-type argument" & _ 20 " by reference:") 21 Console.WriteLine("Before calling SquareByReference, " & _ 22 "number2 is {0}", number2) 23 SquareByReference(number2) ' passes number2 by reference 24 Console.WriteLine("After returning from " & _ 25 "SquareByReference, number2 is {0}" & vbCrLf, number2) 26 27 Dim number3 As Integer = 2 28 When number1 is passed, a copy of the value is passed to the procedure A reference to the value stored in number2 is being passed BZUPAGES.COM

24 ByRefTest.vb 29 Console.WriteLine("Passing a value-type argument" & _ 30 " by reference, but in parentheses:") 31 Console.WriteLine("Before calling SquareByReference " & _ 32 "using parentheses, number3 is {0}", number3) 33 SquareByReference((number3)) ' passes number3 by value 34 Console.WriteLine("After returning from " & _ 35 "SquareByReference, number3 is {0}", number3) 36 37 End Sub ' Main 38 39 ' squares number by value (note ByVal keyword) 40 Sub SquareByValue(ByVal number As Integer) 41 Console.WriteLine("After entering SquareByValue, " & _ 42 "number is {0}", number) 43 number *= number 44 Console.WriteLine("Before exiting SquareByValue, " & _ 45 "number is {0}", number) 46 End Sub ' SquareByValue 47 48 ' squares number by reference (note ByRef keyword) 49 Sub SquareByReference(ByRef number As Integer) 50 Console.WriteLine("After entering SquareByReference" & _ 51 ", number is {0}", number) 52 number *= number 53 Console.WriteLine("Before exiting SquareByReference" & _ 54 ", number is {0}", number) 55 End Sub ' SquareByReference 56 57 End Module ' modByRefTest ByVal indicates that value-type arguments should be passed by value ByRef gives direct access to the value stored in the original variable Enclosing arguments in parenthesis forces pass-by-value BZUPAGES.COM

25 Program Output Passing a value-type argument by value: Before calling SquareByValue, number1 is 2 After entering SquareByValue, number is 2 Before exiting SquareByValue, number is 4 After returning from SquareByValue, number1 is 2 Passing a value-type argument by reference: Before calling SquareByReference, number2 is 2 After entering SquareByReference, number is 2 Before exiting SquareByReference, number is 4 After returning from SquareByReference, number2 is 4 Passing a value-type argument by reference, but in parentheses: Before calling SquareByReference using parentheses, number3 is 2 After entering SquareByReference, number is 2 Before exiting SquareByReference, number is 4 After returning from SquareByReference, number3 is 2 BZUPAGES.COM

26 6.10 Duration of Identifiers Identifier’s duration –Period during which the identifier exists in memory Identifier’s scope –Portion of a program in which the variable’s identifier can be referenced Automatic duration –Identifiers that represent local variables in a procedure have automatic duration Instance variable –A variable declared in a class –They exist as long as their containing class is loaded in memory BZUPAGES.COM

27 6.11 Scope Rules Possible scopes –Class scope Begins at the class identifier after keyword Class and terminates at the End Class statement –Module scope Variable declared in a module have module scope, which is similar to class scope –Namespace scope Procedures defined in a module have namespace scope, which generally means that they may be accessed throughout a project –Block scope Identifiers declared inside a block, such as the body of a procedure definition or the body of an If/Then selection structure, have block scope BZUPAGES.COM

28 6.12 Random-Number Generation Random class –Produces values at random –Keyword New creates an object of a specified type and returns the object’s location in memory –Next Method Generates a positive Integer value between zero and the constant Int32.MaxValue (2,147,483,647) The current time of day becomes the seed value for the calculation When a single argument is passed to Next, the values returned will be in the range from 0 to the value of that argument –Scaling By passing two arguments, the programmer is allowed to specify the bottom range too BZUPAGES.COM

29 RandomInteger.vb 1 ' Fig. 6.14: RandomInteger.vb 2 ' Generating random integers. 3 4 Imports System.Windows.Forms 5 6 Module modRandomInteger 7 8 Sub Main() 9 Dim randomObject As Random = New Random() 10 Dim randomNumber As Integer 11 Dim output As String = "" 12 Dim i As Integer 13 14 For i = 1 To 20 15 randomNumber = randomObject.Next(1, 7) 16 output &= randomNumber & " " 17 18 If i Mod 5 = 0 Then ' is i a multiple of 5? 19 output &= vbCrLf 20 End If 21 22 Next 23 24 MessageBox.Show(output, "20 Random Numbers from 1 to 6", _ 25 MessageBoxButtons.OK, MessageBoxIcon.Information) 26 End Sub ' Main 27 28 End Module ' modRandomInteger Note that we must use 7 as the second argument to produce integers in the range from 1-6 Go to the next line every time five numbers are generated BZUPAGES.COM

30 6.14 Recursion Recursive procedure –It is a procedure that calls itself either directly or indirectly –It is called to solve a problem –The procedure knows how to solve only the simples case (base case) –For complex problems, the procedure divides the problem into a piece that it can perform and a piece that it does not know how to perform –Recursive call The procedure invokes a fresh copy of itself to work on the smaller problem BZUPAGES.COM

31 6.14 Recursion Fig. 6.18Recursive evaluation of 5!. 5! 5 * 4! 4 * 3! 3 * 2! 2 * 1! 1 5! 5 * 4! 4 * 3! 3 * 2! 2 * 1! 1 Final value = 120 5! = 5 * 24 = 120 is returned 4! = 4 * 6 = 24 is returned 3! = 3 * 2 = 6 is returned 2! = 2 * 1 = 2 is returned 1 returned (a) Procession of recursive calls(b) Values returned from each recursive call BZUPAGES.COM

32 Factorial.vb 31 32 ' recursively generates factorial of number 33 Function Factorial(ByVal number As Long) As Long 34 35 If number <= 1 Then ' base case 36 Return 1 37 Else 38 Return number * Factorial(number - 1) 39 End If 40 41 End Function ' Factorial 42 If number is greater than 1, a recursive call to Factorial is made with a slightly simpler problem Forgetting to return a value from a recursive procedure can result in logic errors BZUPAGES.COM

33 6.15 Example Using Recursion: Fibonacci Series The Fibonacci series –It begins with 0 and 1 and defines each subsequent Fibonacci number as the sum of the previous two Fibonacci numbers Golden ratio –The ratio of successive fibonacci numbers converges on a constant value near 1.618 Fibonacci method –Each invocation of the method that does not match one of the base cases results in two additional recursive calls to the method –Fibonacci value of 30 requires 2,692,537 BZUPAGES.COM

34 Fibonacci.vb 25 26 ' calculate Fibonacci value recusively 27 Function Fibonacci(ByVal number As Integer) As Long 28 29 ' check for base cases 30 If number = 1 OrElse number = 0 Then 31 Return number 32 Else 33 Return Fibonacci(number - 1) + Fibonacci(number - 2) 34 End If 35 End Function ' Fibonacci BZUPAGES.COM

35 6.15 Example Using Recursion: Fibonacci Series Fig. 6.21Recursive calls to method Fibonacci (abbreviated as F). Fibonacci( 3 ) Fibonacci( 2 )Fibonacci( 1 ) Fibonacci( 0 )Fibonacci( 1 )return 1 return return 1 return 0 return BZUPAGES.COM

36 6.16 Recursion vs. Iteration Iteration –Involves an explicit repetition structure –Uses a repetition structure For, While or Do / Loop Until Recursion –Achieves repetition through repeated procedure calls –Uses a selection structure If / Then, If / Then / Else or Select –Recursive calls take time and consume additional memory BZUPAGES.COM

37 6.17 Procedure Overloading and Optional Arguments Overloading –Allows multiple procedures with the same name, but differing numbers and types of arguments –The overloading of procedures that perform closely related tasks can make programs more readable and understandable Optional arguments –Defining an argument as optional allows the calling procedure to decide what arguments to pass BZUPAGES.COM

38 Overload.vb 1 ' Fig. 6.22: Overload.vb 2 ' Using overloaded methods. 3 4 Public Class FrmOverload 5 Inherits System.Windows.Forms.Form 6 7 Friend WithEvents outputLabel As Label 8 9 ' Visual Studio.NET generated code 10 11 Private Sub FrmOverload_Load(ByVal sender As System.Object, _ 12 ByVal e As System.EventArgs) Handles MyBase.Load 13 14 outputLabel.Text = "The square of Integer 7 is " & _ 15 square(7) & vbCrLf & "The square of Double " & _ 16 "7.5 is " & square(7.5) 17 End Sub ' FrmOverload_Load 18 19 Function Square(ByVal value As Integer) As Integer 20 Return Convert.ToInt32(value ^ 2) 21 End Function ' Square 22 23 Function Square(ByVal value As Double) As Double 24 Return value ^ 2 25 End Function ' Square 26 27 End Class ' FrmOverload The compiler uses a logical name to differ between the two Square methods The compiler might use the logical name “ Square of Integer ” “ Square of Double ” for the Square method that specifies a Double parameter BZUPAGES.COM

39 Overload2.vb 1 ' Fig. 6.23: Overload2.vb 2 ' Using overloaded procedures with identical signatures and 3 ' different return types. 4 5 Public Class FrmOverload2 6 Inherits System.Windows.Forms.Form 7 8 Friend WithEvents outputLabel As Label 9 10 ' Visual Studio.NET generated code 11 12 Private Sub FrmOverload2_Load(ByVal sender As System.Object, _ 13 ByVal e As System.EventArgs) Handles MyBase.Load 14 15 outputLabel.Text = "The square of Integer 7 is " & _ 16 square(7) & vbCrLf & "The square of Double " & _ 17 "7.5 is " & square(7.5) 18 End Sub ' FrmOverload2_Load 19 20 Function Square(ByVal value As Double) As Integer 21 Return Convert.ToInt32(value ^ 2) 22 End Function ' Square 23 24 Function Square(ByVal value As Double) As Double 25 Return value ^ 2 26 End Function ' Square 27 28 End Class ' FrmOverload2 Procedure calls cannot be distinguished by return type BZUPAGES.COM

40 Overload2.vb Program Output The creating of overloaded procedures with identical parameter lists and different return types produces a syntax error BZUPAGES.COM

41 6.17.2 Optional Arguments Optional –Optional arguments are specified in the procedure header with keyword Optional Syntax errors –Not specifying a default value for an Optional parameter is a syntax error –Declaring a non- Optional parameter to the right of an Optional parameter is a syntax error BZUPAGES.COM

42 Power.vb 1 ' Fig 6.24 Power.vb 2 ' Calculates the power of a value, defaults to square. 3 4 Public Class FrmPower 5 Inherits System.Windows.Forms.Form 6 7 Friend WithEvents txtBase As TextBox ' reads base 8 Friend WithEvents txtPower As TextBox ' reads power 9 10 Friend WithEvents inputGroup As GroupBox 11 12 Friend WithEvents lblBase As Label ' prompts for base 13 Friend WithEvents lblPower As Label ' prompts for power 14 Friend WithEvents lblOutput As Label ' displays output 15 16 Friend WithEvents cmdCalculate As Button ' generates output 17 18 ' Visual Studio.NET generated code 19 20 ' reads input and displays result 21 Private Sub cmdCalculate_Click(ByVal sender As System.Object, _ 22 ByVal e As System.EventArgs) Handles cmdCalculate.Click 23 24 Dim value As Integer 25 26 ' call version of Power depending on power input 27 If Not txtPower.Text = "" Then 28 value = Power(Convert.ToInt32(txtBase.Text), _ 29 Convert.ToInt32(txtPower.Text)) 30 Else 31 value = Power(Convert.ToInt32(txtBase.Text)) 32 End If 33 34 lblOutput.Text = Convert.ToString(value) 35 End Sub ' cmdCalculate_Click Determines whether txtPower contains a value BZUPAGES.COM

43 Power.vb 36 37 ' use iteration to calculate power 38 Function Power(ByVal base As Integer, _ 39 Optional ByVal exponent As Integer = 2) As Integer 40 41 Dim total As Integer = 1 42 Dim i As Integer 43 44 For i = 1 To exponent 45 total *= base 46 Next 47 48 Return total 49 End Function ' Power 50 51 End Class ' FrmPower When omitted, the Optional argument defaults to the value 2 BZUPAGES.COM


Download ppt "6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM."

Similar presentations


Ads by Google