Among other important paradigms in software design, object orientation is a common set of design techniques these days. Hierarchies of classes, derivative class instantiations and virtual calls can be often found on software codebases. Hence, the relevance of the Performing Half-baked object case while designing object-oriented software.
The Performing Half-baked object case occurs where a virtual call is executed onto an unborn or uncreated or uninitialized class instance: the actual behavior can be unexpected, of course.
A couple of examples.
Consider the output of this Windows/Visual C++ code:
#include <iostream> class AA { public: AA() { std::cout << "AA()\n"; f(); } virtual void f() { std::cout << "AA.f\n"; } }; class BB : public AA { public: BB() { std::cout << "BB()\n"; f(); } virtual void f() { std::cout << "BB.f\n";} }; void main() { auto x = new BB; }
For another –different– behavior, consider the output of this .NET/Visual C# code:
using static System.Console; class AA { public AA() { WriteLine("AA()"); f(); } public virtual void f() => WriteLine("AA.f"); } class BB : AA { public BB() { WriteLine("BB()"); f(); } public override void f() => WriteLine("BB.f"); } class Program { public static void Main() { var x = new BB(); } }
The Performing Half-baked object is a case that designers of object-oriented languages and runtimes have typically faced. Any designer using those languages and runtimes should be aware of this and other cases during the process of object creation.
No comments:
Post a Comment