A full online version of
Object-Oriented Software Construction,
2nd edition (1997)




The second edition of Object-Oriented Software Construction was published in 1997, considerably augmented from the 1988 first edition. For more about the book, see the Wikipedia entry about it.

Both editions were published by Prentice Hall, now part of Pearson Education, Inc. With Pearson’s kind permission, this online version has been made available in response to frequent requests and in preparation of the forthcoming third edition.

This version is the original text from the 1997 edition. The contents and pagination remain essentially the same. Substantial changes will appear in the forthcoming third edition.

(December 2022 note: as a qualification to the preceding observation, to avoid perpetuating obsolete syntax I did now make a few changes: removing the “is” of feature declarations, getting rid of the “!!” for creation, replacing “indexing” by “note” etc. The table of contents, list of principles and index have all been regenerated and are up to date.)

To follow the progress of the third edition, please consult bertrandmeyer.com/OOSC3.

Copyright notice: The text is not in the public domain. It is copyrighted material, made available free of charge on the Web for the convenience of readers, in particular for use as a textbook in courses. You are not permitted to copy it or redistribute it. Please refer others to the present version at bertrandmeyer.com/OOSC2.

A number of pirated versions have found their way to various sites on the Web. They are illegal (and typically of bad typographical quality). If you encounter such a version, please ask the site owners to remove it, or notify the author. You can also simply use the comment section for this page.

To read the second edition, you will find the full PDF (11 MB) here.

(Please do not bookmark or share the above download link as it may change, but use the present page: https://bertrandmeyer.com/OOSC2.)

VN:F [1.9.10_1130]
Rating: 9.1/10 (7 votes cast)
VN:F [1.9.10_1130]
Rating: +4 (from 4 votes)
OOSC2, 9.1 out of 10 based on 7 ratings
Be Sociable, Share!


  1. JSoftwareEngineer says:

    I downloaded the PDF. It has one foible I’ve come across. Wherever the word “purpose” occurs it seems to be preceded by “ee-“, as “ee-purpose”. But the book is great. Thanks for all you do.

  2. Thank you very much for pointing this out. It’s a text processing error (a script that overreached its goal) which I thought I had corrected. There were actually over 200 cases of the spurious “ee-“, not just in connection with “purpose”, so it imposed a non-trivial impediment on the reader. I have fixed it now — at least I hope I caught all occurrences. Please re-dowanload and accept my apologies.

  3. psoe says:

    I downloaded the pdf from the above link. On page 186, under “Qualified and unqualified calls” section, the dot (“.”) seems to be replaced by very small subscript version of ?. I am not sure if it is text processing error or not. I tried a few pdf readers including Adobe Acrobat Reader. I am seeing the same thing in all readers. Since I can’t attach pictures here, I copied the text and pasted below:

    It was said above that all object-oriented computation relies on feature calls. A consequence of this rule is that software texts actually contain more calls than meet the eye at first. The calls seen so far were of one of the two forms introduced above:
    x? f
    x?f (u, v, )
    Such calls use so-called dot notation (with the “ ? ” symbol) and are said to be qualified because the target of the call is explicitly identified: it is the entity or expression (x in both cases above) that appears before the dot.

    • I see it. In fact it’s a special format that should give a big dot. It seems to appear throughout. I will fix it — give me a couple of days. Thanks for reporting the problem.

      • psoe says:

        Thanks for your kindness.

        On page 183, I found one minor glitch. According to below, I suppose, in the class GRAPHICS,
        `p1? translate (4.0, –1.5) –??` should be `p1? translate (4.0, –1.5) –**`.
        For the dot problem, I’ve reported above. But asterisks changed to question marks as well. I am afraid this happens for actual code, not in the comment.

        Feature call
        The starred instruction,
        p1? translate (4.0, –1.5)

  4. psoe says:


    I am afraid to ask, but I’d like to know if the above problem has been fixed in the pdf book.

    One of my friend help me get a used printed version from amazon, but shipping the book from US to my country will take a while, probably more than one month.

    Best regards

  5. Yes, it has been fixed now. Finished today in fact. Thank you very much for reporting the problem.

    I used the opportunity to do some more cleanup. Somehow the paging had become wrong (because of minute differences — sometimes at level of a 10th or a point or millimeter) between original (Unix) fonts and current ones. Also, I updated some syntactical elements to use the modern versions: no more !! for creation, note instead of indexing, no more “is” in the declaration of features… All this took some time. (After all it’s over 1200 pages.) I do not guarantee that the result is bug-free but there shouldn’t be any major problem of the “big dot” kind. Of course any more in-depth change will be for the 3rd edition.

  6. Let me know (in this page) if you find more problematic stuff.

    • psoe says:

      Sure. Thank you very much.

      I will be reading many parts of the book in coming months, and I’ll do update you whichever typesetting error I found along the way so that they can be fixed when you have time.

      I can imagine how difficult it can be, after 25 years, to reproduce a book exactly as it was. Only if the exact same environment (the operating system, the fonts, the exact version of the typesetting software used) on which the book was created can be emulated, we may be able to recreate it perfectly the same.

  7. psoe says:


    Here are just a few glitches I encountered so far. They are just minor and not so problematic, but just in case you may want to know…

    On page 693, air_reservation.enter_transition (sn, tn, l) should be air_reservation.put_transition (sn, tn, l) so that the feature name matches with the definition on the facing page
    On page 428, in the figure, create a.make(…) is covering the S1 a little bit
    On page 777, in the class LINKED_LIST1 [G], I guess count:G should be count:Integer.
    On page 699, you may want to remove `is` from the deferred class (I am not too sure though)

    deferred class COMMAND feature
    execute is deferred end
    undo is deferred end

    On page 691, STATE of in the comment is wrapped to the next line. I am not sure all such cases can be eliminated. But it makes me think STATE is part of the class definition, not a comment.
    — This refers of course to the execute procedure of STATE

  8. psoe says:

    On page 364 (section 11.8 Class Invariants), the bad dot is there again throughout the page, but this time it appears as a small “1” .

Leave a Reply

You must be logged in to post a comment.