Table of contents
- 1. Preface 17
- 1.1 Introduction 17
- 1.2 History of HOOD 17
- 1.3 Structure of the book 18
- 1.4 About this book and other related materials 19
- 1.5 Acknowledgments 19
Part 1 : Industrial software design issues 21
- 2. Hierarchical and object oriented design issues 22
- 2.1 Design: breaking software into modules 22
- 2.2 Object orientation 23
- 2.3 Abstract state machines 23
- 2.4 Abstract data types 24
- 2.5 Aggregation 24
- 2.6 Classes and inheritance 24
- 2.7 Exceptions 25
- 2.8 Generics 26
- 2.9 Concurrency 26
- 2.10 The client-server model 27
- 2.11 Issues with distributed systems 28
- 3. Overview of HOOD 29
- 3.1 Objectives of industrial software design 29
- 3.2 The HOOD approach to design 30
- 3.2.1 The hierarchical approach 30
- 3.2.2 Balancing graphical and textual formalisms 31
- 3.2.3 Design quality control: HOOD rules 32
- 3.2.4 Supporting the method: HOOD tools 33
- 3.3 From analysis to design: scope of HOOD 34
- 3.4 HOOD compared to other methods 34
- 3.5 Summary 35
- 4. HOOD objects 36
- 4.1 Objects and modules 36
- 4.2 Description of objects 36
- 4.2.1 Synthetic view: the graphical description 37
- 4.2.2 Detailed view: the textual description 38
- 4.3 Design refinement: the "include" relationship 40
- 4.3.1 An example 41
- 4.3.2 Parent and child objects 41
- 4.4 Client-server and the "use" relationship 44
- 4.5 Uncles: Combining the "use" and "include" relationships 45
- 4.5.1 Uncles 45
- 4.5.2 Environment 47
- 4.6 Other design issues 48
- 4.6.1 Splitting operations: OP_Controls 48
- 4.6.2 Grouping operations: operation sets 49
- 4.6.3 Sequential or concurrent execution: active objects 50
- 4.7 Summary 50
- 5. Data modelling in HOOD 51
- 5.1 Data flows 51
- 5.2 HOOD types 52
- 5.3 Basic types 52
- 5.4 Abstract data types 53
- 5.4.1 Introduction 53
- 5.4.2 Data refinement: the structure view 54
- 5.4.3 Aggregation 55
- 5.5 Classes 56
- 5.5.1 Introduction 56
- 5.5.2 Inheritance 57
- 5.6 Example 58
- 5.7 Summary 59
- 6. Other HOOD features 60
- 6.1 Exceptions: designing for reliability 60
- 6.2 Generics: designing for reuse 61
- 6.2.1 Generic definition 61
- 6.2.2 Generic instantiation 62
- 6.3 Virtual nodes: designing with distribution 63
- 6.4 Summary 65
- 7. A design example 66
- 7.1 Introduction 66
- 7.2 General structure of the Electronic Mailing System 66
- 7.3 Structure of the GUI 68
- 7.4 Distribution 70
- 7.5 Comments on the design 70
Part 2 : Formalization 73
- 8. Formalization and refinement of the structural decomposition 74
- 8.1 "Include" relationship 74
- 8.2 Provided interface 75
- 8.3 Required interface 76
- 8.4 "Use" relationship 77
- 8.5 OP_Controls 78
- 8.6 Generics 78
- 8.6.1 Generic module 78
- 8.6.2 Generic instance 80
- 8.7 Practical tips 81
- 8.7.1 Provided interface 81
- 8.7.2 "Use" relationship 81
- 8.7.3 Environment or child object? 83
- 8.7.4 Starting active objects 83
- 8.7.5 Redundant systems 84
- 8.8 Summary 84
- 9. Formalization and refinement of functional aspects 85
- 9.1 Operations 85
- 9.1.1 Specification of operations 85
- 9.1.2 Implementation of operations 86
- 9.2 Operation sets 87
- 9.3 Exceptions 88
- 9.3.1 Server side 88
- 9.3.2 Client side 89
- 9.3.3 Internal exceptions 90
- 9.4 Practical tips 90
- 9.4.1 Naming conventions 90
- 9.4.2 Error managers 91
- 9.5 Summary 91
- 10. Formalization and refinement of data structures 92
- 10.1 Description of types 92
- 10.2 HADT and classes 93
- 10.2.1 Global and instance attributes and operations 93
- 10.2.2 Aggregation and inheritance formalization 94
- 10.2.3 Abstract classes 94
- 10.3 Constants, variables and parameters 95
- 10.3.1 Constants 95
- 10.3.2 Data 95
- 10.3.3 Data flows 95
- 10.4 Practical tips 96
- 10.4.1 Naming conventions 96
- 10.4.2 The "good" data 96
- 10.4.3 HADT or class? 97
- 10.4.4 Avoiding too many root classes: class libraries 97
- 10.4.5 Controlling instances: object factories 98
- 10.5 Summary 100
- 11. Formalization and refinement of behavioural aspects 101
- 11.1 Defining execution conditions: operation constraints 101
- 11.2 HOOD execution model 102
- 11.3 State constraints 103
- 11.4 Concurrency constraints 105
- 11.4.1 Mutual EXclusion Execution Request (MTEX) 106
- 11.4.2 Read Write Execution Request (RWER) 106
- 11.4.3 Read Only Execution Request (ROER) 106
- 11.5 Protocol constraints 106
- 11.5.1 Highly Synchronous Execution Request (HSER) 107
- 11.5.2 Loosely Synchronous Execution Request (LSER) 108
- 11.5.3 Asynchronous Execution Request (ASER) 109
- 11.5.4 Reporting Loosely Synchronous Execution Request (RLSER) 109
- 11.5.5 Reporting Asynchronous Execution Request (RASER) 109
- 11.6 Time-out constraint 110
- 11.7 Practical tips 111
- 11.7.1 State constraints 111
- 11.7.2 Consistency of protocol constraints 112
- 11.8 Summary 112
- 12. A model of the global project organization 113
- 12.1 The HOOD design tree 113
- 12.2 The global project picture 113
- 12.2.1 Object space 114
- 12.2.2 Generic space 114
- 12.2.3 Virtual node space 114
- 12.2.4 Physical node space 114
- 12.2.5 The global picture 115
- 12.3 System Configuration 115
- 12.4 Summary 116
Part 3 : The design process 117
- 13. The basic decomposition process 118
- 13.1 The iterative process 118
- 13.2 The refinement process 119
- 13.3 The basic design step 120
- 13.3.1 Understand the problem 120
- 13.3.2 Refinement lines 121
- 13.3.3 Design activities 122
- 13.3.4 Justification of the solution 123
- 13.3.5 Ordering of activities 123
- 13.4 A typical workout of the basic design step 124
- 13.4.1 Activity 1: problem definition 124
- 13.4.2 Activity 2: elaboration of an informal solution strategy 126
- 13.4.3 Activity 3: formalization of the strategy 127
- 13.4.4 Activity 4: formalization of the solution 129
- 13.4.5 Activity 5: analysis of the solution 130
- 13.5 Terminal implementation 131
- 13.6 Summary 131
- 14. Designing in the large 132
- 14.1 Prime contractor's activities 132
- 14.1.1 Activity 1: Define the logical architecture 132
- 14.1.2 Activity 2: Select reusable components 132
- 14.1.3 Activity 3: Decide the distribution strategy 132
- 14.1.4 Activity 4: Physical architecture 133
- 14.2 Initiating the design 133
- 14.3 Subcontracting 134
- 14.4 HOOD and development standards 136
- 14.5 Configuration management 136
- 14.6 Human factors and HOOD management 138
- 14.7 Summary 139
- 15. Design documentation 140
- 15.1 Why is documentation important? 140
- 15.2 Relations between documentation and design fragments 141
- 15.3 Generating standard documents 141
- 15.4 Trends in documentation 142
- 16. Design reviews 143
- 16.1 Authoring reviews and quality assurance 143
- 16.1.1 Author-readers cycles 143
- 16.1.2 Quality assurance 144
- 16.2 Preparing reviews 144
- 16.3 What to check in a HOOD design 145
- 16.3.1 Looking for the "good" design 145
- 16.3.2 Design evaluation process 146
- 16.3.3 Reviewing the tree structure 147
- 16.3.4 Reviewing ODSs 147
Part 4 : From design to code 149
- 17. Mapping HOOD to programming languages 150
- 17.1 Tool support issues 150
- 17.2 Principles of target language mapping 151
- 17.3 Ada mapping 154
- 17.3.1 Objects 154
- 17.3.2 "Implemented-by" relationship 154
- 17.3.3 HADT and Classes 155
- 17.3.4 Exceptions 155
- 17.3.5 Generics 155
- 17.3.6 Concurrency 155
- 17.3.7 Distribution 155
- 17.4 C and C++ mapping 156
- 17.4.1 Objects 156
- 17.4.2 "Implemented-by" relationship 156
- 17.4.3 HADT and Classes 156
- 17.4.4 Exceptions 156
- 17.4.5 Generics 156
- 17.4.6 Concurrency 157
- 17.4.7 Distribution 157
- 17.5 Other languages 157
- 17.6 Adjusting mapping rules: HOOD Pragmas 157
- 17.6.1 Target language 157
- 17.6.2 Mutex code generation control 158
- 17.6.3 Testing support 158
- 17.7 Summary 158
- 18. Hard real-time systems 159
- 18.1 Hard real-time specific issues 159
- 18.2 Additional features of HRT-HOOD 160
- 18.2.1 Sporadic, cyclic and protected objects 160
- 18.2.2 HRT rules 160
- 18.2.3 HRT execution model 161
- 18.2.4 Real-time attributes 162
- 18.3 HRT execution model theory 162
- 18.4 Tool support of HRT-HOOD 162
- 19. Preserving design investment: the HOOD "standard" 163
- 19.1 The HOOD Reference Manual 163
- 19.2 Formal definition of the ODS 163
- 19.3 Exchanging designs between tools: the Standard Interchange Format 164
Part 5 : A full design example 165
- 20. Starting the project 166
- 20.1 Requirements 166
- 20.2 Initiating the design 166
- 20.3 The first basic design step 167
- 20.3.1 Problem definition 167
- 20.3.2 Elaboration of an informal strategy 168
- 20.3.3 Formalization of the strategy 168
- 20.3.4 Formalization of the solution 170
- 20.3.5 Analysis of the solution 171
- 21. First level objects 172
- 21.1 The Mission_Manager 172
- 21.1.1 Problem definition 172
- 21.1.2 Elaboration of an informal strategy 172
- 21.1.3 Formalization of the strategy 173
- 21.1.4 Formalization of the solution 175
- 21.1.5 Analysis of the solution 175
- 21.2 The secured driver 175
- 21.3 Request controller 176
- 21.3.1 Problem definition 176
- 21.3.2 Elaboration of an informal strategy 176
- 21.3.3 Formalization of the strategy 176
- 21.3.4 Formalization of the solution 177
- 21.3.5 Analysis of the solution 177
- 21.4 Generic_Gate 177
- 21.4.1 Problem definition 177
- 21.4.2 Elaboration of an informal strategy 177
- 21.4.3 Formalization of the strategy 178
- 21.4.4 Formalization of the solution 179
- 21.4.5 Analysis of the solution 179
- 22. Other objects 180
- 22.1 Motors library 180
- 22.2 Lights_Controller and Pressure_Sensor 180
- 22.3 Protected counter and Flip_Flop 181
- 22.4 Gates instantiations 181
- 22.5 Hard_Configuration 181
- 22.6 System configuration 181
Annexes 183
- A. Abbreviations 184
- B. Summary of graphical notation 185
- C. Glossary 187
- D. References 190
- E. ODS of the water-lock system 192
- F. Index 219