在书中第四章, 讲到了并发与同步, 如何去避免因为错误的加锁引起的锁的管理混乱, 从而导致死锁等问题, 在书中提供了诸如单入单出等技巧, 在我看来, 这一章值得新手程序员学习的, 是如何用C语言写出OO的代码,
C语言固然不会有类的概念, 要用C写出面向对象的代码, 最重要的是利用C语言现有的元素, 实现OO编程思想最重要的特性,
举个很简单的例子, 让你开发一个图书馆管理系统, 你为书创建一个类, 按照OO的思想, 你不可能只为这个类赋予书号, 书名, 作者等最终作为数据成员的信息, 每个人都知道, 对于这些属性, 你要有相应的set, get函数,这一点很多人在写C++的时候没有太大的感觉, 似乎教科书上无数的例子堕化了我们的思维, 但是, 当你准备用C写出具有面向对象特性的可重用代码时, 你是创建传统意义上的结构体还是与C++中类 类似的具有操作函数和数据对象的 接口, 就有很大的区别
C语言实现的 接口其存在的重要意义就是将其自身与具体的实现分离开, 从而无论底层的实现如何变化 对于使用者来说都无需做任何的修改。 接下来更细致的分析, 实现在哪里, 接口在哪里。
用C写OO的代码, 很重要的一个原则就是不要让调用者去实现太复杂的操作, 调用者仅仅使用我们定义好的接口, 而具体的操作
则直接由实现者实现, 例如图书管理系统中, 设定图书的具体信息等函数, 则直接实现在描述书本的结构体中,
例如
typedef int (*setBookNumFunc)(int);
struct _Book
{
int numBook;
char *s name;
char *s author;
...
setBookNumFunc setNum;
}
上层的接口如何设计呢, 一定要保证接口不与任何的实现相关联, 否则这个接口设计了等于没设计,
所以,
setBookNum(int n);这样的接口就是不科学的, 因为你假设了BookNum一定是整型,
setBookNum(struct _Book *book);才是科学的, 无论book内部怎么变化, 只要setNum这个变量名不变, 只要直接调用这个函数就可以了,
这只是简单实现的一个例子, 具体的还要继续深入学习《C接口与实现》