| Design consideration | Questions to ask |
|---|---|
| Problem definition | What exactly needs solving? Which features are essential? |
| Model usage | How will it be used in practice? Is it practical and accessible? |
| Target audience | Who will use it and what is their expertise level? |
| Relevance vs simplicity | Which details are essential, and which can be removed? |
Real-world complexities we ignore:
• Physical layout of the library
• Colour of the carpet
• Temperature of the building
• Staff break schedules
Abstraction we keep:
record Book:
string ISBN
string title
string author
boolean isAvailable
end record
record User:
string userID
string name
list borrowedBooks
end record
record Loan:
string bookISBN
string userID
date borrowedDate
date dueDate
end record
| Key operation | Purpose |
|---|---|
| borrowBook(userID, ISBN) | Create a loan and mark a book unavailable |
| returnBook(userID, ISBN) | Close loan and mark book available |
| searchBooks(query) | Find books by title/author/ISBN |
| checkOverdueLoans() | Identify late returns |
• Be able to explain why abstraction is necessary (simplification, efficiency, layered architecture, accessibility)
• Identify similarities and differences between real-world and abstract representations
• Explain the four types: representational, generalisation, data, and procedural abstraction
• Devise appropriate abstract models for given scenarios
• Understand how abstraction relates to OOP objects, data structures, and layered systems