News:

[2017.06.07] This website is updated very rare, because I do not have an access to the host server.

Scalable Object-Oriented Systems Design

Course Description

This course offers an intensive focus on the design and implementation of software using the principles of object-orientation and design patterns. Design patterns are conceptually reusable solutions for recurring problems in software design. Each design pattern allows programmers to implement some aspect of system functionality vary independently of other aspects, thereby making a system more robust to a particular kind of change. However, not all concerns can be expressed as first-class entities in object-oriented languages. The implementation of concerns like authorization, security, transaction management, logging, error handling, data persistence, caching, etc. tends to be scattered over multiple classes and tangled with the implementation of core functionality of these classes. Such concerns are called crosscutting concerns. This course discusses aspect-oriented programming as an approach to deal with crosscutting concerns and as a tool for supporting non-invasive evolution of software systems. In addition, the course covers the fundamentals of Hadoop ecosystem, which has revolutionized the way we do data-intensive computing. This technology introduces a new programming model that allows us to easily distribute computations across a large cluster.

Prerequisites

Proficiency in software development with Java

Objectives

Upon completion of this course, students will be able to:

Assignments and Grading

To pass the course, a student must achieve a score of at least 60% overall. The maximum number of points that can be scored in each assignment are listed below. If lab assignments or projects are 1 week late, you lose 50%. No assignments will be accepted after one week late.

CategoryDue DatePtsDescription
Lab7lab participation
P126.X10design patterns
P2*09.XI2AOP
P323.XI12design patterns + AOP
P430.XI6Hadoop
E302-hour end-of-semester written exam

Grade components:

  1. Lab participation (7 pts)
  2. Projects P1-P4 (30 pts)
  3. Final exam or participation in experiments (30 pts)

Labs & Projects

The labs and projects are designed to assist students in developing a more concrete understanding of the concepts introduced in lecture. Students will receive 1 point for each lab session successfully completed.

Students are encouraged to do pair programming for the labs and projects. In pair programming, two programmers share one computer. One student is the "driver", who controls the keyboard and mouse. The other is the "navigator", who observes, asks questions, suggests solutions, and thinks about slightly longer-term strategies. Both are also continuous brainstorming partners. The two programmers switch roles about every 20 minutes.

A more experienced partner may sometimes feel frustrated or slowed down by a less experienced partner, but the experienced partner still benefits from the teamwork in many ways. The less experienced partner's requests for clarification often uncover flaws in an approach or solution; the exercise of providing a clear explanation solidifies and deepens the explainer's own understanding and the teamwork and communication skills they gain have great value in both the academic realm and the job market.
In general, studies suggest that the resulting code of pair programming is of higher quality than individually programmed code, and in an educational setting both students learn more than they would separately.

To get a sense of how pair programming works in an university course, watch the video Pair Programming for Students and follow the principles of "pair programming" as described in How to Pair Program.

Schedule

DateLectureLab
05.XGoF
12.XGoF, RMIGoF
19.XAOPGoF, RMI
26.XAspectJAspectJ
02.XIHadoopAspectJ
09.XIexperiment
16.XIPrinciples of Class DesignHadoop
23.XITDDHadoop
30.XI?Continous integration

Caveat

The schedule and procedures for this course are subject to change (an agile approach). It is the student's responsibility to learn of and adjust to changes:)