Object-Oriented Programming
Instructor: Mahdi Dolati | Certificate: Official (bilingual) |
Term: Summer 2025 | Prerequisite: Python Programming |
Schedule: Sunday and Tuesday 16:00-17:30 | Online Class: Online Class |
General Objective
This course teaches object-oriented programming concepts using the Java programming language. It covers Java's intrinsic features, programming capabilities, differences from similar languages, concurrent programming, and software quality. Students are expected to be familiar with a programming language like Python and basic problem-solving techniques. The course emphasizes object-oriented concepts.
Topics
- Introduction to Java (1 session)
- History
- Java language features
- First Java program
- Basic Java Programming (3 sessions)
- Variables, methods, conditionals, loops
- Primitive data types
- Strings
- Arrays
- Introduction to OOP Design (2 sessions)
- Evolution of programming paradigms
- Basic OOP concepts
- Object-oriented thinking and design
- Encapsulation, interfaces, classes, packages, access modifiers
- OOP in Java (6 sessions)
- Class definitions
- Objects in memory and memory management
- Object initialization and destruction
- Garbage Collector
- Parameter passing in Java vs other languages
- Constructors
- 'this' keyword
- Static members
- Packages
- Introduction to UML Class Diagrams
- Inheritance (2 sessions)
- Inheritance concepts
- Protected, abstract, super keywords
- Multiple inheritance in other languages
- Polymorphism (1 session)
- Polymorphism through inheritance
- 'virtual' concept in Java
- Final members
- Interfaces (1 session)
- Interface applications
- Multiple inheritance through interfaces
- Software Testing (1 session)
- Software quality assurance
- Unit testing with JUnit
- Testing exceptions with JUnit
- Mocking concepts and libraries
- Design Patterns (1 session)
- Software design patterns overview
- GoF patterns classification
- Singleton, State, Strategy, Observer, Facade patterns
- MVC architectural pattern
- Code Refactoring (2 sessions)
- Clean code principles
- Code smells
- Refactoring patterns:
- Method extraction
- Moving features between objects
- Data organization
- Simplifying conditionals
- Simplifying method calls
- Exception Handling (2 sessions)
- Traditional error handling
- Java's exception framework
- Benefits of the model
- Finally, Runtime Exception
- Generics (1 session)
- Generic methods and classes
- Applications
- Creating and using generic classes
- Generics and inheritance
- Comparison with C++ templates
- Collections Framework (2 sessions)
- Java data structures
- Collections, ArrayList, LinkedList, Set, Map
- Iterators
- Files, Streams and Networking (2 sessions)
- File I/O
- Serialization
- Network programming (sockets)
- Concurrent Programming (1 session)
- Concurrency needs
- Java threading
- Thread lifecycle
- Synchronization and critical sections
- Reflection (1 session)
- RTTI needs
- Java RTTI implementation
- Applications
- Advanced Topics (1 session)
- Inner and anonymous classes
- Annotations
- Enumerations
Assessment
- Weekly practical assignments and project: 50%
- Final exam: 50%
References
- P. Deitel, H. Deitel. Java: How to Program. 11th Edition, Pearson Education, 2017.
- B. Eckel. Thinking in Java. 4th Edition, Prentice Hall, 2006.
- M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts. Refactoring: Improving the Design of Existing Code. Addison-Wesley, 1999.