CS378 Software Design
Fall 2011

Professor Don Batory   batory@cs.utexas.edu
office hours ACES 5.252
Wednesday
4:00-5:00pm
TA Jongwook Kim jongwook@cs.utexas.edu
office hours TBA
Room PAR 301
Days & Time T-TH 12:30-2pm
Unique# 52525
Ground Rules Rules of Conduct and Academic Honesty
Your Grades UT Blackboard (I wish we had something else!)
Final
FRIDAY, DECEMBER 09, 9-12 Noon in CPE 2.216

Announcements

Electronic Course-Instructor Survey

Eclipse 3.6.2 With All Plug-Ins Installed

Results of Course Survey

Google Discussion Group

 Prerequisites, Overview, and Goals

Prerequisites: Minimum C grade in CS 310 or 310H, 336 or 336H, and M 408D or 408M.  You must know how to program in Java; if Java is new to you, do not take this course!  The more experience you have in programming, the more you will learn from this course.

Overview. Software design and construction is not hacking; it is governed by fundamental concepts.  We see these concepts at work in Model Driven Engineering (MDE), which gives us a general way to think about software design and construction -- not as a mass of spaghetti code, but  as a principled collection of ideas architected in a thoughtful way. MDE deals with the creation of models and transformations of these models to other models, eventually yielding executables (yet other models).

