Readings / Literature
This course does not follow any book in particular. The are several reasons for this: there is no book that covers the material we are interested in in a way that's feasible to use for such short a course, and I don't believe in forcing you to buy a book that you will only read bits and pieces off. Also, most books give a bad reading experience when large chunks are skipped.
You should read the articles listed under Fundamentals below.
There is a good selection of partial books at Google Books. If you want to split a book in a single team, I recommend the following books available from a number of sources (e.g., Adlibris, Akademibokhandeln, Amazon, etc.):
Text books
- Booch, Grady, Robert A Maksimchuk, Michael W Engel, Bobbi J Young, and Jim Conallen (2007) Object Oriented Analysis & Design with Applications 3rd Edition.
Addison-Wesley. ISBN 978-0-20-189551-3.
- Very comprehensive. Covers a lot and goes through actual scenarios for about 300 pages. Way too much for detail for this course though.
- Bruegge, Bernd, and Allen H. Dutoit (2010) Object-Oriented Software Engineering Using UML, Patterns, and Java.
Pearson Education, Inc. ISBN 978-0-13-815221-5.
- Covers way too much for this course, but puts it all into perspective. Goes beyond the analysis and design perspective to cover the entire software engineering process, including managerial aspects.
UML reference
- UML 2.0 In a Nutshell
from the classical O'Reilly Animal Series.
- UML Distilled
. Shorter and more to-the-point than the OOAD book by Booch above.
- UML 2.0 Pocket Reference
.
You do not need to buy a book to pass the course. Personally, I think that splitting an electronic copy of UML 2.0 Pocket Reference (USD 7.99) in every project team is a good idea, to collect all UML syntax information in a single place. Do note though that this book only teaches UML syntax, not analysis and design in itself.
Articles
Note that some of the links below only work from within an Uppsala University IP. If you need to access one from home, you can always use SSH or equivalent to access one of the department's machines and download the article. Or simply Google it to see if there is a public copy somewhere.
Fundamentals
These articles are all pretty short. You should read all of them.
Week 1
- Guerraoui, Rachid (1996) "Strategic Directions in Object-Oriented Programming."
ACM Computing Surveys 28(4):691-700.
- Useful descriptions of what object-orientation is about, a very brief historical perspective, and outlooks to the future, which are 14 years old and therefore interesting to think about what became off them. An easy and good read early in the course. Probably old hat to most students with a more extensive programming background. (10 pages with big typeface.)
- Wikipedia's entry on Object-Oriented Programming
.
- Make sure you are familiar with all these concepts. Especially have a look at the criticism section.
- Fowler, Martin (1999) Is There Such a Thing as Object-Oriented Analysis?
.
- A very short gem explaining the differences between analysis and design, and a little bit how to focus your thoughts in each activity. (1.5 pages)
- Beck, Kent, and Ward Cunningham (1989) "A Laboratory For Teaching Object-Oriented Thinking."
ACM SIGPLAN Notices - Special issue: Proceedings of the 1989 ACM OOPSLA conference on object-oriented programming 24(10).
- Introduces CRC cards for the first time. (Short)
Week 2
- Wirfs-Brock, R., and B. Wilkerson (1989) "Object-oriented design: a responsibility-driven approach."
ACM SIGPLAN Notices - Special issue: Proceedings of the 1989 ACM OOPSLA conference on object-oriented programming 24(10):71-75.
- A simple introduction to thinking about object-oriented design. A tad dated, but still worth a read. Simple and accessible. (5 pages)
- Wikipedia's entry on Object-oriented Design
.
- Not very meaty, but you should grasp the concepts and potentially read up on them on your own.
Week 3
- Wikipedia's entry on Design Patterns
.
- Orient yourself in the categories of patterns. No need to memorise them - it is more useful to develop a feeling for what could be solved by a standard pattern and then looking it up when needed.
Week 4
- Gorman, Jason (2005) UML for Java Developers--Model Constraints & The Object Constraint Language.
- These slides provide a good introduction to modelling with the Object Constratint Language (OCL). An alternative set of slides can be found here
.
- This may be a bit heavy going if your programming and/or logic background is on the light side. Try to at least skim this one early on and let your TA know if we need to schedule a session to go through it.
- These slides provide a good introduction to modelling with the Object Constratint Language (OCL). An alternative set of slides can be found here
Week 5
- Cardelli, Luca (1997?) "Bad Engineering Properties of Object-Oriented Languages."
Manuscript.
- A thrashing of OOP from a famous procedural programmer and formalist. Read this article just as you read articles about how great OOP - with a critical eye. (5 pages)
Supplementals
These are not obligatory, but more on the order of tips on further reading.
- Ramsin, Raman, and Paige, Richard F. (2008) "Process-Centered Review of Object Oriented Software Development Methodologies."
ACM Computing Surveys 40(1): Article 3.
- A quite dense review of different methodologies for developing software with object-oriented techniques. If you want to gain a deeper understanding of how different ways of developing software (e.g., Agile techniques like Scrum or more heavy-weight processes like RUP) supports OO differently, this article is an interesting and insightful read. (89 pages)
- Formica, Anna, and Michele Missikoff (2004) "Inheritance Processing and Conflicts in Structural Hierarchies."
ACM Computing Surveys (CSUR) Surveys 36(3): 263-290.
- An attempt at describing the concept of generalisation in both object-oriented programming (with inheritance, etc.), AI and databases. Students with some knowledge in the last two areas might gain additional insight by this comparison. Students that do not can focus simply on the programming language parts of the article. Some formal notation and use of predicate logic. (27 pages)
- Miller, Randy (2003) Practical UML™: A Hands-On Introduction for Developers
.
- A simple guide to UML diagramming notation. Some of the terminology is outdated, but that is not really a problem.
Other useful links