170 likes | 396 Views
Abstract Data Type (ADT). a data type whose properties (domain and operations) are specified ( what ) independently of any particular implementation ( how). ADT Specification Example. TYPE Time DOMAIN Each Time value is a time in hours, minutes, and seconds. OPERATIONS Set the time
E N D
Abstract Data Type (ADT) • a data type whose properties (domain and operations) are specified (what) independently of any particular implementation (how)
ADT Specification Example TYPE Time DOMAIN Each Time value is a time in hours, minutes, and seconds. OPERATIONS Set the time Print the time Increment by one second Compare 2 times for equality Determine if one time is “less than” another
“10” “45” “27” 10 45 27 Several Possible Representations of Time 3 int variables 3 strings 3-element int array • actual choice of representation depends on time, space, and algorithms needed to implement operations 10 45 27
class Time Specification // SPECIFICATION FILE ( time.h ) class Time// declares a class data type {// does not allocate memory public : // 5 public function members void set (int hours ,int mins , int secs ) ; int getHour(); int getMins(); int getSecs(); void increment ( ) ; void write ( ) const ; bool Equal ( Time otherTime ) const ; bool LessThan (Time otherTime ) const ; private : // 3 private data members int hour ; int mins ; int secs ; } ; 4
Use of C++ data Type class • software that uses the class is called a client • variables of the class type are called class objects or class instances • client code uses public member functions to handle its class objects
Client Code UsingTime #include “Time.h” // includes specification of the class int main ( ) { Time time1, time2 ; // declares 2 objects of TimeType int h,m,s; cout<<“Enter the hour, minute, and second\n”; cin>>h>>m>>s; time1.set (h, m, s ) ; time2 = time1; time1.increment(); time1.write(); time2.write(); if( time1.Equal(time2)) cout<<" times are equal\n"; if( time1.LessThan(time2)) cout<<"times 1 is less than time2\n"; time2.set(23, 59,55); cout<<"Increment time from 23:59:55\n"; for( int i = 1; i <=10; i++) { time2.write(); cout<<"\t"; time2.increment(); } return 0; } 6
class represents an ADT • 2 kinds of class members: data members and function members • class members are private by default • data members are generally private • function members are generally declared public • private class members can be accessed only by the class member functions (and friend functions), not by client code.
class Operations • built-in operations valid on class objects are: member selection using dot ( . ) operator , assignment to another class variable using ( = ), pass to a function as argument (by value or by reference), return as value of a function • other operations can be defined as class member functions
2 files Generally Used for class Type // SPECIFICATION FILE ( Time .h ) // Specifies the data and function members. class TimeType { public: . . . private: . . . } ; // IMPLEMENTATION FILE ( Time.cpp ) // Implements the Time member functions.
Information Hiding Class implementation details are hidden from the client’s view. This is called information hiding. Public functions of a class provide the interface between the client code and the class objects. client code abstraction barrier specification implementation
TimeClass Instance Diagrams time1 time2 Set Set Private data: hrs mins secs Private data: hrs mins secs Increment Increment 18 30 0 17 58 2 Write Write LessThan LessThan Equal Equal
Time.h client.cpp Time.cpp client.obj Time.obj client.exe Separate Compilation and Linking of Files specification file main program implementation file #include “Time.h” Compiler Compiler Linker
Avoiding Multiple Inclusion of Header Files • often several program files use the same header file containing typedef statements, constants, or class type declarations--but, it is a compile-time error to define the same identifier twice • this preprocessor directive syntax is used to avoid the compilation error that would otherwise occur from multiple uses of #include for the same header file #ifndef Preprocessor_Identifier #define Preprocessor_Identifier . . . #endif