25-Comp-B11 Advanced Software Design · December 2018
Question 24 of 28: Polymorphism, Dynamic Binding, Overloading, and Overriding
Nivaar worked solution (AI-drafted; not reviewed by a licensed engineer)
Notes on this paper
17-Comp-B11 Advanced Software Design — National Exams, December 2018. 3 hours, closed book exam with up to 2 aid sheets 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, 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 and the "program to an interface, not an implementation" / "favor object composition over class inheritance" principles; 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; Barbara Liskov's 1987 substitutability paper for Question 11; Karl Wiegers, Software Requirements (3rd ed.) — the functional/quality/process/implementation/business requirements taxonomy of Question 2; Kruchten, The Rational Unified Process: An Introduction, for Question 1; Myers, The Art of Software Testing, for Questions 6 and 28.
PART I — General Principles (answer any 5 of 7)
Question 24: Polymorphism, Dynamic Binding, Overloading, and Overriding (Part V)
Polymorphism is the ability of a single name to refer to, or be applied to, objects of more than one type, so that code written against a general interface (Question 22) can operate uniformly over different concrete types without knowing which one it holds.
Dynamic binding (late binding) is the RUNTIME mechanism that resolves a call to a polymorphic operation to the actual implementing method based on the object's real, runtime type — typically via a per-class dispatch table (vtable) consulted at the moment of the call.
Overloading is defining multiple methods sharing the same name but differing in parameter signature. It is resolved entirely at COMPILE time, with no runtime dispatch involved.
Overriding is a subclass supplying its own implementation of a method already declared in a superclass, with an IDENTICAL signature — precisely what dynamic binding dispatches between at runtime.
How they relate. Polymorphism is the general concept; overriding plus dynamic binding together are the runtime mechanism implementing inclusion (subtype) polymorphism, exercised through inheritance and grounded in Question 11's LSP. Overloading is a DIFFERENT kind of polymorphism (ad hoc), resolved statically and never touching the vtable. A method accidentally declared with a superclass-matching name but a DIFFERENT signature silently overloads rather than overrides it, and never participates in dynamic dispatch at all.