走近VB.Net(五) VB.Net核心概念

概念

走近VB.Net(五) VB.Net核心概念
VB.Net中文教程在行文上有些重复太多甚至有些啰嗦,以至让人读得索然无味,但是,这个VB.Net中文教程确实是很难得甚至可以说是经典的VB.Net文章。说老实一点,除了读得累一些外,实在是比我写的好多少倍。第二个问题就是很多人谈到很惨,说一切要从头学起,其实所要你学的不过是一些简单的语法变化,最重要的是观念的改变,也就是思维方式的转向,也就是说在经过了最初的摸索以后,你在VB6(我是不懂VB6的,我只懂一些D(不是你想的那个D),没有面向对象成功,现在我决定学这个了)的功力一样会运用得酣畅淋漓。另外一些提到Beta版的问题,因为编程语言不同一般的软件,虽然是Beta,基本的语法已经定向,微软发布的的关于Beta2的文章中所涉及的主要是一些内部的组件的功能提高与Bug的修正,关键是VB6在让你用得很舒服的同时也为你进行了很大的局限性,而VB.Net正是突破这些局限,另外在前不久有一些不利的传言,这大部分是出现在VB.Net发布之前出现的。很多人甚至断言在VS.Net中不再有VB了。而现在恰恰相反。最早宣称VS.Net取材Java的一篇英文文章的作者在近期的撰文中声称更正以前的说法,他们只是要表面很象,而内部的是实现途径是完全不同的,因为我不是很懂这些,就不谈题外话了。所以对种种传言一定要是非分明,如果你不想落后,你必须学习新兴的东西,而你根本不必太过去关注一些太大的话题,例如将来VS.Net的通用语言库会不会运行于所有的平台,起码我只关心能不能做出好的windows程序,如果到了你必须关心这些大事的程度,这里所有的说明对于你的水平来说只是废话了。下面是我读VB.Net中文教程的一些评述,兼答复一些关于我的文章的问题
一。对象(Object)基本概念
我们且看如下一段:
原文如下“软件的对象是自然界对象的抽象表示”
原文如下“现在的「对象导向」(Object-Oriented) 观念﹐在软件开发时﹐甚至写程序时﹐对象(Object)成为脑海里的主角。当您看到程序时﹐心理充满着对象之影子和概念﹐函数和资料变成对象内之一部分﹐是配角而非主角了。程序设计之核心工作在于描述对象、组织对象、安排对象间之沟通(传递讯息)方式。就如同「人」是社会中的主要对象﹐社会是有组织的人群﹐人们之间会互相沟通、协调。”
对象的其本观念取材于社会,程序的组织抽象于社会的组织,从写软件到组织软件的形式就是进步
原文如下“由于软件中的对象观念和实际社会中的对象观念是一致的﹐所以 OOP观念使软件与实际世界间之距离缩短了。此为 OOP技术的重要特点之一。”
什么是OOP,一个软件工程包括操作系统就是一个微缩的社会群体。比如我们同路人打个招呼,只要打招呼就可以,你要关心的是亲疏的程度,怎样打招呼,而不必关心你的大脑如何接受这个信息,甚至如何发送这个信息,以及如何处理这个信息.
一个Namespce就是这样一个群体(族,我取的是抽象的意义,也就是网友说的“a group of thing with common features (族).当然你完全有理由叫他名称空间,名字空间,命名空间,名空间"。进而到族与族的关系,群体到群体的关系。
因此,
原文如下“例如﹕函数或程序导向之核心观念──函数﹐在一般人们的心目中﹐并非熟悉之概念﹐只在数学里学到之概念而已。因而让人对软件感到陌生。而在对象导向观念中﹐实际社会之对象﹐例如﹕人、汽车、股票、磁盘驱动器、帐单、房间、学生、教室等皆为软件设计师脑海中的对象﹐也是程序中的对象。因之﹐不论是老板或程序设计师来看程序﹐他们脑海中皆充满对象之影子﹐而这些个体皆为人们生活中﹐真正活生生的东西、实在之物体或大家耳熟能详之概念﹐使得软件之使用者和设计者有一致的心灵、共同之感觉﹐这让使用者对软件更满意﹐设计师更了解使用者之需要。”
也就是你作为一个人的对象想从一个位置到另外一个位置,如"S=I.tostring" ,我从I到S,I是在Integer,而S居于String.于是我过去了,从integer到string。而不必要关心他如何的过去。使用哪一个函数。
再看类别
原文如下"以上介绍的是常用之寻找对象方法﹐会寻找对象之后﹐就必需将对象分门别类﹐并且了解类别间之关系﹐以便把它们组织起来。例如﹐在公司的人事结构中﹐可发现人因扮演角色之不同而分为不同种类之对象﹐如推销员、司机、经理等等。汽车可分为跑车、巴士、旅行车等不同种类之对象。如何分类(Classification)﹐是OOP 之重要观念"
有网友拿我开玩笑,说namespace叫族,那么这个class叫班级,不知这个玩笑对我们倒是有些启发的,同样是类别,A班级与B班级到头都是学生的团体,也就是说不能形成一个类,而且学生毕业了,A班级会被C班级所取代,B班级以会被D班级所更替,所以他是有寿命的,而人类是一个类,学生是一个类,老师是一个类,这个是无寿命的。如form是一个类,form类是一直都在的,而formX在unload以后结束了, formX也就没有了
原文如下“例如﹐一个人从出生到老﹐不超过二百年﹐而「人类」则因对象生生不息而永远昌隆。在学校里﹐King老师会换工作而离开学校﹐但「老师」类别将永远存在。因之﹐个体及其所属的群体──类别﹐皆是 OOP之核心观念”
在看了以上一些引用后,你可能会想到,对于这些近于艺术化的解释,中文的表述还是比较好的
二。对象Whole-Part关系
原文如下“类别继承(Class inheritance)和对象组合(Object composition)是软件再使用(Reuse)的两大法宝。类别继承就是建立父、子类别之关系﹔例如﹐「学生」可分为「大学生」、「中学生」和「小学生」三类别”
类别继承(Class inheritance)大概是人人都知道了,至于对象组合(Object composition)你把他理解为你自已写的一个族就很容易理解了,类通过建立子类成为族,虽然没有明确的这样定义,但是有助于理解,如system.drawing你可以理解为一个类,或者说类库也可以,同样因为含有子类,你也可以把system.drawing当作一个族名(namespace),这个子类与通过继承关系
得到的子类意思不同,这不难理解,形象的如下:
Class class1 'Whole
Class class1-1 'Part1
.......
end Class
Class class1-2 'Part2
......
end Class
......
end Class
原文如下"对象组合的目的是﹕创造「复合对象」(Composite object)﹔例如﹐医院内含医师和护士等"
原文如下"继承与组合两大法宝能联合使用﹐以组织庞大的软件系统"
1。原文如下“组合/部分关系﹐常称为APO(A part of)关系”
Class House 房子House是一个整体
Class Door 门Door是一个部分
。。。。。。
End Class

Class Window 窗Window是一个部分
。。。。。。
End Class
。。。。。。。
End Class
原文如下“House 之对象诞生后﹐立即诞生内含之Door对象和Window对象”
所谓诞生对象就是声明一个实例,如 dim xxx as new hourse(房子)
原文如下“组合对象与部分对象的寿命应该是一致的”
2。 原文如下“司机不是汽车的零件﹐客人亦非巴士之组件﹐所以汽车与司机之间并非「组合/部分」关系﹔然而﹐汽车的确包含着司机﹐因之称为「包含者/内容」(Container-contents)关系。”
这个是一个平行的关系,如:
class i(司机)
dim x as string
.......
end class
class h(汽车)
dim myi as new i
myi.x.......
......
end class
现在i没钱了,要到h的公司里打工(dim myi as new i),i的数据x(dim x as string)只好交给myi.x为h服务,所以哪天环境变了,也可以反过来,h为i打工。所以是一个客体了。
所以,原文如下:“司机和汽车为独立之对象﹐不像引擎一直包含于汽车内﹔于驾驶汽车时﹐司机才被包含于汽车内。显然地﹐司机与汽车之寿命不一样长。”
3。原文如下:“集合意谓着「团体」(Group) ﹐由其成员(Member)组成的群体。例如﹐学校里的社团内有团员﹔公司的销售部含有推销人员。这团体并不像汽车实际包含着司机﹐而只是其成员之集合而已。这情形﹐统称为「集合/成员」(Collection-members)关系”
也就是说在「包含者/内容」中包含者是容器,而在「集合/成员」中集合并不是容器
原文如下“不需明确划分「包含者/内容」和「集合/成员」两种关系”
那么,成员与内容有什么不同呢,准确的说,内容是一个对象,而成员是对象的集合,而这个对象的集合又被被含在整体中,而且认为这个成员即可以是外来的,又可以是本来就有的。就好比公司的成员即可以是外面请来的,又可以是内招的。这个意思有些象列表框,列表框的列表项可以是本来就有的,又可以不停的添加进来。「包含者/内容」(Container-contents)是跑单帮,这个就是有组织的了。包含者更象一个容器,而集合反而成为对象。这就成了「包含者/集合/成员」,如果内容是一个变量,集合就是一个数组。
Class Person(成员对象--个人)
。。。。。。
End Class
Class Club(集合对象--俱乐部)
。。。。。。
Private pa As ArrayList = New ArrayList() (建立了一个集合ArrayList类,这个类的方法有Add ;Remove等)
Public Sub join(ByVal p As Person)(ByVal p As Person起到了类似dim p as person的作用,引进了一个“内容”)
pa.Add(p) (把"内容"添加到一个"集合")
End Sub
End Class

三.关于封装性
所谓封装性就是在类与类之间设定合法之存取规律
Public 关键字指定在类与类之间是公用的
Protected 关键字指定在同一个类(族)之间是公用的,包括他的子类
原文如下“指定某些资料为家族公用﹐亦即只有子孙类别内之程序可取用﹐非子孙类别之程序必须呼叫家族内之程序代为存取。”
细心的读者可能已注意到这里已经使用了“ 家族”的说法,印证了族的定义。
Private 关键字指定是私有的,不能外部存取,也不能在族内共享,只能在他自已的空间活动了。
如果想访问Private的对象,只有使用set;get写一个接口,或者使用这个对象内的子过程或函数去执行了,当然你要加上Public在sub或function前面了。

四.父子对象关系(继承关系),母子对象关系(Whole-Part关系)
我突然不想写了,大家可别生气,如果想了解更多,还是去看人家的教程吧,我专挑一些容易的看,可不要学我,这样难免断章取义(是不好的)。另外各位要是看出错误来就请指证,这个反正大家是探讨。如果有想骂的,最好到我的论坛去发泄一下(人少),好歹给兄弟一些面子。最好是看得生气了,以至于水平很好又不喜欢写文章的气得写VB.Net了,英文很好又不喜欢翻译的气得去翻译VB.Net了,我们这一大群“文忙”就有福了(不需要再看我这些劣质文章了)。

时间: 2024-10-29 15:09:15

走近VB.Net(五) VB.Net核心概念的相关文章

走近VB.Net(十三) VB.Net问答全集

走近VB.Net(十三) VB.Net问答全集 VB.Net中文站 http://vbnetcn.126.com hejianzhong 最近老是有人问一些重复的问题,我就想到把他们汇总起来,现在用VB.Net太少,资料更少.问的人也不多,这 些都是从全国的讨论组收集的,有一部份来自-[VB.Net中文站讨论组]http://my.6to23.com/vbnetcn/bbs/BBS2index.htm. 一些是我回答的,有一些是一些较早研究VB.Net的网友回答的,因为是探讨的阶段,可能会有一些

java中的四个核心概念

  Java已经成为一个庞大而复杂的技术平台,对于开发人员而言,要想更好的掌握Java技术,深入理解底层的技术处理细节必不可少.现在介绍下java的四个核心概念: 1.Java虚拟机 Java虚拟机的主要任务是装在class文件并且执行其中的字节码.Java虚拟机包含一个类装载器,它可以从程序和 API中装载class文件.Java API中只有程序执行时需要的那些类才会被装载.字节码由执行引擎来执行.不同的Java虚拟机中,执行引擎可能实现得非常不同.在由软件实现的虚拟机中,最简单的执行引擎就

x264代码剖析(十五):核心算法之宏块编码中的变换编码

x264代码剖析(十五):核心算法之宏块编码中的变换编码           为了进一步节省图像的传输码率,需要对图像进行压缩,通常采用变换编码及量化来消除图像中的相关性以减少图像编码的动态范围.本文主要介绍变换编码的相关内容,并给出x264中变换编码的代码分析.   1.变换编码           变换编码将图像时域信号变换成频域信号,在频域中图像信号能量大部分集中在低频区域,相对时域信号,码率有较大的下降. H.264对图像或预测残差采用4×4整数离散余弦变换技术,避免了以往标准中使用的通

《Spark大数据分析:核心概念、技术及实践》大数据技术一览

本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第1章,第1节,作者穆罕默德·古勒(Mohammed Guller)更多章节内容可以访问"华章计算机"公众号查看. 大数据技术一览 我们正处在大数据时代.数据不仅是任何组织的命脉,而且在指数级增长.今天所产生的数据比过去几年所产生的数据大好几个数量级.挑战在于如何从数据中获取商业价值.这就是大数据相关技术想要解决的问题.因此,大数据已成为过去几年最热门的技术趋势之一.一些非常活跃的开源项目都与大数据

《Spark大数据分析:核心概念、技术及实践》Scala编程

本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第1章,第2节,作者穆罕默德·古勒(Mohammed Guller)更多章节内容可以访问"华章计算机"公众号查看. Scala编程 Scala是当前热门的现代编程语言之一.它是编程语言界的凯迪拉克.它是一门强大且优美的语言.学会了它,对你的职业生涯大有裨益. 用不同的编程语言都可以编写大数据应用程序,比如Java.Python.C++.Scala等.Hadoop本身就是用Java编写的.尽管大多数的

Maven介绍,包括作用、核心概念、用法、常用命令、扩展及配置

两年半前写的关于Maven的介绍,现在看来都还是不错的,自己转下.写博客的一大好处就是方便自己以后查阅,自己总结的总是最靠谱的. 由浅入深,主要介绍maven的用途.核心概念(Pom.Repositories.Artifact.Build Lifecycle.Goal).用法(Archetype意义及创建各种项目).maven常用参数和命令以及简单故障排除.maven扩展(eclipse.cobertura.findbugs.插件开发).maven配置. 较长,可根据个人需要有选择性的查看,比如

《Spark大数据分析:核心概念、技术及实践》Spark Core

本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第1章,第节,作者穆罕默德·古勒(Mohammed Guller)更多章节内容可以访问"华章计算机"公众号查看. Spark Core Spark是大数据领域最活跃的开源项目,甚至比Hadoop还要热门.如第1章所述,它被认为是Hadoop的继任者.Spark的使用率大幅增长.很多组织正在用Spark取代Hadoop. 从概念上看,Spark类似于Hadoop,它们都用于处理大数据.它们都能用商用硬

《Spark大数据分析:核心概念、技术及实践》一3.9 共享变量

 本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第3章,第3.9节,作者[美] 穆罕默德·古勒(Mohammed Guller),更多章节内容可以访问"华章计算机"公众号查看. 3.9 共享变量 Spark使用的架构是无共享的.数据分布在集群的各个节点上,每个节点都有自己的CPU.内存和存储资源.没有全局的内存空间用于任务间共享.驱动程序和任务之间通过消息共享数据. 举例来说,如果一个RDD操作的函数参数是驱动程序中变量的引用,Spark会将这

《Spark大数据分析:核心概念、技术及实践》一 第2章 Scala编程

  本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第2章,第2.1节,作者[美] 穆罕默德·古勒(Mohammed Guller),更多章节内容可以访问"华章计算机"公众号查看. 第2章 Scala编程 Scala是当前热门的现代编程语言之一.它是编程语言界的凯迪拉克.它是一门强大且优美的语言.学会了它,对你的职业生涯大有裨益. 用不同的编程语言都可以编写大数据应用程序,比如Java.Python.C++.Scala等.Hadoop本身就是用J