After the purpose and specifications of software are determined, software developers will design a solution. It ranges from the architecture of its components (modules, classes...) to their code implementation. This course covers two key aspects of software design: object oriented design patterns and the graphical user interface. Beyond that, other smaller design topics are addressed: design by contract and coding style.

The adopted approach is project-based or 'learning to do': everything taught will be applied to partially develop a software project. We are going to design and implement (but not specify, plan, test, review or versioning) a time tracker application for Android. Similar applications are TSheets, Xpert-Timer and many more.

We assume students know UML notation for class diagrams, basic object orientation concepts (composition, inheritance, encapsulation) and programming in some OO language, preferably Java.


  1. Object orientation:
    • GRASP patterns
    • principles
  2. Design patterns :
    • creational
    • structural
    • behavioural
  3. Design by contract: OCL, pre, post-conditions, invariants
  4. Coding style: style rules for Java, comments, javadoc tool
  5. User interface design:
    • usability factors
    • process: prototyping, user testing
    • mobile patterns
    • internationalization
  6. Programming Android interfaces

Learning outcomes


// EXP1, EXP2  mid-term exams
// EXR1, EXR2  retake exam
// M1, M2, M3  marks of project milestones
// FM          the final mark

EX = ( max(EX1, EXR1) + max(EX2, EXR2) )/2.

if (M3>0.) {
  PR = (M1 + M2 + M3)/3.
} else {
  PR = 0.

if (EX >= 5.) and (PR >= 5.) {
  FM = (EX + PR)/2.
} else { // EX<5. or PR<5.
  FM = min(EX, PR)

Students wishing to withdraw and get mark "No avaluable" must tell me so by EX2 exam date.

EXR is a retake exam of the part an student failed in preceeding exams, that is, a retake of just EX1, EX2 or both.

Project teams are formed by 3 students. We'll make sure every member of a project team contributes equally. If not, we'll assess each student sepparately according to his/her contribution and/or we'll break the group.

Project milestones will be graded as A=10, B=8, C=6.5, D=5, E=2.5, F=0 on the very day the delivery is due. If a student doesn't show up at a project milestone he/she gets F.

Condition (M3 > 0.) is meant to enforce working on the third milestone even though you get high or sufficient scores at first and second milestones.

Sample exams of 2014-15: EX1, EX2.

Delivering an exam or project milestone copied fully or in part from other students implies a zero mark even if this means to fail the whole course.

Your questions

Of course you should. You'll get introduced to each topic, get the solution to exercises similar to those in the exams, receive indications for the practical project... The reality is that towards the end of the course only a fraction of the students keep attending. But then, attendance is highly correlated to good marks (or pass/fail).

Is the Pope catholic ? You need to study not only to pass the exams but, more importantly, to learn the concepts and methods you'll apply in the project. Literally almost everything we explain in the lectures is needed to complete the project (and more).
Slides are convenient to the instructors in order to cover a lot of material in the short time a lecture lasts. But they are only an entry point. We recommend you to study the books we reference, tutorials, papers etc. we provide along with the slides. In particular, we have carefully selected the list of books and keep them updated each course. As much as we can, we try the library to buy them in electronic format.

Of course, but that's up to you. Assignments are similar to questions in the exams. More, you'll learn much more doing than just reading. OO design is difficult so solving the assignments is a must to pass the exam. Assigments on user interface design are somewhat easier, many times we ask you to read a paper and comment it.

You get 0. We divide the practical assigment (project) into three milestones, each with its own scoring specification. Be sure to read it.

Yes, we normally do. Once we caught a delivered milestone copied from another team of a course three years past. Copying is worse than getting 0. Not only is a fraud but also make us loose time in checkings. However, most often is not difficult because we do ask questions during the milestone session and figure out if a team has copied or if a student has not done his/her job. Finally, exams include questions on the practical assignment.

That's a time you can get personalized attention: we can solve there any misunderstanding, explain again exercises and help you complete the project.

Contact and office hours

Only by appointment, please send an e-mail in advance (at least 1 day before) or talk to us.

Joan Serrat room QC-1022, Wednesday 15:30-16:30h, Friday 11-12h
David Fernandez room QC-1026, Wednesday 17-18h, Friday 16-17h
Idoia Ruiz room QC-1022, Wednesday 12-13h, Thursday 11-12h


Desing patterns Gamma Desing patterns Gamma Desing patterns: elements of reusable object oriented software. E. Gamma, R. Helm, R. Johnson, J. Vlissides. Addison Wesley, 1994 and Pearson Educacion, 2003.
Head first design patterns Head first design patterns. E. Freeman, K. Sierra, B. Bates. O'Reilly, 2004.
Design patterns sourcemaking Design patterns explained simply.
The elements of Java style The elements of Java style. A. Vermeulen, S.W. Ambler, G. Bumgardner et al. Cambridge University Press, 2000.
Clean code Codigo limpio Clean code: a handbook of agile software craftmanship. R.C. Martin. Prentice Hall, 2008 and Anaya Multimedia, 2012.
Paper prototyping Paper prototyping: the fast and easy way to refine user interfaces. C. Snyder, Morgan Kaufmann, 2003. Electronic version at UAB library.
Rocket surgery made easy Rocket surgery made easy: the do-it-yourself guide to finding and fixing usability problems. S. Krug. New Riders, 2010.
Android design patterns Android design patterns: interaction design solutions for developers. G. Nudelman. Wiley, 2013.
Thinking in Java Thinking in Java, 3rd edition.
B. Eckel. Free download at
Beginning Android 4 Beginning Android 4 application development.
Wei-Meng Lee. Wiley, 2012. Electronic version at UAB library.
Head first android Head first Android development. Dawn Griffiths, David Griffiths. O'Reilly, 2015.

TODO list