Lesson 6.04 — Polymorphism ==================================================================================================== Overview -------- ### Objectives — _Students will be able to…_ - **Define** polymorphism. - **Trace** the execution of methods through a class hierarchy and predict output. ### Assessments — _Students will…_ - **Complete** a Tracing Inheritance guide - **Complete** WS 6.4 ### Homework — _Students will…_ - **Read** BJP 9.4 “Is-a Versus Has-a Relationships.” - **Complete** self-check questions \#18, 20 Materials & Prep ---------------- - **Projector and computer** - **Whiteboard and** **markers** - **Classroom copies** of [WS 6.4.1] - **Tracing Inheritance Guide** [WS 6.4.2] - **Class hierarchies and client code** from Section 9.3 (on board or projector) The Round Robin worksheet is 11 pages long, so it may take a while to print out/copy. Pacing Guide ------------ | Section | Total Time | |--------------------------------------------|-----------:| | Bell-work and attendance | 5min | | Introduction to Polymorphism | 10min | | Tracing Inheritance Guide | 10min | | Student practice: WS 6.4.1 | 25min | | Grade a worksheet and announce class grade | 5min | Procedure --------- Hook your class today by displaying a sample of polymorphic code, and asking students to vote as to whether they think the code is valid. Raise the stakes by offering extra class participation points to the students that vote correctly. Ask students to explain their reasoning behind the answer, and allow a little time for debate. ### Bell-work and Attendance \[5 minutes\] ### Introduction to Polymorphism \[10 minutes\] 1. Be forewarned that students may have a hard time with polymorphic syntax. Up until now, we’ve been drilling matching keywords and types. Passing different types as parameters within the same method may seem counterintuitive. You should drill and repeat that such behavior is only valid when substituting subclass objects. 2. **Polymorphism** is the ability for the same code to be used with several different types of objects. Although the same code is used, it will behave differently depending on the type (class) of object used. - Why does this work? It is legal for a superclass variable to refer to an object of its subclass. Reference variables do not have to exactly match the type of object they refer to! If public class `Lion` extends `Animal { … }`, - _then_ `Animal simba = new Animal();` - _or_ `Animal simba = new Lion();` - _or_ `Lion simba = new Lion();` - **_but not_** `Lion simba = new Animal();` - The object referred to by *simba* refers to a *Lion* object, not an *Animal* object. Methods called on *simba* will behave like a *Lion* object (e.g. the Lion roars). It may be beneficial to discuss the following points with your students: 1. `Lion` is a type of `Animal` so it is okay to assign `simba` to an `Animal`. 2. Since `Lion` overrides some of the methods of `Animal`, when we call those overridden methods, we’ll still see the behavior `Lion` defines. 3. When we assign something to an `Animal`, the only requirement is that it is-a-particular `Animal`. So we can only access behavior (methods) that the `Animal` class knows about. 3. Ask students to think-pair-share to provide examples of other correct assignment statements. When you call on students for examples, be sure to have students explain how the new objects will behave (what methods apply). 4. If TextExcel has already been introduced in any capacity, it’s easy to use the Cells as examples. The RealCell class is the superclass to the ValueCell, PercentCell and FormulaCell making it easy to get returned values as a double: ```Java RealCell myCell = (any subcell); myCell.getDoubleValue(); // Returns the double value to be displayed. ``` 5. Ask students to walk through the MusicalInstrument example with you. ```Java MusicalInstrument[] instruments = { new MusicalInstrument(), new ElectricKeyboard(), new Guitar(), new ElectricGuitar() }; for (int i = 0; i < instruments.length; i++) { System.out.println(instruments[i]); instruments[i].pickSound(); instruments[i].playNote(); System.out.println(); } ``` Have your students read the table of outputs (on the slides) and fill in the original method to find their answer. It will help them with the worksheet. ### Tracing Inheritance Guide \[10 minutes\] 1. Distribute copies of WS 6.4.2 and review the steps that all students should use to determine the output of a polymorphic program like the example you just showed. They should use this handout the way they use their problem-solving algorithm, as a procedure to be used on every polymorphic problem. 2. Demonstrate Step 1: Using the *ABC* example in section 9.3 of the book, diagram the class hierarchy. Give the first example with Tricky Code Tip that the header without *extends* is the superclass, then have students help you fill out the rest of this diagram. 3. Demonstrate Step 2: Starting with class `A` (as emphasized below), determine the output for each method listed. Have students fill in this table in their notes, volunteering answers for classes `B`, `C`, and `D`. 4. Demonstrate Step 3: Project the client code `ABCDMain` and ask students to use the table to predict the outcome from the code. The correct output is given below: ``` A A1 A2 A A1 B2 C C1 A2 C C1 D2 ``` Place the class hierarchy for classes `E`, `F`, `G` and `H` on the projector (also in section 9.3). Give students a few minutes to use the Tracing Inheritance guide to create a table of output for classes `E`, `F`, `G` and `H`. Student Practice: WS 6.4.1 \[25 minutes\] ----------------------------------------- 1. Round-robin is a drilling and error-checking exercise used with worksheets. Students write their name on the worksheet, complete the first problem, then pass the paper to the student on the right (or whatever direction you choose). The next student first checks the previous answer, correcting it if need be, then completes the second question. Each student then passes on the paper again. By the end of the exercise, each student has checked and completed each question on the worksheet. 2. The hook is that you choose only ONE worksheet from the pile to grade. All students get a grade from that one worksheet. This keeps students invested throughout the exercise. Advanced students will check questions throughout the whole worksheet, and all students will try their best to catch their own (and others’) mistakes, since the whole class shares the randomly-selected-paper’s grade. 1. Since today’s worksheet only has 13 questions, your chosen worksheet will only represent a subset of the class. 2. You should still grade one worksheet only, and given everyone the same grade from that one paper. This will keep stakes high for all students, since they won’t know which paper you will select to grade. 3. You should time each question/checking interval, and call “SWITCH!” when it is time for students to pass along papers. Suggested time limits are given below. If you notice that a time span is too short or too long, adjust all time spans accordingly. Time estimates as given are based off of AP Test timing. 1. Question 1 should take 5 minutes; project the *A*, *B*, *C*, and *D* classes on the overhead. 2. Question 2 should take 1 minute. 3. Question 3 should take 5 minutes. 4. Question 4 should take 3 minutes. 5. Question 5 should take 2 minutes. 6. Question 6 should take 5 minutes 7. Question 7 should take 3 minutes. 8. Question 8 should take 5 minutes. 9. Question 9–13 should take 2 minutes Adjust the timing on these questions as needed, but try to keep a brisk pace. Part of the engagement factor is the sense of urgency. ### Grade A Worksheet and Announce Class Grade \[5 minutes\] If time allows, randomly select the worksheet and announce the class grade with a bit of fanfare, congratulating the class on a job well done. Otherwise, select one paper to grade after class, then return the paper to the student for study practice. Accommodation and Differentiation --------------------------------- To optimize this exercise, you might consider rearranging students (or creating a passing-path) that mixes students of different coding abilities. The advanced students can use the extra time to correct mistakes made by others; if they are sitting in proximity to the student that made the error, they will have a better chance of explaining the correct answer to them. Due to the brisk pace of the round-robin rotation, there shouldn’t be too much down time for any one student. If you do find a student that is looking bored, make eye contact with them as you remind the entire class that everyone should be checking the problems handed to them once they are done with solving their assigned problem. In the ELL classroom, you may need to reduce the number or complexity of questions offered on the worksheet to complete this lesson in one class period. - Reassign the removed questions as homework, bellwork, or quizzes. - Read each question aloud for the class. - Do the first few problems (or a smattering of problems throughout the worksheet) as a whole group for additional scaffolding. Alternatively, you can do the entire assignment, but allow 2 class periods to complete each group. Forum discussion ---------------- [Lesson 6.04 Polymorphism (TEALS Discourse account required)](http://forums.tealsk12.org/c/unit-6/6-04-polymorphism) [WS 6.4.1]: https://raw.githubusercontent.com/TEALSK12/apcsa-public/master/curriculum/Unit6/WS%206.4.1.docx [WS 6.4.2]: https://raw.githubusercontent.com/TEALSK12/apcsa-public/master/curriculum/Unit6/WS%206.4.2.docx