OOP vs GP

作者: 编程半岛 | 来源:发表于2018-07-02 19:56 被阅读11次

    1. OOP(Object-Oriented programming)

    在OOP中,企图将datas和methods关联在一起,如下面的stl_list.h部分代码所示:

    template<class T, class Alloc = alloc>
    class list{
    ...
      protected:
          link_type node;          // datas部分
    ...
      public:
          void sort();            // methods部分
    };
    

    为什么list不能使用::sort()排序?
    全局的sort()中需要容器有随机存取的性质,而list中没有这种性质,因此需要使用自己的sort()

    在标准库中,容器自己有sort()就需要用自己的sort(),而不用全局的sort().

    2. GP(Generic Programming)

    在GP中,将datas和methods分开。如下代码所示:
    stl_vector.h

    template <class T, class Alloc = alloc>
    class vector {
    ...
    }
    

    stl_deque.h

    template <class T, class Alloc = alloc, size_t BufSiz = 0> 
    class deque {
    ...
    }
    

    stl_vector.hstl_deque.h中找不到sort()函数,当需要将容器vector和deque这两个容器进行排序时,需要调用algorithms中的sort()函数。

    template <class RandomAccessIterator>
    inline void sort(RandomAccessIterator first, RandomAccessIterator last) {
    ...
    }
    
    template <class RandomAccessIterator, class Compare>
    inline void sort(RandomAccessIterator first, RandomAccessIterator last,
                     Compare comp) {
    ...
    }
    

    采用GP的好处:

    • Containers和Algorithms可以分开开发,之间用Iterator连同即可;
    • Algorithms通过Iterator确定操作范围,并通过Iterator取用Container元素。


      关系图

    所谓的algorithms,其内最终涉及元素本身的操作无非就是比大小,不同比较大小的规则,调用的函数不一样,输出结果也不一样。

    相关文章

      网友评论

          本文标题:OOP vs GP

          本文链接:https://www.haomeiwen.com/subject/vjuluftx.html