• What did you think of Paper 12. Why extends is evil and what would make it better?

I thought the paper was ok. I agree with the paper that inheritance through "extends" can be problematic in cases where code needs to have high flexibility: the design pattern can lead to brittle classes that make modifications more difficult. Compared to some of the previous articles, I felt like the examples in this paper were easier to digest. My problems with the paper are the same problems that I had with Paper 10, in that I feel like the title is purposefully exaggerated to be rather clickbait-y. A title such as "why extends is poor coding design" or "why extends is undesirable" would have much better fit the tone of the content of the article.

  • Did you get help or give help on Exercise #12: Singleton, Exercise #13: Observer or the quizzes? If so, how?

I felt like the exercises were more straightforward than some of the previous exercises we did in this class, at least in terms of the number of lines of code we needed to write. For the observer exercise, I helped debug the code of one of the people who sits near me. I felt like the quizzes were somewhat difficult; the last question on the quiz on wednesday had several parts, and I was not able to get through all of the parts in the three minutes. I was not a big fan of how the names of the classes and methods were changed in the quiz on Friday from the lecture we did on Wednesday — the new names confused me, especially since I take notes on my own and therefore did not look at the Wednesday notes that included the changed names.

  • What did you think of the following topics, and what would make them better? Shapes, virtual function table, override, abstract methods, abstract classes.

The shapes example was fun. However, I was waiting during for Dr. Downing to explain why "extends" was bad and switch to an "implements" implementation, but he rolled with it for the entire lecture! Virtual function tables still somewhat confuse me, especially with their implementation in languages outside of C++. Override makes more sense for me, though I'm curious exactly what the @Override flag does; does it just set flags in the compiler telling it to ensure the method is overriding an inherited method? Abstract methods and abstract classes were pretty straightforward for me.