Programming Skills

VCSS 561 (undergraduate)
VCSG 714 (graduate)


Catalog Description:
Programming Skills

The goal of this course is to introduce the student to a programming paradigm and an appropriate programming language chosen from those that are currently important in industry or that show high promise of becoming important. A significant portion of the learning curve occurs through programming assignments with exemplary solutions discussed later in class.

The instructor will post specifics prior to registration. With the approval of the program coordinator the course can be taken for credit more than once, provided each instance deals with a different paradigm and language.

Aspect-Oriented Software Development

This course will investigate the notion of software development with aspect orientation (AO). Students will discover advantages and disadvantages to inclusion of AO in software development.

Aspect-oriented programming is a possible next technological step to help us create more modular software through better separation of concerns. AOP builds on existing technologies of functions, procedures, data structures, and objects by allowing additional modules called aspects to be introduced in a crosscutting way with respect to existing modules.

The tendency in traditional object-oriented design is to look for commonalities and push them up into an inheritance hierarchy. AOP research attempts to allow one to treat scattered, non-hierarchically organized concerns as first-class elements, pushing them horizontally through any existing design structure, object-oriented or not.

Curricular Overview

The concepts of AO will be approached through an initial exploration of some well-known and relevant OO design patterns. Through this we will see shortcomings, which in some ways can be aided by AO techniques.

After this, the concepts of AO will be illustrated and the programming language AspectJ will be introduced as one possible vehicle for realizing those concepts.

Once familiarity with the AspectJ language is achieved, the students will assess other approaches through readings, comparative programming assignments, and finally graduate student presentations.

Prerequisite Skills

Undergraduate students must have completed the underclass problem-solving sequence. The CS core course Programming Language Concepts (PLC) and SE course Software Engineering 1 (SE1) are strongly recommended.

A small amount of the material in this course overlaps with Software Engineering 2, Design of Software Subsystems.

Graduate students must have satisfied any bridge course requirements they may have had. Again, PLC, although not usually required is recommended.

Students are expected to have a working knowledge of Java. They must also be able to pick up new programming languages as they are used in the course, both in lecture and for laboratory assignments and projects.

A student who has taken the Aspect-Oriented offering Programming Skills in a previous term will not be allowed to take it again.

Work Assignments

This is a Masters/Bachelors co-listed course. Slightly different grading criteria apply to each group.

The performance of students registered for the graduate course will be evaluated in five areas:

Undergraduate students' performance will be evaluated in four areas:

Texts and Materials:

AspectJ in Action: Practical Aspect-Oriented Programming, 2nd edition
by Ramnivas Laddad (Manning Publications)

Other readings will be assigned. In particular, articles are from sources such as the October 2001 issue of the CACM and the proceedings of the Aspect-Oriented Software Development Conference.

Students enrolled in the graduate course will also be expected to acquire additional information through library research.


Schedule

Classes begin Monday, 12 March 2012.

The chart below has some open slots in the Topic column. These are the times for graduate student project presentations. Other notes and even possible assignment changes will appear throughout the quarter.

Each week has two rows for the two times the class meets, Monday and Wednesday.
Week #
Topic
Assignments
Notes, Links
1
Background

Review course description
Design pattern concepts
1. Java - Warmup - sorts comparison
G.O.F. + Interceptor
2
Introduction to aspect orientation

lab 1 due
AspectJ
2. AspectJ: AO decorator for sorts comparison
3
AspectJ
 
 
@AspectJ


4
Static features of AspectJ
3. AspectJ: Object caching
lab 2 due
Example application: thread pool

5
Example application: state sequence checking
 
lab 3 due
AO in Python

Dynamic AspectJ

6
Hyper/J
4. Python: decorators - privilege levels
 
Spring


7
Aspect-Oriented Design (2 articles)
 
lab 4 due
DemeterJ (1 article)

8
 
5. (undergrads only) Business Rules/Workflow

 
 

9
 

lab 5 due


10






finals



The final exam will take place on the 11th week at the usual class time in the usual class room. Whether it will happen on Monday or Wednesday depends on whether the graduate student presentations are completed in week 10.

Do not make plans to leave town before Thursday, May 17th.