16 Object-Orientation

16.1 Basics of Object-Orientation
    16.1.1 Methods and Members Parameters as Members Visibility
    16.1.2 this Keyword
    16.1.3 Encapsulation/Separating Interface from Implementation
    16.1.4 Special Methods Operator Methods Unary Operators Property Assignment Methods The apply Method The update Method Overloading Methods Vector Example
    16.1.5 object Declarations Applications Introduction to Companion Objects
    16.1.6 Object Decomposition
16.2 Revisiting the API
16.3 Meaning of case classes
16.4 import Options


W.1. Write an application with a GUI that has a menu and a large TextArea. The menu should have options for Open, Save, and Exit. When the user selects File > Open, it should bring up a FileChooser for them to select a file. The file they select should be read in and the text in the TextArea should be set to that text. When the user selects File > Save, a FileChooser should come up letting them select the file to save to and the text in the TextArea should be written to that file.

W.2. Write a class that represents a polynomial. The data for this can be stored in a Seq[Double] where each value if the coefficient on a term. So the polynomial 2x^2+3x-4 could be stored as Array(-4,3,2). Not that the 0 index holds the coefficient for x^0 and in general the value at index i is the coefficent for x^i. Add methods into your polynomial that will add and subtract two polynomials. Also add methods to evaluate a polynomial at a particular value of x as well as a method for taking the derivative of that polynomial. You can write this class in both a mutable and immutable form. For practice, you should also include a companion object with a proper implementation of apply so that you can make polynomials without using new.

W.3. Write a class to represent a Matrix. Your matrix should have methods for doing addition, subtraction, and multiplication. For further practice you could add methods to find the determinant and the inverse.


W.1. If you did exercise W.2 you can build on top of this by putting a full GUI around it so that you can plot instances of your polynomial class. Write this as an application, not a script.