Repo exploration for overloading ops in C++ Activity

From Foss2Serve
Revision as of 15:25, 16 August 2016 by SWeiss (Talk | contribs)
Jump to: navigation, search
Title Exploring a C++ GitHub repository to learn about operator overloading (page in progress)
Overview Student will search a repo to find a specific class that implements infinite precision arithmetic and answer questions about it
Prerequisite Knowledge Basic CS1 background, including basic C++ class programming concepts
Learning Objectives
  • The student should be able to search GitHub repositories in general;
  • to read code and understand enough to know what overloaded operators do;
  • to understand what inline functions are and when it is appropriate to use them; and
  • to understand the advantages of using overloaded C++ operators and how to create them.

Contents

Background:

The problem that this activity attempts to solve is how to introduce basic FOSS concepts to CS2 students in the context of learning about CS2-specific topics.

Before this activity is assigned, the students should be introduced to the concepts of online repositories, free and open source software, and to a very limited extent, the use of GitHub. It is not really necessary to know how to use the version control features of GitHub for this activity because the students are not cloning code or uploading it. They can do this activity entirely by browsing the code on-line.

The activity asks the students to search through the GitHub repository for the class that implements infinite precision decimal numbers. It then asks them to look at the interface file for this class. The particular objectives are to get them to learn something about exploring GitHub, about reading code and comments, about overloaded operators and inline versus non-inline functions.

In terms of their coding knowledge, they should know how to read C++ class interfaces and implementation files, know how to read C++ function definitions, and be able to write C++ programs that use classes. One of the questions asks them to examine a function that is recursive, without stating that it is recursive, and gets them to discover this. Students who have been introduced to recursive C++ functions will have a different response from those who have not.

Students will be given specific reading materials before starting this project, including:

populate this lists here!!


Directions:

Students should be told that, as they do all of these exercises, they should write the answers to all questions in the form provided. The instructor should create a template form to simplify grading and assessment of student responses.

  1. ITK (Insight Segmentation and Registration Toolkit) is an open-source, cross-platform system that provides developers with an extensive suite of software tools for image analysis. You can learn more about it from its website, https://itk.org . Find the page on this website that has a link to the Software Guide. Write down how many pages are in the latest Software Guide.

  2. The source code for ITK is available on GitHub https://github.com/. Go to the GitHub website and find the ITK repository. Write down how you found the download page for the repository.

  3. The developers of ITK decided that it was advantageous to create classes that implement infinite precision numbers. They distinguished between infinite precision decimal numbers and infinite precision integers. Find the interface file (header file) for the class that implements infinite precision numbers with decimal arithmetic and open the file. Provide answers to the following questions:
    • What is the name of the header file?
    • What is the name of the class?
    • Who authored this code?
    • When was it last modified?

  4. There are two functions in this file whose name is operator>>.
    • Are they public or private?
    • How do they differ?
    • When two functions have the same name what is this called?
    • What does the first of these functions do? Read about this in the file's comments and in your textbook and explain in your own words what this function does.
    • What is the purpose of the word inline -- why is it used?

  5. Notice that there are many functions defined in this file whose names contain the word operator, such as operator+= and operator-.
    • Why are they here? In other words, what use are these? You might have to read about this in your C++ textbook.
    • Why have the developers created all of these operator functions?

  6. Find the implementation file for this interface and open it. What is its name?

  7. Find the implementation of operator< . Read it carefully.
    • Does it depend on any other user-defined functions? Which ones?

  8. Find the implementation of operator+ . This depends on many functions.
    • List the operator functions that it depends on.
    • What is unusual about this function? (Note for instructor: It is recursive, but the student may not realize this unless they study the code carefully.)


Deliverables:

The student will hand in a completed form containing the answers to the given questions.

Assessment:

How will the activity be graded?

How will learning will be measured?

Include sample assessment questions/rubrics.

Criteria Level 1 (fail) Level 2 (pass) Level 3 (good) Level 4 (exceptional)
Criterion 1...
Criterion 2...

Comments:

What should the instructor know before using this activity?

What are some likely difficulties that an instructor may encounter using this activity?

Additional Information:

ACM Knowledge Area/Knowledge Unit What ACM Computing Curricula 2013 knowledge area and units does this activity cover? ACM_Body_of_Knowledge
ACM Topic What specific topics are addressed? The Computing Curriucula 2013 provides a list of topics - https://www.acm.org/education/CS2013-final-report.pdf
Level of Difficulty Is this activity easy, medium or challenging?
Estimated Time to Completion How long should it take for the student to complete the activity?
Materials/Environment What does the student need? Internet access, IRC client, Git Hub account, LINUX machine, etc.?
Author(s) Who wrote this activity?
Source Is there another activity on which this activity is based? If so, please provide a link to the original resource.
License Under which license is this material made available? (http://creativecommons.org/licenses/)

Suggestions for Open Source Community:

Suggestions for an open source community member who is working in conjunction with the instructor.


This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License

CC license.png

Personal tools
Namespaces
Variants
Actions
Events
Learning Resources
HFOSS Projects
Evaluation
Navigation
Toolbox