objects and classes continued engineering 1d04, teaching session 10
TRANSCRIPT
![Page 1: Objects and Classes Continued Engineering 1D04, Teaching Session 10](https://reader036.vdocument.in/reader036/viewer/2022062315/5697bfc71a28abf838ca7db8/html5/thumbnails/1.jpg)
Objects and Classes Continued
Engineering 1D04, Teaching Session 10
![Page 2: Objects and Classes Continued Engineering 1D04, Teaching Session 10](https://reader036.vdocument.in/reader036/viewer/2022062315/5697bfc71a28abf838ca7db8/html5/thumbnails/2.jpg)
© Copyright 2006 David Das, Ryan Lortie, Alan Wassyng 2
Recap: HighScores Example
txtName1 txtName2
txtScore2txtScore1
![Page 3: Objects and Classes Continued Engineering 1D04, Teaching Session 10](https://reader036.vdocument.in/reader036/viewer/2022062315/5697bfc71a28abf838ca7db8/html5/thumbnails/3.jpg)
© Copyright 2006 David Das, Ryan Lortie, Alan Wassyng 3
recap: HighScores Examplepublic class HighScore{
private class hsRecord{
public string name;public int score;
}
private const int maxElements = 10;private hsRecord[] hsArray = new hsRecord[maxElements];private int length;
public bool add(string newName, int newScore){
. . .}
public void show(){
. . .}
}
no room to show this here
no room to show this here
![Page 4: Objects and Classes Continued Engineering 1D04, Teaching Session 10](https://reader036.vdocument.in/reader036/viewer/2022062315/5697bfc71a28abf838ca7db8/html5/thumbnails/4.jpg)
© Copyright 2006 David Das, Ryan Lortie, Alan Wassyng 4
recap: HighScores
What about including a title for the name of the game at the time of instantiation?
In general it is useful to be able to include initial processing for an object at the time of its instantiation.
This is done through a constructor.
![Page 5: Objects and Classes Continued Engineering 1D04, Teaching Session 10](https://reader036.vdocument.in/reader036/viewer/2022062315/5697bfc71a28abf838ca7db8/html5/thumbnails/5.jpg)
© Copyright 2006 David Das, Ryan Lortie, Alan Wassyng 5
Constructors
A constructor is simply a method that is executed automatically when the class is instantiated in an object.
The name of the constructor method is exactly the same as the name of the class.
The constructor method may also include parameters.
![Page 6: Objects and Classes Continued Engineering 1D04, Teaching Session 10](https://reader036.vdocument.in/reader036/viewer/2022062315/5697bfc71a28abf838ca7db8/html5/thumbnails/6.jpg)
© Copyright 2006 David Das, Ryan Lortie, Alan Wassyng 6
A Constructor for HighScores
Consider our example. We want the constructor to include a string parameter for the title of the game.
![Page 7: Objects and Classes Continued Engineering 1D04, Teaching Session 10](https://reader036.vdocument.in/reader036/viewer/2022062315/5697bfc71a28abf838ca7db8/html5/thumbnails/7.jpg)
© Copyright 2006 David Das, Ryan Lortie, Alan Wassyng 7
Constructor Example
public class HighScore{
private class hsRecord{
public string name;public int score;
}
const int maxElements = 10;private hsRecord[] hsArray = new hsRecord[maxElements];private int length = 0;private string result;private string hsTitle;
public HighScore(string title){
hsTitle = title;}. . .
constructor
![Page 8: Objects and Classes Continued Engineering 1D04, Teaching Session 10](https://reader036.vdocument.in/reader036/viewer/2022062315/5697bfc71a28abf838ca7db8/html5/thumbnails/8.jpg)
© Copyright 2006 David Das, Ryan Lortie, Alan Wassyng 8
Constructor Example
How do we use the constructor?
private void btnStart1_Click(object sender, EventArgs e){
hs1 = new HighScore(gpGame1.Text);display(1, true);btnStart1.Visible = false;txtName1.Focus();
}
string parameter
currently set to“Group One”
instantiate hs1
when we instantiate hs1the constructor getsinvoked (called)
![Page 9: Objects and Classes Continued Engineering 1D04, Teaching Session 10](https://reader036.vdocument.in/reader036/viewer/2022062315/5697bfc71a28abf838ca7db8/html5/thumbnails/9.jpg)
© Copyright 2006 David Das, Ryan Lortie, Alan Wassyng 9
Multiple Classes in a Project
In reasonably sized projects we typically need a number of classes, not just one.
Each class is normally stored in its own source file.
Visual Studio makes it easy to set up source files for classes.
As an example, let us see how we can set up a source file for the class HighScore.
![Page 10: Objects and Classes Continued Engineering 1D04, Teaching Session 10](https://reader036.vdocument.in/reader036/viewer/2022062315/5697bfc71a28abf838ca7db8/html5/thumbnails/10.jpg)
© Copyright 2006 David Das, Ryan Lortie, Alan Wassyng 10
Source Files for Classes
highlight andthen right click
![Page 11: Objects and Classes Continued Engineering 1D04, Teaching Session 10](https://reader036.vdocument.in/reader036/viewer/2022062315/5697bfc71a28abf838ca7db8/html5/thumbnails/11.jpg)
© Copyright 2006 David Das, Ryan Lortie, Alan Wassyng 11
Source Files for Classes
choose add
and thenclass
![Page 12: Objects and Classes Continued Engineering 1D04, Teaching Session 10](https://reader036.vdocument.in/reader036/viewer/2022062315/5697bfc71a28abf838ca7db8/html5/thumbnails/12.jpg)
© Copyright 2006 David Das, Ryan Lortie, Alan Wassyng 12
Source Files for Classes
type the name you want for the class
![Page 13: Objects and Classes Continued Engineering 1D04, Teaching Session 10](https://reader036.vdocument.in/reader036/viewer/2022062315/5697bfc71a28abf838ca7db8/html5/thumbnails/13.jpg)
© Copyright 2006 David Das, Ryan Lortie, Alan Wassyng 13
Source Files for Classes
the system sets up thestub for the class
note theHighScoreclass sourcefile has beenadded
![Page 14: Objects and Classes Continued Engineering 1D04, Teaching Session 10](https://reader036.vdocument.in/reader036/viewer/2022062315/5697bfc71a28abf838ca7db8/html5/thumbnails/14.jpg)
© Copyright 2006 David Das, Ryan Lortie, Alan Wassyng 14
Another Example
Let’s try another example Create a class that manages a suit of
cards We need to identify the suit (spades, etc) We want to “deal” cards from the suit in
random order We need to be able to go back to the initial
settings We also need to be able to access the name
of the suit - “Spades”, “Hearts” etc.
![Page 15: Objects and Classes Continued Engineering 1D04, Teaching Session 10](https://reader036.vdocument.in/reader036/viewer/2022062315/5697bfc71a28abf838ca7db8/html5/thumbnails/15.jpg)
© Copyright 2006 David Das, Ryan Lortie, Alan Wassyng 15
Suit of Cards
data structure in theclass that stores therequired info
![Page 16: Objects and Classes Continued Engineering 1D04, Teaching Session 10](https://reader036.vdocument.in/reader036/viewer/2022062315/5697bfc71a28abf838ca7db8/html5/thumbnails/16.jpg)
© Copyright 2006 David Das, Ryan Lortie, Alan Wassyng 16
More Cards private int numCardsLeft;
private string name;
private Random rand;
private Random start = new Random();
// Constructor - and gets name of suit and seed for random #
public Suit(string s, int seed)
{
int r;
name = s;
r = start.Next(seed);
rand = new Random(r);
status[0] = 0;
numCardsLeft = MAX;
}
class variables
lots of work to make itgenerate different numbersfor each instance
![Page 17: Objects and Classes Continued Engineering 1D04, Teaching Session 10](https://reader036.vdocument.in/reader036/viewer/2022062315/5697bfc71a28abf838ca7db8/html5/thumbnails/17.jpg)
© Copyright 2006 David Das, Ryan Lortie, Alan Wassyng 17
More Cards public string deal() { string card; int i, c, n;
if (numCardsLeft == 0) return null; else { n = rand.Next(1,numCardsLeft+1); //Find which card c = 0; for (i = 1; i <= n; ) { c++; if (status[c] == 0) i++; } status[c] = 1; status[0]++; numCardsLeft--;
generates a numberin the range 1 throughnumCardsLeft
don’t count cards where statusis 1
mark it as “used”increase #cards useddecrease #cards left
![Page 18: Objects and Classes Continued Engineering 1D04, Teaching Session 10](https://reader036.vdocument.in/reader036/viewer/2022062315/5697bfc71a28abf838ca7db8/html5/thumbnails/18.jpg)
© Copyright 2006 David Das, Ryan Lortie, Alan Wassyng 18
More Cards
if (c == 1) card = "Ace"; else if (c <= 10) card = Convert.ToString(c); else if (c == 11) card = "Jack"; else if (c == 12) card = "Queen"; else card = "King"; } return card; }
get string value of current card
![Page 19: Objects and Classes Continued Engineering 1D04, Teaching Session 10](https://reader036.vdocument.in/reader036/viewer/2022062315/5697bfc71a28abf838ca7db8/html5/thumbnails/19.jpg)
© Copyright 2006 David Das, Ryan Lortie, Alan Wassyng 19
More Cards
public void restore() { for (int i = 0; i <= MAX; i++) status[i] = 0; numCardsLeft = MAX; }
gets everything set back to its original state
![Page 20: Objects and Classes Continued Engineering 1D04, Teaching Session 10](https://reader036.vdocument.in/reader036/viewer/2022062315/5697bfc71a28abf838ca7db8/html5/thumbnails/20.jpg)
© Copyright 2006 David Das, Ryan Lortie, Alan Wassyng 20
Using the Class
Each of these controlled by the class we made
![Page 21: Objects and Classes Continued Engineering 1D04, Teaching Session 10](https://reader036.vdocument.in/reader036/viewer/2022062315/5697bfc71a28abf838ca7db8/html5/thumbnails/21.jpg)
© Copyright 2006 David Das, Ryan Lortie, Alan Wassyng 21
Using the Class
So - how do we use the class to create the 4 objects we need?
![Page 22: Objects and Classes Continued Engineering 1D04, Teaching Session 10](https://reader036.vdocument.in/reader036/viewer/2022062315/5697bfc71a28abf838ca7db8/html5/thumbnails/22.jpg)
© Copyright 2006 David Das, Ryan Lortie, Alan Wassyng 22
More Cards
public partial class Form1 : Form { Suit spades = new Suit("Spades", 200); Suit hearts = new Suit("Hearts", 300); Suit clubs = new Suit("Clubs", 400); Suit diamonds = new Suit("Diamonds", 500);
Declare 4 objects.
Note the use of the constructor to set the suit name and aseed for the random number generator.
![Page 23: Objects and Classes Continued Engineering 1D04, Teaching Session 10](https://reader036.vdocument.in/reader036/viewer/2022062315/5697bfc71a28abf838ca7db8/html5/thumbnails/23.jpg)
© Copyright 2006 David Das, Ryan Lortie, Alan Wassyng 23
More Cards
private void btnNextCard_Click(object sender, EventArgs e) { string s, s1, s2, s3, s4; s1 = rtbSpades.Text; s2 = rtbHearts.Text; s3 = rtbClubs.Text; s4 = rtbDiamonds.Text; s = spades.deal(); if (s != null) { if (s1 != "") s1 += ”\n"; s1 += s; btnStartAgain.Visible = true; } s = hearts.deal(); if (s != null) { if (s2 != "") s2 += ”\n"; s2 += s; }
get the current string to add to it
get next card in that suit
![Page 24: Objects and Classes Continued Engineering 1D04, Teaching Session 10](https://reader036.vdocument.in/reader036/viewer/2022062315/5697bfc71a28abf838ca7db8/html5/thumbnails/24.jpg)
© Copyright 2006 David Das, Ryan Lortie, Alan Wassyng 24
More Cards
s = clubs.deal(); if (s != null) { if (s3 != "") s3 += ”\n"; s3 += s; } s = diamonds.deal(); if (s != null) { if (s4 != "") s4 += ”\n"; s4 += s; } rtbSpades.Text = s1; rtbHearts.Text = s2; rtbClubs.Text = s3; rtbDiamonds.Text = s4; }
replace string with new entry
![Page 25: Objects and Classes Continued Engineering 1D04, Teaching Session 10](https://reader036.vdocument.in/reader036/viewer/2022062315/5697bfc71a28abf838ca7db8/html5/thumbnails/25.jpg)
© Copyright 2006 David Das, Ryan Lortie, Alan Wassyng 25
More Cards
private void btnStartAgain_Click(object sender, EventArgs e) { btnStartAgain.Visible = false; spades.restore(); rtbSpades.Text = ""; hearts.restore(); rtbHearts.Text = ""; clubs.restore(); rtbClubs.Text = ""; diamonds.restore(); rtbDiamonds.Text = ""; }
![Page 26: Objects and Classes Continued Engineering 1D04, Teaching Session 10](https://reader036.vdocument.in/reader036/viewer/2022062315/5697bfc71a28abf838ca7db8/html5/thumbnails/26.jpg)
© Copyright 2006 David Das, Ryan Lortie, Alan Wassyng 26
A Little More on Classes
We have just scratched the surface on object-oriented programming.
The focus of this course is algorithms and their implementation in C# - so finer details on C# are out of scope.
However, for interest and completeness you may want to read a little on inheritance and polymorphism - especially inheritance.