CS 350

Software Design
Fall 2009
Drexel University

·         Instructor:Jeff Salvage

·         E-mail: jks29@drexel.edu

·         WWW: http://www.cs.drexel.edu/~jsalvage

·         Lecture: 

·         Office: Crossings 100E

·         Office Hours: (Main Campus) Tuesdays and Thursdays from 8:30 - 9:30 AM and by appointment (Please note I am not on main campus Monday and Wednesdays)

(BCC Campus) Mondays and Wednesdays from 11:30 - 12:30 PM and by appointment (Please note I am not on BCC campus Tuesday and Thursday)

Teaching Assistants

·         Kelly Blincoe

·         TA email address: kelly.blincoe@drexel.edu

·         Office:  147 UC

·         Office Hours: 12-2 on Thursdays

 

Content

Week 1:

·        Intro to class

·        Brief review of C++ and JAVA

Week 2:

·        Intro to Design Patterns

·        Chapter 1

  • Lab 1, due in class to be done in class. You do not have to do anything before. Please bring your laptops if you have them.

       

Week 3:

·       Java Review

·       Introduction to the first assignment

·        Facade pattern (Hopefully)

·         Homework #1 assigned.

·        Chapter 2

·        Chapter 3

Week 4

·        Chapter 4

·        Chapter 5

·        Chapter 6

·        Chapter 7

Lab 2, Instructions

  • Homework #1 part A, due TBD

Week 5

·        Chapter 8

·        Chapter 9

·        Chapter 10

 

Week 6

·        Midterm –

  • Homework #1 part C, due TBD


Week 7

·        Chapter 11,

·        Chapter 13,

·        Chapter 14,

·        Chapter 15,

·        Chapter 17,

·        Chapter 18,

·        Chapter 21,

Week 8

Homework #2, Due November 21st, 2009, 11:59 PM

UML for Homework

Command Pattern, ppt

Template Pattern, ppt

Week 9

Testing

Lab 3

Junit demo.

Week 10

Putting it all Together, ppt


Assignments

Homework #1

Due, Various dates,.

Homework #2

Due, TBD

Note on Homework #2, I forgot to remove the reference to composit. You may do so. This was there to combine features. I removed it to make life simple.
For class FeatureFactory, we need a constructor that takes a Renderer as a parameter.
On the UML, class Polygon is listed as having a y and radius, this is a mistake.

Final Exam
TBD

 

Texts

We expect that you will have access to these books for assignments.

Required

Design Patterns Explained:  Alan Shalloway, Addison and Wesley (0-201-71594-5) 

 

Recommended

The Pragmatic Programmer, by Andrew Hunt and David Thomas.  Addison-Wesley 2000.  ISBN:  020161622X.
Design Patterns : Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides 395 pages (October 1994) Addison-Wesley Pub Co; ISBN: 0201633612

Object-Oriented Design & Patterns  by Cay Horstmann Wiley Text Books; 1st edition (April 3, 2003)  ISBN: 047131966X.

Big Java, by Cay Horstmann, Wiley, 2001,  ISBN: 0471402486; or any other comprehensive text that makes efforts to explain how to use Java features or class libraries.  If you are a good Java programmer then you may be able to work with free documentation available over the internet alone.  But this is not a course that will take much time to explain features of Java; you are expected to learn routine new features on your own with documentation.  If you find on-line documentation not to your liking, don’t waste your time and hurt your class performance by trying to learn from it.

For some examinations, we will allow you to have a Java reference book to refer to for details on the language.  The book need not be a comprehensive guide to class libraries, but it should allow you to write syntactically correct Java.

Integrated Development Environment

The IDE for this class will be Eclipse.  You can download a free copy (having already installed Java on your computer) from www.eclipse.org.  Being implemented in Java, it should (and does) run on Windows, Sun, Linux, and Macintosh.  The reason why we are using Eclipse is that we intend to use certain Eclipse plug-ins, such as for program testing and style checking, which makes use of such additional features straightforward across platforms. While you are free to develop your implementation projects in any environment you wish, you must submit an eclipse project when an implementation is called for (and possible for other kinds of work as well, as will be announced in assignment handouts).  Programs will be tested by the grader to execute properly in Eclipse.  You will not receive credit for implementation assignments and projects unless your submission can properly compile, execute, and pass required tests.

Objectives of this course

This course is about good object oriented design and implementation. In the challenging projects that programmers face, the design stage is where the primary difficulties of programming are worked out. Implementation, the task of turning a design into a working program in a working programming language, is supposed to be very straightforward given a good design.

