cs445 - Spring 2020
Goal
|
Quick Links
|
This class is an introduction to methodologies for object-oriented
design and programming.
-
Examines the object model and how it is realized in various
object-oriented languages.
-
Focuses on methods for developing and implementing object-oriented
systems.
You can see the desired course and program outcomes
here.
Prerequisite: CS-331 or CS-401 or CS-403.
|
|
Before you get started
This class requires you to do a LOT of work between homeworks (3 or 4),
reading assignments, reading the textbooks, a pretty large project, and two exams.
Grading is quite strict as well, in that failure to get a passing grade in, say,
the project will earn you a failing grade in this class. Put it another way,
you cannot get around work by skipping assignments and hoping to pass based
on a good class average.
^ Top ^
Hours
|
Section 1 (CRN: 51361, Main Campus) |
Section 2 (CRN: 51362, Internet) |
Section 3 (CRN: 51363, India) |
Instructor |
Virgil Bistriceanu |
Office hours |
Mon, Tue 5:00 pm - 6:15 pm |
Office |
SB-105D |
Phone |
(847) 219-9142 |
Hangouts |
bistriceanu@iit.edu |
e-mail |
bistriceanu@iit.edu
|
Lecture |
Tue 6:25 pm - 9:05 pm, PH-131 (Perlstein Hall)
|
Teaching Assistant |
- Name: Ritvij Saxena
-
Office: SB-019
- Office Hours: Tue, Thu, 3:00pm - 4:00pm
- Phone: none
- Google Hangouts: rsaxena6@hawk.iit.edu
-
email: rsaxena6@hawk.iit.edu
|
^ Top ^
Books
Textbook(s)
-
[1] Head First Object-Oriented Analysis & Design,
Brett D. McLaughlin, Gary Pollice & David West, Addison Wesley,
ISBN: 0-596-00867-8
|
|
Other books
-
Test-Driven Development by Example, Kent Beck, Addison Wesley,
ISBN: 0-321-14653-0
-
Clean Code: A Handbook of Agile Software Craftsmanship, Robert C. Martin,
Prentice Hall, ISBN: 978-0132350884
-
Refactoring: Improving the Design of Existing Code, Martin Fowler,
Addison Wesley, ISBN: 0-201-48567-2
-
Thinking in Java, Bruce Eckel, Prentice Hall, ISBN: 0-13-187248-6
-
Surviving Object-Oriented Projects, Alistair Cockburn, Addison Wesley,
ISBN: 0-201-49834-0
-
The Pragmatic Programmer, Andrew Hunt and David Thomas, Addison Wesley,
ISBN: 0-201-61622-X
-
Programming Ruby - The Pragmatic Programmers' Guide, 2nd edition,
Dave Thomas, Pragrmatic Bookshelf, ISBN: 0974514055
-
You Don't Know JS, Kyle Simpson, available on
Github
-
JavaScript: The Good Parts, Douglas Crockford, O'Reilly Media,
ISBN: 978-0596517748
^ Top ^
Grading
- Homeworks: 15%
- Midterm: 20%
- Final: 30%
- Project: 35%
NOTE: The following grading scale was to determine your grade in this class,
before IIT's University Faculty Council adopted a
new policy
on 4/3/2020 to address the ongoing COVID-19 pandemic impact on students and
faculty:
- A: [90, 100+)
- B: [80, 90)
- C: [70, 80)
-
D: [60, 69) ... this grade may not be assigned to graduate students,
instead an E will be assigned.
- E: [0, 59) This is a failing grade!
The new policy
basically states that undergraduate students will receive a Pass/Fail grade
this semester only; for graduate students letter grades will continue
to be used. So, if you're an undergraduate student your final grade will be
calculated as follows:
- Pass: [60, 100+)
- Fail: [0, 59)
To pass this class you will need to have the following marks:
- 60% for the homeworks average, AND
- 60% for the project, AND
- 60% in the final exam, AND
- The overall average is 60+ as well
Please read this again since it is not your typical grading policy.
All scores posted on the Blackboard will be percentages, between 0 and 100.
For example, let's assume that a homework is worth 123 points and you get 97
points: what will be posted on the Blackboard is (97/123)*100 which will be
rounded up -- using the round-half-up rule -- to 79. The same applies for
exams, labs, etc.
Class participation will help settle borderline grades. While class attendance
is not taken, your instructor believes that regular class attendance is
important and expects students to actively participate in class. Questions
and comments are always welcome.
^ Top ^
Late Work
All work that you turn in must be submitted on the
Blackboard before
midnight (Central Time) the day the work is due.
I understand that from time to time you'll get overwhelmed with work,
or that you may have personal problems that will make you less productive
than you'd like. That's why each student in this class has a credit of
two (2) days for late work.
You can use this credit as you see fit, for good reason or no reason at all,
all at once or in pieces -- though there is no fractional credit.
The only thing we ask for is that, in your Blackboard submission
(in the COMMENT field) you indicate how much of your credit you want to use.
Once you've used late credit you may not go back and ask us to apply it
for something else; once you use it it's gone.
After you've used your "late work credit", or if you don't
want to use it, there is a 5% per calendar day penalty for late work.
^ Top ^
Exceptional circumstances
Your teacher will try to accommodate you in those cases that are beyond your
control, such as medical and personal emergencies. Please note that, based on
circumstances, the teacher may decide to assign you an incomplete grade, "I",
or otherwise ask you to drop the class.
^ Top ^
Incomplete ("I") Grades
Yes, you can get an incomplete in this class even if you're not dealing with a
personal emergency. Here are the
conditions:
-
It's not automatic; you have to request an incomplete from your
instructor before finals week.
You request an incomplete by using the form at
https://my105.iit.edu/registrar/forms/view.php?id=30257
-
It's a single piece of work that's holding you back. For example, you forgot
it's finals day and failed to take the final exam. Well, I can give you an
incomplete for that. However, I cannot give you an incomplete if you've failed
to get a passing grade in the project and you failed
to get a passing score in the final.
-
You accept whatever work I'll be assigning you to remediate the incomplete;
I promise you that the work will be relevant to this class, however it may
not be the exact same as the work you just missed. For example, you're requesting
an incomplete because you failed to submit a homework and your homeworks average is
below 60: in this case I might ask you to just do the homework, or otherwise
give you a programming assignment instead, or a presentation, etc.
^ Top ^
Academic Honesty
All the work you submit must be individual, including, but not limited to,
those cases when your instructor has approved pair-programming for you; in these
cases the only thing that may be identical with somebody else's is code.
Academic dishonesty will not be tolerated. IIT has a strict academic honesty
policy; here are the top points:
-
The misrepresentation of any work submitted for credit as the product
of a student’s sole independent effort, such as using the ideas of others
without attribution and other forms of plagiarism.
-
The use of any unauthorized assistance in taking quizzes, tests or
examinations.
-
The acquisition, without permission, of tests, answer sheets, problem
solutions or other academic material when such material has been withheld from
distribution by the instructor.
-
Deliberate harmful obstruction of the studies, research or academic work of
any member of the IIT community.
-
Making material misrepresentation in any submission to or through any office
of the university to a potential employer, professional society, meeting or
organization.
-
The intentional assistance of others in the violation of the standards for
academic honest.
You can read IIT's Code of Academic Honesty
here. You should read it until you fully understand it.
A good way to test whether you understand it is to try to explain it to
somebody else.
^ Top ^
Extra Credit
There are multiple ways you can receive extra credit in this class, here are some:
- Take class notes: scan them and return them to your instructor after each
class in PDF format. If you take notes electronically, then turn in to your
instructor a copy of your notes, .txt, .odf, .doc, .pdf formats ok.
-
Maximum extra credit: 5 points that will be added to the average class
score (scale from one to 100)
-
If you want to get this extra credit, then you'll have to commit to
turning in notes for each class.
-
In addition, your instructor will have to confirm upfront that you are
eligible for this extra credit since only one student in class can get it.
-
Identify errors in the project definition, e.g. typos, wrong commands,
conflicting statements, etc, and submit a suggestion for how it should be corrected.
Extra credit depends on how significant your find is.
-
Recommend new projects or homeworks for this class. Your recommendation
should be original and non-trivial. If you're not sure what
original and non-trivial mean, then talk to your instructor.
-
Extra credit: 5 points per accepted recommendation. All extra credit
will be added to your average class score (scale from one to 100).
-
Recommend problems to be included in the midterm or final. You'll get credit
for submitting a good problem. Your submission should be original and non-trivial.
-
Extra credit: 4 points per accepted recommendation. All points you
earn for your recommendations will be added to your average class score
(scale from one to 100).
- The credit will be doubled for each problem that's included in the exam.
^ Top ^
Exams
Exams are open-book(s), open-notes and comprehensive. You may bring with you any
notes you want, however you may not share them with anybody else during the exam.
During the exam the use of communication devices such as phones and computers
is not allowed. You may bring with you a calculator if you think you need one.
^ Top ^
Programming Language(s)
For any of the assignments in this class, including the project, please feel
free to use any of the free and/or open-source
(FOSS)
object-oriented programming languages
in the set { Java, Ruby, JavaScript, Python, C++ }.
You may even use Smalltalk if you want to, however this will make testing
somewhat more difficult for us. Before you start, please check with your
instructor to make sure he's ok with it.
Work done using languages other than specified above, as well as the linking
of free and open-source software with proprietary 3rd party libraries will not
be accepted.
To learn more about free software check out the
Free Software Foundation.
You should also know that free software is not the same thing as open-source
software,
this
article from the GNU foundation clarifies the matter for you.
^ Top ^
Test Environment
All programming work you do for this class will be tested on *our* computer(s)
running a fresh installation of
Ubuntu 18.04 LTS (Bionic Beaver).
I'm sorry, but the fact that your code runs on your computer and not on ours
is not enough to earn you credit for your work.
If you've been using Linux, then this requirement is very easy to satisfy.
If you're new to Linux, then you'll have some learning to do, which is a very
good and valuable thing.
Let me repeat, we're not going to test under any version of Windows, nor
are we going to do it under any other Unix variant other than the one
described above.
Moreover, we are not going to test your project inside Eclipse or other IDE; we
need to have clear instructions for how to get the code, build executable, deploy.
If we ask you to demo your project, then you'll have to do it in the test
environment specified above. A full demo will require you to do the following:
- Check out your code from the repository
- Build the executable
-
Run the script that calculates unit-test coverage and prove that it meets
the project requirements
- Deploy the executable
- Prove that your project does what the requirements call for
You typically have 30' for the demo.
If your application requires things (e.g. libraries, plug-ins, gems, etc.) that
don't come with the standard Linux distribution, then you should tell us, in
the README file you provide with your other deliverables, how to install required
dependencies. Better yet, your build script will install all that's needed
for a successful demo.
^ Top ^
Unit Testing
We're all tired of bad software, whether because it crashes when we least
expect it or because of security holes that allow the bad guys to take over
our systems and identities. We all pretty much despise software maintenance,
in particular when we're asked to modify code that we never touched, don't
really understand, and have no way of making sure our changes don't damage
existing functionality.
The good news is that we can do something about it: creating automated unit
tests for all your code is a very good start. Doing it in Test-Driven Development
(TDD) fashion is even better.
You cannot possibly get full credit for your work unless each and every method
in your classes has good unit testing. By good we mean meaningful and
sufficient:
- A unit-test that just asserts true is not meaningful.
-
Providing only one unit test for a method that requires multiple tests is
not sufficient.
You will be required to measure and include with your deliverables the unit
test coverage as measured by the tool of choice in your chosen programming
language.
As a general rule automated unit testing will account for 50% of your mark
in any assignment, of which 3/5 is assigned to unit test coverage, and the
other 2/5 will be awarded based on how good your tests are.
If you fail to submit unit testing, then you cannot expect to get more
than 50% in the assignment.
Unit test coverage above 80% is required for full credit. Unit test coverage
below 50% doesn't earn you any credit. For anything in between, you get one
percentage point of credit for each percentage point of unit test coverage.
For example, if your test coverage is 73%, then the most credit you can get
for unit testing is 30-(80-73)=23. In another example, if the unit test coverage
is 51%, then the most credit you can get is 30-(80-51)=1.
Unit tests that are useless will be removed and the coverage will be measured
again before a mark is assigned for your work.
The other 20 percentage points for unit test coverage will be equally spread
between the methods of your code. If you fail to write any unit test for
a method, then you lose the corresponding percentage points; we will have
discretion to give you less than full credit if you haven't written enough
unit-tests for a method. For example, if your code has 10 methods across
three (3) classes, then you get 20/10=2 percentage points of credit for unit
tests written per each method. Another way to look at this is to say that you
lose two (2) percentage points for each method that doesn't have any unit test.
^ Top ^
Communications
Typically the first person you should contact for any questions related to
assignments is your TA.
Please be descriptive in the subject line when you email your instructor such
that processing doesn't get delayed. At the very minimum you should indicate
the class and the term, followed by a brief description of what is it that
you want to communicate.
Examples of good subject lines for your email:
- cs445, Spring 2020 - Hw1, part (i)
- cs445, Spring 2020 - When will the grades be posted on the Blackboard?
- cs445, Spring 2020 - Question about project
^ Top ^
Assignment Submission
You are required to submit your work online, using the Blackboard. Late work
will be accepted, however it is subject to the late penalties described in this
syllabus.
Here are the requirements:
-
Submit your electronic copy using the Blackboard; attach your assignment as
a compressed archive file (.zip, .tgz, .tbz2, .rar, etc.)
-
The name of the compressed archive should be:
firstName-lastName-type-assignmentNumber.zip
where type stands for any of the following, HW for homeworks,
PA for programming assignment, PR for project. For example Jane-Doe-HW-1.zip
or John-Smith-PR-3.bz2 You lose points if you fail to follow this naming
convention.
- Artifacts:
-
Your actual work for the assignnment: PDF document that follows the
guidelines in the Varia section this document.
Obviously, if the actual work is code, then skip this part. If you're
in doubt, then ask your instructor.
-
A memo (PDF) to your instructor that outlines what you found to be the
most difficult part of the assignment, a status for the assignment
-- complete or missing parts and why -- and some important statistics
about your code (if in fact you have to turn in any code), as follows:
-
Lines of code; do not include comments and white spaces; also,
do not include here the unit tests. If you're going for extra
credit in the project, then please break out the core project
from the code that's been specifically written for the web interface.
-
Lines of code in unit tests; do not include comments and white
spaces. Same comment as above for extra credit.
-
Unit test coverage as measured by the tool of choice in your
chosen programming language, e.g. jCov/JaCoCo/EMMA/etc. for Java,
Rcov for Ruby, etc.
-
Cyclomatic complexity for your code. Please don't submit code
with cyclomatic complexity higher than 15 because you're just
wasting your time.
-
The source code (.java, .rb, .js, .txt, as appropriate)
-
A README file that explains how to build and on how to run each
program (plain text, file with .txt extension)
-
A script that will compile your programs when executed; a Makefile
(see GNU Make for details) would be great, however any form of script
or building tool will do.
-
Include your e-mail address in the Comment field when submitting the
assignment through the Digital Drop Box
-
If for any reason you are submitting the assignment more than once, indicate
this in the Comment field by including the word COMPLEMENT.
^ Top ^
Project
The purpose of the project is to give you the opportunity to practice the
concepts discussed in this class. The requirements are purposely somewhat
vague such that you can interact with the client (that's your instructor) to
figure out the detailed requirements.
In addition to various deliverables you have to produce throughout the semester
and a working product on the due date of the project,
you are expected to develop a lot of automated unit tests as you work on this
project.
You'll be required to review the project of a peer, comment on it and make
critical recommendations for its improvement. 10% of your "Project"
mark will be tied to how well you grade your peer's project. Another 10% will
be the mark given to your project by the student reviewing it. Please note
that if you submit your project late, then your grade will be determined
entirely by your instructor.
We'll want to see constant progress in your project work; just getting started
a day or two before the due date is not going to cut it. That's why you're
required to give access to your software repository to both your instructor
and your TA by the end of 9/4/17. If you already have a GitHub account, then
you can share it with us. If this is the first time you have to do it, then
you may want to look at Github,
Bitbucket, Pivotal Tracker, etc.
^ Top ^
Class Schedule
Date |
Lecture |
Assignment Due |
1/14/20 |
Introduction |
|
1/21/20 |
OOD Methodology, UML Basics |
|
1/28/20 |
Interfaces, Polymorphism and Inheritance |
Share your code repository |
2/4/20 |
Designing With Objects |
HW-1 |
2/11/20 |
Designing With Objects |
|
2/18/20 |
OO Principles |
HW-2 |
2/25/20 |
OO Principles
|
|
3/3/20 |
Midterm |
|
3/10/20 |
Javascript, A Crash Course -- guest speaker:
Ken Kunz
|
HW-3 |
3/17/20 |
Spring Break Week - No Classes |
|
3/24/20 |
Midterm review. Design patterns |
|
3/31/20 |
Objects and portable data (XML), Anti-patterns |
|
4/7/20 |
Frameworks |
|
4/14/20 |
Multithreading |
Project due date >> 4/21 >> 4/26 |
4/21/20 |
Persistence |
|
4/28/20 |
Class review |
|
5/5/20 |
Final exam |
|
Your instructor reserves the right to change this schedule.
^ Top ^
Important Events
Event |
Sections 1, 2, 3 |
Last Day to Add/Drop for Full Semester Classes with No Tuition Charges |
1/25/20 |
Spring & Fall Incomplete Grades Due |
2/24/20 |
Midterm |
3/3/20 |
Last Day to Withdraw from Full Semester Classes |
3/30/20 |
Last day of Spring classes |
5/2/20 |
Last Day to Request an Incomplete Grade |
5/3/20 |
Final exam |
5/5/20, 7:30pm - 9:30pm |
For more important dates and detail go to
the IIT site.
^ Top ^
Americans with Disabilities Act (ADA)
Reasonable accommodations will be made for students with documented
disabilities. In order to receive accommodations, students must obtain
a letter of accommodation from the Center for Disability Resources.
The Center for Disability Resources (CDR) is located in 3424 S. State St.,
room 1C3-2 (on the first floor).
Varia
Unless otherwise stated all papers you turn in will be TYPED. No handwritten
work is accepted.
Each page will have a header as follows:
-
The left side: your name
- Middle: page number and the total number of pages (ex. 2/5 indicates this
is page 2 out of a total of 5)
-
Right hand side: name of the assignment (ex. Homework #2)
Each page will also have a footer:
- The left hand side will contain the following text:
cs445-section: Spring 2020 where section stands for the
section you are in.
-
The right hand side will contain the following text:
Illinois Institute of Technology - Computer Science
^ Top ^
|