⚠️ This repository is currently under construction. Content is being developed and may be incomplete.
A comprehensive course on programming abstractions, data structures, and object-oriented programming using Java. This repository contains materials for learning advanced programming concepts through practical implementation and problem-solving.
Computing continues to play an ever-increasing role in today's society. Understanding computational thinking and programming is essential for professionals across industries, from technology-driven sectors to scientific research and informed citizenship in our digital world.
This course builds upon foundational programming knowledge, focusing on data structures and object-oriented programming principles. It assumes prior experience with programming fundamentals including control structures, variables, data types, and arrays.
Upon completion of this course, participants will be able to:
- Decompose complex problems into manageable subproblems
- Design and express algorithms using structured methodologies
- Evaluate design trade-offs and solution efficiency
- Implement and utilize fundamental data structures:
- Lists and ArrayLists
- Stacks and Queues
- Maps and Dictionaries
- Sets and Collections
- Select appropriate data structures for specific problem domains
- Analyze time and space complexity of data structure operations
- Design and implement Java classes with proper encapsulation
- Create compound data types and custom objects
- Establish relationships between classes using interfaces and inheritance
- Apply abstraction principles to separate interface from implementation
- Write readable, maintainable Java code following established conventions
- Implement comprehensive testing strategies
- Debug complex programs using systematic approaches
- Document code effectively for long-term maintainability
The curriculum is organized around 17 specific learning objectives across seven major themes:
- Problem Decomposition: Break complex problems into solvable components
- Algorithm Design: Create structured solutions using pseudocode and flowcharts
- Program Tracing: Follow execution flow through complex data structures
- Behavior Prediction: Anticipate program output and state changes
- Functional Correctness: Write programs that meet specified requirements
- I/O Operations: Handle console input/output and file operations
- Data Structure Selection: Choose appropriate structures for specific problems
- Class Design: Create well-structured Java classes and interfaces
- Program Documentation: Clearly describe program behavior and functionality
- Method Specification: Document class methods with input/output specifications
- Code Documentation: Create maintainable documentation for programs and classes
- Correctness Verification: Evaluate programs against specifications
- Test Case Design: Create comprehensive test suites for validation
- Error Identification: Systematically locate and diagnose program issues
- Problem Resolution: Implement effective fixes for identified errors
- Basic programming experience in any language
- Understanding of fundamental programming concepts
- Familiarity with control structures and basic data types
- Install Java Development Kit (JDK): Follow the software setup guide
- Install Visual Studio Code: Download from code.visualstudio.com
- Install Java Extensions: Add the Extension Pack for Java to VS Code
- Clone this repository:
git clone https://github.com/darinz/CS105-Java.git
- IDE: Visual Studio Code with Java extensions
- Java Version: JDK 17 or later (LTS recommended)
- Build Tool: Maven (for advanced projects)
- Testing Framework: JUnit 5
-
Software Setup
Environment configuration and development tools setup -
Introduction and Review
Course overview, Java fundamentals, functional decomposition, code quality -
Checkpoint 1
Practice problems and review: functional decomposition, file I/O, ArrayLists -
File Input/Output
Console and file I/O operations, data persistence and retrieval -
Programming Assignment 1
Comprehensive project applying file I/O concepts -
ArrayLists
Dynamic array implementation, ArrayList operations and algorithms -
Quiz 1
Assessment covering foundational concepts -
Checkpoint 2
Practice problems and review: reference semantics, stacks, queues -
Reference Semantics, Stacks & Queues
Reference semantics, memory management, stack and queue data structures -
Programming Assignment 2
Project incorporating stacks, queues, and reference semantics -
Sets and Maps
Set data structures, for-each loops, map implementations, iterators -
Checkpoint 3
Practice problems and review: sets, maps, nested collections -
Collections and Objects
Nested collections and complex data structures -
Programming Assignment 3
Project focusing on collections and object design -
Quiz 2
Assessment covering intermediate concepts -
Object-Oriented Programming
OOP introduction, class design, encapsulation, instance methods, inheritance -
Checkpoint 4
Practice problems and review: nested collections, objects, interfaces -
Interfaces and Beyond
Interface design, Java Collections Framework, advanced abstractions -
Programming Assignment 4
Final comprehensive project -
Quiz 3
Assessment covering advanced concepts -
Testing and Libraries
JUnit testing, third-party libraries, testing strategies -
Final Exam
Comprehensive assessment of all course concepts
Each module includes specific learning objectives with:
- Clear success criteria
- Practical implementation exercises
- Assessment rubrics for self-evaluation
- Hands-on coding exercises
- Real-world problem-solving scenarios
- Portfolio development for skill demonstration
- Consistent coding style and conventions
- Comprehensive documentation
- Effective testing strategies
- Performance optimization considerations
- Java Collections Framework
- Object-Oriented Programming Concepts
- JUnit Testing Guide
- Codecademy Java Cheatsheet - Quick reference for Java syntax and fundamentals
- Java Tutorial - A guide to learning Java using other languages as examples
- Learn Java in Y Minutes - Quick overview of Java syntax and features
This repository welcomes contributions from educators, developers, and learners:
- Fork the repository
- Create a feature branch:
git checkout -b feature/improvement-name
- Make your changes following established coding standards
- Test thoroughly to ensure functionality
- Submit a pull request with detailed description of changes
- Follow Java coding conventions
- Include comprehensive documentation
- Add appropriate test cases
- Update relevant documentation
- Course materials developed for educational purposes
- Built upon established Java programming best practices
- Inspired by modern software development methodologies
Ready to begin your journey into advanced Java programming? Start with the software setup guide and work through the modules systematically.