Mark Dixon, SoCCE SOFT 131Page 1 08 – Procedures
Mark Dixon, SoCCE SOFT 131Page 2 Session Aims & Objectives Aims –To introduce the main concepts involved in grouping instructions, to deal with large programs. Objectives, by end of this week’s sessions, you should be able to: –define procedures, and –call procedures
Mark Dixon, SoCCE SOFT 131Page 3 Large Programs Real programs get very large Exponential increase in effort AB CD 1 (A) 3 (A, B, AB) 6 (A, B, C, AB, AC, BC) 10 (A, B, C, D, AB, AC, BC, AD, BD, CD)
Mark Dixon, SoCCE SOFT 131Page 4 General Procedures (what?) Group of statements Identified by unique name Almost all computer code procedures –mirror real life procedures Making a cup of tea: 1. Fill the kettle with water 2. Plug the kettle in 3. Switch the kettle on 4. Wait for the kettle to boil 5. Put a tea bag into the cup 6. Add sugar to the cup 7. Stir 8. Add milk to the cup 9. Stir 10. Take the tea bag out
Mark Dixon, SoCCE SOFT 131Page 5 General Procedures (why?) Code reuse: same code used in many places (reduces duplication) Break up long code: large chunks of code are difficult to understand and maintain
Mark Dixon, SoCCE SOFT 131Page 6 General Procedures (how) Definition: [Public|Private] Sub name() [Statementblock] End Sub Call: Call name () or name
Mark Dixon, SoCCE SOFT 131Page 7 Example 2: Hotel Rooms v1 Option Explicit Const RoomCost = 32.5 Private Sub btnCalc_Click() Dim Rooms As Integer Dim Nights As Integer Dim TotalCost As Single Rooms = Val(txtRooms.Text) Nights = Val(txtNights.Text) TotalCost = Rooms * Nights * RoomCost lblCost.Caption = "£" & TotalCost End Sub Input Process Output Hotel Rooms v1 result of operations should be visible immediately! Shneiderman 1998, p. 205
Mark Dixon, SoCCE SOFT 131Page 8 Example 3: Hotel Rooms v2 Option Explicit Const RoomCost = 32.5 Private Sub Form_Load() Dim Rooms As Integer Dim Nights As Integer Dim TotalCost As Single Rooms = Val(txtRooms.Text) Nights = Val(txtNights.Text) TotalCost = Rooms * Nights * RoomCost lblCost.Caption = "£" & TotalCost End Sub Private Sub txtRooms_Change() Dim Rooms As Integer Dim Nights As Integer Dim TotalCost As Single Rooms = Val(txtRooms.Text) Nights = Val(txtNights.Text) TotalCost = Rooms * Nights * RoomCost lblCost.Caption = "£" & TotalCost End Sub Private Sub txtNights_Change() Dim Rooms As Integer Dim Nights As Integer Dim TotalCost As Single Rooms = Val(txtRooms.Text) Nights = Val(txtNights.Text) TotalCost = Rooms * Nights * RoomCost lblCost.Caption = "£" & TotalCost End Sub Hotel Rooms v2 Duplicate
Mark Dixon, SoCCE SOFT 131Page 9 Example 4: Hotel Rooms v3 Option Explicit Const RoomCost = 32.5 Private Sub Calculate() Dim Rooms As Integer Dim Nights As Integer Dim TotalCost As Single Rooms = Val(txtRooms.Text) Nights = Val(txtNights.Text) TotalCost = Rooms * Nights * RoomCost lblCost.Caption = "£" & TotalCost End Sub Private Sub Form_Load() Calculate End Sub Private Sub txtRooms_Change() Calculate End Sub Private Sub txtNights_Change() Calculate End Sub Duplicate Calls, not Code Hotel Rooms v3
Mark Dixon, SoCCE SOFT 131Page 10 Example 5: Face v2 Private Sub btnDraw_Click() picFace.Cls picFace.Circle (2400, 2400), 2000 If chkNose.Value = vbChecked Then picFace.Line (2400, 2200)-Step(0, 600) End If If optOpen.Value = True Then picFace.Circle (1600, 1600), 500 picFace.Circle (3200, 1600), 500 Else picFace.Line (1100, 1600)-Step(1000, 0) picFace.Line (2700, 1600)-Step(1000, 0) End If If optHappy.Value = True Then picFace.Circle (2400, 2400), 1200,, 3.4, 6 Else picFace.Circle (2400, 4400), 1200,, 0.6, 2.5 End If End Sub Face v2
Mark Dixon, SoCCE SOFT 131Page 11 Example 6: Face v3 Private Sub DrawFace() picFace.Cls picFace.Circle (2400, 2400), 2000 If chkNose.Value = vbChecked Then picFace.Line (2400, 2200)-Step(0, 600) End If If optOpen.Value = True Then picFace.Circle (1600, 1600), 500 picFace.Circle (3200, 1600), 500 Else picFace.Line (1100, 1600)-Step(1000, 0) picFace.Line (2700, 1600)-Step(1000, 0) End If If optHappy.Value = True Then picFace.Circle (2400, 2400), 1200,, 3.4, 6 Else picFace.Circle (2400, 4400), 1200,, 0.6, 2.5 End If End Sub Private Sub Form_Load() Me.Show DrawFace End Sub Private Sub chkNose_Click() DrawFace End Sub Private Sub optHappy_Click() DrawFace End Sub Private Sub optOpen_Click() DrawFace End Sub Face v3
Mark Dixon, SoCCE SOFT 131Page 12 Example 7: Face v4 Private Sub DrawFace() picFace.Cls picFace.Circle (2400, 2400), 2000 DrawNose DrawEyes DrawMouth End Sub Private Sub DrawNose() If chkNose.Value = vbChecked Then picFace.Line (2400, 2200)-Step(0, 600) End If End Sub Private Sub DrawEyes() If optOpen.Value = True Then picFace.Circle (1600, 1600), 500 picFace.Circle (3200, 1600), 500 Else picFace.Line (1100, 1600)-Step(1000, 0) picFace.Line (2700, 1600)-Step(1000, 0) End If End Sub Private Sub DrawMouth() If optHappy.Value = True Then picFace.Circle (2400, 2400), 1200,, 3.4, 6 Else picFace.Circle (2400, 4400), 1200,, 0.6, 2.5 End If End Sub Private Sub Form_Load() Me.Show DrawFace End Sub … Face v3
Mark Dixon, SoCCE SOFT 131Page 13 Module Hierarchy Charts Private Sub DrawFace() picFace.Cls picFace.Circle (2400, 2400), 2000 DrawNose DrawEyes DrawMouth End Sub Private Sub DrawNose() If chkNose.Value = vbChecked Then picFace.Line (2400, 2200)-Step(0, 600) End If End Sub Private Sub DrawEyes() If optOpen.Value = True Then picFace.Circle (1600, 1600), 500 picFace.Circle (3200, 1600), 500 Else picFace.Line (1100, 1600)-Step(1000, 0) picFace.Line (2700, 1600)-Step(1000, 0) End If End Sub Private Sub DrawMouth() If optHappy.Value = True Then picFace.Circle (2400, 2400), 1200,, 3.4, 6 Else picFace.Circle (2400, 4400), 1200,, 0.6, 2.5 End If End Sub Private Sub Form_Load() Me.Show DrawFace End Sub … DrawFace Draw Eyes Draw Nose Draw Mouth