Course Syllabus, C++ Programming - Intermediate
This page last updated on: Mar. 31, 2002
Contents:
General Information
Course Name
C++ Programming: Intermediate
Certificate: C++ Prog 712 A
EDP: 59137 022
Instructor
Cliff Green
Instructor Contact Info
E-mail: cliffg@codewrangler.net
Phone: 206-363-9852 (7 pm - 9 pm), 425-867-7234 (1 pm - 4 pm)
Note: I occasionally travel out of town or have work project
commitments, so phone call and e-mail replies might take an extra day or
two during those periods.
Term
Spring 2002, Apr. 1 - Jun. 10, Mondays 6:00 - 9:00 pm, UW Main Campus,
Mary Gates Hall, room 242
Note: no class on May 27 (official holiday)
Textbooks and Other C++ Resources
The required textbooks for this course are:
-
Thinking in C++, Vol 1 (2nd vol to be published in a year or two), Bruce
Eckel, Prentice Hall Publishing, 2000, ISBN 0-13-979809-9. (This is a completely
re-written and updated version of his 1995 Thinking in C++ textbook.)
More information on this book can be found at:
http://www.prenhall.com/divisions/ecs/cscat.html
There is an online edition of this book, as well as early drafts of the second volume
available for downloading at: http://www.bruceeckel.com/Books.
-
Design Patterns, Elements of Reusable Object-Oriented Software,
Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, Addison Wesley,
1995, ISBN 0-201-63361-2. More information on this book can be found at:
http://www.awl.com/cseng/
and the source code can be found at: http://hillside.net/patterns/DPBook/Source.html
-
The C++ Programming Language, 3rd Ed., Bjarne Stroustrup, Addison
Wesley, 1997, ISBN 0-201-88954-4. More information on this book can be
found at: http://www.awl.com/cseng/
Two highly recommended textbooks for this course (quite a bit of lecture material
will be taken from both of them):
- The C++ Standard Library: A Tutorial and Reference, Nicolai Josuttis,
Addison Wesley, 1999, ISBN 0-201-37926-0. More information on this book
can be found at: http://www.awl.com/cseng/
-
Effective C++, 2nd Edition, Scott Meyers, Addison Wesley Professional
Computing Series, 1997, ISBN 0-201-92488-9. More information on this book
can be found at: http://www.awl.com/cseng/
Other C++ resources include these recommended books and links: Other
C++ Resources
Course Requirements
The minimum requirements for passing the course are:
- Attendance: You must attend eight of the ten class sessions to pass
the course.
- Assignments: You must complete all assignments with an average
score of 80% or better.
- Examinations: You must complete the examinations with a score
of 80% or better.
Description, Prerequisites, and Objectives
This course will have the following main areas of concentration:
-
Continue learning the syntax, features, and capabilities of C++. This includes
discussing the advantages and disadvantages of various features, and when
to use them.
-
Continue learning object-oriented design and generic programming concepts. To gain
the greatest benefits from using C++ as a programming language, a solid
understanding of object-oriented and generic design principles is necessary. The
introductory course provides the basic concepts of OOD, and the intermediate
course will start applying these concepts in more depth, and introduce various
design idioms and design patterns.
-
A focus on both class design and class usage. The introductory course emphasizes
class usage, with most of the class design and declarations provided as
part of the assignment. The intermediate course will delve deeper into
the techniques and issues associated with effective class design. There
will be a continued emphasis on using pre-written C++ class libraries,
particularly the standard C++ library, useful for quickly and effectively
developing applications.
-
Learn selected design patterns and how to apply them. Design patterns are
becoming a major force in software design, and this course will introduce
students to a selected set of design patterns and how to use them in solving
design problems.
Effective C++ class design and implementation tends to partition C++ programmers
into two groups - the application developers who use C++ class libraries
to solve application level problems and objectives, and the developers
who design and program the class libraries. Using C++ class libraries tends
to simplify and speed application-level development compared to traditional
C programming methodologies, while designing and implementing the class
libraries themselves tend to be harder than the typical C programming approaches.
The introductory course provides basic design and implementation techniques
of class library development, while also concentrating on the benefits
and techniques of using C++ libraries from the application level. The intermediate
and advanced C++ courses will delve deeper into the more complex aspects
of class library design and implementation
A number of software development side-topics will be discussed as time
allows, including testing techniques, exception handling strategies, portability
issues, design tools, software components, and software development methodologies.
Prerequisites
Familiarity with most of the C++ language fundamentals and features is
expected. There will be review of basic C++ topics as appropriate, but
the reviews will be minimal and targeted to various topics. Specific prerequisites
include that the student:
-
Has successfully completed C++ Programming: Introduction (or has equivalent
experience).
-
Is familiar with basic class syntax including class declarations and definitions,
private, public, and protected sections, constructors, destructors, and
copy constructors.
-
Can overload member and non-member functions, and understands how the compiler
examines function signatures for matches.
-
Understands the concepts of class declarations versus class instances /
objects, usage details associated with objects such as the this pointer,
and object lifetime issues.
-
Knows how to use const in the context of parameters, member functions,
return types and const objects, knows reference parameters and
variables, default arguments, member initialization lists, and static member
functions and data.
-
Can overload operators, particularly the assignment operator, and provide
operator cascading abilities by returning reference objects (such as returning
*this).
-
Can perform basic class design, and in particular know how to use classes
in a higher-level application.
-
Understands syntax and semantics of inheritance and virtual functions.
-
Understands basic template function usage and design.
-
Understands basic object-oriented concepts such as class interfaces, encapsulation,
inheritance, and polymorphism, container classes and iterators, and understands
the strong-typing nature of C++.
-
Knows basic C++ character I/O and file handling.
-
Is very comfortable with C fundamentals and syntax, particularly pointer
usage.
-
Can write applications with multiple source and header files.
-
Is very comfortable with dynamic memory management and data structure manipulation,
including all aspects of the C++ new operator (with the exception
of overloading the new operator).
Access to a C++ compiler supporting templates and C++ exceptions is required,
as these features will be used in this class. All input and output will
be character and text based, so a windowing environment is not required.
Objectives
-
Learn more advanced techniques and principles of object-oriented design
and programming including a strong emphasis on inheritance, abstraction,
polymorphism, and generic design (templates).
-
Learn modularization, design, and partitioning techniques which aid in
developing large, complex systems.
-
Learn effective exception handling techniques, and the details of C++ exception
handling syntax.
-
Learn how to design and implement simple template classes and functions,
and become proficient in using template classes and functions.
-
Learn about advanced issues with container classes and iterators.
-
Learn about more advanced C++ "gotcha's" and how to avoid them, such as
implicit conversion operator invocation.
-
Learn about relatively new features of C++ such as the mutable keyword,
namespaces, new casting operators, and RTTI.
-
Learn basic usage of many of the standard C++ library classes and the Standard
Template Library (STL) portion of this library.
-
Learn common design and class interface issues and approaches to solving
them in C++.
-
Learn advanced memory management techniques, including using smart pointers
and reference counting.
-
Learn about design patterns and how to apply them.
Grading and Assignment Info
80% of the grade will be from the course project and assignments, and 20%
from tests. The emphasis of this class is on the project and assignment
work, since it is a C++ programming course. There will be two tests, one
at mid-term and one final. The tests will be relatively simple and short,
aimed at verifying you are the true author of the assignments, and covering
the basic concepts from the lectures.
Important - Other
Grading and Assignment Info
Administrative and Legal Info
The following page contains information on classroom closure situations,
assignment originality and plagiarism, and disability accomodations:
Administrative and Legal Info
This page constructed by Cliff Green,
Copyright © 1997-2002.