OCR H446 A-Level Computer Science — Component 02, Section 2.1
Abstraction means removing unnecessary detail to focus on only the features that matter for solving a problem. It reduces complexity by hiding implementation specifics.
Representational Abstraction
Remove irrelevant detail from a representation. A road network map removes buildings, street furniture and surface type — it keeps only roads, junctions, and distances.
Abstraction by Generalisation
Group problems with common features into a single reusable solution. A sorting algorithm abstracted from a specific data type works on any comparable data. A class in OOP abstracts a real-world entity.
Exam precision — what abstraction is NOT:
Breaking a complex problem into smaller, independent sub-problems that are individually solvable. Each sub-problem can be solved, tested, and maintained separately.
Top-Down Design
Start with the overall problem and successively break it into smaller sub-tasks
Structure Charts
Visual representation of decomposed modules and their relationships
Independent Modules
Sub-problems can be assigned to different developers and solved in parallel
# Decomposed: Student Grade Tracker
Student Grade Tracker
├── Input Module
│ ├── Read student names
│ └── Read grades
├── Processing Module
│ ├── Calculate average
│ └── Determine grade boundary
└── Output Module
├── Display report
└── Export to file
Anticipating what will be needed before it is required. This includes defining interfaces early and pre-computing results that are likely to be needed.
Preconditions & Interfaces
Define what inputs a module expects and what it outputs before writing the implementation. Teams can then work independently against the agreed interface.
Caching & Prefetching
Identifying which sub-tasks can execute simultaneously to improve performance. Not all problems are parallelisable.
✓ Good candidates for concurrency
✗ Poor candidates — data dependencies
Race Condition
When two threads read and write shared data simultaneously, the final value depends on which thread finishes last — an unpredictable and dangerous outcome. Prevented by mutex locks or semaphores.
Breaking a solution into a step-by-step logical sequence of instructions that a computer can follow. Enables structured design and clear tracing.
Identifying conditions and decision points in a solution. Determining what decisions need to be made and what information is required to make them.
Link to Algorithm Evaluation
Computational thinking — especially decomposition and thinking concurrently — directly informs how we evaluate algorithmic efficiency using Big O notation. A well-decomposed algorithm is easier to analyse. Concurrent sub-tasks can reduce overall time complexity from O(n) to O(n/p) where p is the number of processors.
For each scenario, select the primary computational thinking element being applied. Instant feedback provided.
Drag each sub-task into the correct level of the decomposition tree for "Build a Student Grade Tracker". Then click Check to see how well your decomposition matches the model answer.
Available tasks — drag into the tree:
Drop sub-tasks here
Drop sub-tasks here
Drop sub-tasks here
OCR H446 A-Level style questions
Attempt each question before revealing the mark scheme. Write full answers — the mark scheme shows precise examiner language.
A programmer is designing a navigation app. Explain how abstraction has been used in representing the road network.
Space for your answer:
Mark Scheme — 4 marks (1 each):
Examiner note: must identify both what is kept AND what is removed for full marks.
Explain, with an example, what is meant by 'thinking ahead' in computational thinking.
Mark Scheme — 3 marks (1 each):
Alternative accepted: defining a module interface / preconditions before implementation — with a valid example and explanation of benefit.
Identify two computational tasks from the following list that could benefit from concurrent processing, and explain why each is suitable:
Mark Scheme — 4 marks (1 per point, 2 per task):
(a) is too small to benefit from parallelism overhead. (c) has a strict sequential dependency — each running total depends on the previous value.