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