I started doing some research into Simula (Simula67, etc..) mainly because it seems that every book on object oriented programming that I read mentions Simula as being the first O-O language. So I figure learning it might provide some insight into object oriented design. What follows are some of the most interesting links I've found on the subject.
Simula was created by Ole-Johan Dahl and Kristen Nygaard.
An Introduction to Programming in Simula - Rob Pooley's excellent book on Simula programming. Out of print, but thankfully, Rob has been kind enough to put it online.
Introduction to OOP in Simula - Jaroslav Sklenar's excellent intro to the language. Particularly strong is his coverage of Quasi-Parallel processing (cooperative multi-tasking) in Simula. Very good stuff.
CIM - Simula to C translator for Linux. All the versions are available for download here. Although the server might be picky and you have to come in here and navigate to the "cim" directory. There's a version compiled for Win32 available and lots of libraries too.
Montreal SIMULA Site - Lots of links to lots of information.
Simula Software - A collection of Simula classes and other useful things. I've not had a chance to review any of it, but I hope to.
Simula BEGIN (Birtwistle, Graham M., et al. 1973) - This is the definitive first book on the language. I was able to win a second printing of the first edition on ebay for $20.57. It arrived 6/26/2006. From the first edition:
Simula Begin By G M Birtwistle O-J Dahl B Myhrhaug K Nygaard Published by Studentlitteratur, Sweden & Auerbach Publishers Inc. Philadelphia, 1973
This book is an introduction to system description in the programming language SIMULA which was designed by three of the authors (O-J. D, B. M, K. N) whilst staff members at the Norwegian Computing Centre (NCC), Oslo.
SIMULA is an extension of the programming language ALGOL 60. SIMULA retains the spirit of ALGOL 60 and includes that language as a subset, except for some minor exceptions noted in Appendix F. The extensions lie in the class and co-routine concepts and the associated reference variables, together with fully defined text handling and input/output facilities. Ideas of C.A.R. Hoare (20) provided the key to combine efficiency, security and ease of use of reference variables.
The book is based upon material developed by G. M. B and K. N for SIMULA courses held at NCC, and papers by O-J. D. The NCC courses have attempted to give a coherent account of the concepts of systems analysis using SIMULA as a vehicle for their description, rather than concentrating upon a bit-by-bit explanation of the language atoms. By this means, it is hoped that the students have retained a clearer picture of what programming is all about — namely, the arts of decomposition and classification — and the SIMULA tools provided.
The first chapter of the book presents the most important features of SIMULA in an informal style. This chapter is meant to give a feel for the language elements and programming style in SIMULA, so that they can be accepted as meaningful with confidence in later chapters where precise definitions are given.
The next five chapters of the book gradually build up complete pictures of the basic units of SIMULA — blocks, procedures, classes and objects — and explain text handling and input/output.
Chapter seven is a set of SIMULA applications, covering extensions to array handling, information structures and lists. The chapter shows how the unique prefixing ability of SIMULA can be used to write and use application packages.
The final two chapters are given over to quasi-parallel systems (co-routines) with simulation as the main application field. The system-defined simulation features of SIMULA are carefully explained, and examples of their extension given. However, the reader is warned that this is not a book on SIMULA as a simulation language.
PREFACE 1. SYSTEM DESCRIPTION 1.1 Systems and models 1.2 Basic concepts of SIMULA 1.2.1 Top-down and bottom-up-approaches 1.2.2 Example: a post office system 1.2.3 Objects Action Pattern Variables IF statements Labels Classes Subsystems and Objects Reference Variables Repetitive Statements Compound Statements Object Generators CLASS-declarations The COUNTER Subsystem Build-Up REAL-variables Synchronization of actions Object Termination and Exit 1.2.4 The SYSTEM-object 1.2.5 The First SIMULA Version of the Post Office Conditions and BOOLEAN-variables Arithmetic Statements Reference relations 1.2.6 Open and Closed descriptions 1.2.7 The Second SIMULA Version of the Post Office 1.3 Some aspects of computers 1.3.1 An idealised computer system Elementary actions 1.3.2 Compile time and run time Compile time Run time 1.3.3 An elementary view of Input and Output Input from cards Output to a line printer 1.3.4 Data representation in the memory BOOLEAN-variables INTEGER-variables REAL-variables Reference-variables Objects Implementation defined 2. BLOCKS 2.1 A block Program 2.1. The average and highest mark of a list of numbers Model of program execution Elementary Binding Rule Program termination Discussion of Program 2.1 — assignment-statement — multiple-assignment-statement — WHILE-statement — IF-statement — compound-statement Exercises 2.1 2.2 Inner blocks Program 2.2. Calculation of frequencies Model of program execution Binding Rule Program termination Discussion of program 2.2 — Comment — FOR-statement — Arrays Exercises 2.2 2.3 ...and more on blocks 2.3.1 The run time stack 2.3.2 Blocks: a summary Exercises 2.3 3. PROCEDURES 3.1 Procedure statements Program 3.1. Rainfall plot Discussion of program 3.1 Exercises 3.1 3.2 ...and function procedures Program 3.2. Penny flipping problem Model of program execution Epilogue Discussion of programs 3.1 and 3.2 — PROCEDURE-declaration — System-defined procedures Exercises 3.2 3.3 Procedures as composition tools Program composition 4. CLASSES 4.1 Basic concepts Program 4.1. Find the centre and radius of the circle passing through three distinct points The class skeletons — Class POINT — Class LINE — Class CIRCLE Reference-comparators Object-reference-variable declarations Qualification and reference-assignment Remote accessing The CLASS-declarations — Class POINT revisited — Class LINE revisited — Class CIRCLE revisited Exercises 4.1 4.2 System description in levels Reference security Class LIFO (last-in, first-out) Prefixed blocks Discussion on 4.2. — CLASS-declarations — Class hierarchies — INNER — Remote accessing — Use of QUA — THIS CLASS-identifier — INSPECT-statement — Qualification and object-reference-assignment revisited Exercises 4.2 4.3 The VIRTUAL concept Program 4.3. Write a program to assemble and plot the symmetric figure shown in fig. 4.3.1 Discussion of program 4.3 — Dummy-statement — Virtual quantities 1) attribute redefinition 2) inner accessibility 4.4 Debugging 5. RECURSION Program 5. The Towers of Hanoi I Execution of the program for 2 discs Recursive functions Exercises 5 6. CHARACTER HANDLING, TEXT HANDLING AND INPUT/OUTPUT 6.1. Character handling Program 6.1. Letter incidence count Exercises 6.1 6.2. Text handling 6.2.1 Basic concepts Text-reference-assignment Character access TEXT-value-assignment TEXT-comparisons 6.2.2 Text editing and de-editing — De-editing procedures — Editing procedures Texts as parameters Exercises 6.2 6.3 Basic input/output features Class file Class INFILE Class OUTFILE Class PRINTFILE I Class basico Program 6.3.1. Pretty print Program 6.3.2. Data processing Exercises 6.3. 7. LEVELS OF SYSTEM DESIGN 7.1 Array handling-class BOARD 7.1.1 Class BOARD Program 7.1.2. The game of LIFE IF-expressions Program 7.1.3. Route finding through a rectangular maze Exercises 7.1 7.2. A family tree structure Class FAMILY Class PERSON Exercises 7.2 7.3. Circular two way lists-class SIMSET Class LINKAGE Class LINK Class HEAD Program 7.3. Write a program to generate a deck of cards and deal them to four players Exercises 7.3 7.4. Binary search trees 7.4.1 Class TREE 7.4.2 Use of Class TREE Program 7.4.1. Number count Program 7.4.2. Word count Exercises 7.4 7.5 Symbolic differentiation-class EXPRESSION Program 7.5.1 The differentiation procedures Program 7.5.2 Displaying the results Program 7.5.3 Exercises 7.5 8. A PROGRAM AS COMPONENTS IN QUASI-PARALLEL 8.1 Setting the wheels in motion Program 8.1. Buffering Program 8.2. MINILUDO Exercises 8 9. SIMULATION 9.1 Simulation and class SIMULATION Car wash simulation The class SIMULATION — Class SIMULATION — Class PROCESS — MAIN — the active component and simulated time — scheduling 9.2. Car wash simulation Program 9.2. Class WASHINGCARS Discussion of Program 9.2 Exercises 9.2 9.3. A platform for counter simulations — Class STATION — Class CLERK — Class CUSTOMER — Class COUNTER Exercises 9.3 9.3.1 Airport departure simulation Class AIRPORTDESCRIPTION Program 9.3.1 Airport departure Discussion of program 9.3.1 9.3.2 Booking office simulation Program 9.3.2 class INFORMATIONSYSTEM and its use Exercises 9.3 (continued) REFERENCES AND FURTHER READING SOLUTIONS TO STARRED EXERCISES APPENDICES A. Syntax of SIMULA 1. Program 2. Syntatic variables and their definition 3. SIMULA atoms 4. Comment conventions 5. Blocks and statements 6. Expressions 7. Declarations 8. Types and constants 9. Omissions B. The system classes SIMSET and SIMULATION C. System defined functions and procedures D. Random drawing procedures E. Parameter transmission modes F. The differences between ALGOL 60 and SIMULA INDEX
Object-Oriented Programming with SIMULA (Kirkerud, Bjoern 1989) International Computer Science Series. Addison-Wesley Publishing Co. (1989). ISBN 0-201-17574-6.Copyright ©2005, Ted Felix. Disclaimer