Sophomore PED

This seminar is intended to help you develop abilities to help you become a more qualified computer professional. One of the skills that is difficult to teach in most classes but which is essential to your success in any real programming project is that of design. This course is going to focus on teaching how to do a good object oriented design. During the course of the semester you will be working with other students in groups to create a solution to a single, significant problem.

Texts - There is no required text for this course (I don't feel comfortable giving a required text for a 1 hour course). However, there should be so I would recommend that you get a book on UML. I recommend "UML Distilled: Third Edition" by Martin Fowler, "UML in a Nutshell" by Sinan Si Alhir, or "Fundamentals of Object-oriented Design in UML" by Meilir Page-Jones. All three should be fairly easy to find and range in cost from $25 to $40. If you want to see them to see what they have in them before getting one, feel free to visit my office and look at my copies.

Tools - To help you with this project you will be using an automated design tool called EclipseUML by Omondo that, as the name implies, is a UML plugin for Eclipse. You can download and use the free version of this tool, but I also have an academic license for that you can ask for. More information about this tool is given below.

Problem Description

The problem that you are to solve this semester is to design and prototype a scheduling program that might be used for scheduling nurses in a hospital. This is actually a fairly significant problem and many (if not all) hospitals still do this by hand. Scheduling for hospitals is complicated by two facts. First, hospitals are open 24 hours and have to be staffed at all times. Second, nurses work a variety of shifts and different shifts have different staffing levels depending on how many patients are expected (typically lower staffing on nights or weekends).

What you need to design an prototype is a program that allows users to input the various information that is used to make a schedule, and then have that information be used to produce a sample schedule. There are a few basic types of information that you need to take into account for this project. In an ideal implementation, you would be able to have the user input different shifts that are allowed for the unit. For this implementation you can be simpler than that by assuming that everyone always works in shifts that are some multiple of 4 hours in length and that shifts start at 3am, 7am, 11am, 3pm, 7pm, and 11pm. So for example, a standard 8 hour daytime shift might be 7am to 3pm. If you assume this then the only data entry you need for shifts is the ideal number of nurses that should be working any given 4 hour block of time. This is one of the pieces of information you will be trying to match when you to the scheduling.

In addition to general shift information, you should also keep general information about the employees on that unit. Not only does this include a name and possibly an ID number, it will contain the number of hours that that person should work each 2-week pay period. In a real application this will be chosen from something like 4 options. Once each for 80, 40, 24, or 8 hours per two week period. However you decide to implement this option, this is something that must be hit in the schedule. Employees get very unhappy when they are given fewer or more hours to work than they are supposed to. If there are more people-hours than there are work-hours then the employees who do the most hours get presidence. So you want to give hours to people who work the most first, but you have to be able to switch their hours around to test for optimal combinations.

Lastly, and almost most importantly, you have to take input from every person working the floor as to when they will be available during the pay period that you are scheduling for. You can't schedule people for times they aren't available. If they given you fewer hours available then they are supposed to work, then the availability wins out and they know they won't get their full number of hours. These values will change constantly while the other two are closer to being fixed because the number of people who should be on a shift doesn't change often, nor do you hire people or have people change hour levels often.

Your interface should provide a nice GUI for editing all the information in the system and in an ideal implementation have some graphical representation. At any point the user should be able to select to generate a schedule from the current values. The user should also be able to save off availability data that is currently in the system and load in availability data. The system should load and save shift and employee information automatically. You can display the output of the schedule in many ways and I would recommend possibly having a few options as well as the possibility of options that help you see bad spots in the schedule of for particular employees. There is one view that you must create though and that is a "grid" that has days on the columns and employees on the rows and each cells shows the shift that person works on that day or a blank if none.

The optimization algorithm should try to cover all shifts with exactly the proper number of employees and match every employee to exactly the number of hours they want to work during the times they are available. That won't generally be possible though so it should find a schedule that is as close to this as it can. Schedules that don't match perfectly can be given a numeric value for how bad they are where a perfect schedule would be a zero and the less perfect it is, the larger the score would be. Employees being off from their proper number of hours should add a larger score than a shift being off from the proper number of hours. The penalty for employees being off should probably be reduced as the number of hours that employee should work goes down. Also, t is better to have many employees or many shifts off a small amount than the have one employee or one shift off a large amount. For example, it is better to have five shifts off by one person than to have one shift off by five people.

There are some other logical rules that you can probably figure out for when people are willing to work (no one wants 4 hours on, then 4 off, then 4 on to get 8 hours is a day). Your grade on this comes from two significant categories across both design and prototype. First is how useable and helpful the user interface is. Thinking of helpful features here is a real plus. Second is how good your algorithm for doing the scheduling is. Algorithmically this is a very challenging problem and there are many ways to approach it. You need to think here about both speed and correctness and come to some happy medium because a perfectly correct algorithm probably won't be fast enough while a blazing fast algorithm is likely to be far from correct.

Course Requirements

As one would guess from the nature of this course, the primary evaluation will be based upon the design that you produce for your part of the project and your prototype of it. Most of the work for the course will be done in groups (4-5 people). Each group will work on a its own design and implementation. You will be turning in various artifacts of the analysis and design over the course of the semester. You should also produce a simple prototype. Note that a prototype doesn't have to be completely functional, it just has to look functional when you demo it. Obviously having it be more functional can be helpful to your grade.

It should be noted that one of the keys to success for your group and the project as a whole will be communication. The interaction between the various components in this project is critical for it to actually work. I will be setting up an monitoring some discussions under Blackboard where I expect each of the groups to participate in communicating what they have come up with. If nothing else, this project could teach you just how hard it is to build a large project on a moving foundation.

Your grade for the course will be based on what is submitted by your group for each of the following analysis, design, and implementation artifacts. It will also be weighted by the results of group surveys that will help me to judge how great a contribution each member of the groups has provided.

1. Whole project ideas - This is a write-up of your ideas concerning the project as a whole. It should encompass all of the most significant design decisions in the problem, including questions such as what pieces it should be broken into, and what languages or tools should be used as well as some early ideas about features.

2. Analysis of problem segment - For this you will be expected to turn in a complete description of what your group will be working on. This analysis will include two parts. The first part is a use-case diagram for your project. We will talk about what use-case diagrams are in class. Your diagram will need to break things up a fair bit. It might have a single actor, but it should include multiple actions in it and you should break the actions down a bit to try to isolate the logic of what is going on. Use EclipseUML to generate this and provide a hard copy for me.

3. Description of public interface - For this you will submit a formal description of the public interface for the main different parts of your design. The main description will be a UML class diagram of your publicly visible classes and their public interfaces. It should also include narratives on the function of each of the public methods and what they are used for as a separate document. Doing all of this in a javadoc style would make sense even if you do the final code in something else. For this class this narrative should also include some indication of the implementation that the public interface is hiding as well. In general you would not do this, but it will give me a chance to more closely monitor your progress.

4. UML - Near the end of the semester I will expect a complete UML class diagram showing the overall design of your group's component of the project. You should also include sequence diagrams of the key routines. Here again a well documented javadoc could be useful to keep me completely informed of what you have created.

5. Final submission and presentation including prototype demonstrations - This presentation by the group will showcase the design that you have built during the course of the semester. It will culminate with a presentation by each group of some implementation of their project. The presentation must include the various UML diagrams that you have developed over the course of the semester.


This is a rough schedule of what will be covered during the semester. It shows you what we will be covering and what work you are expected to have completed by specific dates. On days when we have speakers it is likely that we will have time after the speaker to cover other topics and I will talk about different types of UML diagrams during that time.


Topics Due
1-12 Introduction and problem description  
1-19 Speaker - taxation  
1-26 Introduction to UML -- Use Case Diagrams Whole project ideas
2-2 Ethics in CS  
2-9 Speaker - network security -- Class Diagrams  
2-16 Speaker - information security -- Package Diagrams Analysis
2-23 Speaker - Intellectual Property -- Sequence diagrams  
3-2 Juniors' ethics presentations  
3-9 Sophomores' ethics presentations  
3-16 Spring Break  
3-23 Speaker - robotics and AI -- Object diagrams Public Interface
3-30 Speaker - venture capital -- Design Patterns  
4-6 Thesis Presentations  
4-13 Senior Software Presentations UML
4-20 Junior Design Presentations  
4-27 Sophomore Design Presentations Final Submission/Presentations


Group Assignments

Group Evaluation Forms (Word Document, PS)

Omondo EclipseUML - This is the site that has the UML tool that we will be working with. You will nee to download the Eclipse UML installer and if you haven't installed Eclipse or if your version of Eclipse is older than 3.0.1, you should install Eclipse 3.0.1. If you had Eclipse installed before and you have problems with it not seeing the UML tool, delete the configuration folder under the eclipse directory. You can download the free version at any time, but for this class I recommend that you download the studio version and send me an e-mail so that I can give you a license file and directions to use it. The license file is for only. I can't promise you that it will work away from campus, nor am I certain if there are any time limits on it so you might find that at some point you have to use their free version instead.

EclipseUML Manual - This is linked to on the download page, but I'll put a link here as well just to make certain that you can find it. This is not small, but it should help you with just about anything you want to do in EclipseUML.

Use Case Diagram Links

Use Case Diagrams: Tips and FAQ
Lecture 1: Use Cases and Use Case Diagrams
Modeling with UML (Use Case Diagrams & Classes)
UML Second Pass: Use Case Diagrams
Use Case Diagrams
Sequence Diagrams Lecture Slides

Java Links

Java Tutorials from Sun - This includes both basic and advanced tutorials. One is on RMI.
Java API Docs - This page links to the API documentation for different versions of Java. You should probably use the 1.4.2.
Other Tutorials