Sea otter
What is this?

CSCI 6626 and CSCI 4526
Object-Oriented Principles and Practices

Fall 2016
Email A.Fischer at work Email A.Fischer at home
Course Home Page
Administrative FAQs
Technical FAQs
Lecture Notes
Programming Project
Chapters from the Text
Code Examples
Integrity Policy

<< Back
Course Facts
CSCI 6626 Section 01 and CSCI 4526 Section 01
Monday 6:00 to 8:40, Buckman 307

Dr. Alice E. Fischer
251 Buckman Hall
The Goal? Simple, clean design.
Purple fish
The goal is to learn:
  • Write quality code.
  • Learn about classes, objects, type hierarchies, templates, exceptions, the template library, and their implementations.
  • Learn how C++ objects are implemented and managed, and how to use move semantics.
  • Learn what object-oriented programming is – and isn’t.
  • Learn the basic principles and patterns of OO design.
  • Learn how C++ differs in syntax and semantics from standard ISO C on the one hand and from other languages with support for OO-programming such as Python, Ruby, and Java.
  • Learn how to use a reference manual.
  • Learn clean OO design paradigms and practices.
  • Write code that is concise, readable, and non-repetitive.
  • Test, analyze, debug, and present your work in a professional manner.
  • Become proficient at modern C++ programming.
And, most importantly, to learn:
  • How to follow instructions and question them if you think they are wrong.
  • How to get a big job done one module at a time.
  • Professional test design and presentation of your project.
Orange fish
C++ provides building blocks
for complex systems.
  • CS 610 and CS 620.
  • A solid understanding of programming is needed, including familiarity with classes, strings, and dynamic allocation.
  • The ability to write and debug a program with multiple code modules.
  • Competence in data structures programming is needed, including linked lists, queues, and stacks, and how they are implemented.

Course Requirements and Grading (approximate weights).

  • Mid-term exam: 20%
  • Final exam: 30%
  • Programs and term project: 50%
  • A. Fischer, Exploring C++, a collection of lecture outlines and examples.
Copying someone else's work
is not a good idea.
Same cuttlefish
Show your true colors!
Academic honesty policy.
All assignments are to be done alone; little or no sharing and discussion should take place. Copying another student's work is unacceptable. It is also unacceptable to work so closely with another person that your work is essentially similar. This kind of "help" will not help you master the material. If you need help, don't hesitate to ask me for it.

Plagiarism (copying someone else's work) is a serious offense in industry and at UNH. Employees are sometimes fired and students are sometimes dismissed for doing it. Please keep in mind that I do notice plagiarism and that I am disgusted that a few students do it. Copying another's work shows a lack of respect for yourself and for me, and a lack of concern for the student whose work you copy. In my classes, the giver and the borrower are equally guilty. Copying work is also very foolish; there is no way to pass the exams without doing the work yourself.

To avoid accidental participation in someone else's offense, do not give or loan your work to another student at any time for any reason. Do not leave it in the lab, and do not leave copies of your files in public places.

Striped fish
If you look at the website,
you'll spot announcements.
Polkadotted fish
Policies and Procedures
I will post all homework assignments, error corrections, announcement, suggestions, and other useful information on the course website. Please check for postings regularly.

Your best approach, if you need help, is to email to me a short note about the nature of your problem, attach your source code as a single zip file, and hope that I have time to analyze the problem. I will answer your requests as soon as I can.

A Missed Exam.
You should inform me in advance if you will be unable to attend class on a scheduled exam date. If an emergency arises at the last minute, I expect you to reach me within 24 hours of a missed exam if you want the privilege of making it up. Use phone, email, or messenger, but get in touch with me. In addition, you must write the missed exam before I hand back the papers to the rest of the class.

Start simply,
Lemon fish
Add complexity later.
Meanwhile, test everything.
Homework Expectations.
  • It is important to follow my instructions because they will guide you through learning the things you need to know. For example, if I ask you to use a linked list, don't use an array! However, let me know if you think there is an error in the instructions. I will post corrections on the website and send an email to warn everyone.
  • Please read and study the style guidelines in Chapter 1 of the course notes. Take them seriously. If a program contains a global variable, public data, or a goto, I will return it ungraded.
  • Good style (by my definition), clarity, and good use of C++ are needed for a grade better than 90% on a programming project. Please keep in mind that I have trouble seeing, and that there are good reasons for me to ask for the clearest possible programming style.
  • Late Work. My deadlines are always flexible. However, reality is not. If you hope to finish this course in June, you will have to keep up with the work schedule. Since each assignment builds on prior assignments, one late program may cause everything after that to be late. Also, if you have not attemped the current assignment, you will be unable to ask questions about it in class. There will be a penalty for submitting the term project late. You need to finish on time to qualify for an A+.
Identify critical parts of the code.
When your code is out of focus,
Gaudy fish
look at the big picture
Orange fish
to find new direction.

Doing the Work and Getting it Done.

Multiple code modules.
In real applications, virtually every program is large enough to warrant modular construction, and in C++, that kind of program organization is natural. However, some students reach this class without ever having done a multiple-module program with separate compilation of each code file and final linking. If you are one of these people, make contact TODAY with one of the teaching assistants and work with him or her until you understand how to set up a project. Mastering modular techniques is one of the most important thing you will learn in this class. Difficulty with these techniques is not an excuse for doing it the old, familiar, single-module way.

Computer Systems.
You will need access to a modern C++ compiler (C++11 or newer). If you have your own compiler, use it. I use the OS-X system, with XCode and CLang++; I believe they are easier to use than anything else on the market.

If you cannot use that, I hope you can use a Linux system with KDE, Eclipse, and either Gnu C++ (g++) or CLang.

If you need to use Windows, download cygwin and Eclipse with Gnu C++ (g++). Mingw is not an adequate compiler.

Codeblocks is totally inadequate. Don't even try to use it -- you will waste hours and hours. Microsoft Visual C++ has poor error comments and puts Windows-centric things in your code. These must all be deleted before you turn in your projects. It is better just to use an appropriate compiler.

When you look at my code,
think about the construction.
How does it work? Why
was it designed that way?
How to Study Effectively:
To understand the program examples given in class, ask yourself the questions below. If you can't give good answers to them, ask me (via email).
  • How does this class safeguard its privacy and the integrity of its objects?
  • Look at the class declaration. Do you know why each data and function member is there?
  • Which data members are used to store the state of the computation so that one function can set the state and another can use it?
  • Which data members are used to store the main application database?
  • What kind of data structure gets built? Are pointers being used to build it? Can you diagram it?
  • Which function (in which class) is responsible for building each part?
  • Is everything initialized when an object is created? If not, why not?
  • How do the classes interact? Why?
  • Is there a different way to organize the classes? If so, which way is better?
Photographs by Michael Fischer, from the Seattle Aquarium. Last updated: 4/6/15