面向对象三大特性的意义讲解

2020-01-06 20:01:47王振洲

我的做法是定义了一个块设备的接口(即B接口):


typedef unsigned short block_num_t;
struct _block_dev_t;
typedef struct _block_dev_t block_dev_t;
typedef block_num_t (*block_dev_get_block_nr_t)(block_dev_t* dev);
typedef bool_t (*block_dev_read_block_t)(block_dev_t* dev, block_num_t block_num, void* buff);
typedef bool_t (*block_dev_write_block_t)(block_dev_t* dev, block_num_t block_num, const void* buff);
typedef void  (*block_dev_destroy_t)(block_dev_t* dev);
struct _block_dev_t {
  block_dev_get_block_nr_t  get_block_nr;
  block_dev_write_block_t  write_block;
  block_dev_read_block_t   read_block;
  block_dev_destroy_t    destroy;
};

在初始化文件系统时,把块设备注入进来:


bool_t sfs_init(sfs_t* fs, block_dev_t* dev);

这样,文件系统只与块设备接口交互,不需要关心实现是norflash、nandflash、内存还是磁盘。而且带来几个附加好处:

可以在PC上做文件系统的单元测试。在PC上,用内存模拟一个块设备,文件系统可以正常工作了。

可以通过装饰模式为块设备添加磨损均衡算法和坏块管理算法。这些算法和文件系统都可以独立重用。

『多态』让真正的重用成为可能,没有『多态』就没有各种框架。在C语言中,多态是通过函数指针实现的,而在C++中是通过虚函数,在Java中有专门的接口,在JS这种动态语言中,每个函数是多态的。『多态』虽然不是面向对象的『特有的』属性,但是面向对象的编程语言让『多态』更加简单和安全。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对ASPKU的支持。