面向接口编程简单比较

面向接口编程简单比较,第1张

概述java中有抽象类和接口类的概念: 抽象类: 包含抽象方法的类叫做抽象类。如果一个类包含一个或多个抽象方法,该类必须被限定为抽象的。如果从一个抽象类继承,并想创建该类的对象,那么必须为基类的所有抽象方法提供方法定义。如果不这样做(可以选择不做),那么导出类便也是抽象类,且编译器将会强制我们用abstract关键字来限定这个类。       抽象类和抽象方法非常有用,因为他们可以使类的抽象性明确起来 java中有抽象类和接口类的概念:

抽象类:

包含抽象方法的类叫做抽象类。如果一个类包含一个或多个抽象方法,该类必须被限定为抽象的。如果从一个抽象类继承,并想创建该类的对象,那么必须为基类的所有抽象方法提供方法定义。如果不这样做(可以选择不做),那么导出类便也是抽象类,且编译器将会强制我们用abstract关键字来限定这个类。      

抽象类和抽象方法非常有用,因为他们可以使类的抽象性明确起来,并告诉用户和编译器打算怎样来使用它们。抽象类还是很有用的重构工具,因为他们使得我们可以很容易地将公共方法沿着继承层次结构向上移动。我的理解是:我们可以让多个继承自抽象类的实例对象的指针(暂且这么形容吧)赋给抽象类类型指针。让抽象类类型指针统一调用这些实例对象的抽象方法,即完成接口编程

 

接口类:

将产生一个完全抽象的类,它根本没有提供任何具体的实现。它允许创建者确定方法名,参数列表和返回类型,但是没有任何返回体。接口只提供了形式,而未提供任何具体的实现。一个接口表示“所有实现了该特定接口的类看起来都像这样”。接口被用来建立类与类之间的协议。不同类实现时所共同遵守的协议,不在一个继承层次里的多个类都可以向上转型为接口类型对象。

接口不仅仅是一个极度抽象的类,他们它允许人们通过创建一个能够被向上转型为多种基本的类型,来实现某种类似多重继承的特性。我的理解是:我们可以让多个实现接口类的实例对象的指针(暂且这么形容吧)赋给接口类类型指针。让接口类类型指针统一调用这些实例对象的接口方法,即完成接口编程。

 

 

 

objective-c中有类别和协议的概念:

类别:

利用objective-c的动态运行时分配机制,可以为现有的类添加新的方法。原理是先定义一个类别:

 

         @interface 类类型   (类别名)

 

          -(TYPE *) 方法名;

 

         @end

 

然后在类类型的实现中实现类别方法。这样,我们就可以在已有类类型中添加一个类别,并且这个类类型可以选择性的实现这个类别的方法。利用类别可以分散实现,最重要的是委托技术使用了类别的概念。委托是一个对象,另一个类的对象会要求委托对象执行它的某个 *** 作。通过创建一个NSObject的类别,任何类的对象都可以作为委托对象使用,因为cocoa中所有对象都是继承自NSObject的。这样的话,既不需要像C++那样从某个特定的委托类中继承,也不需要像java那样符合某个特定的接口类或抽象类。它只要把包含NSObject的类别定义的头文件import进来,实现类别方法,就可以实现委托方法了。换句话说:被发送给委托对象的方法可以声明一个NSObject的类别。objective-c正是通过类别的概念实现了非正式协议这样一种面向接口编程的设计。

 

协议:

正式协议是一个命名的方法列表。和非正式协议不同的是,正式协议要求显式地采用协议。采用协议意味着你承若实现该协议的所有方法。这个概念和java中的接口类的概念极其想像,事实上,objective-c的协议正式受理java接口的启发。

 

           协议定义:

 

          @protocal 协议名

 

           协议方法

 

          @end

 

           对象的协议实现:

 

          @interface 类 <协议名>

 

          ......

 

          实现协议的方法

 

          @end

 

          

ID类型表示一个可以指向任何类型对象的指针,它是一个泛型对象类型。如果一个用尖括号括起来的协议名称跟随一个ID之后,则编译器将知道你期望任何类型的的对象,只要其遵守该协议。

 

         - (voID) setXXX: (ID <协议名>) obj;

 

          这样做,可以像java接口类那样,用泛型类类型指针执行某一个协议方法。即实现了面向接口编程。

 

 

 

C++中有动态绑定和虚函数的概念:

动态绑定:在c++中,通过基类的引用(或指针)调用虚函数时,发生动态绑定。引用(或指针)既可以指向基类对象也可以指向派生类对象。用引用(或指针)调用的虚函数在运行时确定,被调用的函数是引用(或指针)所指对象的实际类型所定义。   

派生类一般会重定义所继承的虚函数,如果派生类没有重定义某个虚函数,则使用基类中定义的版本。一旦函数在基类中声明为虚函数,它就一直为虚函数,派生类无法改变该函数为虚函数这一事实。    

c++的指针和引用的动态类型(动态绑定),是c++支持多态性的基石,也是面向接口编程的基石:我们大可以让引用(或指针)指向基类类型,让他动态绑定地执行派生类或基类的特定虚函数实现。    

含有(或继承)一个或多个纯虚函数的类是抽象基类,除了作为抽象基类的派生类的对象的组成部分,不能创建抽象类的对象。这个概念多少像java中的抽象类。 

总结

以上是内存溢出为你收集整理的面向接口编程简单比较全部内容,希望文章能够帮你解决面向接口编程简单比较所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1056504.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存