CSCI 201: Software Development
Course Information & Syllabus
WEBSITE: http://www-scf.usc.edu/~csci201s/
Instructor: Dr. K. Narayanaswamy
Office: Off Campus
Email: swamy@cs3-inc.com
Phone: (310) 337-3013
Office Hours: By appointment or before/after class
Teaching
Assistant:
Sheng Shi: shengs@usc.edu
Phone and Office:
213 740 4508; SAL 211
Office Hours: TBD
Shuchi Kulkarni: shuchi.kulkarni@usc.edu
Phone and Office: 213-740-6507; SAL 339
Office Hours: Wednesdays 3:00pm to 5:00pm
Lab Assistant and Grader
Neha Chaudhry;
nchaudhr@usc.edu
Phone: TBD
Course Overview:
Prerequisites: It
is expected that all students have some familiarity with using C++ (classes,
and some inheritance and derivation).
Further, it is mandatory to have taken a basic data structures
course. CSCI 102 satisfies these
criteria. Consult your undergraduate
advisor if you do not satisfy these requirements.
CSCI 201 teaches you object-oriented software
development by using the programming languages C++ and Java. Programming examples will be drawn from the
pool of common data structures that you have learned about in CSCI 102 and
perhaps a few more. Thus, the two major
facets of this course are:
1.
Understanding
object-oriented programming and design concepts, and how they influence
“programming-in-the-large”, namely, the development of contemporary
large-scale, production quality software systems by multi-person teams.
2.
It
is impossible to understand programming principles without programming. Thus, a major portion of this course is
providing you a solid language foundation in C++ and Java, both of which are
object-oriented and of increasing importance in present-day program development.
At the end of this course, you should not only be a
competent C++ and Java programmer, you should have a good idea of how
object-oriented software development works, and how it will continue to play a
crucial role in the development of software in the future.
Topics covered will include the following: principle
of encapsulation, principle of inheritance, their influence on software
development, how C++ supports encapsulation, how C++ supports inheritance,
overloading and templates, exceptions, Java and its relevance to the Internet and
OO development, Java language features, graphical user interfaces and event
programming, OO analysis and design techniques and how to apply them.
Course
Schedule:
This class meets Tuesdays & Thursdays, between
5:00 p.m. to 6:20 p.m. Each lecture will
cover appropriate technical topics.
Please follow the provided Course Syllabus to know what the lecture
topic will be, relevant readings, and assignment schedule. You are completely responsible for making
sure that you stay current on all course developments and on knowing how well
the class is keeping up with the prescribed syllabus.
In addition to regular lectures, you are expected to sign
up for a particular Lab session and attend that session. The Lab session will stress practical
details, aspects of the specific computing environment, and numerous
programming minutiae that are hard to cover in a general lecture. You should interact with one of the TAs and
formulate a good working relationship with him or her.
Text Books:
There are two required textbooks for this course,
and two recommended or optional books.
There will be reading assignments provided from these sources. All reading assignments are described in the
course syllabus. Because of the nature
of the schedule, reading assignments are particularly important in this
course. Before a session, skim the portions of the book, if you have
time. Certainly, after a class session, it is important to read the topic more
carefully, and understand the discussions.
1.
(Required
Text) C++ Primer (3rd
Edition), Lippman, Addison Wesley
2.
(Required
Text) Java: How to Program, Deitel
& Deitel, Prentice Hall
3.
(Optional) Effective C++, Meyers, Addison Weslen
4.
(Optional)
Java in Practice, Warren &
Bishop, Addison Wesley
Some parts of the texts are redundant (for example, both discuss the principles of OO programming). In particular, 1 and 2 are reasonable reference books for C++ and Java respectively. 4 is a very good reference that covers the principles of object-oriented development using C++. We refer to these books as T1, T2, T3, and T4 respectively in the course syllabus on Page 4.
Computing
Resources:
All program assignments should be submitted using
your student account on University resources – specifically the “submit”
program. Programs will be tested only on University resources. Wherever and however you develop your
programs, test them on the University’s
UNIX infrastructure before submission.
Remember to give yourself enough time to port your program to the UNIX
platform if you are developing it in Windows.
There are always subtle differences in behavior, and you are responsible
for making sure that your programs work as specified on the platform specified
– namely ALUDRA, which is a Sun workstation running UNIX.
In particular, all C++ programs must compile and
work using SUN workstations and the GNU C++ compiler ( g++ ). All Java assignments
must compile and work using SUN workstations and the javac compiler. NO EXCEPTIONS TO THIS RULE AND NO
EXCUSES!!
Course
Assignments:
There will be a combination of programming
assignments (5 over the course of the semester), a mid-term examination, and a
final examination.
1.
Examinations: All examinations are open-book and open-notes. The mid-term examination will include all
topics done up to that point, and final examination will be comprehensive. The examinations will be a mixture of
objective questions and some questions requiring analysis or synthesis of small
code segments.
Unless there is a documented dire emergency, examinations
cannot be made up. Please be mindful of
this in planning your schedule.
2.
Programming/LAB Assignments: You will generally have at
least 2 weeks to do each assignment. An
assignment will be given at the point where the course material for that
assignment has already been covered.
Assignments can be accepted as late for up to 3 days after they are due.
However, you will lose 15% off
the top per day that you are late – no negotiations on this, unless the
circumstances are dire and documented.
For example, computing facilities going down on the date of an
assignment is due will not qualify as
“dire”! Please plan and execute wisely.
Specific program grading criteria will be discussed in the LAB sessions. It is important that your program work as specified, but it is also very important that it embody the principles that are being taught in this class – namely OO development. Programs must be well written, easy to read and understand, and properly documented to get the full grade.
Course
Grades:
Your overall course grade will be based on your
performance in the different course assignments. The relative weight of each course assignment is as follows:
·
Programming/LAB Assignments (8 X 5) = 40 % of your
grade
·
Mid Term Examination = 25 %
·
Final Examination = 35 % (to be held during finals week in the
designated room)
Cooperation on programming assignments is healthy
and unavoidable, even encouraged to the degree that you learn from such
interactions and that real-world programming indeed involves teams of people
working together. But, plagiarism is explicitly forbidden, and
serious action will be taken if students are caught cheating on programming
assignments or examinations. Copying of
any or all of another person’s code is an example of cheating – regardless of
size of code copied or the amount of functionality involved. Discussing design issues or getting help in
understanding an algorithm from someone is certainly not a problem. Everyone should do his/her own thinking and
programming.
If you have any question at all, check with the TA
or instructor, and/or attach information to your submission to identify the
collaboration or help you had.
CSCI 201 Syllabus
Week |
Date |
Course Topics |
Readings |
Activity |
|
1 |
|
No
class 1/13 and 1/15 |
|
|
|
2 |
1/20 1/22 |
Principle
of Encapsulation/Inheritance OO
Analysis & Models Significance
of OO Principles |
T1:
Chap 17; 13 T4:
Chap 1,2,3; T2:
8,9 |
P0
discussed P1
posted 1/23 |
|
3 |
1/27 1/29 |
Encapsulation
in C++ Constructor/Destructor Using
classes effectively |
T1:
Chap 8;13,14 T3:
As relevant |
|
|
4 |
2/3 2/5 |
Friends,
Namespaces Exceptions
in C++ Inheritance
in C++ and Java |
T1:
Chap 8,13,14, 11, 17 T3:
As relevant |
|
|
5 |
2/10 2/12 |
Protected
members, their uses Kinds
of derivation (in C++), applications |
T1:
Chap 17;18 T3:
as relevant |
P1
due 2/13 P2
poated 2/13 |
|
6 |
2/17 2/19 |
Dynamic
Binding Polymorphism
and applications Completion
of inheritance topics |
T1:
Chap 17,18,19 T3:
as relevant |
|
|
7 |
2/24 2/26 |
Overloading
in C++ Function
Overloading Operator
Overloading |
T1:
Chap 9,15 T3:
as relevant |
P2
due 2/27 P3
posted 2/27 |
|
8 |
3/2 3
/ 4 |
Templates
concepts Standard
Template Library – basic containers and algorithms |
T1:
10,6,12,16 T3:
as relevant |
Midterm
3/2 in class |
|
9
|
3/9 3/11 |
STL
containers – how to choose STL
iterators – how to use them STL
algorithms, functors, with examples |
T1:
10, 6,12,16 T3:
as relevant T2:
2,3,4,5,6 |
P3
due 3/14 |
|
10 |
3/23 3/25 |
Java
Architecture / HTML Basics Applets
& Applications Exceptions
in Java |
T2:
Ch 1—10, 14 |
P4
posted 3/23 |
|
11 |
3/30 4/1 |
File
Processing Java
Abstract Windows Toolkit Graphics
and Event Programming |
T2:
Ch. 11, 12 |
|
|
12 |
4/6 4/8 |
Various
kinds of events More
graphics components Animation,
sound and other cool stuff |
T2:
11, 12, 13, 16 |
P4
due 4/9 P5
posted 4/9 |
|
13 |
4/13 4/15 |
Threads
and parallel programming Sockets
and network programming |
T2:
Ch. 17, 15, 21 |
|
|
14 |
4/20 4/22 |
Layout
management Other
Advanced Java features Multiple
inheritance in C++ |
T2:
11, 12, 13,16 T1:
11,18 |
|
|
15 |
4/27 4/29 |
Overflow
topics, course retrospective Future
directions of technology Review
and examples |
|
P5
due 5/1 (NO
LATE SUBMISSIONS!!) |