Lesson 4

Classes and objects relations.

Objectives

  • Understanding the concepts of agregation and inheritance.
  • Implementing UML class diagrams.

Documentation

Exercises

Exercise 1

Import conveyor-belt application from here in your editor. Add junit library in the project path and resolve the tasks described in the readme file.

Exercise 2 (Optional)

Considering exercise 6 from lab3, create unit tests for MyPoint class.

Exercise 3

Follow the instructions bellow and implement the program. Create a test class for testing the program.

A class called circle is designed as shown in the following class diagram. It contains:

  • Two private instance variables: radius (of type double) and color (of type String), with default value of 1.0 and “red”, respectively.
  • Two overloaded constructors;
  • Two public methods: getRadius() and getArea().

Exercise 4

Follow the instructions bellow and implement the program. Create a test class for testing the program.

A class called Author is designed as shown in the class diagram. It contains:

  • Three private instance variables: name (String), email (String), and gender (char of either 'm' or 'f');
  • One constructor to initialize the name, email and gender with the given values;
  • public Author (String name, String email, char gender) {……}
  • (There is no default constructor for Author, as there are no defaults for name, email and gender.)
  • public getters/setters: getName(), getEmail(), setEmail(), and getGender();
  • (There are no setters for name and gender, as these attributes cannot be changed.)
  • A toString() method that returns “author-name (gender) at email”

Exercise 5

Follow the instructions bellow and implement the program. Create a test class for testing the program.

A class called Book is designed as shown in the class diagram. It contains:

  • Four private instance variables: name (String), author (of the class Author you have just created, assume that each book has one and only one author), price (double), and qtyInStock (int);
  • Two constructors:
  • public Book (String name, Author author, double price) {…}
  • public Book (String name, Author author, double price,
  • int qtyInStock) {…}
  • public methods getName(), getAuthor(), getPrice(), setPrice(), getQtyInStock(), setQtyInStock().
  • toString() that returns “'book-name' by author-name (gender) at email”.
  • (Take note that the Author's toString() method returns “author-name (gender) at email”.)

Exercise 6

Follow the instructions bellow and implement the program. Create a test class for testing the program.

Modify the Book class from previous exercise to support one or more authors by changing the instance variable authors to an Author array. Reuse the Author class written earlier.

Notes:

  • The constructors take an array of Author (i.e., Author[]), instead of an Author instance.
  • The toString() method shall return “book-name by n authors”, where n is the number of authors.
  • A new method printAuthors() to print the names of all the authors.
  • You shall re-use the Author class written earlier.

Exercise 7

Follow the instructions bellow and implement the program. Create a test class for testing the program.

In this exercise, a subclass called Cylinder is derived from the superclass Circle as shown in the class diagram.

Notes:

  • Reuse Circle class from the previous exercise;
  • Use 'super' keyword to call constructors from the base class;
  • Observe that getArea() method from derived class returns a wrong value because it uses the formula for circle;
  • Overwrite getArea() method in order to correctly calculate the area for the derived class;

Exercise 8

Follow the instructions bellow and implement the program. Create a test class for testing the program.

Write a superclass called Shape (as shown in the class diagram), which contains:

  • Two instance variables color (String) and filled (boolean).
  • Two constructors: a no-arg (no-argument) constructor that initializes the color to “green” and filled to true, and a constructor that initializes the color and filled to the given values.
  • Getter and setter for all the instance variables. By convention, the getter for a boolean variable xxx is called isXXX() (instead of getXxx() for all the other types).
  • A toString() method that returns “A Shape with color of xxx and filled/Not filled”.

The Circle class contains:

  • An instance variable radius (double).
  • Three constructors as shown. The no-arg constructor initializes the radius to 1.0.
  • Getter and setter for the instance variable radius.
  • Methods getArea() and getPerimeter().
  • Override the toString() method inherited, to return “A Circle with radius=xxx, which is a subclass of yyy”, where yyy is the output of the toString() method from the superclass.

The Rectangle class contains:

  • Two instance variables width (double) and length (double).
  • Three constructors as shown. The no-arg constructor initializes the width and length to 1.0.
  • Getter and setter for all the instance variables.
  • Methods getArea() and getPerimeter().
  • Override the toString() method inherited, to return “A Rectangle with width=xxx and length=zzz, which is a subclass of yyy”, where yyy is the output of the toString() method from the superclass.

Write a class called Square, as a subclass of Rectangle. Square has no instance variable, but inherits the instance variables width and length from its superclass Rectangle.

  • Provide the appropriate constructors
  • Override the toString() method to return “A Square with side=xxx, which is a subclass of yyy”, where yyy is the output of the toString() method from the superclass.
  • Override the setLength() and setWidth() to change both the width and length, so as to maintain the square geometry.

Exercise 9 (Optional)