OOP vs GP

1. OOP(Object-Oriented programming)

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

template
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 vector {
...
}

stl_deque.h

template  
class deque {
...
}

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

template 
inline void sort(RandomAccessIterator first, RandomAccessIterator last) {
...
}

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

采用GP的好处:

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


    OOP vs GP_第1张图片
    关系图

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

OOP vs GP_第2张图片

你可能感兴趣的:(OOP vs GP)