Java and C# in depth

Bertrand Meyer,  Carlo Alberto Furia, Spring Semester 2010


Announcements | Description | Schedule | Lectures | Course Wiki | Exam | Literature



1.6.2010 Fixed slide 26 lecture 2 (Java). See the course wiki forum ("break with label for case").
31.5.2010 Fixed slide 28 lecture 3 (C#), and slide 6 exercise session 3. Uploaded Erich Gamma's slides.
20.5.2010 On June 3rd there will be no exercise sessions.
20.5.2010 The project presentations will take place on May 27th from 16:00 to 18:00 in ML H44. Each group will have four minutes to present their project. You may be using slides or a demo if you wish. In this case please have everything ready on a laptop. If for some reason you need to be scheduled at a certain time please write to Marco Piccioni. A schedule of the presentations will be published on the course wiki within Wednesday 26th.
17.5.2010 Published grading criteria for project implementation, documentation and final report on course wiki.
7.5.2010 The final exam will take place in the auditorium HG F7. Date and time stay the same: June 3rd from 14:15 to 16:00.
5.5.2010 The course evaluation will take place on 6.5.2010 during the lecture.
15.4.2010 Published grading criteria for requirements specification on course wiki.
25.3.2010 Published requirements specification template and sample requirements specification.
25.3.2010 Published project info: see slides. Please form groups of 3 people (aggregating across exercise groups is fine), pick a project and tell your assistant.
25.3.2010 Published assignment 3 one week earlier. Deadline remains the same: April 8th (Java) and April 15th (C#).
25.2.2010 Updated exercise sessions info. Every course attendant is encouraged to join an exercise session group according to the suggested alphabetical order.
10.2.2010 Updated lecture schedule. Please note the schedule may still be subject to change.
19.1.2010 Updated exam info
23.12.2009 This page is now active
23.12.2009 The exam will be on June 3rd


Title and Code

Java and C# in depth
Course code: 252-0284-00L


Prof. Dr. Bertrand Meyer, Dr. Carlo Alberto Furia, Marco Piccioni (Group 1), Nadia Polikarpova (Group 2), Max (Yu) Pei (Group 3).


Java and C#, both similar and each with its own characteristics, are important languages with wide applications. This course goes into the depth of both languages, each considered for itself but also in comparison with the other. It introduces the main topics via theoretical lectures and proposes practical programming assignments that will help the students to foster their capacity at writing Java and C# programs over the semester. A programming project will also be proposed during the fifth week of the course. Content will be differentiated and improved from the 2008 iteration of the course.


Knowledge of another Object-Oriented programming language is mandatory for understanding this course.


  • Java and C# language design philosophy
  • Java and C# fundamental language mechanisms
  • The main properties differentiating Java and C#
  • GUIs
  • Threads and Synchronization
  • Persistence
  • Web Services

The literature for presentations covering those topics is given below.


  • Lecture: Thursdays 14.15 - 16.00, ML F 39
  • Exercise session, group 1 (A-Gai): Thursdays 16.15 - 17.00 HG D 3.3. TA: Marco Piccioni
  • Exercise session, group 2 (Gar-Pe): Thursdays 16.15 - 17.00 HG E 21. TA: Nadia Polikarpova
  • Exercise session, group 3 (Pf-Z): Thursdays 16.15 - 17.00 HG D 5.3. TA: Max (Yu) Pei
  • Office hours: by appointment.


    Course Wiki

    In the course wiki you are welcome to share java and C# knowledge, ask technical questions and discuss project issues.


    The examination for the course will be June 3rd in the auditorium HG F7., from 14:15 to 16:00. It is a written examination. Paper documents are allowed (lecture notes, books, written documents...). Electronic devices are forbidden (cell phones, laptops, calculators...). Here are some past exams. Take into consideration that they are referring to a `Java only' exam, while this year exam will include C# too:

    Literature and resources

    • Java
      • Cay S.Horstmann, Gary Cornell, Core Java 8th Edition, Prentice Hall PTR 2007, 2 volumes. Also good as a reference, with non-trivial examples.
      • Java Docs
      • Joshua Bloch, Effective Java Second Edition (The Java Series), Addison Wesley 2008
      • Joshua Bloch, Neal Gafter Java Puzzlers: Traps, Pitfalls, and Corner Cases, Addison-Wesley 2005
    • C#
    • Comparisons of Java and C#
    • Design patterns/UML
      • Erich Gamma, Richard Helm, Ralph Johnson, John M. Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software Addison Wesley 1994 This is still a classic. The examples are in C++ and there is a pre-uml notation for diagrams
      • Craig Larman, Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development 3rd Edition, Prentice Hall 2004 A very good book about OO design, patterns and UML
      • Martin Fowler, UML Distilled: A Brief Guide to the Standard Object Modeling Language (3rd Edition) Addison Wesley 2003. Clear and concise UML overview. Contains everything you need to use UML in an appropriate way.
    • Eclipse plugins
      • (introductory course)
    • Threads
      • Brian Goez, Java Concurrency in Practice, Addison-Wesley 2006
    • General Programming
      • Andrew Hunt, David Thomas, The Pragmatic Programmer, Addison Wesley 1999. Tells not only how to write the code but also how to manage yourself as a programmer. Has acquired icon status among many programmers.