Figure 7.48 and the accompanying discussion under 7.3.21 GeneralizationSet>Examples on pp 78-79 uses the example of a generalization set consisting of a single class to explain the proper use of the isCovering and isDisjoint attributes. I believe this example is infelicitous in the context of this exposition because generalization sets consisting of a single class present a special case, and this detracts from the exposition. In what way are they a special case? IF (a generalization set consists of a single class AND it is
{incomplete}) THEN it can only be {disjoint}. This is because if the complement of an {incomplete}
generalization set is non-empty, and consists of all instances that are NOT members of the solitary class in the generalization set. In other words, for a generalization set consisting of a single class, the combination
{incomplete, overlapping}
is self-contradictory. IF (a generalization set consists of a single class AND it is
{complete}) THEN it can only be {overlapping}. This is because the complement of a {complete}
generalization set is the null set, and the null set is a member of every set. In other words, the combination
{complete, disjoint}
is self-contradictory. I would recommend pointing out that generalization sets consisting of a single class represent a special case, and I would treat them separately (?footnote). For purposes of the exposition, I would modify Figure 7.48 to include at least two classes (perhaps Employee, Manager) instead of just Employee in the right-hand generalization set.