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:
- develop modular software systems
- appropriately apply Object-Oriented Design principles (SOLID)
- design for change by using design patterns
- leverage AspectJ to absorb unanticipated changes
- use unit testing to make sure that classes behave as intended
- use MapReduce for batch processing of Big Data
- work collaboratively as part of a team
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.
Category | Due Date | Pts | Description |
---|---|---|---|
Lab | 7 | lab participation | |
P1 | 26.X | 10 | design patterns |
P2* | 09.XI | 2 | AOP |
P3 | 23.XI | 12 | design patterns + AOP |
P4 | 30.XI | 6 | Hadoop |
E | 30 | 2-hour end-of-semester written exam |
Grade components:
- Lab participation (7 pts)
- Projects P1-P4 (30 pts)
- 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
Date | Lecture | Lab |
---|---|---|
05.X | GoF | |
12.X | GoF, RMI | GoF |
19.X | AOP | GoF, RMI |
26.X | AspectJ | AspectJ |
02.XI | Hadoop | AspectJ |
09.XI | experiment | |
16.XI | Principles of Class Design | Hadoop |
23.XI | TDD | Hadoop |
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:)