This is rather abstract, but if you think about it, we express a program in the Java language (that's our concrete model of this program).  The javac compiler transforms source code to bytecode (i.e. it maps a Java representation of a program to a corresponding representation of that program in bytecode). That should be familiar to you. javadoc, as another example, maps Java source to html (both are models).  Object oriented refactorings map source code to refactored source code.  There are even refactorings that map bytecodes to bytecodes.

These are just a few examples of software engineering representations of programs and the tools that transform them from one representation to another. But virtually all of software design deals with the creation of models (program representations) and their transformation into other representations. Most work in Engineering (with a capital "E") deals with model development -- ex. Boeing creates and analyzes models of aircraft long before they actually build a physical plane. Similarly, the software next generation Space Shuttle is being built solely from models; no one is writing code! (These models are transformed to ugly C++ by commercial tools and then commercial C++ compilers transform source into executables).

Goals. The goals of this course are to give students the basics for what we as programmers and system architects are doing, and how to reason about program design and construction.  This course will:

The course includes lectures on the following topics: UML models and metamodels, Categories, Refactorings, Object Oriented Design Patterns, Architectural Patterns, Parallel Architectures, and Service Oriented Architectures. And of course, concepts from MDE which all of the above are seen as special cases.  The course will cover examples from compilers and databases (so if you have any experience writing compilers or databases, you're that much further ahead than others.  A course on compilers or databases is not a prerequisite, but it is good to have in any case).

As this is gateway course to further undergraduate courses in CS on Software Development, there will be many small programming assignments, and written homework assignments.

Course Material

PPTX files of each lecture will be posted after the lecture.  (I change the notes every time I teach the course, and with the advent of tablets, etc. it is easier for you to create your notes from these files).  Links to the PPTX files are listed in the syllabus below.  Should you choose to create a hard copy of these files, do not use CS printers -- take the files to Kinkos.

I have created several instructional web pages with accompanying videos.  To watch the videos, you may need to install TechSmith's codex:

I use a particular font in my notes; you'll need to download Cardelli's font of Dijkstra's handwriting and drag it into your Windows/Fonts directory. Lecture material is taken from the following texts, which are NOT required for this course.  All of them are worth having in a library, but often, much of their content is posted for free on the web.

A useful list of web pages (which contains a considerable amount of the above texts) will be collected below:

Software

All programming assignments are in Java. We will be using the following software, all of which is free to UTCS students, and all of which has been installed in the UTCS Microlab, which is in ENS 1 & 2, and PAI 5.38.  The following is for Windows Platforms.  If you use Apple machines, well, I will try to help as much as I can, but no promises!

CS Accounts

To submit your programs (and to download Visio), you will need a CS account.  Follow this link to create a CS account and to find the names of public machines to which you can log in.

Quizzes

There may be unannounced in-class quizzes on course lecture material, readings from the course texts, and/or homework. Missed quizzes will be given a grade of zero unless there are extenuating circumstances.

Homework, Programming Assignments, and Submissions

Submissions. Please read:

Issues with Netbeans and Eclipse. Programming assignments will require the writing of clear documentation and Unit tests.  There are some problems/issues in writing javadoc documentation and running regression tests with JUnit, which are described below:

You should read these postings carefully. 

Examinations

There are two midterms and a final. These exams must be taken on the specified date and at the specified time. If you miss an exam due to extenuating circumstances, a grade will be negotiated for the exam based on a percentage of your homework, quizzes, and other exam scores. Missed exams will be given a grade of zero.

Class Grades

Final grades will be determined approximately by the following scheme:

Homework grades and class participation will be used to decide final grades in grade-borderline cases.

Extenuating Circumstances

If you have difficulty meeting the requirements of this course, fail to hand in an assignment, or miss an exam because of extenuating circumstances, please advise the instructor in writing at the earliest possible date so that your situation can be discussed. If you encounter an unexpected medical or family emergency or a random act of Nature that causes you to miss the due date for homework or miss a quiz or exam, you must present suitable documentation in writing to the instructor before special consideration will be given. A file of all written correspondence will be kept by the instructor and decisions regarding them will be made at the end of the semester.

Schedule

Numbers in [brackets] indicates the estimated number of lectures on a topic. The number indicated is a lower-bound, as there will be class room discussions to work on problems and review of homework assignments. PPTX or .zip copies of the lectures are hyperlinked below.  As each class is different, the exact dates of a lecture are not known.  The order in which topics are presented is below.

Topic [# of lectures + days of discussion] Assignment

Introduction [1]

  • design, model driven engineering, models, transformations, automated software development

Install Eclipse Modeling Tools

Complete Survey

P1: Reflection
Due Friday Sept 2, 8pm

Unified Modeling Language [3]

score card for class and object models

P2: UML Class Diagrams
Due Friday, Sept 9, 10pm

Categories [2]

score card for categories

  • domains, instances, arrows and model transformations, arrow composition, recursion, cones of instances, Meta Object Facility (MOF) architecture

H1: BNF
Due Wed, Sept 14, 8pm


P3: Categories in
Eclipse Modeling Tools

Due Thurs. Sept 22, 10pm

Object Oriented Refactorings [2] video on eclipse refactoring

  • rename, extract method, substitute, move member, factory method, pull-up, push-down, singleton, extract class (normalization, partition), extract superclass, extract interface

  • meta-programs, refactoring components, equivalence of models

H2: Metamodeling
Challenge
Due Thurs, Oct 6, 8pm


H3: Class Diagram
Equivalence
Due Thurs, Oct 6, 8pm

Midterm #1 [1] (solutions)

 

Design Patterns [8]

score card for design patterns

P4: Refactoring Frameworks
Due Thurs, Oct 13th, 8pm


P5: HP Calculator
Interpreter
Due Fri, Oct 21th, 10pm


P6: Refactoring Interpreter
into a Framework
Due Fri, Oct 28th, 10pm


H4: Decorators, Adaptors,
and Decoraptors
Due Friday, Oct 28th, 10pm

Solution

H5: Your Experiences using
Eclipse Refactorings
Due Friday, Nov 3rd, 10pm

Midterm #2 [1] (solutions)

 

Architectural Patterns [3]

P7: Decorators (Again)
Due Mon. Nov 11, 12noon

Parallel Architectures [2]

P8: Gamma Joins
Due Friday, Dec 2, 10pm

Hint: Code for
Parallel Sort

Service Oriented Architectures (if there is time) [2]

 

Course Recap and Final [1]