`
hell_liul
  • 浏览: 41278 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

由函数到对象又到接口

阅读更多
进行接口的介绍,必须介绍一下程序语言发展的历史才行,鲁迅先生说过“治学先治史”,明白了程序语言发展的前世今生,才能知道为什么这么多语言为什么会这样,为什么么会那样?

计算机出现以后,科学家相继开发了多种语言,从smalltalk,Pascal,Basic,C语言,C++,java,.net等等,这些语言的发展步伐,可以看作是从面向过程向面向对象发展的一段历史。很多面向对象的书在介绍自己的历史的时候,都会给读者介绍这一段历史,并鼓吹OO编程是多么多么的优异。问题是,很多刚开始学程序的人根本不知道为什么要有这个转变,他们也很难理解OO语言中的虚函数,接口等概念到底为了什么而提出来。

我们在了解这一段历史以前,首先给大家介绍一个概念——“粒度”,什么是粒度?作者认为所谓粒度其实就是一个程序中使用代码单元的组合尺度,我们可以举一个例子,沙砾——砖块——房屋模板,我们设想去修建一座房子,其实有很多中修筑方法,如果你不闲麻烦,可以使用沙砾一点点地建筑,或者将沙砾烧制为砖块,用砖块来砌,甚至直接从工厂购买房屋的门,窗,墙组件来堆砌。这三种不同的方法代表了三种不同的组合尺度。沙砾是最小的单位,使用它搭建小的房子说不定还可以,但是毫无疑问,我们必须使用很多很多“沙砾”,不便于管理;砖块比沙砾聚合了一层,可以用来修建较大的房子了;房屋模板是最高的尺寸,使用它可以快速地搭建大规模的房屋。这三种尺度的区别和联系,与我们编写程序概念是有很大的相似之处的。

在早期学习Pascal,老师告诉我们这种面向过程语言的最基本的单元是过程和函数,它们是程序中的最小的组件。过程和函数可以实现最基本的代码重用,当我们把某些固定功能的代码使用过程和函数编写后,我们可以在程序中调用它们而不必在任何需要的地方都写上这样一段代码,这样的好处是显而易见的。在一些小型的程序里面,使用过程和函数是合适的,但是在大中型程序中,它们的弊端就显示出来,过程和函数的粒度太低了,如果我们一个系统,有10000个函数和过程,我们的程序员将不得不花费大量的时间去寻找和维护它们,10000个没有任何关系的函数和过程的管理难度是显而易见的,就好像10000个人的企业一样,如果没有部门和职务,这还不乱了套?!

面向对象语言的出现,就是为了解决这个问题,别听OO语言吹的天花乱坠,其实它出现就为一个理由——提高编程的粒度。面向对象语言的基本单位是类CLASS,类封装了很多数据成员和成员函数,过程,将最小组件的提高了一个等级,我们需要直接操作的不是过程和函数了,而是一个个更高层次上的类。我们把10000人分了很多部门,不同的部门负责不同的事宜,这样公司终于可以走上正轨了。

做成了类CLASS是否就万事大吉了呢?不一定,新的问题随之而来,也许我们有一个部门的人很多,可以做很多事情,如何在部门内部实现更好的管理呢?好比我们有一个类,它提供了很多种方法和属性,这些方法和属性其实可以分为一堆堆,为不同的功能服务,但是我们的类并没有做这个管理。在AO种,map对象拥有很多功能,比如管理图层,管理元素,管理选择集,进行地图显示,每种不同的功能都有好多方法和属性,现在这些属性和方法是杂乱无章,没有任何区别堆积在一个类里面的,当我们的程序员需要寻找一个方法的时候,不得不一个个去寻找,很不方便。

这个时候,接口interface出现了,C++的发明者第一次提出纯虚函数(其实就是接口)概念的时候,遭到了很多抵制,很多人都不明白接口的意义何在,我们用虚函数好好的,何必又出来个啥东西都没有的空架子?说它是类吧,又不能实现产生一个对象;说它是对象吧,又没有方法体来使用。接口出来干了一件好事,就是将类内部进行分类。对于map对象,我们可以做好几个接口,这些接口中定义不同功能的方法,函数和属性,map类实现这些接口,这样我们可以使用接口定义,实现对象。因此,所谓接口就是一系列相关方法与属性集合的定义。

Dim pGraphicsContainer as iGraphicsContainer
pGraphicsContainer=application.document.ActiveView.focusMap
pGraphicsContainer可以使用的属性和方法就只能是它定义的那部分了,而不能使用管理元素等的接口定义的方法和属性,那我们如何使用其它的功能呢?这就是所谓的QI(Query Interface)功能。从一个接口查询另一个接口。

Dim pActiveView as iActiveView
pActiveView= pGraphicsContainer       QI

好了,我们罗嗦了这么多,已经走进了COM的概念了,在正式介绍COM以前我们得最后罗嗦一点:计算机语言的发展历史,其实就是一部不断提高组件粒度的历史,不断提高代码重用的历史。以前我们使用过程和函数,后来我们使用类,现在我们使用接口,都是为了一个目的,让我们操作的组件在具体和抽象之间寻找一个平衡点。太具体了,如过程和函数,就没有了框架;太抽象,如类,就无法分别。
分享到:
评论

相关推荐

    proUSB接口函数[0922中性版]_prousb_proUSB接口函数

    在IT行业中,USB接口函数是实现设备间通信的关键部分,特别是在硬件控制和嵌入式系统中。`proUSB`是一个专业级别的库,用于在Delphi和VB(Visual Basic)环境中与USB设备进行交互,尤其是针对特定的门锁硬件。本文将...

    DLL函数接口查看器

    接口在编程中是一个定义了类、对象或模块对外暴露的功能和方法的规范。对于DLL,接口主要指的是可供外部程序调用的函数声明。这些函数声明定义了函数的返回类型、参数类型和数量,使得调用者能够正确地使用DLL提供的...

    电子门锁接口函数宾馆电子门锁编程接口

    在IT行业中,电子门锁接口函数是用于连接和控制宾馆电子门锁的一种关键技术,它使得宾馆管理系统能够与门锁设备进行数据交换,实现客房钥匙的分配、授权、撤销等功能。Roca(诺卡)是一家知名的门锁制造商,其产品在...

    c++ 类与对象课件,包括对象的初始化,对象的使用,构造函数和析构函数等等

    栈对象的生命周期由其作用域决定,而堆对象需要程序员手动管理其生命周期。 理解并掌握这些知识点,将有助于编写出更加高效、健壮的C++代码。在实际编程中,应灵活运用面向对象的设计原则,如单一职责原则、开闭...

    2.接口函数库(二次开发库)使用说明书1

    【接口函数库(二次开发库)使用说明书】 接口函数库,通常称为二次开发库,是为软件开发者提供的一组预定义函数,以便他们能够轻松地与特定硬件或系统进行交互,实现特定的功能。这些库通常由硬件供应商或系统开发...

    面向对象的虚函数使用总结

    纯虚函数的存在使得我们可以定义一个通用的接口,而具体的实现则由派生类来完成,这对于构建面向接口编程的系统非常有用。 多态性是面向对象编程的一个核心特性,分为编译时多态和运行时多态。编译时多态主要通过...

    CAN接口函数使用说明

    例如,VCI_BOARD_INFO用于描述接口卡的信息,VCI_CAN_OBJ包含了CAN消息对象的信息,而VCI_CAN_STATUS则用于表示CAN的状态。这些数据结构的定义为CAN函数的参数传递和返回值提供了标准化的格式。 在接口库函数说明...

    精通windowsAPI函数接口编程实例源代码

    《精通Windows API函数接口编程实例源代码》是一个深入学习Windows API编程的重要资源,它涵盖了大量实践案例,旨在帮助开发者熟练掌握API接口的使用技巧。Windows API是微软为开发者提供的一个平台,通过它,程序员...

    精通Windows.API-函数、接口、编程实例.pdf

    6.5.5 声明导出函数、创建lib库,为其他模块提供导入表调用接口 190 6.5.6 通过构建导入表调用DLL导出函数 191 第7章 线程同步 192 7.1 基本原理 192 7.1.1 线程同步的过程 193 7.1.2 同步对象 193 ...

    C#中虚函数,抽象,接口的简单说明

    在面向对象编程(OOP)中,虚函数、抽象类和接口是三个基本概念,它们在C#语言中也有对应的实现。下面我们将对这三个概念进行详细的解释。 虚函数(Virtual Function) 在C#中,虚函数是通过virtual关键字声明的,...

    精通Windows_API-函数、接口、编程实例_pdf+源码.rar

    《精通Windows API:函数、接口、编程实例》是一本深入探讨Windows操作系统编程的书籍,它主要涵盖了Windows API的核心概念、关键函数以及实际编程应用。Windows API是开发Windows应用程序的基础,它提供了一系列...

    Tekla Structures 15.0 .NET接口函数帮助

    ### Tekla Structures 15.0 .NET接口函数帮助知识点详解 #### 一、Tekla Structures 15.0 .NET接口概述 Tekla Structures 是一款由 Tekla Corporation 开发的专业三维建筑信息模型(BIM)软件,广泛应用于建筑、...

    c++类成员函数作为回调函数

    6. **C++20的函数对象适配器** C++20引入了`std::function_object_adapter`,它可以直接将成员函数转换为可调用对象,简化了成员函数作为回调的使用: ```cpp auto callback = std::function_object_adapter, ...

    c++空对象指针也可调用成员函数.rar

    1. 多态接口设计:通过基类指针调用虚函数来实现对不同子类对象的操作。 2. 销毁对象时:在析构函数中可能需要调用虚函数,即使对象已经为空。 3. 遍历容器:如`std::vector*>`时,可能会遇到空指针,此时虚函数调用...

    C++继承多接口,调用虚函数跳转到错误接口的虚函数的奇怪问题demo

    在“C++继承多接口,调用虚函数跳转到错误接口的虚函数的奇怪问题demo”中,我们可以假设存在以下情况: ```cpp class InterfaceA { public: virtual void foo() = 0; }; class InterfaceB { public: virtual ...

    函数和window对象

    在JavaScript编程中,...函数是组织和复用代码的关键工具,而`window`对象则提供了与浏览器环境交互的接口。通过深入学习这两个主题,开发者可以更高效地编写和调试JavaScript代码,从而更好地控制网页的行为和交互。

    can二次开发接口函数

    开发者可以将这些接口函数导入到自己的应用程序中,通过调用这些函数来控制CANopen节点,实现与CAN网络的交互。 为了成功进行二次开发,开发者需要深入理解CANopen协议的规范,熟悉每个接口函数的工作原理和参数...

    工厂接口虚函数抽象函数单例DEMO

    在"工厂接口虚函数抽象函数单例DEMO"中,我们将探讨这些概念在ASP.NET C#中的应用。 首先,让我们了解这些关键概念: 1. **工厂接口**:工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,尤其是在...

    COM接口和DLL接口函数查看器.zip

    与COM接口不同,DLL接口通常不涉及对象的概念,而是直接提供函数调用。使用“DLL接口函数查看器”,用户可以查看DLL文件中导出了哪些函数,这对于理解和使用第三方库,或者分析系统动态链接库的功能非常有帮助。 ...

    labview面向对象封装的视觉函数oop

    在描述中提到的“面向对象封装的视觉函数OOP”是指利用LabVIEW的面向对象编程特性来封装视觉处理功能。面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它通过类和对象的概念来组织代码,使得...

Global site tag (gtag.js) - Google Analytics