B1 Computational thinking
B1.1 Approaches to computational thinking
B1.1.1 Construct a problem specification.
B1.1.2 Describe the fundamental concepts of computational thinking.
B1.1.3 Explain how applying computational thinking to fundamental concepts is used to approach and solve problems in computer science.
B1.1.4 Trace flowcharts for a range of programming algorithms.
B2 Programming
B2.1 Programming fundamentals
B2.1.1 Construct and trace programs using a range of global and local variables of various data types.
B2.1.2 Construct programs that can extract and manipulate substrings.
B2.1.3 Describe how programs use common exception handling techniques.
B2.1.4 Construct and use common debugging techniques.
B2.2 Data structures
B2.2.1 Compare static and dynamic data structures.
B2.2.2 Construct programs that apply arrays and Lists.
B2.2.3 Explain the concept of a stack as a “last in, first out” (LIFO) data structure.
B2.2.4 Explain the concept of a queue as a “first in, first out” (FIFO) data structure.
B2.3 Programming constructs
B2.3.1 Construct programs that implement the correct sequence of code instructions to meet program objectives.
B2.3.2 Construct programs utilizing appropriate selection structures.
B2.3.3 Construct programs that utilize looping structures to perform repeated actions.
B2.3.4 Construct functions and modularization.
B2.4 Programming algorithms
B2.4.1 Describe the efficiency of specific algorithms by calculating their Big O notation to analyse their scalability.
B2.4.2 Construct and trace algorithms to implement a linear search and a binary search for data retrieval.
B2.4.3 Construct and trace algorithms to implement bubble sort and selection sort, evaluating their time and space complexities.
B2.4.4 Explain the fundamental concept of recursion and its applications in programming. (HL only)
B2.4.5 Construct and trace recursive algorithms in a programming language. (HL only)
B2.5 File processing
B2.5.1 Construct code to perform file-processing operations.
B3 Object-oriented programming
B3.1 Fundamentals of OOP for a single class
B3.1.1 Evaluate the fundamentals of OOP.
B3.1.2 Construct a design of classes, their methods, and behaviour.
B3.1.3 Distinguish between static and non-static variables and methods.
B3.1.4 Construct code to define classes and instantiate objects.
B3.1.5 Explain and apply the concepts of encapsulation and information hiding in OOP.
B3.2 Fundamentals of OOP for multiple classes (HL only)
B3.2.1 Explain and apply the concept of inheritance in OOP to promote code reusability.
B3.2.2 Construct code to model polymorphism and its various forms, such as method overriding.
B3.2.3 Explain the concept of abstraction in OOP.
B3.2.4 Explain the role of composition and aggregation in class relationships.
B3.2.5 Explain commonly used design patterns in OOP.
B4 Abstract data types (HL only)
B4.1 Fundamentals of ADTs
B4.1.1 Explain the properties and purpose of ADTs in programming.
B4.1.2 Evaluate linked lists.
B4.1.3 Construct and apply linked lists: singly, doubly and circular.
B4.1.4 Explain the structures and properties of BSTs.
B4.1.5 Construct and apply sets as an ADT.
B4.1.6 Explain the core principles of ADTs.