Extension models demonstrate "how the program is structured and organized" at the local level in order to fulfill a "set of objectives" (Seevers and Graham 2012, 239). The two paradigms offer a concise, all-encompassing approach to proactive and reactive programming. They provide a formal structure for organizing programs that include functions, subroutines, and modules. Functionality can be divided into three main categories: functionality shared by all models; functionality unique to one model; and overlap between different models. Shared functionality includes things like the number of vehicles being sold and their general appearance. Unique functionality includes features such as air conditioning and vinyl seats. Overlap occurs when more than one feature is required by more than one model. For example, some models may require air conditioning while others don't, so these models would have an overlap between AC and non-AC vehicles. Models also have different levels of complexity which determine how many extensions will be needed to complete the vehicle. A simple model with few parts could use a single module while a complex model with numerous parts might need several modules or even a whole other paradigm to organize its code. The three main types of extension models are line extension models, panel extension models, and stack extension models. Line extension models extend the body of a car by adding a new sheet of metal over the existing body.