@startuml

title __Bank Application Class Diagram__\n

abstract class AccountDecorator {
    + AccountDecorator(account: BankAccount)
    + describeAccount(): String
}

abstract class BankAccount {
    - accHolder: Person
    # balance : double
    - accNum : int
    + BankAccount()
    + BankAccount(accHolder: Person,
    accNum: int, balance: double)
    + toString() : String
    {abstract} + describeAccount() : String
 }

 class CurrentAccount {
    - TYPE : String
    + CurrentAccount(accHolder: Person,
    accNum: int, balance: double)
    + describeAccount() : String
 }

 class GoldenYears {
    + GoldenYears(account: BankAccount)
    + addGoldenYears(): String
    + describeAccount(): String
 }

 class Graduate {
    + Graduate(account: BankAccount)
    + addGraduate(): String
    + describeAccount(): String
 }

 class Online {
    + Online(account: BankAccount)
    + addOnline(): String
    + describeAccount(): String
 }

 class Person {
    - address : String
    - name : String
    + Person(name: String, address: String)
    + Person()
    + toString() : String
 }

 class Personal {
    + Personal(account: BankAccount)
    + addPersonal(): String
    + describeAccount(): String
 }

 class SavingsAccount {
    - TYPE : String
    + SavingsAccount(accHolder: Person,
    accNum: int, balance: double)
    + describeAccount(): String
 }

 class Student {
    + Student(account: BankAccount)
    + addStudent(): String
    + describeAccount(): String
}

  BankAccount o-right- Person : has a
  BankAccount <-- AccountDecorator : component\t\t\t
  AccountDecorator -up-|> BankAccount
  CurrentAccount -up-|> BankAccount
  SavingsAccount -up-|> BankAccount
  GoldenYears -up-|> AccountDecorator
  Graduate -up-|> AccountDecorator
  Online -up-|> AccountDecorator
  Personal -up-|> AccountDecorator
  Student -up-|> AccountDecorator

@enduml
