关于Visual Basic 6.0类开发

http://bbs.csdn.net/topics/30027629


对程序员和编程爱好者来说,VB中类的技术是学习中的一个难点,在大型软件的开发过程中,模块(Moudle)、控件(Active ocx)、链接库(Active dll)和类(Class moudle)构成了系统化、高效化的软件工程,而类的技术是控件和链接库技术的基础,因此掌握类的理论和编程方法是非常有意义的。

(一)类的基本定义和应用概述;

  类是包含了方法、属性、数据成员的高级代码模块,它既在模块的范畴之内,又是一个没有图形界面的Active ocx,程序员可以象使用控件一样使用它,但却不能看到它,值得注意的是,类是不能继承的。
类能够使我们高效的完成对某一个或者某几个特定的对象的复杂操作,对象的动作就是类的方法,对象的属性就是类的属性过程。相对而言,如果编程的对象是一组事物,那么,我们采用标准模块的方式是非常合适的,在下列两种情况下,应该使用类进行代码处理:

  (1)创建大量性质相近的对象;

  (2)提高代码的封装性。

   类的创建非常简单,在进行代码编写的时候,在“工程”菜单中选择“添加类模块”项目,就可以添加一个空白的类。

   类文件一般以.cls作为扩展名保存。

  (二)类的方法的实现;

   类的方法类似于动态链接库的接口函数,它能够接受其他窗体代码的指定类型参数,并且传递到类中。一般来说类的方法是能够指定是否有返回值的。它在类中通常是一个public过程。请看下面的代码示例,它使一个密码框拒绝非字母的输入:

  (1)类cls的代码;

   Option Explicit'变量检查

    Private WithEvents mytxt As TextBox

    '本类中的方法接受和控制一个text密码框

    Dim isNUM As Boolean

    '类的模块级变量

    Public Sub Attach(itTEXT As TextBox)

    '接受外部变量到mytxt中

    Set mytxt = itTEXT

   End Sub 

   Private Sub mytxt_KeyUp(KeyCode As Integer, Shift As Integer)

    isNUM = (KeyCode >= 65) And (KeyCode <= 90)

    '测试密码框的键盘输入是否是英文字母 

    If isNUM = False Then

     Beep

     mytxt.Text = ""

     '如果输入不是英文字母则响铃并且清空密码框内容

     MsgBox "非法字符输入!"

    End If

    Debug.Print mytxt.Text

    '调试输出密码框内容

    End Sub

    '类的代码结束

  (2)类的引用;

  已经编写完成的类可以经过两种格式进行引用,第一种方式:Private(public或者dim) myCLS(指定的类名) As New cls(编写完成的类名);第二种方式较多用于程序编写风格较“老”的程序员:首先在窗体代码中进行模块级声明――Dim myCLS As cls,然后在具体代码过程中进行具体定义―― Set mycls = New cls。这两种方式的效率和代码的简洁性方面可能会有所差别,但在笔者的编程实践中,并没有什么特别的感觉,不过我较多使用第一种方式,因为它书写起来更加方便。另外,在代码结束的时候,使用 Set myCLS = Nothing来取消类的资源占用是一种非常好的编程习惯。

  在窗体form1中(窗体有一个密码框控件text1,passworldchar="*")添加以下代码:

  Option Explicit

   Private myCLS As New cls

   '引用cls

   Private Sub Form_Load()

   myCLS.Attach Text1

   '启动类 

  End Sub

  '在代码结束时记得释放资源

  Private Sub Form_Unload(Cancel As Integer)

   Set myCLS = Nothing

  End

 End Sub

   本文代码展示了类的方法的代码编写过程和调用方式(尽管它和类的事件非常相似),它的效果是,如果密码框中被输入了非字母,则系统振铃,并删除密码框中的原来的数据――在一定程度上保护密码。
