This page contains a detailed report on an experiment performed in order to assess the expressivness of Dicto. The experiment consisted in: (1) collecting a comprehensive set of rules, as reported in scientific publications; (2) finding an appropriate translation of the rules in Dicto. Based on the reported results we can see that the vast majority of the rules encountered during our study can be expressed in Dicto.

Discovered Rule Dicto translation supported by Dicto?
HiDao elements must have suffix DAO in their name. HiDaoClasses must be named "*DAO" yes
HiForms is responsible for presentation logic only. — unprecise formulation yes
HiManager classes have package visibility or lower. HiManagerClasses have visibility \"" / "private" yes
HiManager may be accessed only via HimInterface. only HimInterface can depend on HiManager yes
HiDao classes must extend CorporateWebCore.Dao.GenEntityDao. HiDaoClasses must extend GenEntityDao yes
HF-Kiosk is not allowed to use HP-Device. HFKiosk cannot depend on HPDevice yes
HF-Kiosk is only allowed to use HP-Kiosk. HFKiosk can only depend on HPKiosk yes
HiDao is the only module allowed to use CorporateWebcore. only HiDao can depend on CorporateWebcore yes
HiDao must use CorporateWebcore. HiDao must depend on CorporateWebcore yes
Methods inside class AbstractConnector must be used internally only. only AbstractConnectorMethods can invoke AbstractConnectorMethods yes
The only caller of method connectorVisibility of class Connector should be the method draw. ConnectorVisibilityMethod can only be invoked by DrawMethod yes
The classes implementing interface Tool must implement method activate if method isUsable returns true. — conditional no
The classes implementing interface Figure should override basicDisplayBox but should not override displayBox. FigureClasses must override "basicDisplayBox"; FigureClasses cannot override "displayBox" yes
Subclasses of AbstractFigure should perform a super call in methods deactivate and viewSelectionClass. AFDeactivate, AFViewSelectionClass must invoke super yes
Subclasses of DrawApplet, DrawApplication and VersionRequester should override method getRequiredVersions and return an array of strings. DrawAppletSubClasses must override GetRequiredVersionsMethod yes
Subclasses of DrawApplication should not override basicDisplayBox but should override exit. DrawApplicationSubClasses cannot override "basicDisplayBox"; DrawApplicationSubClasses must override "exit" yes
The method init should be called after creating or loading a CompositeFigure, that is, after calling the method new or read. — invocation order no
Calling method getLocator requires cloning the instance (calling method clone) to avoid that the receiver of getLocator can change the internal behavior of a LocatorHandle. — conditional no
Calls to the method addInternalFrameListener should occur before calling the method add when implementing or overriding the method addToDesktop in the class MDIDesktopPane. — invocation order no
The constructor of StandardLayouter with parameters should be preferred over the constructor without parameters. StandardLayouter must have method SLConstructor yes
Sublasses of UndoableAdaptor should override methods undo and redo. UndoableAdaptorSubClasses must override "undo", "redo" yes
Pop-up menus in subclasses of CustomSelectionTool must call setAttribute. CustomSelectionToolPopupMethods must invoke "setAttribute" yes
The status line must be created (i.e. call to setStatusLine) before a tool is set (i.e. call to setTool). — invocation order no
Method addToDesktop should be overridden instead of overloaded (seen in class MDIDesktopPane). MDIDesktopPaneSubClasses must override "addToDesktop" yes
After calling viewDestroying on an object you cannot do anything else on that object (seen in class ViewChangeListener). — invocation order no
When extending the class DrawApplication, the methods createOpenFileChooser and createSaveFileChooser should be overridden. DrawApplicationSubClasses must override "createOpenFileChooser", "createSaveFileChooser" yes
When extending the class StandardDrawingView, the method handleMouseEventException should be overridden. StandardDrawingView must override "handleMouseEventException" yes
If method mouseUp of class AbstractTool is overridden, the last statement should be a super call. — invocation order no
If method mouseDown of class AbstractTool is overridden, the first statement should be a super call. — invocation order no
If you call activate or deactivate from the class Tool you should call isActive before (seen in class DrawApplication). — invocation order no
The names of the attributes of class FigureAttributeConstant should be used as suffixes of the attributes of class ContentProducer starting with the prefix ENTITY. — interralation between two groups of entities no
Only the view layer can depend on components provided by AWT/Swing. only View can depend on Swing, AWT yes
Only DAOs from the model layer can depend on database services. An exception is granted to the model.DB class, responsible for controlling database connections. only ModelDAOs, ModelDB can depend on Database yes
The view layer can only depend on services provided by itself, by the controller layer, and by the util package [..] Vew can only depend on View, Controller, Util yes
Domain objects must not depend on the DAO, controller, and view types. Domain cannot depend on DAO, Controller, View yes
DAO classes can only depend on domain objects, on other model classes allowed to use database services (such as model.DB), and on the util package. DAOs can only depend on Domain, ModelDB, Util yes
The util package must not depend on any class specific to the system source code. — unprecise formulation yes
Rule 1: Data access components (DAOs) must not use business logic services and other DAOs DAOs canot depend on Business, DAOs yes
Rule 2: Each host transaction component must only be included once in a module HostTransactions can only be included once in a module yes
Rule 3: Host transaction components must not have outgoing connections HostTransactions cannot have outgoing connections yes
Rule 4: Services within one module must communicate via local EJBs Services1 must communicate via "local EJB"; [..] yes
Rule 5: Services within one application (but in different modules) must communicate via local EJBs Services1, Serivces2, [..] must communicate via "local EJB", [..] yes
Rule 6: Business logic services must only use data access components, host access components and host transaction components if they belong to the same module BusinessService1 cannot depend on DataAccessOutside1, HostAccessOutside1,HostTransactionOutside1; [..] yes
Rule 7: Services of different domains must communicate via web services Services1, Serivces2, [..] must communicate via "web service" yes
Rule 8: Different applications should communicate via web services or remote EJBs Applications can only communicate via "web service", "remote EJB" yes
Rule 9: Applications may only access components of the service layer of another application App1 can only depend on "app2.service.Expressivness", "app3.service.Expressivness", [..] yes