CS 5201 - Object-Oriented Numerical Modeling I

INTRODUCTION AND TOPICS

INTRODUCTION AND MOTIVATION

You have successfully completed the introduction to numerical methods (CS 3200) course here at S&T or transferred equivalent credit to this institution. In that course, you learned the basic methodologies for producing effective but simplistic algorithms for the computation required to solve typical engineering/mathematical problems. Attention was not given to some of the more detailed difficulties in the actual implementation. The object-oriented paradigm offers the software developer many advantages, but also many complexities. These details will occupy much of our time and attention in CS 328. It is hoped, then, that the programming approach here will lead to more durable, versatile software. We will also spend time investigating techniques for improving the efficiency of C++ coding to solve such problems.

EXPECTATIONS

The topics covered in this course will require a solid background in C++ programming competency. The prerequisites for this course include CS 1575. If you do not have that material under your belt, you would not be able to succeed in this course and it is not recommended that you remain enrolled in the course. Prerequisites also include a linear algebra course. We will spend a significant portion of the semester reviewing and learning new aspects of this topic. Please come talk with me if you lack any of the course prereqs.

TOPICS TO BE COVERED IN THIS COURSE

Being as that we will be implementing our mathematical models using C++ and the object-oriented paradigm, our initial goal is to learn to create abstract data types to represent the basic building blocks in mathematics. Of course, this means that we will be creating and implementing classes for such basic units as vectors. Then, in order to make these tools useful, we'll add functionality for ease of use. Thus, we will first discuss the overloading of operators for classes and so remove the user of the class from the dirty details of simple transactions between objects of our ADTs. The objects of our ADT then give the user the appearance of being primitive C++ types so that code can be as easy as:

Our_Type Obj_1,Obj_2;

input>>Obj_1>>Obj_2;

output<< (Obj_1 * Obj_2) << endl;

From here, we will direct our attention to methods of optimizing code performance using these mathematical models. We'll consider several mathematical algorithms such as the Gram-Schmidt orthogonalization technique. We'll see how standard coding techniques can fail miserably and we'll look at ways to get around these problems. Techniques for solving linear systems will be considered. Further topics to be discussed will be announced as the semester progresses.

Topics in C++ that we will work with will include:

    • makefiles

    • UML - the unified modeling language

    • operator overloading

    • templates and template specializations

    • specialized templating techniques

    • move semantics

    • function pointers

    • function objects

    • generalization / inheritance

    • dynamic polymorphism

    • static polymorphism

    • call back functions

    • traits classes

    • the Barton-Nackman Trick

    • "virtual constructors"