Repo exploration for overloading ops in C++ Activity

From Foss2Serve
(Difference between revisions)
Jump to: navigation, search
(Additional Information:)
(Add degree of completion tag)
 
(8 intermediate revisions by one user not shown)
Line 2: Line 2:
 
{| border="1"
 
{| border="1"
 
|-  
 
|-  
|'''Title''' || Exploring a C++ GitHub repository to learn about operator overloading (page in progress)
+
|'''Title''' || Exploring a C++ GitHub repository to learn about operator overloading
 
|-
 
|-
 
|'''Overview''' || Student will search a repo to find a specific class that implements infinite precision arithmetic and answer questions about it
 
|'''Overview''' || Student will search a repo to find a specific class that implements infinite precision arithmetic and answer questions about it
Line 9: Line 9:
 
|-
 
|-
 
|'''Learning Objectives''' ||  
 
|'''Learning Objectives''' ||  
* The student should be able to search GitHub repositories in general;
+
The student should be able to
* to read code and understand enough to know what overloaded operators do;
+
* search GitHub repositories in general,
* to understand what inline functions are and when it is appropriate to use them; and  
+
* read code and describe in detail what the overloaded operators do,
* to understand the advantages of using overloaded C++ operators and how to create them.
+
* identify the inline functions and explain when it is appropriate to use them, and  
 +
* explain the benefits of using overloaded C++ operators and how one can create them.
 
|}
 
|}
  
Line 18: Line 19:
 
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.
 
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.  
+
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 need to know how to search GitHub and open files stored there.  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 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.
Line 63: Line 64:
 
The assignment can be graded in the traditional way, by a numeric score out of 100 possible points. The questions in the above template have suggested weights, but clearly the instructor is free to change the weights.
 
The assignment can be graded in the traditional way, by a numeric score out of 100 possible points. The questions in the above template have suggested weights, but clearly the instructor is free to change the weights.
 
   
 
   
Grades on out-of-class assignments do not necessarily reflect how much a student has learned, for many reasons. To determine how well a student has learned about the actual C++ feature of overloaded operators and their use, as well as the GitHub related skills that should have been acquired, the instructor is better off by using in-class pop quiz given after the assignment is due.  
+
Grades on out-of-class assignments do not necessarily reflect how much a student has learned, for several reasons. To determine how well a student has learned about the actual C++ feature of overloaded operators and their use, as well as the GitHub related skills that should have been acquired, the instructor is better off by using in-class pop quiz given after the assignment is due.
 +
Therefore, no further assessment guidance is suggested here.  
  
  
 
{| border="1" class="wikitable"
 
! Criteria
 
! Level 1 (fail)
 
! Level 2 (pass)
 
! Level 3 (good)
 
! Level 4 (exceptional)
 
|-
 
| '''Criterion 1...'''
 
|
 
|
 
|
 
|
 
 
|-
 
| '''Criterion 2...'''
 
|
 
|
 
|
 
|
 
 
|}
 
  
 
=== Comments: ===
 
=== Comments: ===
What should the instructor know before using this activity?
+
This activity is an active-learning approach to teaching about operator overloading and in-line functions. Students might express frustration because they are being asked to learn something
 
+
before they have been taught about it by the instructor. They need a bit of patience.
What are some likely difficulties that an instructor may encounter using this activity?
+
  
 
=== Additional Information: ===
 
=== Additional Information: ===
Line 126: Line 105:
 
[[Category: Learning_Activity]]
 
[[Category: Learning_Activity]]
 
[[Category: CS2]]
 
[[Category: CS2]]
 +
[[Category: Good Draft]]

Latest revision as of 17:48, 8 March 2017

Title Exploring a C++ GitHub repository to learn about operator overloading
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,
  • read code and describe in detail what the overloaded operators do,
  • identify the inline functions and explain when it is appropriate to use them, and
  • explain the benefits of using overloaded C++ operators and how one can 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 need to know how to search GitHub and open files stored there. 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.

Although no prerequisite knowledge abut open source or git is needed to do this activity, it serves as a good means for students to inform themselves about these. As such, students will be given specific reading materials before starting this project, including:

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, do you think, 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. This template file is a template with the questions and a rubric.

Assessment:

The assignment can be graded in the traditional way, by a numeric score out of 100 possible points. The questions in the above template have suggested weights, but clearly the instructor is free to change the weights.

Grades on out-of-class assignments do not necessarily reflect how much a student has learned, for several reasons. To determine how well a student has learned about the actual C++ feature of overloaded operators and their use, as well as the GitHub related skills that should have been acquired, the instructor is better off by using in-class pop quiz given after the assignment is due. Therefore, no further assessment guidance is suggested here.


Comments:

This activity is an active-learning approach to teaching about operator overloading and in-line functions. Students might express frustration because they are being asked to learn something before they have been taught about it by the instructor. They need a bit of patience.

Additional Information:

ACM Knowledge Area/Knowledge Unit Programming Languages/Object-Oriented Programming, Software Development Fundamentals/Fundamental Programming Concepts
ACM Topic Overloaded operators, in-line functions
Level of Difficulty Easy to moderate
Estimated Time to Completion About 2 to 3 hours
Materials/Environment Any platform with a modern Internet browser.
Author(s) Stewart Weiss
Source This is not dependent on any other activity.
License Creative Commons Attribution-ShareAlike 4.0 International License

Suggestions for Open Source Community:

This can be adapted to many other language features and to other languages as well.


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