# Completeness (15 marks)
* Level 3: A system that meets almost all of the requirements of a solution/an investigation (ignoring any requirements that go beyond the demands of A-level).
* Level 2: A system that achieves many of the requirements but not all. The marks at the top end of the band are for systems that include some of the most important requirements.
# Techniques (27 marks)
# Group A Technical Skills
Dynamic generation of objects based on complex user-defined use of OOP model: interfaces, inheritance, composition, polymorphism, Java patterns
* [[Abstract Classes and Interfaces|Abstract Classes and Interfaces]]
* Java Interfaces with Databases
* [[Constructing Objects in Java|Constructing Objects in Java]]
* Java Builder Class added to [[Improved Mock Skeleton|Improved Mock Skeleton]]
* [[Haskell Recursion Problems|Haskell Recursion Problems]]
* [[Parsers|Parsers]]
* [[Server and Client Sockets|Server and Client Sockets]]
* [[Threads|Threads]]
* [[Data Structures Queues, Stacks, Trees|Data Structures: Queues, Stacks, Trees]]
## OOP
Dynamic generation of objects based on complex user-defined use of OOP model: interfaces, inheritance, composition, polymorphism, Java patterns
* [[Object Oriented Programming]]
* [[Inheritance and Polymorphism]]
* [[Abstract Classes and Interfaces]]
* [[Constructing Objects in Java]]
* [[Add a Choice Interface to the Database]]
## Data Structures
Programming = Code + Data Structures. It's the data structures that let people down. You need something more than a list array for Group A
* Graph/Tree Traversal
* List operations: ArrayLists
* [[Collections]]
* Linked list maintenance
* Stack/Queue Operations
* Hashing: HashMaps
* Advanced matrix operations such as scaling, translation, reflection.
## Algorithms
* Recursive algorithms
* [[Haskell Recursion Problems]]
* Complex user-defined algorithms (eg optimisation, minimisation, scheduling, pattern matching) or equivalent difficulty
* [[Parsers]]
* Mergesort or similarly efficient sort
## Websites
* Server-side scripting using request and response objects and server-side extensions for a complex client-server model
* [[Server and Client Sockets]]
* [[Threads]]
* Calling parameterised Web service APIs and parsing JSON/XML to service a complex client-server model
## Databases
* Cross-table parameterised SQL: A crosstab query calculates a sum, average, or other aggregate function, and then groups the results by two sets of values— one set on the side of the datasheet and the other set across the top. You will probably use JOIN and PIVOT to achieve this
* Aggregate SQL functions: Sum, average etc
* User/CASE-generated DDL script: DDL statements create, modify, and remove database objects such as tables, indexes, and users. Common DDL statements are CREATE, ALTER, and DROP.
# Group B Technical Skills
* Single table or non-parameterised SQL
* Bubble sort
* Binary search
* Writing and reading from files
* Simple user defined algorithms (eg a range of mathematical/statistical calculations)
* Generation of objects based on simple OOP model
* Server-side scripting using request and response objects and server-side extensions for a simple client-server model
* Calling Web service APIs and parsing JSON/XML to service a simple client-server model
# Excellent Coding Styles
* Modules (subroutines) with appropriate interfaces: classes
* Loosely coupled modules (subroutines) – module code interacts with other parts of the program through its interface only: creating objects, passing values using arguments in methods.
* Cohesive modules (subroutines) – module code does just one thing.
* Modules(collections of subroutines) – subroutines with common purpose grouped.
* Defensive programming
* Good exception handling: both Java's built in exception and ones you have written yourself
* [[Exceptions]]
# Good Coding Styles
* Well-designed user interface
* Modularisation of code
* Good use of local variables
* Minimal use of global variables
* Managed casting of types
* Use of constants
* Appropriate indentation
* Self-documenting code
* Consistent style throughout
* File paths parameterised