|
|
xi | |
Preface |
|
xv | |
I Type Problems in Object-Oriented Languages |
|
1 | (116) |
|
|
3 | (14) |
|
Type systems in programming languages |
|
|
4 | (2) |
|
Type checking and strongly typed languages |
|
|
6 | (6) |
|
Focus on statically typed class-based languages |
|
|
12 | (1) |
|
Foundations: A look ahead |
|
|
13 | (4) |
|
Fundamental Concepts of Object-Oriented Languages |
|
|
17 | (16) |
|
Objects, classes, and object types |
|
|
17 | (5) |
|
Subclasses and inheritance |
|
|
22 | (2) |
|
|
24 | (2) |
|
Covariant and contravariant changes in types |
|
|
26 | (1) |
|
Overloading versus overriding methods |
|
|
27 | (5) |
|
|
32 | (1) |
|
Type Problems in Object-Oriented Languages |
|
|
33 | (16) |
|
Type checking object-oriented languages is difficult |
|
|
33 | (2) |
|
Simple type systems are lacking in flexibility |
|
|
35 | (13) |
|
Summary of typing problems |
|
|
48 | (1) |
|
Adding Expressiveness to Object-Oriented Languages |
|
|
49 | (22) |
|
|
49 | (11) |
|
Even more flexible typing with Eiffel |
|
|
60 | (9) |
|
|
69 | (2) |
|
|
71 | (18) |
|
Subtyping for non-object types |
|
|
72 | (11) |
|
|
83 | (1) |
|
Subtyping for class types |
|
|
84 | (2) |
|
|
86 | (3) |
|
Type Restrictions on Subclasses |
|
|
89 | (6) |
|
Allowable changes to method types |
|
|
89 | (2) |
|
Instance variable types invariant in subclasses |
|
|
91 | (1) |
|
|
92 | (1) |
|
|
93 | (2) |
|
Varieties of Object-Oriented Programming Languages |
|
|
95 | (22) |
|
Multi-methods vs. object-based vs. class-based languages |
|
|
95 | (8) |
|
Well-known object-oriented languages |
|
|
103 | (8) |
|
|
111 | (6) |
|
Historical Notes and References for Section I |
|
|
113 | (4) |
II Foundations: The Lambda Calculus |
|
117 | (54) |
|
Formal Language Descriptions and the Lambda Calculus |
|
|
119 | (22) |
|
The simply-typed lambda calculus |
|
|
120 | (12) |
|
Adding pairs, sums, records, and references |
|
|
132 | (8) |
|
|
140 | (1) |
|
The Polymorphic Lambda Calculus |
|
|
141 | (30) |
|
Parameterized types and polymorphism |
|
|
141 | (6) |
|
Recursive expressions and types |
|
|
147 | (4) |
|
Information hiding and existential types |
|
|
151 | (5) |
|
Adding subtypes to the polymorphic lambda calculus |
|
|
156 | (9) |
|
|
165 | (6) |
|
Historical Notes and References for Section II |
|
|
167 | (4) |
III Formal Descriptions of Object-Oriented Languages |
|
171 | (118) |
|
SOOL, a Simple Object-Oriented Language |
|
|
173 | (28) |
|
Informal description and example |
|
|
173 | (3) |
|
Syntax and type-checking rules |
|
|
176 | (24) |
|
|
200 | (1) |
|
A Simple Translational Semantics of Objects and Classes |
|
|
201 | (24) |
|
Representing objects at runtime |
|
|
201 | (2) |
|
Modeling SOOL types in ΛP< |
|
|
203 | (4) |
|
Modeling SOOL expressions in ΛP<: |
|
|
207 | (5) |
|
Modeling classes - first try |
|
|
212 | (6) |
|
Problems with modeling subclasses |
|
|
218 | (5) |
|
|
223 | (2) |
|
Improved Semantics for Classes |
|
|
225 | (14) |
|
|
225 | (7) |
|
A correct subclass encoding |
|
|
232 | (1) |
|
|
233 | (6) |
|
SOOL's Type System Is Safe (and Sound) |
|
|
239 | (24) |
|
The translation of SOOL to ΛP<: is sound |
|
|
239 | (16) |
|
The translation is well defined |
|
|
255 | (3) |
|
|
258 | (2) |
|
|
260 | (2) |
|
|
262 | (1) |
|
Completing SOOL: super, nil, Information Hiding, and Multiple Inheritance |
|
|
263 | (26) |
|
Using methods from superclasses |
|
|
263 | (3) |
|
|
266 | (5) |
|
|
271 | (1) |
|
Finer control over information hiding |
|
|
272 | (3) |
|
|
275 | (4) |
|
|
279 | (10) |
|
Historical Notes and References for Section III |
|
|
283 | (6) |
IV Extending Simple Object-Oriented Languages |
|
289 | (78) |
|
Adding Bounded Polymorphism to SOOL |
|
|
291 | (8) |
|
|
291 | (5) |
|
Translational semantics of PSOOL |
|
|
296 | (1) |
|
|
297 | (2) |
|
Adding MyType to Object-Oriented Programming Languages |
|
|
299 | (32) |
|
|
300 | (9) |
|
MOOL: Adding MyType to SOOL |
|
|
309 | (10) |
|
Translational semantics of MOOL |
|
|
319 | (3) |
|
Soundness of translation for MOOL |
|
|
322 | (8) |
|
|
330 | (1) |
|
Match-Bounded Polymorphism |
|
|
331 | (18) |
|
Benefits of match-bounded polymorphism |
|
|
331 | (2) |
|
|
333 | (1) |
|
Examples and comparison with F-bounded polymorphism |
|
|
334 | (1) |
|
Translational semantics of PMOOL |
|
|
335 | (7) |
|
Soundness of the translation of PMOOL |
|
|
342 | (5) |
|
|
347 | (2) |
|
Simplifying: Dropping Subtyping for Matching |
|
|
349 | (18) |
|
|
349 | (3) |
|
|
352 | (4) |
|
|
356 | (4) |
|
An informal semantics of hash types |
|
|
360 | (1) |
|
|
361 | (6) |
|
Historical Notes and References for Section IV |
|
|
363 | (4) |
Bibliography |
|
367 | (12) |
Index |
|
379 | |