CS 40017: Object Oriented System Design (OOSD)
The course is designed primarily to bring synergy and interplay among the following core components of the Computer Science Curriculum::
- Object Oriented Technology (OOT) for better programming methodologies and code reuse,
- Programming Language Design and Implementation (PLDI) for better understanding of language semantics,
- Virtual Execution Environment (VEE) for an insight of bytecode loading, linking and verification , and
- Software Engineering (SE) for safe, trusted and reusable systems.
Course Contents:
- Introduction & Course Overview
- Contemporary & Emerging Computing Environments
- Trusted Computing
- Software Reuse
Phase I: Object Oriented Computing : Understanding and Concepts
- Evolution of Programming System Techniques
- Programming Language Paradigms
- From Procedural to OOP
- Synergy between PLDI and Software Engineering
- Evolution of OOP
Emergence of VEE - Data Abstraction Computing Paradigm
- Towards better programming practices
- ADT - Types, Interfaces & Implementation
Phase II: Object Oriented Programming (OOP)
- Core Java
- Java Preliminaries,
- Java for computing with built-in data types
- Java with objects as ADTs
- Java with objects for OOC
- Java Exception Handling and Assertions
- Inheritance
- Forms of Inheritance
- Type Substitution, Subtypes and Subclasses
- Runtime Type Identification & Introspection
- Runtime Type Identifiers (RTTIs)
- 'Class' and 'Object' Classes
Phase III: Object Oriented Analysis & Design (OOAD)
- Data Abstraction Computing Paradigm (Contd ...)
- Abstraction and Encapsulation
- Software Reuse through Generic-ity: Generic Programming and Generic Algorithms
- Object Oriented Computing
- Need for OOC for software Reuse
- Type and sub-types,
- Inheritance and Polymorphism,
- Pillers of OOC: Message Dispatch, Dynamic Type, and Late Binding
- Commonality of Abstraction / Interfaces
- OO System Design & Implementation,
- Type substitutiion and dynamic cast.
- Software Reuse -- Design, Source Code and Binaries
- Object Oriented Modelling
- Object Model: Structure & Behavior
- Class, Object and Relations
- Classes, Responsibilities and Collaboration (CRC)
- OO Analysis and Design with UML
- UML Notations
- UML Structure and Behaviour Diagrams
Phase IV: Object Oriented Language Implementation (OOLI)
- Review : Language Implementation
- Bootstrapping & Retargeting
- Compiler Writing Tools and Generators
- Object Oriented Prog. Language Implementation
- Data Structures for facilitating OOC
- Class and Methods: Static & Non-Static
- Constructors and Method Overloading
- Message Dispatch and RTTIs
- Generics and parameterized polymorphism
Phase V: Runtime System : Virtual Execution Environment
- Virtual Execution Environment
- Virtualization
- CISC & RISC ISA vs. P-Code (Bytecode/MSIL)
- Stack-based code execution and property verification
- VEE Architecture
- Memory Management and Garbage Collection
- Class Loader and Initiliazer
- Linker and Verifier
- Code Interpretation and JIT
- Runtime Security
- Reflection: Structural and Computational
- Case studies from JVM (or Microsoft/CLR)
Phase VI: Object Oriented Software Engineering (OOSE)
- Trusted and Reusable System
- Software Reuse
- Synergy between PLI and SE
- Trusted & Efficient Systems
- Design Patterns & Implementation