mirror of
https://github.com/Brandon-Rozek/website.git
synced 2024-11-09 18:50:34 -05:00
Added recitation content
This commit is contained in:
parent
715c4fce26
commit
7b3684f1bc
2 changed files with 155 additions and 0 deletions
|
@ -33,3 +33,6 @@ The following are recitations I have prepared for a weekly one hour session:
|
||||||
|
|
||||||
[Recitation 10](recitation10.pdf)
|
[Recitation 10](recitation10.pdf)
|
||||||
- Topics: Design Patterns, Creational Patterns, Structural Patterns, Behavioral Patterns, Builder, Factory, Singleton, Adapter, Decorator, Flyweight, Mediator, Observer, Visitor
|
- Topics: Design Patterns, Creational Patterns, Structural Patterns, Behavioral Patterns, Builder, Factory, Singleton, Adapter, Decorator, Flyweight, Mediator, Observer, Visitor
|
||||||
|
|
||||||
|
[Recitation 11: Exam Review](recitation11)
|
||||||
|
|
||||||
|
|
152
content/ta/spring2022/csci2600/recitation11.md
Normal file
152
content/ta/spring2022/csci2600/recitation11.md
Normal file
|
@ -0,0 +1,152 @@
|
||||||
|
---
|
||||||
|
title: "Recitation 11: Exam 2 Review"
|
||||||
|
date: 2022-04-04T15:40:12-04:00
|
||||||
|
draft: false
|
||||||
|
tags: []
|
||||||
|
math: false
|
||||||
|
---
|
||||||
|
|
||||||
|
## Conceptual Questions
|
||||||
|
1. When must a representation invariant hold?
|
||||||
|
|
||||||
|
2. What's the difference between a representation invariant and an abstract function?
|
||||||
|
|
||||||
|
3. Which type of testing only considers the specifications and not the implementation?
|
||||||
|
|
||||||
|
4. What is the difference between overriding and overloading a method?
|
||||||
|
|
||||||
|
5. Provide an example of representation exposure.
|
||||||
|
|
||||||
|
6. Are Java subtypes true subtypes? Why or why not?
|
||||||
|
|
||||||
|
|
||||||
|
## Overloading vs Overriding: Spaghetti Code Edition
|
||||||
|
|
||||||
|
Consider the following Java code
|
||||||
|
|
||||||
|
```java
|
||||||
|
class A {
|
||||||
|
void m(A a) { System.out.println("AA"); }
|
||||||
|
void m(B a) { System.out.println("AB"); }
|
||||||
|
void m(C a) { System.out.println("AC"); }
|
||||||
|
}
|
||||||
|
class B extends A {
|
||||||
|
void m(A a) { System.out.println("BA"); }
|
||||||
|
void m(B a) { System.out.println("BB"); }
|
||||||
|
void m(C a) { System.out.println("BC"); }
|
||||||
|
}
|
||||||
|
class C extends B {
|
||||||
|
void m(A a) { System.out.println("CA"); }
|
||||||
|
void m(B a) { System.out.println("CB"); }
|
||||||
|
void m(C a) { System.out.println("CC"); }
|
||||||
|
}
|
||||||
|
A a1 = new A();
|
||||||
|
A a2 = new B();
|
||||||
|
A a3 = new C();
|
||||||
|
B b1 = new B();
|
||||||
|
B b2 = new C();
|
||||||
|
C c1 = new C();
|
||||||
|
```
|
||||||
|
1. Fill in the following table with the output of `row.m(col)`
|
||||||
|
|
||||||
|
| | a1 | a2 | a3 | b1 | b2 | c1 |
|
||||||
|
|--- |--- |--- |--- |--- |--- |--- |
|
||||||
|
| **a1** | | | | | | |
|
||||||
|
| **a2** | | | | | | |
|
||||||
|
| **a3** | | | | | | |
|
||||||
|
| **b1** | | | | | | |
|
||||||
|
| **b2** | | | | | | |
|
||||||
|
| **c1** | | | | | | |
|
||||||
|
|
||||||
|
2. How would the grid change if I print it like below?
|
||||||
|
|
||||||
|
```java
|
||||||
|
A[] all = {a1, a2, a3, b1, b2, c1};
|
||||||
|
for (A some_a : all) {
|
||||||
|
for (A some_a2 : all) {
|
||||||
|
some_a.m(some_a2); System.out.print(" ");
|
||||||
|
}
|
||||||
|
System.out.println("");
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
| | a1 | a2 | a3 | b1 | b2 | c1 |
|
||||||
|
|--- |--- |--- |--- |--- |--- |--- |
|
||||||
|
| **a1** | | | | | | |
|
||||||
|
| **a2** | | | | | | |
|
||||||
|
| **a3** | | | | | | |
|
||||||
|
| **b1** | | | | | | |
|
||||||
|
| **b2** | | | | | | |
|
||||||
|
| **c1** | | | | | | |
|
||||||
|
|
||||||
|
## Generics and Advanced Typing
|
||||||
|
|
||||||
|
Consider the following Java code:
|
||||||
|
|
||||||
|
```java
|
||||||
|
class Mammal {}
|
||||||
|
class Cow extends Mammal {}
|
||||||
|
class Horse extends Mammal {}
|
||||||
|
class ToyHorse extends Horse {}
|
||||||
|
|
||||||
|
|
||||||
|
Object o = new Object();
|
||||||
|
Horse h = new Horse();
|
||||||
|
ToyHorse t = new ToyHorse();
|
||||||
|
List<? extends Mammal> lem = new ArrayList<>();
|
||||||
|
List<? extends Horse> leh = new ArrayList<>();
|
||||||
|
List<? super Horse> lsh = new ArrayList<>();
|
||||||
|
```
|
||||||
|
|
||||||
|
For each of the following, note whether or not it will compile.
|
||||||
|
1. `lem.add(h);`
|
||||||
|
2. `lsh.add(t);`
|
||||||
|
3. `lsh.add(o);`
|
||||||
|
4. `lem.add(null);`
|
||||||
|
|
||||||
|
Assume that the ArrayList have elements in them.
|
||||||
|
|
||||||
|
5. `h = lsh.get(0);`
|
||||||
|
6. `m = leh.get(0);`
|
||||||
|
7. `o = lsh.get(0);`
|
||||||
|
|
||||||
|
## Equivalence Relations
|
||||||
|
|
||||||
|
1. What are the three properties that you need to show in order to prove that the method is an equivalence relation.
|
||||||
|
|
||||||
|
2. Is the following an equivalence relation? If so, prove. Otherwise provide counterexample.
|
||||||
|
|
||||||
|
```java
|
||||||
|
class String {
|
||||||
|
public boolean equals(String other) {
|
||||||
|
for (int i = 0; i < this.length; i++) {
|
||||||
|
if (this.contents[i] != other.contents[i]) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Is the following an equivalence relation? If so, prove. Otherwise provide counterexample.
|
||||||
|
|
||||||
|
```java
|
||||||
|
class FuzzyNumber {
|
||||||
|
public boolean equals(FuzzyNumber other) {
|
||||||
|
// Check: this - 0.5 <= other <= this + 0.5
|
||||||
|
return this.number - 0.5 <= other.number && other.number <= this.number + 0.5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Is the following an equivalence relation? If so, prove. Otherwise provide a counterexample.
|
||||||
|
|
||||||
|
```java
|
||||||
|
class FuzzyNumberEnhanced {
|
||||||
|
public boolean equals(FuzzyNumberEnhanced other) {
|
||||||
|
return this.number - other.number == 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
Loading…
Reference in a new issue