类的方法可以不需要任何参数,这一点类似一个public的函数或者过程,它也是类中使用最广泛的。在下一篇文章中我将讨论,如何使用类的属性、事件和方法进行综合编程。


上面我们讨论了类的理论、类的创建和类的方法的编程实践,实际上,类之所以能够在软件工程中广泛应用,最主要的一点是它可以非常方便的封装许多编程需要的属性,这不仅使程序员在一定程度上克服控件(ocx)和链接库(dll)设计和调试中的复杂性,而且能够提高程序代码的简洁和高效性――本文将讨论完整的类的编程,包括方法、属性和基本事件。

  (一)类的属性的特征和定义;

  类似于标准控件的属性,类的属性允许用户在指定的数据范围内进行赋值,这些值被类内的各个代码部分所共享。属性的获得和传递需要经过 Property Let和Property Get语句进行编程,当然,我们首先需要在类中进行全局或者模块级的相应变量定义。 

  (二)事件的属性和基本定义;

  和窗体的事件类似,类也有两个基本的事件,Class_Initialize(类加载时触发)和Class_Terminate(类卸载时触发),这两个事件都是private的。实际上,我们完全可以忽略这两个事件――只要你记得完善类的方法和属性。

  类同样可以定义自己的事件,它和方法的程序编写格式类似,只不过需要WithEvents关键字进行参数声明,而且事件不能有任何命名参数或者可选参数,它也没有返回值。

  实际上,结构良好的方法和属性完全可以替代结构复杂的类的事件。

  (三)类的方法、事件和属性的编程实例;

  本程序的设计目的是,通过类控制窗体中文本框的内容的全部大写、小写和逆向排序转化。

  为了方便代码的书写和调用,我在类中引用了枚举的编程方法。

  以下代码在类Class1:

  Option Explicit

   Private WithEvents myTXT As TextBox

   '方法的参数接口

   Public Enum sTYLE

    Lcaseit'小写属性

    Lbigit'大写属性

    Nlogoit'逆向排序属性

   End Enum

  '自定义枚举,用来实现属性的自动赋值

  Private mvarBiaozhi As sTYLE 

  '实现枚举常量的连接 

  Public Function dONE() As String'

  'DONE方法用来根据指定的枚举属性,对

  '窗体文本框进行相应的字符转化操作

  '并且返回转化后的字符串

  If mvarBiaozhi = Nlogoit Then

   dONE = StrReverse(myTXT)

   '逆向排序

  ElseIf mvarBiaozhi = Lcaseit Then

   dONE = LCase(myTXT)

   '强制小写转化

  Else

   dONE = UCase(myTXT)

   '强制大写转化

  End If

  End Function

  'DONE方法结束

  Public Property Let Biaozhi(ByVal vData As sTYLE)

   '获得属性的被赋的值

   mvarBiaozhi = vData

  End Property

  Public Property Get Biaozhi() As sTYLE

   '传递属性值到类中

   Set Biaozhi = mvarBiaozhi

  End Property

  Public Sub Attach(itTEXT As TextBox)

   '连接类的方法

   Set myTXT = itTEXT

  End Sub

  Private Sub Class_Initialize()

   '本事件在类倍加载时激活

   MsgBox "你好!本程序向您展示使用类的方法、属性、事件进行编程的技术!"

  End Sub

  Private Sub Class_Terminate()

   '本事件在类被卸载时激活 

   MsgBox "你好!记得在Class_Terminate中填写对象撤销后的代码!"

  End Sub

  '类的代码全部结束

  (四)窗体代码的引用编程;

  在窗体FORM1中添加文本控件TEXT1、下拉列表控件COMBO1、命令按钮COMMAND1(CAPTION="开始转化"),调整三个控件到适当位置。

  Dim myT As New Class1

  '类的引用

  Private Sub Form_Load()

   Combo1.Clear

   Combo1.AddItem "字符串大写转化"

   Combo1.AddItem "字符串小写转化"

   Combo1.AddItem "字符串逆向排序"

   Combo1.ListIndex = 0

   '在列表框中添加属性选项

  End Sub

  Private Sub Command1_Click()

   '当命令按钮按下时激活类

   myT.Attach Text1

   '方法参数联接

   Select Case Combo1.ListIndex

    Case 0

      myT.Biaozhi = Lbigit

    Case 1

      myT.Biaozhi = Lcaseit

    Case 2

      myT.Biaozhi = Nlogoit

   End Select

   '根据列表框的选择,给类的Biaozhi属性赋值

   '注意,在编程环境中,上述属性值自动添加 

   Text1.Text = myT.dONE

   '返回排序结束后的字符串

  End Sub

  Private Sub Form_Unload(Cancel As Integer)

   Set myT = Nothing

  End

  '良好的编程习惯

  End Sub

