CS 4240, Principles of Software Design
Fall 2010, TuTh 3:30PM - 4:45PM Olsson 011


Students: Check News page frequently!

Upcoming Deadlines:
  • Email me with your team and project topic idea by Oct. 28.

Instructor Info:

  • Dr. Tom Horton
  • Office: Olsson 228B. Phone: 982-2217
  • Office Hours: Mon 11-noon; Tue 10-noon; Fri. 11-11:30am. Or by appointment.
  • Email: horton.uva(at)gmail.com
Teaching Assistant:
  • Ben Rodes
  • benjaminrodes(at)gmail.com
  • Office Hours: TBD

Syllabus (Beginning of Course Memo) found in the Slides page.

Undergrad Record description:
This course focuses on techniques for software design in the development of large and complex software systems. Topics will include software architecture, modeling (including UML), object-oriented design patterns, and processes for carrying out analysis and design. More advanced or recent developments may be included at the instructor's discretion. The course will balance an emphasis on design principles with an understanding of how to apply techniques and methods to create successful software systems.
Pre-requisite: CS2150/CS216 with a C- or better.

Fall 2010 Topics and Features:
We'll address low-level design principles important for any software developer as well as how to understand and plan development of larger software systems. You'll learn about good OO design as well as good design in procedural languages. We'll cover UML, OO design patterns, code smells, and refactoring. For larger systems, you'll see how plug-in development works (e.g. for Eclipse or Firefox), and you'll learn about component-based development. We study how software architectures are described, developed and evaluated, using some interesting existing software systems as case-studies. Students in the class shouldn't be afraid of code, and assignments will include some software development but also fair amount of modeling (using methods taught in the course). Some coding will be done in Java, but you'll have a chance to do some things in C, Python, Rails, etc. if you choose.