7 ms·
ROOT can't be said to be OO because it breaks the encapsulation in the guts. There is a massive usage of "g" global pointers : gROOT, gDirectory, gTree, gEnv, g
by Create 12y ago
ROOT can't be said to be OO because it breaks the encapsulation in the guts. There is a massive usage of "g" global pointers : gROOT, gDirectory, gTree, gEnv, gSystem, gPad, etc... Around one hundred in v5-18-00, a disaster. And this definitely breaks the fundamental OO principle of encapsulation.
Then since ROOT violates three basic principles of OO (encapsulation, inheritance, virtuality) we are compelled to conclude that ROOT can't be considered as an OO software. ROOT is a bright example of people having jump to C++ but missed totally the point of OO. At least it will probably stay in the history of software because of that.
What could be the improvements in a ROOT major revision ?
o at least fix the name ! Is it ROOT, Root, root ? (Hell, we are pretty sure that any Bazaar model software have at least converged on that !)
o have then a correct namespacing of classes and libs.
o restore encapsulation (then get rid of the g pointers).
o revisit the inheritances. At least have a good histogram class. And arrange the storage area to be stable (then "fix" the TTree). And please, have an introspection class that looks like an introspection class.
o use pure abstract interfaces to separate domains. And stick strongly to the idea to have them pure.
o etc, etc, etc, etc, etc, etc, etc, etc, etc, etc,...
http://openscientist.lal.in2p3.fr/osc_web_16.11/html/faq.html#faq_ROOT http://openscientist.lal.in2p3.fr/osc_web_16.11/html/faq.htm...
- hga 12y agoGiven that this is a topic nominally about Lisp, I'd like to point out that the CLOS crowd (Common Lisp Object System) would strongly disagree that encapsulation of the restricting access kind is a basic principle of OO. That's not in Lisp's DNA.
- Create 12y agorestore encapsulation (then get rid of the g pointers). Global variables begin with g http://root.cern.ch/root/htmldoc/guides/users-guide/GettingStarted.html#coding-conventions http://root.cern.ch/root/htmldoc/guides/users-guide/GettingS... While it's true that indiscriminate use of global variables can turn code into spaghetti nearly as quickly as unrestrained use of goto, global variables do have legitimate uses and exist in one form or another in almost every programming language. Lisp's version of global variables, dynamic variables, are both more useful and more manageable. Common Lisp provides two ways to create global variables: DEFVAR and DEFPARAMETER. http://www.gigamonkeys.com/book/variables.html http://www.gigamonkeys.com/book/variables.html