怎么样,我们的代码看起来如此的简洁,这种感觉就象是在使用一个控件,不仅可以随心所欲的调用,而且方便的使用了vb的自动提示功能。

  (五)关于类的编程技术的总结;

  严格的说,类是vb编程中的一个相当有用的技术,同样也是学习和掌握中的难点,类在大型软件工程中应用是非常广泛和卓有成效的,但是,在小型软件开发中,为了提高软件的效率和代码的清晰度,应该避免使用较多的类模块,控件和联接库,取代以标准模块。

  本文所示例的代码比较简单,却覆盖了关于模块编程技术的方方面面,希望初学者能够有所借鉴,也希望程序员能够共同探讨。我们应该相信,无论多么复杂的高楼大厦都是由普普通通的方砖堆砌而成的,同样,无论所么复杂的软件工程都是由基本的程序语句所构成的,编程爱好者、程序员和分析员的区别只是在于,用同样的程序语句构建的程序的不同而已。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 来表示数据库表,使用的实例表示表中的行。 开发者可以定义之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 来表示数据库表,使用的实例表示表中的行。 开发者可以定义之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
GeoPandas是一个开源的Python库,旨在简化地理空间数据的处理和分析。它结合了Pandas和Shapely的能力,为Python用户提供了一个强大而灵活的工具来处理地理空间数据。以下是关于GeoPandas的详细介绍: 一、GeoPandas的基本概念 1. 定义 GeoPandas是建立在Pandas和Shapely之上的一个Python库,用于处理和分析地理空间数据。 它扩展了Pandas的DataFrame和Series数据结构,允许在其中存储和操作地理空间几何图形。 2. 核心数据结构 GeoDataFrame:GeoPandas的核心数据结构,是Pandas DataFrame的扩展。它包含一个或多个列,其中至少一列是几何列(geometry column),用于存储地理空间几何图形(如点、线、多边形等)。 GeoSeries:GeoPandas中的另一个重要数据结构,似于Pandas的Series,但用于存储几何图形序列。 二、GeoPandas的功能特性 1. 读取和写入多种地理空间数据格式 GeoPandas支持读取和写入多种常见的地理空间数据格式,包括Shapefile、GeoJSON、PostGIS、KML等。这使得用户可以轻松地从各种数据源中加载地理空间数据,并将处理后的数据保存为所需的格式。 2. 地理空间几何图形的创建、编辑和分析 GeoPandas允许用户创建、编辑和分析地理空间几何图形,包括点、线、多边形等。它提供了丰富的空间操作函数,如缓冲区分析、交集、并集、差集等,使得用户可以方便地进行地理空间数据分析。 3. 数据可视化 GeoPandas内置了数据可视化功能,可以绘制地理空间数据的地图。用户可以使用matplotlib等库来进一步定制地图的样式和布局。 4. 空间连接和空间索引 GeoPandas支持空间连接操作,可以将两个GeoDataFrame按照空间关系(如相交、包含等)进行连接。此外,它还支持空间索引,可以提高地理空间数据查询的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值