Survey
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
Chapter 4
Methods and Behaviors
Microsoft Visual C# .NET: From Problem Analysis to Program Design
Microsoft Visual C# .NET: From Problem Analysis to Program Design
1
Chapter Objectives
• Become familiar with the components of a method
• Call class methods with and without parameters
• Use predefined methods in the Console and Math
classes
• Write your own value and non-value returning
class methods (with and without parameters)
• Learn about the different methods and properties
used for object-oriented development
Microsoft Visual C# .NET: From Problem Analysis to Program Design
2
Chapter Objectives (continued)
• Write your own instance methods to include
constructors, mutators, and accessors
• Call instance methods including constructors,
mutators, and accessors
• Distinguish between value, ref, and out parameter
types
• Work through a programming example that
illustrates the chapter’s concepts
Microsoft Visual C# .NET: From Problem Analysis to Program Design
3
Anatomy of a Method
• Methods defined inside classes
• Group program statements
– Based on functionality
– Called one or more times
• All programs consist of at least one method
– Main( )
• User-defined method
Microsoft Visual C# .NET: From Problem Analysis to Program Design
4
/* SquareExample.cs
using System;
namespace Square
{
public class SquareExample
{
public static void Main( )
{
int aValue = 768;
int result;
Author: Doyle
*/
Required method
result = aValue * aValue;
Console.WriteLine(“{0} squared is {1}”,
aValue, result);
Console.Read( );
}
}
}Microsoft Visual C# .NET: From Problem Analysis to Program Design
5
Anatomy of a Method (continued)
Microsoft Visual C# .NET: From Problem Analysis to Program Design
6
Modifiers
• Appear in method headings
• Appear in the declaration heading for classes and
other class members
• Indicates how it can be accessed
• Types of modifiers
– static
– Access
Microsoft Visual C# .NET: From Problem Analysis to Program Design
7
Static Modifier
• Indicates member belongs to the type itself rather
than to a specific object of a class
• Main( ) must include static in heading
• Members of the Math class are static
public static double Pow(double, double)
• Methods that use the static modifier are called
class methods
– Instance methods require an object
Microsoft Visual C# .NET: From Problem Analysis to Program Design
8
Access Modifiers
• public
• protected
• internal
• protected internal
• private
Microsoft Visual C# .NET: From Problem Analysis to Program Design
9
Level of Accessibility
Microsoft Visual C# .NET: From Problem Analysis to Program Design
10
Return Type
• Indicates what type of value is returned when the
method is completed
• Always listed immediately before method name
• void
– No value being returned
• return statement
– Required for all non-void methods
– Compatible value
Microsoft Visual C# .NET: From Problem Analysis to Program Design
11
Return
type
Return Type (continued)
public static double
CalculateMilesPerGallon
(int milesTraveled,
double gallonsUsed)
{
return milesTraveled /
gallonsUsed;
Compatible value
(double) returned
}
Microsoft Visual C# .NET: From Problem Analysis to Program Design
12
Method Names
• Follow the rules for creating an identifier
– Pascal case style
– Action verb or prepositional phrase
• Examples
– CalculateSalesTax( )
– AssignSectionNumber( )
– DisplayResults( )
– InputAge( )
– ConvertInputValue( )
Microsoft Visual C# .NET: From Problem Analysis to Program Design
13
Parameters
• Supply unique data to method
• Appear inside parentheses
– Include data type and an identifier
• In method body, reference values using identifier name
– Parameter refers to items appearing in the heading
– Argument for items appearing in the call
• Formal parameters
• Actual arguments
Microsoft Visual C# .NET: From Problem Analysis to Program Design
14
Parameters (continued)
public static double
CalculateMilesPerGallon
(int milesTraveled, double
gallonsUsed)
Two formal
{
parameters
return milesTraveled / gallonsUsed;
}
• Call to method inside Main( ) method
Console.WriteLine(“Miles per gallon = {0:N2}”,
Actual12.2));
CalculateMilesPerGallon(289,
Microsoft Visual C# .NET: From Problem Analysis to Program Design
arguments 15
Parameters (continued)
• Like return types, parameters are optional
– Keyword void not required – when there are no
parameters
public void DisplayMessage( )
{
Console.Write(”This is “);
Console.Write(”an example of a method ”);
Console.WriteLine(“body. ”);
return; // no value is returned
}
Microsoft Visual C# .NET: From Problem Analysis to Program Design
16
Method Body
• Enclosed in curly braces
• Include statements ending in semicolons
– Declare variables
– Do arithmetic
– Call other methods
• Value returning methods must include return
statement
Microsoft Visual C# .NET: From Problem Analysis to Program Design
17
Calling Class Methods
• Invoke a method
• Call to method that returns no value
[qualifier].MethodName(argumentList);
• Qualifier
– Square brackets indicates optional
– class or object name
• Call to method does not includes data type
• Use Intellisense
Microsoft Visual C# .NET: From Problem Analysis to Program Design
18
Predefined Methods
• Extensive class library
• Console class
– Overloaded methods
– Write( )
– WriteLine( )
– Read( )
• No overloaded
• Returns an integer
Microsoft Visual C# .NET: From Problem Analysis to Program Design
19
Intellisense
After typing the dot, list
of members pops up
Method signature(s)
and description
3-D fuchsia colored box—methods
aqua colored box—fields (not shown)
Microsoft Visual C# .NET: From Problem Analysis to Program Design
20
Intellisense Display
string argument
expected
string
parameter
Figure 4-3
18 different Write( )
methods
Microsoft Visual C# .NET: From Problem Analysis to Program Design
21
Intellisense Display (continued)
Microsoft Visual C# .NET: From Problem Analysis to Program Design
22
Call Read( ) Methods
int aNumber;
Console.Write(“Enter a single character: ”);
aNumber = Console.Read( );
Console.WriteLine(“The value of the character entered: ”
+ aNumber);
Enter a single character: a
The value of the character entered: 97
Microsoft Visual C# .NET: From Problem Analysis to Program Design
23
Call Read( ) Methods (continued)
int aNumber;
Console.WriteLine(“The value of the character entered: “
+ (char) Console.Read( ));
Enter a single character: a
The value of the character entered: a
Microsoft Visual C# .NET: From Problem Analysis to Program Design
24
Call ReadLine( ) Methods
• More versatile that the Read( )
• Returns all characters up to the enter key
• Not overloaded
• Always returns a string
• String value must be parsed
Microsoft Visual C# .NET: From Problem Analysis to Program Design
25
Call Parse( )
• Predefined static method
• All numeric types have a Parse( ) method
– double.Parse(“string number”)
– int.Parse(“string number”)
– char.Parse(“string number”)
– Bool.Parse(“string number”)
• Expects string argument
– Argument must be a number—string format
• Returns the number (or char or bool)
Microsoft Visual C# .NET: From Problem Analysis to Program Design
26
/* AgeIncrementer.cs
Author: Doyle */
using System;
namespace AgeExample
{
public class AgeIncrementer
{
public static void Main( )
{
int age;
string aValue;
Console.Write(“Enter your age: “);
aValue = Console.ReadLine( );
age = int.Parse(aValue);
Console.WriteLine(“Your age next year”
+ “ will be {0}”, ++age);
Console.Read( );
} } }
Microsoft Visual C# .NET: From Problem Analysis to Program Design
27
/* SquareInputValue.cs
Author: Doyle */
using System;
namespace Square
{
class SquareInputValue
{
static void Main( )
{
string inputStringValue;
double aValue, result;
Console.Write(“Enter a value to be squared: ”);
inputStringValue = Console.ReadLine( );
aValue = double.Parse(inputStringValue);
result = Math.Pow(aValue, 2);
Console.WriteLine(“{0} squared is {1}”, aValue, result);
} } }
Microsoft Visual C# .NET: From Problem Analysis to Program Design
28
Call Parse( ) (continued)
string sValue = “True”;
Console.WriteLine (bool.Parse(sValue));
string strValue = “q”;
Console.WriteLine(char.Parse(strValue));
// displays True
// displays q
Microsoft Visual C# .NET: From Problem Analysis to Program Design
29
Call Parse( ) with Incompatible
Value
• Console.WriteLine(char.Parse(sValue));
when sValue referenced “True”
Microsoft Visual C# .NET: From Problem Analysis to Program Design
30
Convert Class
• More than one way to convert from one base type
to another
–
–
–
–
–
–
System namespace—Convert class—static methods
Convert.ToDouble( )
Convert.ToDecimal( )
Convert.ToInt32( )
Convert.ToBoolean( )
Convert.ToChar( )
int newValue = Convert.ToInt32(stringValue);
Microsoft Visual C# .NET: From Problem Analysis to Program Design
31
Math Class
Microsoft Visual C# .NET: From Problem Analysis to Program Design
32
Math Class (continued)
Microsoft Visual C# .NET: From Problem Analysis to Program Design
33
Math Class (continued)
Microsoft Visual C# .NET: From Problem Analysis to Program Design
34
Math( ) Class
double aValue = 78.926;
Each call
double result1,
returns a value
result2;
result1 = Math.Floor(aValue); // result1 = 78
result2 = Math.Sqrt(aValue);
// result2 = 8.88403061678651
Console.Write(“aValue rounded to 2 decimal places”
+ “ is {0}”, Math.Round(aValue, 2));
aValue rounded to 2 decimal places is 78.93
Microsoft Visual C# .NET: From Problem Analysis to Program Design
35
Method Calls That Return Values
Line 1 int aValue = 200;
In an assignment
Line 2 int bValue = 896;
statement
Line 3 int result;
Line 4 result = Math.Max(aValue, bValue); // result = 896
Part of arithmetic
Line 5 result += bValue *
expression
Line 6
Math.Max(aValue, bValue) – aValue;
// result = 896 + (896 * 896 - 200)
(result = 803512)
Line 7 Console.WriteLine(“Largest value between {0} ”
Line 8
+ “and {1} is {2}”, aValue, bValue,
Line 9
Math.Max(aValue, bValue));
Argument to another
method call
Microsoft Visual C# .NET: From Problem Analysis to Program Design
36
Writing Your Own Class
Methods
[modifier(s)] returnType
parameterList )
MethodName (
{
// body of method - consisting of executable
statements
}
• void Methods
– Simplest to write
– No return statement
Microsoft Visual C# .NET: From Problem Analysis to Program Design
37
class
method
Writing Your Own Class
Methods – void Types
Call to the method:
public static void DisplayInstructions( )
DisplayInstructions( );
{
Console.WriteLine(“This program will determine how ”
+ “much carpet to purchase.”);
Console.WriteLine( );
Console.WriteLine(“You will be asked to enter the ”
+ “ size of the room and ”);
Console.WriteLine(“the price of the carpet, ”
+ ”in price per square yards.”);
Console.WriteLine( );
}
Microsoft Visual C# .NET: From Problem Analysis to Program Design
38
Writing Your Own Class
Methods – void Types (continued)
public static void DisplayResults(double squareYards,
double pricePerSquareYard)
To invoke method,
{
DisplayResults(16.5,
Console.Write(“Total Square Yards needed: ”);
18.95);
Console.WriteLine(“{0:N2}”, squareYards);
Console.Write(“Total Cost at {0:C} “, pricePerSquareYard);
Console.WriteLine(“ per Square Yard: {0:C}”,
(squareYards * pricePerSquareYard));
}
• static method called from within the class where it
resides
Microsoft Visual C# .NET: From Problem Analysis to Program Design
39
Value Returning Method
• Has a return type other than void
• Must have a return statement
– Compatible value
• Zero, one, or more data items may be passed as
arguments
• Calls can be placed:
–
–
–
–
In assignment statements
Output statements
Arithmetic expressions
Or anywhere a value can be used
Microsoft Visual C# .NET: From Problem Analysis to Program Design
40
Value Returning Method (continued)
public static double GetLength( )
{
Return
string inputValue;
type→doubl
int feet, inches;
e
Console.Write(“Enter the Length in feet: ”);
inputValue = Console.ReadLine( );
feet = int.Parse(inputValue);
Console.Write(“Enter the Length in inches: “);
inputValue = Console.ReadLine( );
inches = int.Parse(inputValue);
double
return (feet + (double) inches / 12);
returned
}
Microsoft Visual C# .NET: From Problem Analysis to Program Design
41
CarpetExampleWithClassMethods
/* CarpetExampleWithClassMethods.cs
*/
using System;
namespace CarpetExampleWithClassMethods
{
public class CarpetWithClassMethods
{
public static void Main( )
{
double roomWidth, roomLength, pricePerSqYard,
noOfSquareYards;
DisplayInstructions( ); // Call getDimension( ) to get length
roomLength = GetDimension(“Length”);
Microsoft Visual C# .NET: From Problem Analysis to Program Design
42
roomWidth = GetDimension(“Width”);
pricePerSqYard = GetPrice( );
noOfSquareYards =
DetermineSquareYards(roomWidth, roomLength);
DisplayResults(noOfSquareYards, pricePerSqYard);
}
public static void DisplayInstructions( )
{
Console.WriteLine(“This program will determine how much "
+ “carpet to purchase.”);
Console.WriteLine( );
Console.WriteLine("You will be asked to enter the size of ”
+ “the room ");
Console.WriteLine(“and the price of the carpet, in price per”
+ “ square yds.”);
Console.WriteLine( );
}
Microsoft Visual C# .NET: From Problem Analysis to Program Design
43
public static double GetDimension(string side )
{
string inputValue; // local variables
int feet,
// needed only by this
inches;
// method
Console.Write("Enter the {0} in feet: ", side);
inputValue = Console.ReadLine( );
feet = int.Parse(inputValue);
Console.Write("Enter the {0} in inches: ", side);
inputValue = Console.ReadLine( );
inches = int.Parse(inputValue);
// Note: cast required to avoid int division
return (feet + (double) inches / 12);
}
Microsoft Visual C# .NET: From Problem Analysis to Program Design
44
public static double GetPrice( )
{
string inputValue;
// local variables
double price;
Console.Write(“Enter the price per Square Yard: ");
inputValue = Console.ReadLine( );
price = double.Parse(inputValue);
return price;
}
public static double DetermineSquareYards
(double width, double length)
{
const int SQ_FT_PER_SQ_YARD = 9;
double noOfSquareYards;
noOfSquareYards = length * width / SQ_FT_PER_SQ_YARD;
return noOfSquareYards;
}
Microsoft Visual C# .NET: From Problem Analysis to Program Design
45
public static double DeterminePrice (double squareYards,
double pricePerSquareYard)
{
return (pricePerSquareYard * squareYards);
}
public static void DisplayResults (double squareYards,
double pricePerSquareYard)
{
Console.WriteLine( );
Console.Write(“Square Yards needed: ”);
Console.WriteLine("{0:N2}", squareYards);
Console.Write("Total Cost at {0:C} ", pricePerSquareYard);
Console.WriteLine(“ per Square Yard: {0:C}”,
DeterminePrice(squareYards,
pricePerSquareYard));
} } }
Microsoft Visual C# .NET: From Problem Analysis to Program Design
46
CarpetExampleWithClassMethods
(continued)
Microsoft Visual C# .NET: From Problem Analysis to Program Design
47
The Object Concept
• Class
• Entity
• Abstraction
– Attributes (data)
– Behaviors (processes on the data)
• Private member data (fields)
– Public method members
Microsoft Visual C# .NET: From Problem Analysis to Program Design
48
Writing Your Own Instance
Methods
• Do not use static keyword
– Static —class method
• Constructor
–
–
–
–
–
Do not return a value
void is not included
Same identifier as the class name
Overloaded methods
Default constructor
• No arguments
Microsoft Visual C# .NET: From Problem Analysis to Program Design
49
Writing Your Own Instance
Methods (continued)
• Accessor (getter)
– Returns just the current value
– Standard naming convention → add ”get” in front of
instance variable name
– Accessor for noOfSquareYardsis GetNoOfSquareYards( )
• Mutators (setters)
– Normally includes one parameter
– Method body → single assignment statement
– Standard naming convention add ”Set” to the front of
the instance variable identifier
Microsoft Visual C# .NET: From Problem Analysis to Program Design
50
Accessor and Mutator Examples
public double GetNoOfSquareYards( )
Accessor
{
return noOfSquareYards;
}
public void SetNoOfSquareYards(double squareYards)
{
noOfSquareYards = squareYards;
}
Microsoft Visual C# .NET: From Problem Analysis to Program Design
Mutator
51
Properties
• Looks like a data field
– More closely aligned to methods
• Standard naming convention in C# for properties
– Use the same name as the instance variable or field, but
start with uppercase character
Microsoft Visual C# .NET: From Problem Analysis to Program Design
52
Calling Instance Methods
• Calling the Constructor
ClassName objectName = new ClassName(argumentList);
or
ClassName objectName;
objectName = new ClassName(argumentList);
• Keyword new used as operator to call constructor
methods
CarpetCalculator plush = new CarpetCalculator ( );
CarpetCalculator pile =
new CarpetCalculator (37.90, 17.95);
CarpetCalculator berber = new CarpetCalculator (17.95);
Microsoft Visual C# .NET: From Problem Analysis to Program Design
53
Calling Accessor and Mutator
Methods
• Method name is preceded by the object name
berber.SetNoOfSquareYards(27.83);
Console.WriteLine(“{0:N2}”, berber.GetNoOfSquareYards( ));
• Using Properties
PropertyName = value;
And
Console.Write(“Total Cost at {0:C} ”, berber.Price);
Microsoft Visual C# .NET: From Problem Analysis to Program Design
54
Types of Parameters
• Call by value
– copy of the original value is made
• Other types of parameters
– ref
– out
– params
• ref and out cause a method to refer to the same
variable that was passed into the method
Microsoft Visual C# .NET: From Problem Analysis to Program Design
55
Types of Parameters (continued)
Microsoft Visual C# .NET: From Problem Analysis to Program Design
56
RealEstateInvestment Example
Microsoft Visual C# .NET: From Problem Analysis to Program Design
57
Data for the
RealEstateInvestment Example
Microsoft Visual C# .NET: From Problem Analysis to Program Design
58
RealEstateInvestment Example
(continued)
Microsoft Visual C# .NET: From Problem Analysis to Program Design
59
RealEstateInvestment Example
(continued)
Microsoft Visual C# .NET: From Problem Analysis to Program Design
60
RealEstateInvestment Example
(continued)
Microsoft Visual C# .NET: From Problem Analysis to Program Design
61
Microsoft Visual C# .NET: From Problem Analysis to Program Design
62
Chapter Summary
• Components of a method
• Class methods
– Parameters
• Predefined methods
• Value and non-value returning methods
Microsoft Visual C# .NET: From Problem Analysis to Program Design
63
Chapter Summary (continued)
• Properties
• Instance methods
– Constructors
– Mutators
– Accessors
• Types of parameters
Microsoft Visual C# .NET: From Problem Analysis to Program Design
64