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 Object-Oriented Design and/or UML. I recommend either "UML in a Nutshell" by Sinan Si Alhir or "Fundamentals of Object-oriented Design in UML" by Meilir Page-Jones. The former costs only $25 and it is packed with information going well beyond what we will actually be able to use in this course. However, it isn't all that readable. The latter is a remarkably well written book that could help you in many ways well beyond the scope of this course. It's also only $40 and doesn't seem to contain quite as much information. You should be able to find either quite readily.
Tools - To help you with this project you will be using an automated design tool called Together by TogetherSoft. This piece of software can be downloaded for free from www.TogetherSoft.com. I can give you an academic license for you to use while working on this project. You can also use Together in the Janus or Atlas labs by executing "/users/Together/TogetherSoft/Together6.0/bin/Together.sh". Don't try this on the Xena machines. They don't have the required horsepower and it will run very slowly. This piece of software is a UML design tool that can work with a number of object-oriented languages. I will be posting a Together project that everyone can work on in my user directory after a decisions has been made as to what project you will be working on.
I could not decide upon a single project idea for this semester. I'd rather give you a choice of what you want to do. There are restrictions however, because I want the project to be such that it will actually keep ~30 people in 6-7 groups active and involved during the analysis, design, and development stages. Obviously "Hello World" isn't going to suffice (unless I have you write fully functional machine level I/O libraries for it). Here are my suggestions for it. You will vote on which one you want to do on the first day of class and I will then assign people to groups to complete the various parts of it.
Game: One option is for you to design a game. I would push for an RPG simply because of the scope. You can't do Pac-Man or other classic arcade games simply because they won't keep everyone busy. You could also do some type of simulation game though my lack of familiarity with such games will make it harder for me to break it up into nice pieces for the groups, but I'm willing to learn this semester also.
Networked Game: While what is described for the first option could be done with networking, making something that is explicitly multi-user can be done with a less complex game so that things like basic arcade style games become an option. This is because a fair bit of work needs to go into making the networking part and the handling of multiple users. A second alternative here would be something like a MUD where the effort has been moved away from a graphical interface so that more can be done with other parts of the project.
Graphing Calculator: For this I'm thinking of something between your TI-8x and Mathematica. Work on this would be split into both the graphical interface as well as the options that users have for what types of things they can do. Obviously, input of basic expressions with variables would be required for graphing. Other things that you might add in though are symbolic manipulation, differential equation solvers, or matrix manipulation.
Drawing Program: This project is a bit amorphous, but I'm thinking that you would create something along the lines of Macromedia's Fireworks, though perhaps not with the same option set that they provide. You would create an image made out of different renderable objects and each object would have its own settings for exactly how it is drawn.
Web Search Engine: This project actually has at least three significant pieces to it. One is a spider that goes out through the web and finds and catalogs sites. A second is a program that organizes those sites into something that can be efficiently searched through. Third is the user interface for people to search through the data that you have.
Simple Programming Environment: For this you would create an environment that could run programs in an extremely simplified language. The language that comes to my mind is line numbered BASIC. You can have some flexibility in how you implement this though I think I'd like to see an IDE. You can decide what functionality you want to give your language and how you want it to work. I don't think that compilig to executable is an option. One major component will certainly be an interpreter for actually executing the programs. Whether this works off the original text or some "compiled" intermediate form is up to you.
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. Most of the work for the course will be done in small groups (4-5 people). Each group will work on a distinct section of the project. You will be turning in various artifacts of the analysis and design for the section assigned to your group over the course of the semester. If time permits, you will also produce a simple implementation/prototype of your section that hopefully fits in with the whole project.
It should be noted that one of the keys to success for your group and the project as a whole will be communication, not only between the members of your group, but also with other groups. The interaction between the various components in this project is critical for it to actually work. I will be setting up and 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. In addition, since you will be working on a single project in Together you will be able to see what other groups are prooducing in that project.
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.
2. Analysis of problem segment - For this you will be expected to turn in a complete description of the segment of the problem that your group will be working on. The analysis can be a plain English document enhanced with Use Case diagrams showing your part of the project and what it will do. Part of what this should include is how this component fits in with the complete program. As part of this it should begin to specify the public interface of your component. Some of these things have to be uniform for a number of groups.
3. Description of public interface - For this you will submit a formal description of what the public interface for your component of the project is. 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. 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. If you wish to separate this into distinct paragraphs that would probably be wise. You will use the documentation production features of Together to help add the extra descriptions in this part of the project.
4. UML - Near the end of the semester I will expect a complete UML diagram showing the overall design of your group's component of the project. It should also include the connections to the relevant components created by other groups. This will allow a coherent picture of the entire project can be presented.
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 component, preferably in conjunction with the other components.
This is a rough schedule of what will be covered during the semester. It is subject to extreme alteration but it should give you an idea of what we will be covering and what work you are expected to have completed by specific dates.
|1-22||Introduction and problem description|
|2-5||Open discussion of project ideas, design, and language||Whole project ideas|
|2-19||Analysis, Use-Case Diagrams, and Public Interfaces|
|2-26||UML class diagrams||Analysis|
|3-19||Common Session||Public Interface|
|4-2||Other UML diagrams|
|4-9||More UML diagrams||UML|
|4-30||Common Session||Presentations & Final Submission|
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