NivaarExam PrepOfficial exam papers ↗

25-Comp-B11 Advanced Software Design · May 2016

Question 15 of 28: Creational, Structural, and Behavioural Patterns

Nivaar worked solution (AI-drafted; not reviewed by a licensed engineer)

Notes on this paper

98-Comp-B11 Advanced Software Design — National Exams, May 2016. 3 hours, closed book exam with one aid sheet allowed (written on both sides), no calculator permitted. The paper is organized into five parts, and candidates were instructed to answer any five (5) questions in Part I, any three (3) in Part II, any four (4) in Part III, any two (2) in Part IV, and any five (5) in Part V — only the first questions answered, in each part, as they appear in the answer book are marked. All questions carry equal weight, so the 19 questions actually marked (5+3+4+2+5 of 28) each count for 100/19 ≈ 5.26% of the paper. All 28 questions are answered below for completeness.

Reference texts: Sommerville, Software Engineering (10th ed., Pearson) — software processes, requirements engineering, agile methods, design principles, dependability; Pressman, Software Engineering: A Practitioner's Approach (9th ed.) — supplementary process and quality coverage; Gamma, Helm, Johnson & Vlissides (GoF), Design Patterns: Elements of Reusable Object-Oriented Software — creational/structural/behavioural pattern catalogue (Singleton, Proxy, Template Method, Observer, etc.); Sebesta, Concepts of Programming Languages (12th ed.) — polymorphism, dynamic binding, inheritance and language-level object semantics; Bertrand Meyer, Object-Oriented Software Construction — design by contract, preconditions/postconditions/invariants, the open–closed principle; Barbara Liskov's 1987 substitutability paper for Question 11; Rogers, Sharp & Preece, Interaction Design, and Nielsen, Usability Engineering, for Question 21's HMI-specific non-functional requirements; Myers, The Art of Software Testing, for Question 28's boundary value analysis.

PART I — General Principles (answer any 5 of 7)

Question 15: Creational, Structural, and Behavioural Patterns (Part III)

Question text not reproduced: the examination questions are © Engineers and Geoscientists BC. Open the official past paper (linked at the top of this page) to read the question, then follow the worked solution below.

Creational patterns are concerned with the PROCESS OF OBJECT CREATION itself — abstracting away how, when, and which concrete class gets instantiated, so client code that needs an object does not depend on the concrete instantiation logic (Singleton, Factory Method, Abstract Factory, Builder, Prototype). Their defining concern is CONTROLLING instantiation.

Structural patterns are concerned with how classes and objects are COMPOSED into larger structures — simple, static ways of assembling objects while keeping the resulting structure flexible and efficient (Adapter, Bridge, Composite, Decorator, Façade, Proxy). Their defining "shape" is a static COMPOSITION relationship between the participant classes.

Behavioural patterns are concerned with algorithms and the assignment of RESPONSIBILITY / communication between objects — how objects interact and distribute work at runtime (Strategy, Observer, Command, Template Method, State, Iterator). Their defining "shape" is a runtime PROTOCOL of collaboration.

Creational example — Singleton, classified creational. Singleton's entire contribution is controlling instantiation: it ensures a class has exactly one instance and provides a single global access point to it, typically by making the constructor private and exposing a static getInstance() that creates the sole instance on first call and returns it thereafter. It says nothing about how objects are composed into a structure, nor about a runtime communication protocol between multiple collaborating objects — its whole purpose begins and ends at the moment of (controlled, single) instantiation, which is exactly the creational concern.

Structural example — Proxy (Question 14), classified structural. Proxy's core contribution is a static composition: a surrogate object implementing the same interface as its real subject, so the client's held reference can transparently be either one. This is a WIRING decision made once, at object-assembly time, about how two objects (proxy and real subject) are structurally related through a shared interface — it does not, by itself, define any object-creation policy (creational) nor a multi-object runtime notification/algorithm protocol (behavioural).

Behavioural example — Observer (Question 16), classified behavioural. Observer's core contribution is a runtime PROTOCOL of collaboration: a subject notifies an open-ended set of registered observers whenever its state changes, and each observer decides for itself how to react. The pattern is entirely about the assignment of responsibility and the sequencing of communication AT RUNTIME (who gets told what, and when) — it says nothing about how the subject or observers were created (creational), nor is it a static compositional wiring of exactly two fixed roles the way Proxy is.