a.display() a.close() End Sub End Class
(2) 环境改变了﹐必须修正旧类别。 例如﹕软件内含Sales 类别如下──
''''ex11.bas Imports System.ComponentModel Imports System.Drawing Imports System.WinForms ''''---------------------------------------------------------------------------------- Class Sales Protected sum As Double Public Sub New() sum = 0 End Sub Public Overridable Sub input(ByVal amount As Double) sum = sum + amount End Sub Public Sub display() Messagebox.Show("The Sum Is: " + str(sum)) End Sub End Class ''''----------------------------------------------------------------------------------- Public Class Form1 Inherits System.WinForms.Form Public Sub New() MyBase.New() Form1 = Me ''''This call is required by the Win Form Designer. InitializeComponent() ''''TODO: Add any initialization after the InitializeComponent() call End Sub ''''Form overrides dispose to clean up the component list. Public Overrides Sub Dispose() MyBase.Dispose() components.Dispose() End Sub #Region " Windows Form Designer generated code " ........ #End Region Protected Sub Form1_Click( ByVal sender As Object, ByVal e As System.EventArgs) Dim x As New Sales() x.input(3000.5) x.input(7999.5) x.input(15000) x.display() End Sub End Class
此程序输出如下﹕The Sum Is: 26000
input() 输入销售金额﹐且将金额加总起来﹐存于 sum变量中。display() 显示出总金额。随着企业之成长﹐往往对软件之功能有新的需求。例如﹕希望程序输出平均销售额。此时﹐必须更新原来的软件﹐其方法有二﹕
(I) 改写 Sales类别之定义。 此为传统软件之维护方法﹐就像一座房屋﹐已不敷使用﹐于是用推土机推掉﹐重建之。通常这种方法并不佳﹐原因是﹕旧的软件有些功能仍然可用﹐废弃重建实在可惜。若不想重建﹐只想去修改它﹐但是软件若很庞大﹐得浪费人力去了解旧软件的结构﹐弄通了之后﹐才能加以修正﹐显然不经济。进一步想﹐于修正之过程中﹐不经意而更动旧软件内仍可用之部分﹐则原来正确之功能﹐反而有遭破坏之虞﹗ (II) 藉继承关系修正 Sales类别。 亦即定义 Sales之子类别﹐来修正及扩充 Sales之功能。此时﹐并未更动Sales 类别之定义﹐所以不会破坏 Sales之功能。既然保存原有的良好功能﹐又能增加新的功能﹐岂非两全其美呢﹖此「旧干发新枝」之景象即是千年神木得以茁壮且绿意盎然之道理﹐也正是 OOP魅力的源头。现在﹐就为 Sales定义个子类别叫 Sales_new如下﹕
''''ex12.bas Imports System.ComponentModel Imports System.Drawing Imports System.WinForms ''''------------------------------------------------------------------------------------ Class Sales Protected sum As Double Public Sub New() sum = 0 End Sub Public Overridable Sub input(ByVal amount As Double) sum = sum + amount End Sub Public Sub display() Messagebox.Show("The Sum Is: " + str(sum)) End Sub End Class
Class Sales_new Inherits Sales Protected number As Integer Public Sub New() number = 0 End Sub Public Overrides Sub input(ByVal amount As Double) MyBase.input(amount) number = number + 1 End Sub Public Sub display_average() Dim avg As Double If number > 0 Then avg = sum / number MessageBox.Show("The Average Is : " + str(avg)) End If End Sub End Class ''''------------------------------------------------------------------------------------ Public Class Form1 Inherits System.WinForms.Form Public Sub New() MyBase.New() Form1 = Me ''''This call is required by the Win Form Designer. InitializeComponent() ''''TODO: Add any initialization after the InitializeComponent() call End Sub ''''Form overrides dispose to clean up the component list. Public Overrides Sub Dispose() MyBase.Dispose() components.Dispose() End Sub #Region " Windows Form Designer generated code " ....... #End Region Protected Sub Form1_Click( ByVal sender As Object, ByVal e As System.EventArgs) Dim x As New Sales_new() x.input(3005.5) x.input(5994.5) x.input(15012.6) x.display() x.display_average() End Sub End Class
此程序输出﹕ The Sum Is: 24012.6 The Average Is: 8004.2
子类别增加了新数据项number﹐重新定义了input()﹐使新input()保存父类别内之input()功能﹐并加上number = number +1之运算。保留了父类别之display()﹐但增加了display_average()程序。依此方法﹐软件自然日益茁壮﹐且历久弥新﹗藉继承关系不断扩充乃为OOP之重要技术﹐盼您善用之。n
上一页 [1] [2] [3] [4] [5] [6] 没有相关教程
|