One major drawback I guess with all these object oriented systems I guess is performance, since people write the code so that its extensible it always ends up creating deep stack sizes, recently I was looking into
(Jmol) this structure visualization tool supports several input format descriptions for the structures (pdb,cif,molxyz....). This is how they hide format details from the display code
JmolAdapter (abstract class)
==> SmarterJmolAdapter (this contains
a interface called AtomSetCollection ). So depending on the input file
we have several AtomSetCollection readers like PdbAtomSetCollection etc...
Although I came to a conclusion that to implement the structural alignment algorithm into Jmol, I need to implement this AtomSetCollection which structurally aligns the protein structures, but I guess there are several draw backs of the implementation of object oriented java implementation, the cost of creating an
extensible design does not come for free it comes at the cost of performance, I found that a simple command execution could end up creating a stack size of 32 this is what
concerns me is there a way we can collapse the stack when we know that the intermediate functions on the stack are just delegating the call to the actual instance, I guess this STACK COLLAPSING technique can always be applied when ever
the Adapter design pattern is used. For example see the below stack of size 32,
its not doing any thing great its just opening a new script file, because of the
way the code is written (use of design patterns) the stack size seem to increase
a lot and ULTIMATELY ALL THESE PATTERNS ARE JUST DELEGATING A FUNCTION CALL TO
TO FUNCTION ON TOP OF THE STACK, I'm think of ways to improve the delegation since
at each level of the stack you are doing a look up and it increases linearly with
the size of the stack.
[1] org.jmol.viewer.ScriptManager.addScript (ScriptManager.java:69)
[2] org.jmol.viewer.ScriptManager.addScript (ScriptManager.java:52)
[3] org.jmol.viewer.Viewer.evalStringQuiet (Viewer.java:3,152)
[4] org.jmol.viewer.Viewer.evalString (Viewer.java:3,119)
[5] org.jmol.viewer.Viewer.openFile (Viewer.java:1,379)
[6] org.openscience.jmol.app.Jmol$OpenAction.actionPerformed (Jmol.java:1,435)
[7] javax.swing.AbstractButton.fireActionPerformed (AbstractButton.java:1,849)
[8] javax.swing.AbstractButton$Handler.actionPerformed (AbstractButton.java:2,169)
[9] javax.swing.DefaultButtonModel.fireActionPerformed (DefaultButtonModel.java:420)
[10] javax.swing.DefaultButtonModel.setPressed (DefaultButtonModel.java:258)
[11] javax.swing.AbstractButton.doClick (AbstractButton.java:302)
[12] javax.swing.plaf.basic.BasicMenuItemUI.doClick (BasicMenuItemUI.java:1,051)
[13] javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased (BasicMenuItemUI.java:1,092)
[14] java.awt.Component.processMouseEvent (Component.java:5,517)
[15] javax.swing.JComponent.processMouseEvent (JComponent.java:3,135)
[16] java.awt.Component.processEvent (Component.java:5,282)
[17] java.awt.Container.processEvent (Container.java:1,966)
[18] java.awt.Component.dispatchEventImpl (Component.java:3,984)
[19] java.awt.Container.dispatchEventImpl (Container.java:2,024)
[20] java.awt.Component.dispatchEvent (Component.java:3,819)
[21] java.awt.LightweightDispatcher.retargetMouseEvent (Container.java:4,212)
[22] java.awt.LightweightDispatcher.processMouseEvent (Container.java:3,892)
[23] java.awt.LightweightDispatcher.dispatchEvent (Container.java:3,822)
[24] java.awt.Container.dispatchEventImpl (Container.java:2,010)
[25] java.awt.Window.dispatchEventImpl (Window.java:1,791)
[26] java.awt.Component.dispatchEvent (Component.java:3,819)
[27] java.awt.EventQueue.dispatchEvent (EventQueue.java:463)
[28] java.awt.EventDispatchThread.pumpOneEventForHierarchy (EventDispatchThread.java:242)
[29] java.awt.EventDispatchThread.pumpEventsForHierarchy (EventDispatchThread.java:163)
[30] java.awt.EventDispatchThread.pumpEvents (EventDispatchThread.java:157)
[31] java.awt.EventDispatchThread.pumpEvents (EventDispatchThread.java:149)
[32] java.awt.EventDispatchThread.run (EventDispatchThread.java:110)