Object oriented programming(OOP) allows programmers to use write programs that is easier to reuse and easier to extend and maintain over a life cycle of usage. However, this power is achieved at the cost of making the program designer’s task more complicated, due to the richness, subtlety and peculiar limitations of OO classes and class inheritance. A major objective of this course is to bring students to a level of competency in OO design so that they can handle team or individual projects of moderate complexity ..Design skills students should acquire include the ability to decide which classes would be appropriate given only a problem specification, designing for ease of future code maintenance, being able to decide upon details of classes from a problem specification, finding well-known software patterns from typical problem specifications, and being able to communicate both static and dynamic aspects of designs using the Universal Modeling Language (UML).Design skills should be applicable to any of the OO languages in vogue (e.g. C++, Eiffel, Java).  Grades for design projects will be based, among on other things, on the quality of the design and on the written explanation, description, and justification of the design.

Another object of this course is to make you confident and competent at implementing an OO design of moderate complexity, using coding techniques based upon generally recognized software engineering principles. Reasonable competence in Java includes a bit more than you may have used with Java or C++ in CS 171/172/260/265 (or their equivalent). We will cover additional features and class libraries of Java that are important in object oriented programming: abstract classes, exception handling, important frameworks, etc. as well as coding and testing practices (e.g. naming conventions for classes, variables, constants, and files, pre-conditions, what thorough testing means, etc.).Many of these features can be found in other OO languages.   You will be asked to demonstrate such competence by constructing and thoroughly testing programs of moderate complexity on your own, from a design of your own devising.  Grades for implementation projects will be based, among other things, on the quality of the coding, on correctness, degree of difficulty, quality of tests devised and provided, and written documentation, explanation, and justification of the code written.

A final objective of this course is to make you more self-aware, descriptive, and reflective about your programming and design. By learning about and practicing with design and quality rationales the course will present, you should be able to state, explain, judge, and justify design or implementation decisions in a way that would be generally acceptable among (at least) entry-level computing professionals.  It is also a necessary step towards being able to continue to improve your skill in the future without the need for professors or formal classes.

Prerequisites

We expect that all taking this class has had CS 171/172 (programming I and II) , CS260 (Data structures), and a recent version of CS 265 (Advanced Programming Techniques) or their equivalent. The experience in these courses includes the design and implementation of at least 18 programs in C++, including several that involve the use of classes, pointers, and dynamic storage allocation. It should also include the experience of designing several CS 172-like or CS260-like programs in Java requiring familiarity of class creation, basic I/O, and the use of built-in Java class libraries.  The experience in writing these programs is also expected to have given you knowledge of basic coding practices such as: good selection of names, good quality commenting and indentation, separation of classes into separately compiled files, what constitutes appropriate selection of test data, and how to develop a program incrementally (e.g. use of program stubs as placeholders for as-yet unwritten program modules). Experience with recursive programming design and implementation is also expected.

Some assignments will assume that you find it routine to implement programs that use data structures such as trees or linked lists. Some assignments will ask that you will be able to design and implement algorithms to solve simple problems on your own, without extensive hints or outside help. This will probably require a bit more mental effort on your part than many assignments from previous courses, in that you will have to devise the solution algorithm yourself based upon your prior experience with programming problem solutions. You can use the first programming assignment as an indication of what you are expected to have started with. If you have questions, please consult with the instructor.


Eclipse and Unix

Homework will be submitted for test execution within Eclipse, but some activities (such as using CVS) we will assume prior experience with Unix. We shall not be covering Unix usage in lecture but you may ask the instructor or consultants during office hours if you have questions about this. Every one enrolled in this course is entitled to an CS Unix account if they do not already have one.

To get a Unix account, go to https://knave3.cs.drexel.edu/MakeStudentAuthAccount.php.

If you do not have a high-speed connection to the MCS systems it is probably most expedient to do most of your development on your personal computer, but it is still your responsibility to have the program work correctly with the reference computer and compiler. Leave enough time before the assignment deadline to do the port.

Grades and Grading

Your grade will depend upon a number of different items, cumulatively. The weighting will be roughly as follows. The instructor reserves the right to make modest adjustments (5% or 10% for a category) in the weighting used:

Homework Assignments 50%

Midterm exam 20%

Final Exam 30%

