# OOP Departmentals Exam Description

The **OOP Departmentals Exam** is a standardized assessment for students completing Object-Oriented Programming (OOP) courses. This comprehensive exam evaluates understanding of core programming concepts and practical application skills in Java.

## Exam Overview

- **Duration**: 3 hours
- **Format**: Mix of programming tasks, short answers, and conceptual questions
- **Total Points**: 50 points
- **Delivery Method**: Moodle LMS (online)

## Content Coverage

### Core OOP Concepts
- Class design and object creation
- Attributes, methods, and constructors
- Instance variables and method implementation
- Object interaction and method calls
- *Example topics*: Creating classes like Person, Student, BankAccount

### Encapsulation & Data Hiding
- Access modifiers (public, private, protected)
- Getter and setter methods
- Data validation in methods
- Information hiding principles
- *Example topics*: Private attributes with controlled access, proper accessor design

### Inheritance & Polymorphism
- Class inheritance and extending classes
- Method overriding and method overloading
- Interface implementation
- Polymorphic behavior

### Collections & Generics
- Java Collections Framework (Lists, Sets, Maps)
- Type-safe collections with Generics
- Iterating through collections
- Collection operations and methods

### Advanced Topics
- Design patterns (Singleton, Factory, Observer, Strategy)
- SOLID principles and clean code
- Exception handling and custom exceptions
- Error handling best practices

### Additional Topics
- File I/O and serialization
- Working with primitive and reference data types
- Java naming conventions and coding standards

## Question Types

1. **Essay/Programming Questions** — Write complete Java classes or methods demonstrating OOP principles
2. **Multiple Choice** — Conceptual understanding and terminology
3. **Short Answer** — Targeted code snippets and brief explanations

## Student Learning Outcomes

By the end of this exam, students demonstrate ability to:

✓ Design and implement well-structured Java classes
✓ Apply encapsulation and access control properly
✓ Use inheritance and polymorphism effectively
✓ Work with Java collections and generic types
✓ Apply design patterns and SOLID principles
✓ Handle errors and exceptions appropriately