CMSC 433
Programming Language Technologies and Paradigms

CMSC 433





Class meets TTh 11:00--12:15 in CSI 2117.

Wait list

At my discretion.

Changes (correcting errors, clarifying ambiguities, etc) to the web pages, projects, due dates, etc. will be placed on the recent changes web page.


Class newsgroup is csd.cmsc433 - only visible from within UMD


Name Email Phone Office Office Hours
Adm Porter


AVW 4125 TWTh 2-3
Hyoungjune Yi   AVW 4132 M 2-4, W 3-5


The goal of this course is to provide the skills needed to deconstruct relevant programming problems and solve them in an object-oriented style. To do this, we teach the following two interrelated topics:

  • Methods and styles of (sequential) object-oriented (OO) programming. Much of our focus will be on abstraction, particularly in the use of interfaces and design patterns so as to improve code reusability and reliability. We will be using the Java programming language exclusively. The homework projects will build on each other so as to develop your skills in using these techniques.
  • Principles and practice of concurrent OO programming. We will cover the two main forms of concurrency: shared-memory multi-threading (as provided by the Java Thread class), and distributed message passing (as provided, along with more features, by Java Remote Method Invocation (RMI)).

While we reserve the right to change the projects at any time, we intend the students to build, throughout the semester, a sophisticated server. As such, they will also learn a fair amount about network programming in Java.

Tentative schedule of topics

  • Java (1 week)
    • Basics
    • Object oriented programming in Java
    • Libraries
    • Exceptions
    • Inner classes
  • Programming Techniques and Tools (1 week)
    • Logging
    • Debugging
    • Exceptions
    • Assertions/Invariants
    • Testing
    • Dr. Java
  • Object-Oriented Design and Design Patterns (3 weeks)
    • Object invariants
    • Class design
    • UML
    • Design patterns
  • Intro to Concurrency (1 week)
  • Threads (2 weeks)
    • Java threads
    • Java memory model
    • Design Forces (safety, liveness/deadlock, performance, reusability)
    • Synchronization Strategies
    • Wait and notify
  • Midterm: Java, OO design, threads
  • Concurrent Programming in Java (4 weeks)
  • Distributed Programming (2 weeks)
    • RPC
    • Java RMI
    • Marshalling, stubs and proxies
  • Final Exam

Last updated Wednesday, 18 September 2002 02:31 PM