Solutions for those exercises.

Questions

  1. What is the keyword used to call the constructor from the base class?

    • this.
    • the name of the base class.
    • base
    • over
    • inherits
  2. Suppose your are given an ElectricDevice class and a WallDecor class. You would like to write a Clock class that represents at the same time an electric device and a wall decor. This is possible only if the ElectricDevice and WallDecor classes are…

    • Sealed
    • Interfaces
    • Protected
    • Constructors
  3. A method with header public virtual void Test(int a, out int b) will…

    • Return a value
    • Set the value of b
    • Require two arguments
    • Be overrideable
  4. A method with header public abstract string Test() will…

    • Have an empty body
    • Need to be inside an abstract class
    • Not be overriden

Problems

  1. Consider the diagram representing the “Room”, “ClassRoom”, “Office” classes and their relations.
A UML diagram for the Room ⇽ ClassRoom class (text version, image version, svg version)

Suppose you are given an implementation of the Room class, such that

    Room test = new Room("UH", 243);
    Console.WriteLine(test);

displays

UH 243
  1. Write an implementation of the ClassRoom class. Your ToString method should display the room’s building and number, in addition to whether it has AV set-up.

  2. Write a SameBuilding static method to be placed inside the Room class such that

    Office test1 = new Office("UH", 127, "706 737 1566");
    ClassRoom test2 = new ClassRoom("UH", 243, true);
    Office test3 = new Office("AH", 122, "706 729 2416");
    Console.WriteLine(Room.SameBuilding(test1, test2));
    Console.WriteLine(Room.SameBuilding(test2, test3));

    Would display “true” and “false”.

  3. Consider the diagram representing the “Room”, “BedRoom”, “BathRoom” classes and their relations.

    A UML diagram for the Room ⇽ BedRoom class (text version, image version, svg version)
    1. Write an implementation of the SurfaceArea property for the Room class, assuming you are given an implementation of the Width and Length properties.

    2. Check the statements that would compile, assuming that rTest is a Room object, beTest is a BedRoom object, and baTest is a BathRoom object.

      • rTest.Capacity = 12;
      • baTest.Width = 12;
      • beTest.capacity = 3;
      • rTest.SurfaceArea = -2;
      • baTest.Capacity = 3;
      • beTest.Shower = true;
      • Console.WriteLine(baTest.ToString());
    3. Write a complete implementation of the BedRoom class.

      • Your Capacity property should use the capacity attribute, and throw an exception if the argument given is strictly less than 1.
      • Your ToString method should complement the Room’s ToString by appending to its string the capacity (in person) of the BedRoom object.
    4. Write the ToString method of the BathRoom class, knowing that a disclaimer should be part of the string returned if the BathRoom has a shower or a bathtub but no hot water.

  4. Consider the diagram representing the “Article”, “Book” classes and their relations.

    A UML diagram for the Article ⇽ Book class (text version, image version, svg version)
    1. Write a (partial) implementation of the Article abstract class:

      1. Write an implementation for the price attribute: you can either use a getter and a setter (as pictured in the UML diagram), or a property. However, in both cases, setting the price to a negative value should result in an ArgumentOutOfRangeException exception being thrown.
      2. Write an abstract ShippingCosts() method.
    2. Now, assume given a complete implementation of the Article abstract class. Write a complete implementation of the Book class (header included), containing:

      1. An implementation of the Title property using auto-properties.
      2. A Book constructor that passes the idP and priceP arguments to the Article constructor. The titleP argument should be assigned to the Title property.
      3. A ShippingCosts() method that returns either 5.0, or 10% of the Book’s price, whichever is smallest.
    3. Write statements that, if placed in a Main method, would

      1. Create a Book with Id “AAA001”, price $12.5, titled “What it’s like to be a bird”.
      2. Display (nicely) its shipping costs.
      3. Display its Id (as retrieved from the object).