70 ;;Quote: the major design goal for Eiffel was mass-produced software components
|
70 ;;Quote: in object-oriented programming, reuse classes; a method is not reusable independently of its class
|
70 ;;Quote: should gather object classes into clusters or libraries; limit cycles in the client relation to a cluster
|
70 ;;Quote: each class and routine in an Eiffel library is formally specified with preconditions, postconditions, and invariants
|
71 ;;Quote: a query with no arguments may be implemented by an attribute or a function; otherwise implement with a function
|
71+;;Quote: a query returns information about an object
|
71 ;;Quote: objects should be known via formally specified operations rather than by implementation; i.e., by abstract data type
|
71 ;;Quote: an Eiffel class is a data type; includes basic types such as integers
|
71 ;;Quote: an Eiffel class exports externally visible features; all other features are internal
|
72 ;;Quote: characterize Eiffel inheritance by "is-plus-but-except"; instance of parent with new, hidden or changed features and changed type signatures
|
72 ;;Quote: a redefined Eiffel feature must include an equal or weaker precondition and an equal or stronger postcondition; satisfies contract
|
72 ;;Quote: Eiffel allows multiple inheritance; also used to combine abstract behavior (deferred class) with an implementation
|
72 ;;Quote: a deferred Eiffel class specifies an object's behavior with assertions but does not provide a full implementation
|
72 ;;Quote: for software reuse must be able to freeze some elements of behavior while leaving others open; e.g., Eiffel's deferred classes
|
72 ;;Quote: inheritance allows for polymorphic variables to become attached at run-time
|
72+;;Quote: an entity is declared with a static type and associated with a dynamic type at runtime; all dynamic types must be descendants
|
73 ;;Quote: dynamic binding allows a class to manipulate polymorphic entities without testing the type; e.g., t.postorder traverses many kinds of trees
|
73 ;;Quote: Eiffel can flatten a class to incorporate all inherited definitions; simplifies distribution
|
74 ;;Quote: Eiffel's generic classes have type parameters; can restrict a type parameter to descendants of a given class
|
75 ;;Quote: Eiffel can call or be used by utilities written in other languages; allows full use of Eiffel's structuring capabilities
|
75 ;;Quote: large-scale reuse can't be based on source code; need external, abstract properties
|
76 ;;Quote: a precondition limits the cases that a routine must be prepared to handle; simplifies the code
|
77 ;;Quote: the short or abstract form of an Eiffel class gives its interface and assertions without implementation details
|
78 ;;Quote: descendants of a class gains access to its implementation; may redefine as needed
|
78 ;;Quote: Eiffel's Data Structure Library defines a taxonomy for data structures by access method, traversing, and storage; e.g., CONTAINER class
|
79 ;;Quote: Eiffel uses consistent names across classes; e.g., use 'add' instead of 'push' for STACK
|
80 ;;Quote: class invariants specify the conventions for borderline cases, initial states, etc.; e.g., can position a CHAIN object before the start
|
82 ;;Quote: use imperative verbs for procedures; nouns for attributes and functions; adjectives or questions for boolean queries
|
83 ;;Quote: an 'obsolete' routine in Eiffel generates a compile-time descriptive message and does not appear in the class's short form
|
83 ;;Quote: a routine should not include parameters for options; e.g., use move routine instead of a parameter for position
|