



Next: Paper 1: Floating-Point Computation Up: Lent Term 2010: Part Previous: Paper 1: Programming in Contents
Paper 1: Software Design
Lecturer: Dr A.F. Blackwell
No. of lectures: 8
Companion courses: Object-Oriented Programming, Programming in Java
This course is a prerequisite for the Group Project (Part IB).
Aims
The aim of this course is to present a range of effective methods for the design and implementation of software, especially where that software must meet professional quality standards. This will include a brief introduction to current commercial methods, but the main motivation is to understand the reasons why such methods have developed, how they differ from the concerns of academic computer science, and what are the technical foundations of good software engineering.
The course also provides an introduction to the principles of object-oriented programming, as a complementary perspective to the functional and procedural programming styles that have been presented in the Foundations of Computer Science course. Object-oriented programming principles will be applied in the Programming in Java practical classes.
Lectures
- Introduction to objects.
Classes, instances and state.
Fields, methods and constructors.
Collections and iterators.
Inheritance and interfaces.
- Overview of the design process.
Building models suitable for the stages of a software
development project. Introduction to UML.
- Inception phase.
Requirements, use cases, scenarios and structured analysis.
- Elaboration phase.
Object modelling. Interfaces and abstraction.
Information hiding.
- Construction phase.
Coupling and object interaction. Responsibilities, defensive
programming and exceptions. Functional decomposition, module
and code layout. Variable roles, object state, verification
and assertions.
- Transition phase.
Inspections, walkthroughs, testing, debugging. Iterative
development, prototyping and refactoring. Optimisation.
Objectives
After the first few lectures, students should understand the steps necessary to create simple object-oriented programs in the Java language. They will have the opportunity to practise this in the Programming in Java course that runs concurrently with these lectures.
At the end of the course, students should be able to undertake system design in a methodical manner, starting from a statement of system requirements, developing a modular design model, refining it into an implementation that clearly identifies and minimises risk, coding in a manner that can be integrated with the work of a team, and using appropriate methods to identify and prevent faults.
Recommended reading
McConnell, S. (2004). Code complete: a practical handbook of software construction. Microsoft Press (2nd ed.).
Fowler, M. (2003). UML distilled. Addison-Wesley (3rd ed.).
Revision and reinforcement of object-oriented concepts for those needing this:
Barnes, D.J. & Kölling, M. (2006). Objects first with Java: a practical introduction using BlueJ. Pearson Education (3rd ed.).
Further reading
Broy, M. & Denert, E. (ed.) (2002). Software pioneers: contributions to software engineering. Springer-Verlag.
Collins, H. & Pinch, T. (1998). The Golem at large: what you should know about technology. Cambridge University Press.
Petroski, H. (1985). To engineer is human: the role of failure in successful design. Macmillan.
Vincenti, W.G. (1990). What engineers know and how they know it: analytical studies from aeronautical history. Johns Hopkins University Press.
Simon, H.A. (1996). The sciences of the artificial. MIT Press.
Schon, D.A. (1990). Educating the reflective practitioner. Jossey-Bass.
Pressman, R.S. (2001). Software engineering. McGraw-Hill (European ed.).




Next: Paper 1: Floating-Point Computation Up: Lent Term 2010: Part Previous: Paper 1: Programming in Contents