水果整理篇--苹果橘子

面向对象:把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象。对同类对象抽象出其 共性(属性) ,形成类。类中的大多数数据,只能用本类的 方法 进行处理。类通过一个简单的外部接口与外界发生关系,对象与对象之间通过 消息(事件) 进行通信。程序流程由用户在使用中决定。
本例子中我理解的特征就是水果的重量,方法就是经过一天,事件(消息)就是方法用过后的结果
Fruit接口,提供减少重量和计算当前重量的功能。
     
     
     
     
  1. Option Explicit
  2. *******************************************
  3. Public Property Get CurWeight() As Double '计算当前的重量
  4. End Property
  5. *******************************************
  6. Public Function ReduceWeight() As Double '计算减少的重量
  7. End Function
Apple类实现Fruit接口
      
      
      
      
  1. Option Explicit
  2. Implements Fruit
  3. ***********************************************************
  4. Private mvarCurWeight As Double '定义当前重量的变量
  5. Private mvarTotalWeight As Double '定义总重量的变量
  6. ***********************************************************
  7. Private Sub Class_Initialize() '类的初始化
  8. mvarTotalWeight = 50 '起初总重量为50
  9. mvarCurWeight = mvarTotalWeight '当前的重量为50
  10. '起初的重量也为50
  11. End Sub
  12. ********************************************************************
  13. Private Property Get Fruit_CurWeight() As Double '写入苹果当前重量
  14. Fruit_CurWeight = mvarCurWeight
  15. End Property
  16. **********************************************************************
  17. Private Function Fruit_ReduceWeight() As Double '苹果减少重量
  18. Dim oldWeight As Double '定义从前重量
  19. oldWeight = mvarCurWeight '从前重量等于当前重量
  20. mvarCurWeight = mvarCurWeight - 4 '苹果每天重量减少4
  21. '直到减少到苹果重量的3/5不再减少
  22. If (mvarCurWeight < mvarTotalWeight * 3 / 5#) Then
  23. mvarCurWeight = mvarTotalWeight * 3 / 5
  24. End If
  25. Fruit_ReduceWeight = oldWeight - mvarCurWeight '苹果减少重量为从前重量和当前重量之差
  26. End Function
Orange类实现Fruit接口
      
      
      
      
  1. Option Explicit
  2. Implements Fruit '连接Fruit接口
  3. *********************************************************
  4. Private mvarCurWeight As Double '定义当前重量变量
  5. Private mvarTotalWeight As Double
  6. *********************************************************
  7. Private Sub Class_Initialize() '类的初始化
  8. mvarTotalWeight = 30 '橘子的总重量为30
  9. mvarCurWeight = mvarTotalWeight '橘子的当前重量也为30
  10. End Sub
  11. *****************************************************************
  12. Private Property Get Fruit_CurWeight() As Double '写入橘子当前重量
  13. Fruit_CurWeight = mvarCurWeight
  14. End Property
  15. *****************************************************************
  16. Private Function Fruit_ReduceWeight() As Double '橘子减少的重量
  17. Dim oldWeight As Double '定义橘子从前的重量
  18. oldWeight = mvarCurWeight '橘子从前重量和当前重量相等
  19. mvarCurWeight = mvarCurWeight - 3 '橘子每天重量减少3
  20. '直到减少到橘子的3/5不再减少
  21. If (mvarCurWeight < mvarTotalWeight * 3 / 5#) Then
  22. mvarCurWeight = mvarTotalWeight * 3 / 5
  23. End If
  24. Fruit_ReduceWeight = oldWeight - mvarCurWeight '橘子减少的重量为从前重量和当前重量之差
  25. End Function

FruitBox类实现计算功能。
     
     
     
     
  1. Option Explicit
  2. Private mcol As Collection '定义一个集合,mcol是一个盒子
  3. **********************************************************
  4. Private Sub ReleaseFruits() '释放对象
  5. Dim aFruit As Fruit
  6. For Each aFruit In mcol
  7. Set aFruit=Nothing '对于每一个在盒子里的水果最后让其为0
  8. Next
  9. End Sub
  10. *****************************************************************
  11. Public Sub AddFruit(aFruit As Fruit)
  12. mcol.Add aFruit '向盒子里放入水果
  13. End Sub
  14. *****************************************************************
  15. Public Function TotalFruitWeight() As Double '实现计算水果总重量的功能
  16. Dim aFruit As Fruit
  17. Dim total As Double
  18. total=0 '起初总重量为0
  19. For Each aFruit In mcol
  20. total=total+aFruit.CurWeight '橘子和苹果的重量为总重量
  21. Next
  22. TotalFruitWeight=total
  23. End Function
  24. *******************************************************************
  25. Public Function PassOneDay() As Double
  26. Dim aFruit As Fruit
  27. Dim total As Double
  28. total=0
  29. For Each aFruit In mcol
  30. total=total+aFruit.ReduceWeight() '橘子和苹果的重量为总重量
  31. Next
  32. PassOneDay=total
  33. End Function
  34. *************************************************************************
  35. Public Function NumOfApples() As Long
  36. Dim aFruit As Fruit
  37. Dim count As Long
  38. count = 0
  39. For Each aFruit In mcol
  40. If (TypeName(aFruit) = "Apple") Then '加入的是苹果
  41. count = count + 1 '苹果数量+1
  42. End If
  43. Next
  44. NumOfApples = count '苹果的数量
  45. End Function
  46. *****************************************************************
  47. Public Function NumOfOranges() As Long
  48. Dim aFruit As Fruit
  49. Dim count As Long
  50. count = 0
  51. For Each aFruit In mcol
  52. If (TypeName(aFruit) = "Orange") Then '加入的水果为橘子
  53. count = count + 1 '橘子个数加1
  54. End If
  55. Next
  56. NumOfOranges = count '橘子的数量
  57. End Function
  58. ***************************************************************
  59. Private Sub Class_Initialize()
  60. Set mcol = New Collection '盒子为一个新的连接
  61. End Sub
  62. ***************************************************************
  63. Private Sub Class_Terminate()
  64. ReleaseFruits '释放对象
  65. Set mcol = Nothing '让盒子为0
  66. End Sub
类的实例化,From1代码编写。
     
     
     
     
  1. Option Explicit
  2. Dim box As FruitBox '定义一个盒子
  3. *******************************************************************
  4. Private Sub Command1_Click()
  5. box.AddFruit New Apple '盒子里加一个苹果
  6. End Sub
  7. ********************************************************************
  8. Private Sub Command2_Click()
  9. box.AddFruit New Orange '盒子里加一个橘子
  10. End Sub
  11. ********************************************************************
  12. Private Sub Command3_Click()
  13. Dim str As String
  14. Dim old As Double, reduce As Double, now As Double
  15. '定义从前的,减少的和现在的
  16. old = box.TotalFruitWeight() '调用FruitBox类的TotalFruitWeight方法
  17. str = "一天前总重量有:" & old '从前的重量
  18. List1.AddItem str
  19. str = "其中苹果有:" & box.NumOfApples() '调用FruitBox类的NumOfApples方法
  20. List1.AddItem str
  21. str = "其中橘子有:" & box.NumOfOranges() '调用FruitBox类的NumOfOranges方法
  22. List1.AddItem str
  23. reduce = box.PassOneDay() '调用FruitBox类的PassOneDay方法
  24. str = "一天损失重量:" & reduce
  25. List1.AddItem str
  26. now = box.TotalFruitWeight() '调用FruitBox类的TotalFruitWeight方法
  27. str = "当前重量:" & now
  28. List1.AddItem str
  29. List1.AddItem ""
  30. End Sub
  31. ********************************************************************
  32. Private Sub Form_Load() '创建盒子对象
  33. Set box = New FruitBox
  34. End Sub
  35. Private Sub Form_Unload(Cancel As Integer) '释放盒子对象
  36. Set box = Nothing
  37. End Sub



来自为知笔记(Wiz)


你可能感兴趣的:(水果整理篇--苹果橘子)