系统程序员成长计划 学习笔记(3) - 接口

在书中第四章, 讲到了并发与同步, 如何去避免因为错误的加锁引起的锁的管理混乱, 从而导致死锁等问题, 在书中提供了诸如单入单出等技巧, 在我看来, 这一章值得新手程序员学习的, 是如何用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接口与实现》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值