UML Diagram
Reading a UML Class Diagram

Where:
- scope is indicated as + public, - private, (# protected, ~ package - these are not focused on in CS149).
- The arg list is a list of parameter types (e.g., int, double, String) it can also include type after a :
- Class (i.e. static) methods and fields are indicated by underlining
- Constant (i.e. final) fields are indicated via naming convention: constants should be in ALL_CAPS
Lines between classes indicate relationships as follows:

and can have numbers indicating instances of or 'multiplicity' as follows:
| 0 | No instances (rare) |
| 0..1 | No instances, or one instance |
| 1 | Exactly one instance |
| 1..1 | Exactly one instance |
| 0..* | Zero or more instances |
| * | Zero or more instances |
| 1..* | One or more instances |
For example:

Where the Credit card Java class looks like this:
/**
* Credit Card Class.
* This class will represent a basic credit card.
* @author chaoaj
* @version 12-1-16
*/
public class CreditCard {
// Constants
public static final double APR = 0.2999;
public static final double CREDIT_LIMIT = 2000.00;
// Attributes
private String cardNumber;
private int ownerNumber;
private double balance;
private int securityPin;
//Constructors
/**
* Default Constructor.
*/
public CreditCard() {
this.cardNumber = "9999-9999-9999-9999";
this.ownerNumber = 999;
this.balance = 0.0;
this.securityPin = 123;
}
/**
* CreditCard Constructor.
* @param cardNumber card number.
* @param ownerNumber owner number.
* @return
*/
public CreditCard(String cardNumber, int ownerNumber) {
this.cardNumber = cardNumber;
this.ownerNumber = ownerNumber;
this.balance = 0.0;
this.securityPin = 123;
}
/**
* getBalance - gets the card balance for a particular owner.
* @param ownerNumber - number of the owner for the card.
* @return double value of balance on card.
*/
public double getBalance(int ownerNumber) {
return this.balance;
}
/**
* adjustBalance - sets the card balance to the input double.
* @param adjustment - amount to adjust balance.
*/
public void adjustBalance(double adjustment) {
if ((this.balance + adjustment) < CREDIT_LIMIT) {
this.balance += adjustment;
} else {
System.out.println("Over the limit");
}
}
/**
* toString method.
* @param card - creditcard.
* @return String - string of card info.
*/
public String toString(CreditCard card) {
String s = "Card Number: " + card.cardNumber + ", "
+ "for Owner: " + card.ownerNumber + ", "
+ "has Balance: " + card.balance + ".";
return s;
}
/**
* equals - check if all values are equal for cards.
* @param card - card to check against.
* @return boolean - true if equal, false if not.
*/
public boolean equals(CreditCard card) {
boolean returnValue = false;
if (this.cardNumber.equals(card.cardNumber)
&& this.ownerNumber == card.ownerNumber
&& this.balance == card.balance
&& this.securityPin == card.securityPin) {
returnValue = true;
}
return returnValue;
}
}