Students will receive a reduced or a failing grade for the course if in the instructor's judgment their performance on the midterm and final examinations indicates that they cannot express an adequate understanding of the material in the course. One criterion used for "adequate" is achieving at least a 40% mark on the final exam. Good quality in-class participation (being prepared to answer questions posed by the instructor during the class) will be taken into account as a compensating factor for a poor exam performance, but programming assignments will not be.  Part of your assignment will consist of written answers rather than programs. Part of your assignment grade will be based on how you express yourself, as well as what you say. Your writing is expected to be of the quality comparable to technical writing done by a well-regarded computing professional..

Handing in assignments

Assignments will be made available on the class web pages, and will be due as described in each assignment. There will in the neighborhood of five assignments during the quarter, due at one or two week intervals. The programming assignments will be done in Java using Eclipse. There will also be written work that should be submitted as specified in the assignment. Most assignments will be submitted electronically via webCT. When assignments call for written responses, they should created using a text processor, written in intelligible, clear and correct English. Poorly written or sloppy work will be returned ungraded. Programs that do not compile and cannot be tested will receive little or no “partial credit”.

Late policy: assignments will be accepted late with a 20% penalty, by the late due date specified when the assignment is released.. After that, assignments will be not accepted for credit.

Class participation

Part of your grade is based upon being present and having good quality participation in the class discussion. Some times the instructor will call upon people while at other times he may choose among only those who wish to speak up. Good quality class discussion means having done whatever reading has been assigned for that day and done the work of understanding most of it on your own being able to answer questions or problems posed by the instructor based upon prior work, the reading, and the discussion in class advancing the understanding of the class by asking questions that expand or clarify issues of interest to many working on whatever in-class group projects are assigned for the day, and participating in the presentation of the group’s work for the project. It is not necessary to answer all questions correctly or speak up every day to receive a passing grade for participation, but you need to establish in the instructor's mind that you are typically prepared and can respond capably.


Academic Honesty

The university's Academic Honesty policy is in effect for this course. To visit the university's online handbook, go to http://www.drexel.edu/studentlife/studenthandbook2002/Judicial/acadhon.html

You must be the sole original author of all assignments and examination solutions in their entirety, unless the instructor explicitly gives you permission to do otherwise in written directions on an assignment or exam. Design and implementation problems should be discussed with the instructor or the teaching assistants only. This means that you should have an implementation plan that leaves enough time for such consultation. As the university's policy explains, penalties up to and including receiving a failing grade for the course with no opportunity to withdraw will be given for first time offenses of plagiarism, fabrication, cheating, or other forms of academic dishonesty. Allowing another student to copy from your work (i.e. helping another student to cheat) is also a violation of the policy on academic dishonesty. 

The standards for originality in a program are similar to those of other written works. Programs by different authors show clear and substantial differences as judged by most criteria, including but not limited to: choice of variable and procedure names, line spacing and indentation, choice of program structure, choice of algorithms, ordering of modules, style and content of documentation, module design, and ordering and choice of instructions. The original author of an assignment can explain each detail and how they came to create it on their own. Whenever you use references or sources (i.e. the Internet) for “inspiration” in your programs and designs, you must give a complete and proper citation of the source.  Copying or close paraphrasing from other sources and claiming it is your own original work is a violation of the academic honesty policy.

It is your responsibility to avoid violating the university's policy. If you are unclear as to what the policy means in a particular situation, ask the instructor for clarification before you hand anything in.

In addition, be clear that if you electronically copy another person’s work and submit it as your own you are in violation of this policy and could be failed for the course on the first occurrence. If you solicit and/or hire someone to do your work, even if the work is not complete you are in a violation of this policy and could be failed for the course on the first occurrence. Any violation of this policy may also result in the matter being handed over to an external judiciary panel. Do not let this happen to you.

 

Syllabus Statement

 

In compliance with the Americans With Disabilities Act of 1990, Section 504 of the Rehabilitation Act of 1973, and Drexel University’s policies and procedures, the University is committed to the non-discrimination of students with disabilities.  Faculty and instructors are encouraged to include a statement in course syllabi advising students with disabilities how to request auxiliary aids, academic adjustments, and services. 

 

The statement should be the same format as other information provided on the syllabus, i.e. font size.  The following statement is recommended:

 

Student with disabilities requesting accommodations and services at Drexel University need to present a current accommodation verification letter (“AVL”) to faculty before accommodations can be made.  AVL’s are issued by the Office of Disability Services (“ODS”).  For additional information, contact the ODS at www.drexel.edu/edt/disability, 3201 Arch St., Ste. 210, Philadelphia, PA  19104, V 215.895.1401, or TTY 215.895.2299.   

 

Kings/Queens/Candy Owers