返回首页


{S0}简介
随着现实生活中的问题和设计架构的解决方法的变化,软件项目开始发展,而不是使用面向对象编程结构编程。强大的结构,如C语言已成为冷门在大型项目,由于调整结构解决方案困难成熟的因素(可重用性,可扩展性等..)我们讨论一个适应OOP的概念结构语言的多态性。背景
由于OOP的是完全不同的方法,根据结构编程,它带有许多编程工艺结构编程不同。其中这些工艺是多态性。多态性简单的意思是"通用的接口,具体实施",深受意味着每个类都有自己的实现,而它们共享一个通用的接口。这个概念带来好处,如面向对象编程结合在一个标准的接口所有对象的行为,并把它与所有类。作为一个面向对象的概念,可以此功能结构,如C语言实现的呢?C提供了强大的编程能力,如指针和结构。并使用这些元素,多态模型可以得到部分实施。使用代码
这段代码只是一个示例你可以做什么多态性的方式,在C。因此代码小,并解释它是如何工作的,大量的评论已被添加。还有其他的提示鉴于如何可以使结构概念类似面向对象。
首先,我们应该有一个结构,像类和相关职能的行为

#ifndef _POLY_STRUC_H

#define _POLY_STRUC_H



struct POLY_STRUCT

{

    /* Extra Fields and Encapsulation functions here */

        

    void (*poly)( );    // Polymorphic method 

                        // init to null to this method 

                        // to abstract 

                        // so making this struct an 

                        // abstract class

    };



    /* Allocates and initializes a POLY_STRUCT with a 

       function pointer */

    struct POLY_STRUCT *InitPoly( void (*poly)() );

        

    /* Deallocates a POLY_STRUCT */

    void DestroyPoly( struct POLY_STRUCT *poly );

        

    /* Executes run function of POLY_STRUC */

    void Run_Poly_Method( struct POLY_STRUCT *poly );



#endif


在这一部分,我实现了初始化的典型功能,破坏结构和调用典型的多态方法。在其他情况下,这方法可以更改或延长。{C}
和样品的主类,看看它是如何工作的:
#include <stdio.h>

#include <stdlib.h>

#include "POLY_STRUC.H"



/* Polymorphic Structures , this could be an set or array 

   of POLY_STRUC* */

struct POLY_STRUCT* example_poly1;

struct POLY_STRUCT* example_poly2;



/* Functions to assign for polymorphic structures */

void poly_example1_method(){printf("EXAMPLE1\n");}

void poly_example2_method(){printf("EXAMPLE2\n");}



int main(int argc, char *argv[])

{

    /* Initialize Polymorphic structures */

    example_poly1 = InitPoly(&poly_example1_method);

    example_poly2 = InitPoly(&poly_example2_method);    

    

    /* Execute polymorphic method in each structure */

    /* Polymorphic methos can be executed directly from 

       struc */

    /* This functions are added for modularity */

    Run_Poly_Method(example_poly1);

    Run_Poly_Method(example_poly2);

    

    /* Destroy initialized Polymorphic structures */

    DestroyPoly(example_poly1);

    DestroyPoly(example_poly2);

    return 0;

}

</stdlib.h></stdio.h>
结论
在适应多态性,函数指针中起着设计大的作用。还利用结构是创造一流的面向模型的重要。但是,在当前不适用的情况下,我们可以在C封装(没有私人或保护修饰符)。
很明显,多态性是更有效时,它的在OOP(继承或成分)。在这篇文章中,我们的目标是使用面向对象方面,在结构语言多达我们可以利用它的优势。但缺乏动态约束力,但它确保静态和硬编码。
有关的优点和缺点是什么?之间进行权衡性能和问题解决方案的好处(使用一种面向对象在项目的设计,简化了解决方案,同时也提高可重用性和可扩展性),在这篇文章的主要设计考虑。性能的影响是显而易见的。通过函数指针调用函数相对缓慢。还访问结构的成员,使执行速度较慢。但在另一边的可重用性和可扩展性的增益为确保明显。
适应多态性带来一些额外的代码实现,使相对较小的项目更加复杂和难以理解的。重要的是要使用在规模大的项目多态性(操作系统,硬件实现等..)有效地使用它。但这种劣势变成成一个优势,在大型项目中使用时。兴趣点
这是一个完全不同的经验,如使用C,C,我知道这是使用面向对象的离散结构的方法非常重要,但也它也是重要的相似之处。很长一段时间,我开发的项目面向对象的语言(C,C#,JAVA),再次使用C是相当享受。我觉得我将继续加强这一概念,通过添加其他辅助方法。历史
1.0版 - 最初的版本

回答

评论会员:的Sudhir曼格拉 时间:2011/12/07
这里是我的多态性条在C


«超人»
评论会员:GokalpPeker 时间:2011/12/07
我觉得如果有人想利用多态性他应该移动到C或其他现代语言
你为什么要实现在C
多态性曼格拉的Sudhir http://DevelopersVoice.com
(VC常见问题,MFC常见问题,C常见问题)
http://Programmerworld.net
(免费书籍和源代码)
评论会员:吉姆Crafton 时间:2011/12/07
我觉得这个:

这种系统使用基于Unix的操作系统systems.There定义"file_operations结构"提供了一个用户,以实现自己的文件操作功能(如使用lseek,读,打开)编码时文件系统驱动程序中的函数指针。

[AGP]
评论会员:GokalpPeker 时间:2011/12/07
对我来说,这只是原来不可读的代码。你想,塞进了一圈一个正方形,它不适合。
虽然看到代码回旋模拟这种行为是很有趣,它肯定似乎想了很多小的收益工作。

"厄尔尼诺暗黑ESTA连接MIS pantalones! "沼泽泥潭!

实际Mentats使用只有100%纯,unfooled SAPHO果汁(TM)!
周围
SELECT * FROM用户WHERE线索> 0
返回0行{A2}
{A3}
评论会员:怀疑论者痣 时间:2011/12/07
其实我,写道:

适应多态性带来一些额外的代码实现,使相对较小的项目更加复杂和难以理解的。重要的是要利用规模大的项目(操作系统,硬件实现等..)的多态性,有效地使用它。但这种劣势变成一个优势,在大型项目中使用时。

我劝你完全阅读it.And还面向对象的语言编写的所有代码汇编代码翻译后写的一篇文章的评论,和它的结构,所以这不是"塞进一个圆广场",部分揭示多态性的作品。

结构langs。非常适合结构的纲领性概念,但这篇文章是新概念只有一个结构concepts.Advantages上,根据不同的方案

[AGP]
评论会员:GokalpPeker 时间:2011/12/07
吉姆Crafton写道:对我来说,这只是原来不可读的代码。你想,塞进了一圈一个正方形,它不适合。

它只是一个接口(Run_Poly_Method)InitPoly设置各种执行功能,可实施。 (一)接口的变种 - 不直接支持这个成语的语言编写的多个实现多态性。
  ;

评论会员:罗兰Pibinger 时间:2011/12/07
这样的系统是基于Unix的操作系统systems.There"file_operations结构"提供了一个用户,以实现自己的文件操作功能(如使用lseek,读,打开)编码时定义的函数指针一个文件系统driver.So你说他们还试图塞进一个圆一个正方形!

[AGP]
评论会员:GokalpPeker 时间:2011/12/07
你的方法很有趣,但它不是"面向对象"的"经典"的含义。你的方法是多态的每个对象实例(即需要设置)(见如InitPoly(无效(*聚)())),不是每个类。这可能会或可能不会是一个优势。此外,你的对象,不能有两套不同的数据成员,只有功能(S)可能会有所不同。