Table of Contents
We first describe general software engineering guidelines to design components (Section 19.2.5). We next move on to the general question about why and how to design classes, and more specifically, how to design new abstract data types (Section 19.3). We will then re-discuss the issue of flexibility (Section 19.5) and describe inheritance (Section 19.4). Last, we will introduce the design patterns catalog (Section 19.6), which are well-known design solutions to standard problems in object-oriented programming.