Introduction
Welcome to COP 3330, Object Oriented Programming. This is the
second in a series of four courses:
- COP 3014: Introduction to Programming with the C++ Language.
Prerequisite: MAC 1140.
- COP 3330: Object Oriented Programming.
Prerequisite: CGS 3408 or a comparable course in C or C++ programming. Pre- or Corequisite: COP 3353.
- COP 4530: Data Structures, Algorithms and Generic Programming.
Prerequisites: COP 3330; MAD 2104 or 3107. Pre- or corequisite: CDA 3100.
- 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.
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
- Namespaces
- Overloading
- Templates
- Stream I/O
- File Processing
- Bitwise Data
Object Oriented Programming:
- Inheritance
- Polymorphism
- Runtime Binding
Data Structures:
- Stacks
- Queues
- Arrays
- 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.
Prerequisites
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 1-13 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 components:
-
SSH -- a full-featured, secure remote access utility
- A system of file- and compute-servers
- An Email utility elm
-
Gnu emacs -- a text editor
-
Command line compiler (g++ or clang++)
-
The make utility
For a complete description of the system see:
http://system.cs.fsu.edu/
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
https://system.cs.fsu.edu/ for the latest information on support
of SSH and how to get software.
Once you have an ssh client installed, you should begin to familiarize yourself with
the electronic environment in the cs.fsu.edu domain. You are entitled
to a login account which is essential to participation in this course. New
students should see the information at
https://system.cs.fsu.edu/newuser
to get started.
Work Rules
- Do your own work. This means:
- 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.
- 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.
- You may not read code off another person's computer screen.
- Do not seek help from anyone other than the instructors, and do not give
help to anyone else in the class.
- Get help from your instructors, in class or in the designated discussion
forum. This means:
- 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.
- 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).
- 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.
- 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 publicly.
- Keep your files organized
- 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".)
- Create a separate subdirectory, and work within that subdirectory, for each
class project or homework assignment.
- 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
- Study new material
- Lecture material (slides, script, exercises, discussion forum)
- Resource distributions (cpp, tcpp, tests, examples)
- Assignments
- Review previously covered material
- Do current homework
- Work on current project
- Approach to a Project
- Analyze
- Understand the assignment in general terms
- Understand each detailed requirement
- Required deliverables
- Design
- Classes
- Functions
- Function main()
- Makefile
- Code
- Classes
- Stub each method
- Debug class
- Expand and debug one method at a time
- Functions
- 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 submissions.
In order to maintain uniformity, we will adhere to the time on
shell.cs.fsu.edu. To check the time on shell:
- Log on to shell.cs.fsu.edu
- 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:
- Copy the file LIB/scripts/submit.sh into your
.bin directory.
- Change the permissions for submit.sh
to rwx------
- The new command submit.sh will be used to submit all programming projects.
- Copy the project-specific configuration file deliverables.sh into
your project directory.
- Execute the submission process by entering the command submit.sh
deliverables.sh in your project directory. Read the diagnostics on screen.
- 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 submission.
- 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.
- 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.
- 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 submit
script issued warnings (in red).
- See this link for more details.
Course Tour
The Course Syllabus is the primary source for course policies,
including the following:
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 organizer/calendar.
Most course communication is handled through the Blackboard course site.