The first goal is to model in the same way the pathologies which have
heterogeneous signs. Definitions of diseases are characterized by simple signs
like articular pain or by complex syndromes like inflammation
characterized by a pain and a swelling, two primitive signs.
Despite the complexity of signs the only interest is the result of the
comparison between the patient and the disease signs. We have used the pattern
Composite to keep hidden the complexity of signs. The diagnostic
engine only infers the comparison without knowing anything about the composition
of each sign. The pattern Iterator is used to define a generic
model of access to the signs.
The expression of the weight of a sign into the disease diagnosis is linked
to the method of reasoning. We have analyzed two methods of diagnosis. A scoring
system and an evaluation based on the validation of a criteria list. Each of
them has its own type of values (resp. numerical scale and symbolic value) but
we want to share some information such as: ``the presence of articular pain is
significant, the absence of destruction is very significant''. The coding of
``significant'' into a type of value depends on the reasoning methods but the
concept of ``presence'' or ``absence'' is common to all of them. We have left
the classic method which codes presence by a positive value and absence by a
negative value and we have separated this concept from the representation of the
value. The pattern State is used in order to save the information
of "presence" or "absence" without taking into account which treatment is done.
Finally, the pattern Strategy defines a class of reasoning method.
With the four patterns, we have defined four strategic points of the
diagnostic system architecture which are not given by the semantical analysis of
the domain. Patterns give an assistance to refine existing objects and to
discover new ones.
Diagnostic systems are relevant to Artificial
Intelligence domain and AI community has often ignored software engineering
problems. But after a stage of experimental systems and toy applications, many
authors argued in favor of improving the level of development, particularly in
medicine (see ``The road to professionalism in medical informatics: A proposal
for debate'' in Methods of information in medicine 1995, number 34). In
medicine, the problems of maintenance are more acute. Medicine is an ``old''
science so it has many information to manage. Medicine is in evolution so it
needs to evolutive applications. Clinicians want interactive programs therefore
systems must be efficient. Object-oriented methods and patterns are a good
opportunity to progress in this way.