This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revision | |||
haas:summer2017:cprog:projects:oop0 [2017/08/01 13:38] – wedge | haas:summer2017:cprog:projects:oop0 [2017/08/01 14:05] (current) – wedge | ||
---|---|---|---|
Line 67: | Line 67: | ||
In your programs, you will be performing message passing when dealing with your classes. | In your programs, you will be performing message passing when dealing with your classes. | ||
- | The "Data" | + | ====Access Control==== |
+ | Using classes we also have the "**public**" | ||
+ | |||
+ | Public | ||
+ | |||
+ | It is sometimes preferable for different levels of a program to be programmed by different people. Large database applications can often have several different groups of people working on different tasks. | ||
+ | |||
+ | Instead of giving every programmer the entire program to do with as they please, each group can work on their specific component, and release it to the other groups to use in the implementation of their component. Distributing such things in binary form is not uncommon. Look at the world of proprietary software, where no source code is available. You must be able to use their binary code and any documentation the vendor may provide in order to design your solution. You cannot | ||
+ | |||
+ | In the Open Source world, lack of source code isn't as much of a problem, but the concepts of data access are still very important. A program may still have several components to it, and for security purposes the file-save module probably SHOULDN'T have direct access to user passwords. Protecting | ||
+ | |||
+ | There are some additional access control attributes available: **protected** and **friend**. Protected access control is utilized more in inheritance, | ||
=====Programming in C++===== | =====Programming in C++===== | ||
Line 261: | Line 272: | ||
The **-o** argument to **g++** indicates the name of the output file. Since there is only one file in this case, the compiler automatically performs the assembling and linking steps for us. | The **-o** argument to **g++** indicates the name of the output file. Since there is only one file in this case, the compiler automatically performs the assembling and linking steps for us. | ||
- | =====Shapes===== | + | =====rectangle class===== |
- | In the **shapes/** subdirectory of the CPROG Public Directory (**/ | + | In the **oop0/** subdirectory of the CPROG Public Directory (**/ |
<cli> | <cli> | ||
Line 271: | Line 282: | ||
Please read through this source code, compile, and run the program. Make sure you understand what is going on. | Please read through this source code, compile, and run the program. Make sure you understand what is going on. | ||
- | =====Questions===== | + | =====Program===== |
- | - What are the member | + | We've got the accessor |
- | - If dealing with a triangle, what are the formulas for perimeter | + | |
- | - With a trapezoid, what are the formulas for perimeter | + | |
- | =====Program 1===== | + | * implement the member functions (keeping any function parameter names identical to how you received them) |
+ | * duplicate the output code block in main(), adapting as appropriate for box2, box3, and box4. | ||
+ | * Modify the program by adding **triangle** and **trapezoid** classes. Be sure to define the appropriate member functions and member data. To avoid confusion, be sure to employ the scoping operator (::). Also be sure that each " | ||
- | We've got the accessor functions of **getLength()** and **getWidth()** for checking the current values of the particular rectangle' | + | =====Review of Compiling/ |
- | + | ||
- | * define and implement two new member functions- **setLength()** and **setWidth()** and adjust your output accordingly to prove that they do what they are supposed to do. | + | |
- | * Modify the program by adding **Triangle** and **Trapezoid** classes. Be sure to define the appropriate member functions and member data. To avoid confusion, be sure to employ the scoping operator (::). Also be sure that each " | + | |
- | * First make your changes to have everything in one big source file. Make sure this compiles and works as expected. Once you have this done, break apart your code into separate files (.h and .cc files), breaking all the code up as efficiently as you see fit (perhaps per each shape). Submit both the single (all-in-one) file, and the multi-file versions of your programs. | + | |
- | + | ||
- | + | ||
- | ======Access Control====== | + | |
- | Using classes we also have the " | + | |
- | + | ||
- | It is sometimes preferable for different levels of a program to be programmed by different people. Large database applications can often have several different groups of people working on different tasks. | + | |
- | + | ||
- | Instead of giving every programmer the entire program to do with as they please, each group can work on their specific component, and release it to the other groups to use in the implementation of their component. Distributing such things in binary form is not uncommon. Look at the world of proprietary software, where no source code is available. You must be able to use their binary code and any documentation the vendor may provide in order to design your solution. You cannot view the source code of the various function calls to see how they work. Instead, you must rely on the documentation, | + | |
- | + | ||
- | In the Open Source world, lack of source code isn't as much of a problem, but the concepts of data access are still very important. A program may still have several components to it, and for security purposes the file-save module probably SHOULDN' | + | |
- | + | ||
- | =====Questions===== | + | |
- | + | ||
- | In the **incomplete/ | + | |
- | + | ||
- | This file implements a simple class and a **main()** function. It doesn' | + | |
- | + | ||
- | Please copy this file into your own **~/ | + | |
- | + | ||
- | < | + | |
- | lab46:~$ cd ~/ | + | |
- | lab46: | + | |
- | lab46: | + | |
- | </ | + | |
- | + | ||
- | Read through it, and answer the following questions: | + | |
- | + | ||
- | * What errors do you receive when trying to compile? | + | |
- | * What is the reason the program does not compile in its original state? | + | |
- | * How can you modify the class to fix the compilation problem (and have the program work as expected)? | + | |
- | * Now assume you cannot modify the class, how could you fix the problem by changing code in **main()** and referencing the original class definition? | + | |
- | * Why is it a good thing to not have direct access to the private member data of a class? Explain your reasoning. | + | |
- | * Is there any reason you'd prefer to have direct access to all your data? If so, would the problem be better suited for a non Object-Oriented solution? Justify your answer. | + | |
- | + | ||
- | =====Program 2===== | + | |
- | Along with your responses to the above questions, please submit a working version of the **tryme.cc** program as corrected by the specifications of modifying only **main()** (leave the original class implementation intact). | + | |
- | ======Review of Compiling/ | + | |
Just to review the compilation/ | Just to review the compilation/ | ||
<cli> | <cli> | ||
- | lab46: | + | lab46: |
lab46: | lab46: | ||
</ | </ | ||
Line 332: | Line 302: | ||
< | < | ||
- | g++ -o BINARY_FILE SOURCE_FILE | + | g++ -Wall --std=c99 |
</ | </ | ||
Line 345: | Line 315: | ||
</ | </ | ||
- | =====Optimization===== | + | =====Submission===== |
- | If you find yourself experiencing " | + | To successfully complete this project, the following criteria must be met: |
- | Compiler optimizations invoke additional functionality present in the compiler that can do some alterations of your compiled code, reordering things for more efficiency, and even correcting aberrant behavior | + | * Code must compile cleanly (no warnings or errors) |
+ | * Use the **-Wall** and **--std=c99** flags when compiling. | ||
+ | * Output must be correct, and resemble the form given in the sample output above. | ||
+ | * Code must be nicely and consistently indented | ||
+ | * Code must utilize the algorithm presented above | ||
+ | * Code must establish and utilize the functions described above | ||
+ | * Code must be commented (and those comments relevant) | ||
+ | * Track/ | ||
+ | * Submit a copy of your source code to me using the **submit** tool. | ||
- | To use compiler optimizations, | + | To submit |
- | + | ||
- | ^ option | + | |
- | | -O0 | no optimization (this is the default, it happens if you don't specify anything) | + | |
- | | -O | reduce code size and execution time, plus some non-expensive optimizations | + | |
- | | -O1 | same as -O | | + | |
- | | -O2 | optimize more. Compile time increases for the result of better code and execution | + | |
- | | -O3 | yet more optimizations. Long compile time, perhaps more efficient code | | + | |
- | | -Os | optimize for size. Uses a lot of -O2 optimizations so long as it does not impact code size | | + | |
- | + | ||
- | So, if you'd like to compile your code with level 1 optimizations: | + | |
- | + | ||
- | < | + | |
- | g++ -O1 -o BINARY_FILE SOURCE_FILE | + | |
- | </ | + | |
- | + | ||
- | As your programs get bigger and more complex, the utilization of compiler optimizations **can** make a significant impact on the resulting performance of your program. For most of the stuff we're doing now, you're not likely | + | |
- | ======Copying files to your submit directory====== | + | |
- | As you write your code, hopefully you've developed | + | |
- | + | ||
- | But, in order to complete your tasks, you've been requested to place it in your **~/src/submit** | + | |
- | + | ||
- | What to do?! | + | |
- | + | ||
- | We'll simply make a **copy** of your code! Assuming we're working with a source file called **myprog.cc** in our **~/ | + | |
- | + | ||
- | To do that we use the **cp** | + | |
<cli> | <cli> | ||
- | lab46: | + | $ submit |
- | lab46:~/ | + | Submitting cprog project " |
- | </cli> | + | -> oop0.cc(OK) |
- | We can then hop over to our submit directory and add/commit it: | + | SUCCESSFULLY SUBMITTED |
- | + | ||
- | < | + | |
- | lab46: | + | |
- | lab46: | + | |
- | contact.info | + | |
- | lab46: | + | |
- | Added | + | |
- | lab46: | + | |
- | ... | + | |
</ | </ | ||
- | ======Submission====== | ||
- | All questions in this assignment require an action or response. Please organize your responses into an easily readable format and submit the final results to your instructor per the appropriate methods. | ||
- | |||
- | Your assignment is expected to be performed and submitted in a clear and organized fashion- messy or unorganized assignments may have points deducted. Be sure to adhere to the submission policy. | ||
- | |||
- | When complete, questions requiring a response can be electronically submit using the following form: | ||
- | |||
- | < | ||
- | \\ | ||
- | |||
- | Additionally, | ||
- | |||
- | * placement of the code you created to solve this task in your **~/ | ||
- | * name that file: **task6.cc** | ||
- | * addition/ | ||
- | * create a directory **task6/** in your **~/ | ||
- | * place your multi-file implementation of task6.c in this **task6/** directory | ||
- | * addition/ | ||
- | |||
- | As always, the class mailing list and class IRC channel are available for assistance, but not answers. | ||
+ | You should get some sort of confirmation indicating successful submission if all went according to plan. If not, check for typos and or locational mismatches. |