Backwardly Compatible Code (Activity)
|Title||Backwardly Compatible Code|
|Overview||The learner will examine the code for the Color class from the Java API and make determinations about its content, its evolution and why its design has changed|
|Prerequisite Knowledge||Mid-level CS1 to beginning CS2 language skill sets, including basic javadoc|
|Learning Objectives||The learner should be able to understand code, read javadoc comments, infer the coding standards used, and understand how backward compatibility can be supported after the activity.|
The rationale of the activity is to provide an example in which a class was not correctly written when it was first published. The Color class source code in Java SE provides an example in which the code was updated in version 1.4 to correctly support coding standards, but the code is still backwardly compatible for application written using the class in version 1 through 1.3.
Even the Most Well-written Code Changes Over the Years
- OpenJDK (Open Java Development Kit) is a free and open source implementation of the Java programming language.
- You can download the source code for the Java classes in OpenJDK. Where is the source code located?
- Find the Color class source code for Java 7. Read and understand the code.
- Answer the following questions from the code:
- What does the first 20 or so lines contain? Look at the subsequent header comments. What are the tags such as @author and @version samples of?
- When was this Color class written?
- Who are the author/s?
- Each individual color such as red, yellow and magenta are described using a certain default standard. What is the acronym for this standard? State the words the abbreviation stands for and provide a definition
- What interface/s does the Color class implement?
- How many public instance variables are contained in the Color class? What are the name/s of the instance variables?
- How many public static variables are contained in the Color class?
- List the variables that are have a constant value. What is the naming standard for constants in Java 7?
- How many private instance variables are contained in the class?
- How many private static variables are contained in the class?
- Go to the Java API for the Color class. Can you find any reference to the instance variable named falpha? Why or why not? Find falpha in the java code. Does the code tell you what the falpha variable does?
- Are there any private methods? What do these method/s do? Are the comments sufficient?
- It seems like each color is defined twice (such as RED and red). What version of Java implemented the uppercase name of the color?
- Thought questions about the code:
- Why do you think there are two “versions” (that are the same, except for the name) of each color? What happened?
- After the uppercase version of the Color was created, why didn’t the authors just delete the lowercase version?
- Do you think there were probably lots of lines of Java code in production as of version 1.4? Would it have been wise to just drop support of the colors written using names in camel case?
- Define backward compatibility. How does the Color class demonstrate the concept of backward compatibility?
- Oracle makes this source code available. However, it is licensed and owned by Oracle. Therefore, can you modify this code? Is this truly open source??
A document that contains the answers to each of the questions.
How will the activity be graded?
How will learning will be measured?
Include sample assessment questions/rubrics.
Coding standards were not originally followed when the Color class was created. The naming standard for static final variables is that they should be all uppercase, with words separated by _. To rectify this error and still allow the class to support backward compatibility for the thousands of lines of code in production already, the class now supports two names for each constant color.
|Knowledge Area/Knowledge Unit||PL and SDF|
|Topic||PL/Object Oriented Programming and SDF/Fundamental Programming Concepts|
|Level of Difficulty||Medium|
|Estimated Time to Completion||45 minutes|
|Materials/Environment||Access to Java 1.7 SE JDK download|
|License||Licensed CC BY-SA|
Suggestions for the Open Source Project:
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License