Introduction Instructors Subject Material

Introduction Narrative
Welcome to COP 3330, Object Oriented Programming. This is the second in a series of four courses:
1. COP 3014: Introduction to Programming with the C++ Language.
Prerequisite: MAC 1140.
2. COP 3330: Object Oriented Programming.
Prerequisite: CGS 3408 or a comparable course in C or C++ programming. Pre- or
Corequisite: COP 3353.
3. COP 4530: Data Structures, Algorithms and Generic Programming.
Prerequisites: COP 3330; MAD 2104 or 3107. Pre- or corequisite: CDA 3100.
4. COP 4531: Complexity and Analysis of Data Structures and Algorithms.
Prerequisite: CDA 3101; COP 4530; MAD 3105 or 3107; STA 4442.
Each of these courses is highly dependent on its predecessors in the sequence as well as the other
stated pre- and co-requisites.
This course is designed to serve both on-campus and distance students using web-based and other
Internet-accessible components for all students. It is also designed to be taught by a team where
the student body is sufficiently numerous or diverse. The team member roles are as follows:
Chris Lacher
Lead Instructor
Lecture Notes
Discussion Board
Exam Assessment
Course Management
Tony Harris
Associate Lead Instructor
Live Lectures (on-campus & video)
Discussion Board
Assignment Assessment
Danielle Anderson
Course Mentor
Discussion Board
Assignment Assessment
Subject Material
This is a second course in programming, and the last one in the sequence that focusses primarily on
programming. The coverage can be divided into three categories, as follows:
Object Based Programming:
Classes and Objects
Introduction Narrative
Stream I/O
File Processing
Bitwise Data
Object Oriented Programming:
Runtime Binding
Data Structures:
Linked Lists
All of these topics will be explored in depth in the context of the C++ programming language.
Course Goals and Objectives
At the end of this course, the student should be able to accomplish the following:
Object Based Programming in C++
Write programs using the full engineering power of C++, including: classes and objects,
encapsulation and information hiding, class inheritance, overloading of operators and
functions, template classes and functions, bitwise programming, I/O using streams, and the
use and management of external data files
Create and manage multi-file projects using g++ and make
Design and implement solutions to programming problems requiring up to five hundred lines
of code and multiple source code files.
Improve reliability, maintainability, and correctness of programs through software engineering
principles and techniques including component re-use, coding style, and use of language
features such as const, static, and namespace
Object Oriented Programming
Use inheritance, polymorphism, and runtime binding to solve certain programming problems
Be able to judge the appropriateness of OOP techniques for specific programming problems
Data Structures
Define and use abstract data types stack and queue as algorithm control structures and data
storage structures in C++ programs
Implement stacks using an array data structure
Implement stacks and queues using a linked list data structure
In particular, this is the last course that will emphasize object oriented programming. Thus this
course serves not only as fundamental background for courses in data structures, algorithms, and
generic programming but also as an undercarriage to higher level software engineering courses that
emphasize object oriented design and analysis.
Introduction Narrative
This course assumes that you have a working knowledge of the basics of programming in C or C++.
These basics will be reviewed very briefly, but in-depth coverage will be assumed to have taken
place in CGS 3408 (or some equivalent previous course).
This course also assumes that you have some experience using Unix and the programming
environment supplied to you by our department. These basics will be reviewed briefly also. The
details are left to the pre-/co-requisite COP 3502.
To give you a feel of where you should be, here are some things that should be familiar concepts
and that are central building blocks to this course:
Programming concepts from C/C++
Expressions formed using C++ operators and precedence
Branching using if, else if, else, and switch statements
Looping using for, while, and do, statements
Modularity using functions
Data storage using structs, arrays and pointers
Character strings
I/O using keyboard/screen and re-direction
Implementation skills
Familiarity with Unix shells, files, and command line interface
Edit files using Emacs or Vi
Create a C/C++ program using Emacs
Compile a C/C++ program using g++
Solve programming problems requiring up to 100 lines of code
Bottom line: A thorough understanding of the material in Chapters 1-11 of [Gaddis] (or Chapters 113 of [Dale & Weems], or Chapters 1-8 of [Deitel]), commensurate programming experience, and
rudimentary familiarity with the CS Unix environment will be assumed.
Course Work Environment
There is a common environment for remote access that the department supports for this course
(and a number of other courses in the curriculum). That environment consists of the following
SSH -- a full-featured, secure remote access utility
A system of file- and compute-servers
An Email utility elm
Gnu emacs -- a text editor
The Gnu compiler -- g++
The Unix make utility
For a complete description of the system see:
For distance students and any others who plan to work remotely, be aware that unencrypted telnet
access to departmental servers is not supported: only secure (encrypted) connections using SSH
are supported. SSH, SecureCRT, or a similar system supporting ssh, is a required addition to your
local workstation. See for the latest information on
support of SSH and how to get software.
Introduction Narrative
Once you have an ssh client installed, you should begin to familiarize yourself with the electronic
environment in the domain. You are entitled to a login account which is essential to
participation in this course. New students should see the information at to get started.
Work Rules
1. Do your own work. This means:
1. Do not copy any code from any source (electronic or printed) other than official course
sources such as lecture slides, lecture scripts, and official code distributions.
2. Do not read any code from other students, and do not provide help for any other
student in the class; this means you should neither send nor receive Email containing
code with anyone other than course instructors.
3. You may not read code off another person's computer screen.
4. Do not seek help from anyone other than the instructors, and do not give help to
anyone else in the class.
2. Get help from your instructors, in class or in the designated discussion forum. This means:
1. Discussion Board. The preferred method of seeking help is the class discussion board.
The forums and topical threads therein provide a historical record of all questions,
answers, and explanations. These are extremely useful to all students and can be
accessed 24/7. Email may be used, but is appropriate only when code must be quoted
or a private matter is concerned. For all other issues, the discussion board should be the
primary interactive resource and archive.
2. Email. To discuss personal matters or code (which should not be posted publicly), seek
help from your instructors, in person or via Email. Always bring an up-to-date printout
of your source code when seeking help in person. When using Email, put the code you
want to discuss in the body of your Email and embed questions inside the code
beginning with
// Q: (insert question here)
Remember, this is appropriate in Email to instructor(s) but not in a discussion forum
(see below).
3. It is perfectly OK to bring up anything in class (lecture, recitation, or discussion board),
and it is encouraged that you participate in these discussions. You may use any material
or information said, written, or handed out in class.
4. You may not put more than two (2) lines of code in any public message (i.e., discussion
forum or chat room). No code that is a solution to an assignment should be posted
3. Keep your files organized
1. Create a directory "cop3330" and do all work for this class inside that directory. Make
sure this directory has permission code 700. (In the parent directory of cop3330, enter
the command "chmod 700 cop3330".)
2. Create a separate subdirectory, and work within that subdirectory, for each class project
or homework assignment.
3. When you have source code, we advise not keeping the object code or executable. This
will save your disk space allocation. (An instance where time is cheaper than space.)
How to Work
Weekly Time Budget
Introduction Narrative
Study new material
Lecture material (slides, script, exercises, discussion forum)
Resource distributions (cpp, tcpp, tests, examples)
Review previously covered material
Do current homework
Work on current project
Approach to a Project
Understand the assignment in general terms
Understand each detailed requirement
Required deliverables
Function main()
Stub each method
Debug class
Expand and debug one method at a time
Start with simple body
Replace with actual body
Assignment Submission Process
Assignments account for a large portion of the grade for this course, and probably for an even
larger portion of learning. To get credit for your hard work, it is important to adhere to our
assignment submission standards.
Each assignment is due before midnight (i.e., on or before 11:59:59 PM) on the due date. There is
no room for individual flexibility on assignment (or homework) deadlines, because code releases for
the class are timed to the assignment deadlines. Allowing an individual to turn in a assignment late
would result in either giving that individual access to solutions, or delaying code distributions for the
entire class. Neither option is viable, because we cannot extend the ultimate deadline -- the end of
the semester. Early submission of assignments is acceptable, however, we cannot give early
substantive feedback, assignments submitted early will be assessed together with all other
In order to maintain uniformity, we will adhere to the time on To check the
time on shell:
Log on to
Type date at the command prompt.
All directories and files submitted should be named in accordance with the specifications listed in
the assignment document. All filenames should be in lowercase unless otherwise specified. A
makefile is required for most assignments.
To submit assignment X:
Introduction Narrative
1. Log in to your CS account on (Warning: The submission script will not
work on other machines.)
2. Copy the appropriate script file into your directory created for the assignment. The name and
exact location of this file will be specified in the assignment document. We will use
"" in this example.
3. Change the permissions on the script file to rwx------; this is accomplished by entering the
command "chmod 700" in the assignment directory.
4. Run the script by typing its name. This should result in an Email message to one "cop3330"
containing a tarred version of your assignment files. Look for the "elm" command indicating
the script successfully sent the Email.
5. You should receive two connfirming Email messages from the softbot responsible for
receiving, unpacking, and storing your assignments. The first indicates receipt of the
submission, the second contains a copy of exactly what was stored in your portfolio from the
6. Be sure to check your Email for a confirmation that your assignment submission was received.
Save this Email. It is your time-stamped proof of submission in the unlikely event that your
assignment gets lost.
7. Also check for the second Email containing the received contents of your submission. Look at
this content to be sure that what was received is what you intended to submit.
8. If you do not receive both confirmation Emails within a few minutes of submission, contact the
instruction staff for further advice. Re-submit only if the elm send command is not issued.
Course Tour
The Course Syllabus is the primary source for course policies, including the following:
Exam Schedule
Grading Policy
Contact The Instructors
Prerequisite Courses
Other Course Policies
Course Syllabus
The Course Organizer is a central access point for all "outgoing" course content. Part of the
organizer is the Course Calendar. Lecture notes and assignments are released through the
Course Organizer
Course Calendar
Most course communication is handled through the Blackboard course site.
Blackboard Portal