Comp 245 Data Structures (A)bstract (D)ata (T)ypes ADT What is an ADT? Data abstraction is thinking in terms of WHAT you can do with a collection of data independently of HOW you store and manipulate the data. It is a collection of data together with a set of operations on that data. We will define ADT’s using the C++ class construct Applications will use an ADT in their code by creating an (ADT) object from the C++ class. ADT Example – A Sphere WHAT functionality do we want a sphere to have? o o o o o o o Find out it’s radius Set it’s radius Compute it’s diameter Compute it’s circumference Compute it’s area Compute it’s volume Display all of it’s statistics (area, volume, etc…) ADT Example – A Sphere WHAT data is needed to be able to provide the functionality we want? o A radius Implementing the Sphere ADT Step 1 – Defining the ADT Define the ADT by using a C++ class The class will contain the prototypes for the functions (methods) needed by the ADT. This is what provides the functionality we want. The class will also contain the variable declarations needed for the data we want to be able to provide the functionality. This class definition will placed in a header (.h) file. Programs desiring to use this ADT will simply just include (#include) this in their program. Class Definition for a Sphere ADT Using a C++ Class class sphereClass { public: sphereClass (double R); sphereClass (); ~sphereClass (); double Radius (); void SetRadius (double R); double Diameter (); double Circumference (); double Area (); double Volume (); void DisplayStatistics (); private: double TheRadius; }; Implementing the Sphere ADT Step 2 – Implementing the ADT You will create a C++ (.cpp) file which will contain the code for all the functions which you prototyped in the class definition. Pay special attention how you write the function header for each; this will specify that these functions can only be used with objects of this particular type. Implementation of a Sphere Constructors/Destructor #include "sphere.h" #include <iostream.h> const double PI = 3.14; sphereClass::sphereClass(double R):TheRadius(R) {} sphereClass::sphereClass():TheRadius(1.0) {} sphereClass::~sphereClass() {} Implementation of a Sphere Functionality – Part I void sphereClass::SetRadius(double R) { TheRadius = R; } double sphereClass::Radius() { return TheRadius; } double sphereClass::Diameter() { return 2.0 * TheRadius; } double sphereClass::Circumference() { return PI * Diameter(); } Implementation of a Sphere Functionality – Part II double sphereClass::Area() { return 4.0 * PI * TheRadius * TheRadius; } double sphereClass::Volume() { double R = TheRadius; return (4.0 * PI * R * R * R)/3.0; } void sphereClass::DisplayStatistics() { cout << "\nRadius = " << Radius() << "\nDiameter = " << Diameter() << "\nCircumference = " << Circumference() << "\nArea = " << Area() << "\nVolume = " << Volume() << endl; } Using the Sphere ADT Step 3 – Application Program Once an ADT has been defined and implemented, an application programmer can use it to help solve problems. An application program will utilize an ADT by creating an object. An object is more powerful than a simple variable. An object contains both data and functions which manipulate the data in the object. Using the Sphere ADT Object-Oriented Program #include <iostream.h> #include "sphere.h" void main() { sphereClass MySphere(5.1); sphereClass UnitSphere; UnitSphere.DisplayStatistics(); MySphere.SetRadius(4.2); cout << MySphere.Diameter() << endl; } Review of Using an ADT Define an ADT in a C++ class. Place this in it’s own header (.h) file. Code the functionality of the ADT in it’s own implementation (.cpp) file. Use the ADT by creating an object in an application (.cpp) file. Putting the Pieces Together Create a Project Build Win32 Console Application Empty Project Make sure all source files are in the same folder Compile (only .cpp files – creates .obj files) Link (uses .obj files and C++ std library) Completed product is an exe