@startuml chess
class   ChessPiece {
    + position: x, y
    + isWhite: boolean
    + isAlive: boolean
    + moveHistory: array

    --
    + getPosition(x, y)
    + moveChess(x, y)
    + {abstract} checkAvailableMove()
}
class Pawn{
    --
    + checkAvailableMove()
    + promote()
}
class Knight{
    --
    + checkAvailableMove()
    
}
class Bishop{
    --
    + checkAvailableMove()
}
class Rook{
    --
    + checkAvailableMove()
    + castling()
}
class Queen{
    --
    + checkAvailableMove()
}
class King{
    + isCheck: boolean
    --
    + checkAvailableMove()
    + castling()
}
ChessPiece <|-- Pawn
ChessPiece <|-- Knight
ChessPiece <|-- Bishop
ChessPiece <|-- Rook
ChessPiece <|-- Queen
ChessPiece <|-- King
@enduml
