Conditional Expressions and Statements : 08/24/2023
Operations on Variables : 08/23/2023
Variables and Types : 08/22/2023
Welcome to CS 124 : 08/21/2023
References and Polymorphism
openclassPerson{
funspeak(){}
}
classStudent : Person(){
funlearn(){}
}
classProfessor : Person(){
funteach(){}
}
funparticipate(person: Person){
person.speak()
person.learn()
person.teach()
}
valstudent=Student()
valprofessor=Professor()
participate(student)
participate(professor)
This lesson combines what we’ve learned previously about polymorphism with what we now know about references.
We’ll examine how the type of a reference variable—not the type of what it refers to—determines what methods and field we can access using dot notation.
We’ll also use this opportunity to reinforce our developing view of references.
When we introduced polymorphism and “is a” relationships, we introduced how the type of a variable and the type of the object stored in it could differ:
valo:Any="test"
Now, using our more precise terminology, we can be more clear about exactly what is going on here:
One additional piece of Kotlin syntax that should now become more clear is dot notation.
We’ve been using it to access object fields and methods:
vals="88"
println(s.length)
Now we know what is happening!
The . causes Kotlin to follow the reference variable to the object it refers to: in this case it followss to the String we created on the line above.
If we create two references that lead to the same place, it will follow either:
When a method is called in Kotlin, what is passed to the method is a reference, not a copy of the object.
This allows the method to modify the object.
Let’s look at how this works!
classExample(varvalue:Int=0)
funincrement(example: Example){
example.value++
}
vale=Example()
println(e.value)
increment(e)
println(e.value)
And now, using a diagram to make the relationships clear visually:
Kotlin arrays that store objects actually store object references.
This has some important implications.
Let’s look at an example:
classPerson(varage:Int)
Practice: Object Array Shallow Copy
Created By: CS 124 Staff
/ Version: 2020.10.0
Create a method named copy that accepts a nullable array of Any?s.
It should return a shallow copy of the passed array: meaning that the returned array should contain references
to the same objects in the passed array.
If the passed array is null, copy should return null.
This problem deadline has passed, but you can continue to practice. Experiment! You will not lose credit.
Homework Restricted to Current CS 124 Students
A publicly-accessible version of this content is available at learncs.online.
Some of you might be wondering: why would I ever write a method that accepts
Any?
It seems like you lose so much information about the object by doing that!
While that is true, the tradeoff is with generality.
Let’s try and make that clear through an analogy:
https://www.youtube.com/watch?v=q2XxvufnyYY
Practice: List Unique Items
Created By: CS 124 Staff
/ Version: 2021.9.0
Create a method uniqueItems.
uniqueItems accepts a list of Anys and returns a count of how many of the objects in the list are unique,
meaning that there are no other objects in the list that are equal to them.
For example, given the list {1, 2, 4} you would return 3, whereas given the list {2, 2, 5} you would return 1.
The list may contain any kind of Any.
You may use collections like Maps or Sets for this problem, but they are not required.
This problem deadline has passed, but you can continue to practice. Experiment! You will not lose credit.
Homework Restricted to Current CS 124 Students
A publicly-accessible version of this content is available at learncs.online.
Homework: Fix Locations
Created By: CS 124 Staff
/ Version: 2022.9.0
It's easy to get mixed up between latitude and longitude!
Happily, at least sometimes, this is an easy fix to correct.
Complete a method named fixLocation.
fixLocation takes a Location object as its only parameter.
Some of those location objects have their latitude and longitude swapped.
If that's the case, correct them!
Otherwise, leave them unaltered.
You may be wondering: how will I know which locations are incorrect?
The hint is that these are all locations from around the University of Illinois.
That should help you determine when the latitude and longitude have been swapped.
The Location object has Double latitude and longitude properties that you can access and modify
in the usual way in Kotlin.
This problem deadline has passed, but you can continue to practice. Experiment! You will not lose credit.
Homework Restricted to Current CS 124 Students
A publicly-accessible version of this content is available at learncs.online.
Only a few women have won the Turing Award, computing’s highest honor.
Barbara Liskov is one of them, cited for her “contributions to practical and theoretical foundations of programming language and system design, especially related to data abstraction, fault tolerance, and distributed computing.”
Barbara Liskov is also a particularly appropriate person to learn about now, as we study polymorphism.
She’s responsible for the informal rule that a subtype (or descendant) should behave like the supertype (the parent or ancestor) when using the supertype methods.
But why don’t we let her explain it herself!