Software Development
This computer science section provides an overview of software development relevant to A-Level Computer Science. Covering software development methodologies used to develop software and the types of programming Language.
Software Development Methodologies
Waterfall Lifecycle: A linear approach, where each stage (analysis, design, implementation, testing, maintenance) is completed before moving to the next. Suitable for well-defined projects but inflexible.
Agile Methodologies: Focus on iterative development, with frequent updates and collaboration between developers and clients. Flexible and adaptable but requires close team coordination.
Extreme Programming (XP): Emphasises customer feedback, short development cycles, and frequent releases. Encourages simplicity and teamwork.
Spiral Model: Combines iterative development with risk analysis. Each iteration adds features, but the focus is on managing risks at every stage.
Rapid Application Development (RAD): Prioritises fast prototyping and user feedback, often at the expense of comprehensive documentation.
Merits and Drawbacks of Different Methodologies
Waterfall: Clear structure but lacks flexibility.
Agile: Highly flexible, ideal for evolving requirements, but can be difficult to manage large projects.
Extreme Programming: Excellent for projects requiring constant client involvement but may be impractical for large teams.
Spiral: Good for managing risk, but can be complex and costly.
RAD: Quick to develop, but final products may lack robustness or scalability.
Writing and Following Algorithms
Algorithms are step-by-step procedures for solving problems. Writing clear and efficient algorithms is essential for effective software development, and understanding them helps in translating solutions into programming languages.
Types of Programming Language
Need for and Characteristics of Programming Paradigms
Different paradigms offer varied approaches to problem-solving, including:
Procedural: Focuses on a sequence of instructions to perform tasks (e.g., C, Python).
Object-Oriented: Models real-world entities using classes and objects (e.g., Java, C++).
Functional: Treats computation as the evaluation of mathematical functions (e.g., Haskell).
Declarative: Specifies what the program should accomplish rather than how (e.g., SQL).
Procedural Languages
Procedural Languages follow a step-by-step approach, using variables, control structures, and functions to perform tasks (e.g., Python, C). They are commonly used for general-purpose programming.
Assembly Language and Little Man Computer (LMC)
Assembly Language: A low-level language that directly corresponds to machine code, using mnemonics (e.g., LDA, STA).
Little Man Computer (LMC): A simple model used to teach assembly language principles. It simulates basic CPU functions, allowing you to write simple programs.
Modes of Addressing Memory
Immediate Addressing: The operand is the actual value.
Direct Addressing: The operand is the memory address where data is stored.
Indirect Addressing: The operand points to a memory address that holds another address, where data is stored.
Indexed Addressing: Uses an index register to modify the address during data retrieval.
Object-Oriented Languages (OOP)
Classes and Objects: A class is a blueprint for creating objects. Objects are instances of classes.
Methods and Attributes: Methods are functions within a class, and attributes are variables associated with an object.
Inheritance: Allows a new class to inherit properties and behaviours from an existing class.
Encapsulation: Bundles data and methods that operate on the data within one unit (class).
Polymorphism: Allows methods to be redefined in subclasses, enabling different implementations while sharing the same interface.