Source code: com/virtuosotechnologies/lib/base/HierarchicalType.java
1 /*
2 ================================================================================
3
4 FILE: HierarchicalType.java
5
6 PROJECT:
7
8 Virtuoso Utilities
9
10 CONTENTS:
11
12 Hierarchical type interface
13
14 PROGRAMMERS:
15
16 Daniel Azuma (DA) <dazuma@kagi.com>
17
18 COPYRIGHT:
19
20 Copyright (C) 2003 Daniel Azuma (dazuma@kagi.com)
21
22 This program is free software; you can redistribute it and/or
23 modify it under the terms of the GNU General Public License as
24 published by the Free Software Foundation; either version 2
25 of the License, or (at your option) any later version.
26
27 This program is distributed in the hope that it will be useful,
28 but WITHOUT ANY WARRANTY; without even the implied warranty of
29 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30 GNU General Public License for more details.
31
32 You should have received a copy of the GNU General Public
33 License along with this program; if not, write to
34 Free Software Foundation, Inc.
35 59 Temple Place, Suite 330
36 Boston, MA 02111-1307 USA
37
38 ================================================================================
39 */
40
41
42 package com.virtuosotechnologies.lib.base;
43
44 import java.util.Iterator;
45
46
47 /**
48 * An interface for objects that implement a hierarchical type system.
49 * <p>
50 * A hierarchical type system is a class of objects with the following
51 * properties:
52 * <ul>
53 * <li>The object may have zero or more parents, which must be within
54 * the same class. An object is said to "extend" all of its ancestors.
55 * <li>The object is not a descendant of itself. That is, the parent
56 * relationships form an acyclic graph.
57 * <li>The object can quickly determine, given another object, whether it
58 * extends that object.
59 * <li>The object is immutable.
60 * <li>The equals() method is suitably defined to preserve the above
61 * semantics. Normally, objects should be uniques whose equals()
62 * method uses reference equality.
63 * </ul>
64 */
65 public interface HierarchicalType
66 {
67 /**
68 * Returns true if and only if this HierarchicalType the same as or
69 * an extension of the given parameter.
70 *
71 * @param type a type to test
72 * @return true if this type equals or extends the given type
73 */
74 public boolean equalsOrExtends(
75 HierarchicalType type);
76
77
78 /**
79 * Get an interator over the immediate parents
80 *
81 * @return an Iterator over the immediate parents. The remove() method
82 * of the iterator is not implemented.
83 */
84 public Iterator getParents();
85 }