vb net基础教程第六部分vb net
的OOPvb.net基础教程-第六部分vb.net的OOP结构(一)
2011-01-28 1.什么是oop OOP(Object-Oriented-Programming)是相对于结构化程序设计(Structure Programming)而言的,表示采用面向对象的思想进行软件的编制。它是当今最流行的编程模式。 "面向对象"技术追求的是软件系统对现实世界的直接模拟,尽量实现将现实世界中的事物直接映射到软件系统的解空间。面向对象编程和以前的编程思想有所不同,因为它把一个新的概念--对象,作为程序代码的整个结构的基础和组成元素。而类就是对象的抽象和概括,类是数据、属性和方法的封装,从某种角度来讲,类就像一个没有界面的控件。
对象的定义对象是现实世界中的一个实体。它有如下特征有一个名字以区别于其他的对象有一个状态用来描述它的默写特征有一组操作,每一个操作决定于对象的一种功能或行为,对象的操作可分为两类一类是自身承受的操作,一类是加于其他对象的操作,是其自身所具有的状态特征及可以对这些状态施加的操作结合在一起所构成的独立实体。
例如下面这个例子对象的状态对象名张三性别女身高 1.65米体重 55公斤对象的功能 回答体重回答身高回答性别教概率课当家教
在计算机世界中可以把对象看成是存储中的一个可标识的区域,它能保存固定或可变数目的数值。对象的划分并没有惟一的标准,它依赖于设置对象的目的和所需要的操作。一个对象的状态并不是完全用来直接为外界服务的,但其本身是能够为外界服务的基础。所以对象的特征表现为模块的独立性,也就是模块内部状态不因外界的干扰而改变,模块间依赖性小,各模块可独立为系统所组合选用和复用动态连结性,即通过消息激活机制,把对象之间动态联系在一起,使整个机制运转起来,便称为对象的连结性易维护性,就是对象的功能被"隐藏",修改完善功能被局限于该对象的内部,不会波及到外部。
在面向对象系统中,对象之间的联系是通过消息来传递的。消息,是对象之间相互请求或相互协作的途径,是要求某个对象执行某个功能操作的规格的说明。它有如下的性质
(1)同一个对象可接收不同形式的多个消息,产生不同的响应
(2)相同形式的消息可以送给不同对象,所做出的响应可以是截然不同的
(3)消息的发送可以不考虑具体的接收者,对象可以响应消息,也可以对消息不予理会,对消息的响应并不是必须的。
消息分为公有消息和私有消息,由外界对象直接向其发送的消息是公有消息而由自己向本身发送的,不对外开放,外界不必了解的是私有消息。
以上我们主要扼要地讨论了一下对象及它的一些特性,现在我们就可以提出类的概念了。类,是对一组客观对象的抽象,它将该组对象所具有的共同特征(包括结构特征和行为特征)集中起来,以说明该组对象的能力和性质。在计算机世界的系统构成上,类形成了一个具有特定功能的模块和一种代码共享的手段。
面向对象的系统都具有三个特性封装性、继承性和多态性
封装将一个数据和与这个数据有关的操作集合放在一起,形成一个能动的实体--对象,用户不必知道对象行为的实现细节,只需根据对象提供的外部特性接口访问对象即可。 目的在于将对象的用户与设计者分开,用户不必知道对象行为的细节,只需用设计者提供的协议命令对象去做就可以。
继承继承所表达的就是一种对象类之间的相交关系。它使得某类对象可以继承另外一类对象的特征和能力。
若类间具有继承关系,则它们之间应具有下列几个特性
(1)类间具有共享特征(包括数据和程序代码之间的共享)
(2)类间具有细微的差别或新增部分(包括非共享的程序代码和数据)
(3)类间具有层次结构。
多态多态性描述的是同一个消息可以根据发送消息对象的不同采用多种不同的行为方式。
所以说,面向对象的程序可以看成就是这样一些具有数据、方法的对象之间的作用。用户在设计程序的时候就需要特别注意对类的选取和设计。
2.vb.net的面向对象性
在vb的早期版本(1.0-3.0)并没有包括面向对象的功能,从Vb 4.0开始,用户可以象建立一个新的窗体一样建立一个新的类,并把它作为一个新的对象.但还只能称是半面向对象的编程语言。而Vb.net是真正意义上的完全面向对象的编程语言。本文将从Vb开始一直到Vb.net,介绍面向对象的一些基础知识。
Visual Basic中处理的任何事物几乎都和对象有关系,如果您对面向对象编程没有认识,则需要建立以下一些概念。
对象是一些把属性(Properties) 、字段(fileds) 、方法(methods)和事件(event)作为一个单独的数据类型进行处理的实体。对象可以使用户只需首先声明一些变量和方法以后,在感觉需要使用的时候,调用一个它的对象进行重用就可以了。
例如想保存一辆汽车的信息,就可以通过定义一些变量来描述一辆车的颜色和马力,但问题是,这个变量只是描述这一辆汽车的参数,如果又要描述另一辆汽车的参数的话,则又要定义一些其他变量来存储这些信息。如果使用类,就可以解决这个问题,只需要定义一个通用的汽车的类,每当需要描述一辆汽车的时候只需定义一个对象就可以了,这样就达到了代码重用的目的。
类描述了对象的字段、属性、方法以及对象的事件,对象是类的一个实例。在定义了一个类后,可以在需要的时候定义很多对象。
1.字段,属性,方法和事件
类是由属性,字段,方法和事件组成的,字段就是一个对象含有的片断的信息。用户可以象使用变量一样使用属性来存储一些信息。例如,一个对象名叫"Car",其中有一个字段名为"Color",下面的代码就是显示怎样改变"Color"字段的值的
Car.Color="Blue"
属性的检索和设置与字段相似,但是它们在类中是以"Property Get"和"Property Set"过程来定义的。
方法表示了类可以做的一些事情,例如Car对象可以有StartEngine,Drive和Stop方法。
事件是表示一个对象从外部得到的信息的一个标示,事件允许对象任何时候在事件调用的时候做出相应的动作。例如,类Car的一个事件可以是
Check_Engine。因为微软的Windows是一个事件驱动的系统,所以事件可能会来自于任何一个地方。 比如,用户点击键盘或鼠标时,就是触发了一个事件。当然,一些事件的触发可能来自于其他的对象。
2.封装,继承和多态
属性,方法和事件只是面向对象编程的部分概念,真正的面向对象编程需要对象满足和支持下面三个特性封装性,继承性和多态性。
封装性表示一个对象的属性和方法。对外界而言,是不能直接访问的。而对象本身对于属性和方法具有绝对的控制,比如一个对象可以在属性允许变化之前确认一下变量的值。
继承性表示可以在一个类的基础上建立一个新类。派生类,也就是继承类,可以具有基本类的所有属性、方法和事件,并且可以加上一些其他的属性和方法,例如可以根据基本类Car建立一个新类SUV。 SUv类可以从Car类中继承Color属性,而且还可以加上一些其他的属性例如 FourWheelDrive。
多态性是指一些不同的类可以建立一个具有相同名称的属性或者方法。多态性对于面向对象编程是非常重要的,因为它可以使用户不论在什么时候,也不论用户正在处理什么对象,都可以调用这个具有共同名称的方法。例如有一个基本类Car,多态性可以允许它的派生类具有不同定义的StartEngine方法,派生类DieselCar的StartEngine方法可能和基本类的StartEngine方法完全不一样,但是也可以调用的。当然,其他的方法或者属性也可以这样处理。
类是面向对象的基础。类和Type数据结构的区别在于,Type数据结构只有数据成员,而类的成员包括数据成员、属性和方法。类就是一个没有图形界面的ActiveX控件,用户可以使用它,但不能看到它。在vb.net以前的版本中,类不能继承,但在.Net版本中,实现了类的继承。用户可以通过以下的描述来比较类和Type数据结构的区别。
Structures是一个把一些相关的数据归类的强有力的工具,如一个用户定义的一个名为udtAccount的数据类型 Public Type udtAccount Number AsLong Type As Byte CustomerName AS String Balance As Double End Type
用户可以申明一个udtAccount类型的一个实例,然后设置里面字段的值,把整个记录打印出来,把存到数据库中等操作。
虽然Structures类型设置的功能很强大,但是在代码中,Structures可能会带来一些问题。用户可能建立一个Withdrawal过程,但在Withdrawal超过了它的平衡点的时候会产生错误,而且也没有办法阻止程序的其他地方改变Balance字段。
换一句话说,操作过程和Structures的联系靠的只是一些规定、人为的记忆以及程序员对代码维护知识的了解。
而面向对象编程就可以解决这个问题,它把数据和操作过程结合在一起,并且组成一个独立的实体。用户定义Account为一个类来代替udtAccountStructure时,这些数据都变成了私有遥,而且那些访问这些数据的操作过程也被定义为这个类的一部分,成为了这个类的属性和方法,这就是所谓的封装性,也就是说一个对象就是一个包含数据和操作的单元。
当用户通过一个类建立一个Account对象时,就可以避免这种错误,用户只能通过这个对象的属性才能访问它的一些数据字段,下面的代码片断显示了Account类中的过程怎样支持封装性 'The account balance is hidden fromoutside code.Private mdblBalance As Double'The read-only Balanceproperty allows outside code' to find out the account balance PublicProperty Get Balance()As Double Balance=mdblBalance End Properyt'TheWithdrawal method Changes the account balance'but only if an
overdraft error doesn' t occur Public Sub Withdrawal (ByVal Amount AsDouble)If Amount Balance Then Err.Raise Number=VBObjectError 2081._Description ="Overdraft"End If mdblBalance=mdblBalance-Amount EndSub
用户并不需要担心如何使用类中的操作过程,也不必担心属性、过程、私有变量的一此语法,最重要的就是记住,用户可以定义一个类来封装自己的数据和操作方法。
用户也不必要担心是否使用权了正确的对Account的操作,因为这些操作现在也被包含在对象之中了。
类在vb.net中是一个非常重要的部分,几乎所有正规的程序都包括了一个或者几个类,在vb.net中,类模块和窗体的区别已经不存在了,几乎所有的程序都是由类组成的,为了更好地使用这些类,它们被按照不同的功能分在不同的功能类库里。
除去这些表面现象,这些类库都是在独立的DLL动态库里,用户只需要用Imports说明就可以引用它们了,这样这些类里面的函数就可以用了,如
Import System.Collections'Use Collection namespace classes
逻辑上,每一个类库代表了一个独立的命名空间(namespace) ,当用户引用了一个命名空间后,编译器将可以找到这些命名空间所对应的类和方法。最常用的命名空间是"System"命名空间,它是一个缺省的引用,并不需要用户去申明它,其中包括了一些用户访问最基本的类和方法,如
Application,Arry,Console,Exception,Object以及一些基本的标准的对象,如Byte,Boolean,Single,Double,String。在下面的最简单的控制台程序中,我们可以看一看关于System的引用 Imports System'Simple Vb Hello Worldprogram Public Class cMain shared sub Main() '表明启动函数是Main'在控制台中写文本Console.WriteLine("Hello Vb World")End Sub End Class
上面的程序只是在DOS窗体中写了一句文本"Hello Vb World",程序必须以Sub Main子例程开始启动,而且在类模块中,它必须声明为"shared",而在
vb.net中这个程序则应该写成 ' simple Vb Hello World Program PublicModule cMain Sub Main()Console.WriteLine("Hello Vb World")End Sub EndModule
在上面这两个例子中,除了在类模块中,Sub Main被声明为"Share"。读者可以看出它们是很相象的,在Vb.net中模块和早期的版本的vb中的模块的作用相似,在模块中声明的方法和常量在整个程序中都是公有的。
官方网站:点击访问创梦网络宿迁BGP高防活动方案:机房CPU内存硬盘带宽IP防护流量原价活动价开通方式宿迁BGP4vCPU4G40G+50G20Mbps1个100G不限流量299元/月 209.3元/月点击自助购买成都电信优化线路8vCPU8G40G+50G20Mbps1个100G不限流量399元/月 279.3元/月点击自助购买成都电信优化线路8vCPU16G40G+50G2...
10gbiz怎么样?10gbiz在本站也多次分享过,是一家成立于2020的国人主机商家,主要销售VPS和独立服务器,机房目前有中国香港和美国洛杉矶、硅谷等地,线路都非常不错,香港为三网直连,电信走CN2,洛杉矶线路为三网回程CN2 GIA,10gbiz商家七月连续推出各种优惠活动,除了延续之前的VPS产品4折优惠,目前增加了美国硅谷独立服务器首月半价的活动,有需要的朋友可以看看。10gbiz优惠码...
公司成立于2021年,专注为用户提供低价高性能云计算产品,致力于云计算应用的易用性开发,面向全球客户提供基于云计算的IT解决方案与客户服务,拥有丰富的国内BGP、三线高防、香港等优质的IDC资源。公司一直秉承”以人为本、客户为尊、永续创新”的价值观,坚持”以微笑收获友善, 以尊重收获理解,以责任收获支持,以谦卑收获成长”的行为观向客户提供全面优质的互...