1 / 22

Libraries

Libraries. Making Functions Globally Reusable (§ 6.4). 1. a. b. b. a. Review. We have written a program that used functions to compute the area and circumference of ellipses. 2. Function Prototypes (placed before main() ):. double ellipseArea(double length, double width);

doralewis
Download Presentation

Libraries

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Libraries Making Functions Globally Reusable(§ 6.4) 1

  2. a b b a Review We have written a program that used functions to compute the area and circumference of ellipses. 2

  3. Function Prototypes (placed before main()): double ellipseArea(double length, double width); double ellipseCircumference(double length, double width); Function Definitions & Documentation(placed after main()): const double PI = 3.14159;/* Function to compute the area of an ellipse Receive: two double values length, width, representing the major axis and minor axis of an ellipse Return: the area of the ellipse -------------------------------------------------------*/ double ellipseArea(double length, double width) { double halfLength = length/2.0, halfWidth = width/2.0; return PI * halfLength * halfWidth; } 3

  4. /* Function to compute the circumference of an ellipse Receive: two double values length, width, representing the major axis and minor axis of an ellipse Return: the circumference of the ellipse ---------------------------------------------------------*/ double ellipseCircumference(double length, double width) { double halfLength = length/2.0, halfWidth = width/2.0; return 2.0 * PI * sqrt( (halfLength * halfLength + halfWidth * halfWidth) / 2.0); } Putting these prototypes, documentation, and definitions along with main() in the same program makes it possible to reuse them at several different places in the program. However, suppose that in order to solve some other problem, a different program requires computing the area and circumference of an ellipse. 4

  5. Is there automatic updating of a program if the original functions are modified? How can we reuse our functions in a different program? Options: • Copy-and-pasteellipseArea()and ellipseCircumference()from our previous program into the new program. • Store ellipseArea() and ellipseCircumference()in a ___________so that programs can share them. _____ _______ We also have global reusability. 5

  6. Header Files Resource Files In Visual C++, put all 3 and the program that uses the library in the same project. Libraries A library consists of three files: A _____________ file (whose name has a .h suffix) that contains shareable function __________________ and ____________. An ________________________ file (whose name has a .cpp suffix) that contains shareable function _____________________. A ____________________ file (whose name hasa .txt (or .doc) suffix) that contains documentation for the library. Source Files 6

  7. must be the same Example Since we are creating a library to share functions that describe an ellipse, we might name our library ellipse, with • header file ellipse.h, • implementation file ellipse.cpp, and • documentation file ellipse.txt. Other Examples: Text: Temperature conversionProject: Metric conversion 7

  8. Header file: ellipse.h Can use this same opening documentation in all 3 files but change1st line /*----- ellipse.h ----- Library of functions for computing ellipse attributes. L. Nyhoff CS 104X Jan 16, 2012 Functions provided: ellipseArea: compute area of an ellipse ellipseCircumference: compute circumference of an ellipse ------------------------------------------------------------*/ double ellipseArea(double length, double width); double ellipseCircumference(double length, double width); // ... plus any others we want to provide such as the// ... focal length, eccentricity, etc. In ellipse.h, we place the function________________: Note the "directory" The corresponding implementation file ellipse.cpp and any program that uses these functions must contain ___________________________ 8

  9. Implementation file: ellipse.cpp /*----- ellipse.cpp ----- Library of functions for computing ellipse attributes. L. Nyhoff CS 104X Jan 16, 2012 Functions provided: ellipseArea: compute area of an ellipse ellipseCircumference: compute circumference of an ellips ------------------------------------------------------------*/ #include <cmath> #include <cassert> using namespace std; Their _______________ are placed in ellipse.cpp: Put afterusing namespace std; _______________________ const double PI = 3.14159; // Could go in ellipse.h double ellipseArea(double length, double width) { ________________________________________ double halfLength = length/2.0, halfWidth = width/2.0; return PI * halfLength * halfWidth; } 9

  10. Implementation file (cont.) double ellipseCircumference(double length, double width) { assert(length >= 0 && width >= 0); double halfLength = length/2.0, halfWidth = width/2.0; return 2.0 * PI * sqrt((halfLength * halfLength + halfWidth * halfWidth)/2.0);}//... plus definitions of any others we provide ... This file can be __________________ separately from any program that uses it (called a _______________ program). 10

  11. Documentation file: ellipse.txt Our documentation file will be a copy of the header file, with __________________________ added foradditional documentation: /*----- ellipse.cpp ----- Library of functions for computing ellipse attributes. L. Nyhoff CS 104X Jan 17, 2011 Functions provided: ellipseArea: compute area of an ellipse ellipseCircumference: compute circumference of an ellips ------------------------------------------------------------*/ /*------------------------------------------------------- Compute the area of an ellipse. Receive: length, width, two double values. Return: the area of the corresponding ellipse. -------------------------------------------------------*/ double ellipseArea(double length, double width); 11

  12. Documentation file (cont.) /*------------------------------------------------------- Compute the circumference of an ellipse. Receive: length, width, two double values. Return: the circumference of ellipse defined by length and width. -------------------------------------------------------*/ double ellipseCircumference(double length, double width); // ... plus prototypes and specifications // ... for any others we provide ... By storing the documentation in a separate file, we provide information on how to use the library without cluttering the other library files. But some programmersdo put the documentationin the header file. 12

  13. Program Translation Translating a program into machine language consists of two steps: 1. ________________, in which the syntax of the main program and of the implementation files of any included libraries are checked, and if no errors are found, converts them into the computer’s machine language. 2. ___________, in which any calls to functions (from main() or from other functions) are bound to the definitions of those functions. 13

  14. Using a Library To use a library: A program must ________________________(usually above the main function and after using namespace std;). When the ___________ (actually its preprocessor) encounters this #include directive, it must be able to find the header file so it can open it and replace the #includedirective with its contents so they get compiled along with the program. When the file contains function prototypes, the effect of the #include directive is to insert those prototypes into the program. In Visual C++: Put it in the project's header files 14

  15. In Visual C++: It must also be able to find the corresponding implementation file so it can open it, insert the contents of its header file into it, and then compile it (separately from the program). Put it in the project's source files Once these compilations are successful, the ___________combines these compiled files into one, connecting(i.e., "linking") each function call to the compiledcode of that function's definition. A failure in either stage is an error. 15

  16. Compilation Errors A program calling a function for which _ ________________is given produces a ________________ error. This can occur if you call a library function and neglect to #include the header file containing its prototype. You’ll be trying to use a function that has not been ______________. 16

  17. Linking Errors A program calling a function for which thelinkercannot find a ____________________ produces a linker error. This can occur if a program calls a function but the linker is not told to use the library implementation file or object file containing that function’s definition. How this is done varies from platform to platform, but often involves a project file. 17

  18. Temperature conversion example in the text Example #include <iostream> // cin, cout, <<, >>, ... using namespace std; #include "ellipse.h"// insert ellipse prototypes int main() { cout << "Program to compute the area and circumference of ellipses.\n"; double majorAxis, minorAxis; cout << "\nEnter major & minor axes (in meters) (0 0 to stop): "; cin >> majorAxis >> minorAxis; while (majorAxis > 0) { double area = ellipseArea(majorAxis, minorAxis); double circumference = ellipseCircumference(majorAxis, minorAxis); cout << "\nFor an ellipse with major axis " << majorAxis << " meters and minor axis " << minorAxis << " meters\n" << "\tarea = " << area << " sq. meters\n" << "\tcircumference = " << circumference << " meters\n"; cout << "\nEnter major & minor axes (in meters) (0 0 to stop): "; cin >> majorAxis >> minorAxis; } } Put afterusing namespace std; 18

  19. 1>------ Rebuild All started: Project: EllipseLib, Configuration: Debug Win32 ------ 1> ellipse.cpp 1> driver.cpp 1> Generating Code... 1> EllipseLib.vcxproj -> E:\CS104-12Int\classprogs\EllipseLib\Debug\EllipseLib.exe ========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ========== EXECUTION: Program to compute the area and circumference of ellipses. Enter major & minor axes (in meters) (0 0 to stop): 2 2 For an ellipse with major axis 2 meters and minor axis 2 meters area = 3.14159 sq. meters circumference = 6.28318 meters Enter major & minor axes (in meters) (0 0 to stop): 0 0 Press any key to continue . . . 19

  20. int main() { // ... } C++ Compiler 00100111010 10110001001 ... 11101100100 file.cpp file.obj Compilation creates a ____________________file(usually with a .o or .obj suffix) from a .cpp file. 20

  21. Linking Linking binds multiple ______________filesinto a single ______________________ filethat can be executed by the operating system. 00100111010 10110001001 ... 11101100100 00100111010 10110001001 ... 11101100100 11100101011 10010001000 ... 10101101101 01101101011 11010101001 ... 00101100100 file1.obj 11100101011 10010001000 ... 10101101101 C++ Linker file2.obj 01101101011 11010101001 ... 00101100100 fileN.obj file.exe 21

  22. OCD with Libraries 1. Specify the desired behavior of the program. 2. Identify the objects needed. 3. Identify the operations. a. If an operation is not predefined: Write a function to perform it. b. If an operation is likely to be reusable someday: Store its function in a library and access it from there. 4. Organize objects and operations into an algorithm. ExtendingC++ 22

More Related