上面的 Person class(类)示范了 has-a(有一个)的关系。一个 Person object(对象)has a(有一个)名字,一个地址,以及语音和传真电话号码。你不能说一个人 is a(是一个)名字或一个人 is an(是一个)地址。你可以说一个人 has a(有一个)名字和 has an(有一个)地址。大多数人对此区别不难理解,所以混淆 is-a和 has-a(有一个)之间的角色的情况非常少见。
is-a和 is-implemented-in-terms-of(是根据……实现的)之间的区别稍微有些棘手。例如,假设你需要一个类的模板来表现相当小的 objects(对象)的 sets,也就是说,排除重复的集合。因为 reuse(复用)是一件受人欢迎的事情,你的第一个直觉就是使用标准库中的 set template(模板)。当你能使用已经被写好的东西时,为什么还要写一个新的 template(模板)呢?