Course Outline: Introduction to Object Oriented Concepts – Procedural vs Object Oriented (OO) Programming, What is an Object – Object Data and Behavior, What is a Class – Attributes, Methods and Messages, Using UML to model a Class Diagram, Encapsulation and Data Hiding: Interfaces and Implementations, Inheritance: Superclasses and Subclasses, Abstraction and Is-a Relationships; Polymorphism, Composition: Abstraction and Has- a Relationships; How to think in terms of Objects – Interface vs Implementation, Abstract thinking when designing Interfaces and Giving the user minimal Interface possible; Object Oriented concepts in details – Constructors: Default constructor, When is a constructor called, Using multiple constructors and The design of constructors, Error handling and The concept of scope; The Anatomy of a Class – The Name, Comments, Attributes, Constructors, Accessors, Public Interface methods and Private implementation methods; Class Design Guidelines – Modeling Real World Systems, Identifying Public Interfaces, Designing Robust Constructors, Designing Error Handling to a Class, Documenting a Class and Using Comments, Designing with Reuse, Extensibility, Maintainability in Mind and Using Object Persistence; Designing with Objects – Proper Analysis, Statement of Work, Requirements Collection, Prototype of User Interface, Identifying the Classes, Determining the responsibilities of Each Class, Class Collaboration, Class Model to Describe the System; Mastering Inheritance – Reusing Objects, Generalization and Specialization, How Inheritance weakens Encapsulation; Frameworks and Reuse – When should we Reuse, Frameworks, Contract: Abstract Classes and Interfaces. Programming lessons - Introduction to Java – Java Virtual Machine (JVM) and Java Runtime (JRE), Java Development Kit (JDK), Integrated Development Environment (IDE) for Java, Java installation, Hello World! Program, compiling and running Java program, using Java classpath and JVM Architecture; Java syntax – Package, Import, Class, Fields, Methods, Constructors, Primitive data types, Strings and literal, Wrapper class, Nonexistence type: null. Object Oriented Programming (OOP) - The students will implement each of the object oriented concepts which are discussed in the class. Java features to support practical OOP – String Operations: String creations and operations, immutability property of String, String comparison and searching, String buffers and builders; Java I/O: Streams, Input and Output Stream, File, Path, Directory and tree; Exception handling: try and catch, checked exception vs unchecked exceptions, throw and throws, Common exception and User defined exceptions; Logger and Debugging: Logger, Log levels, Formatters and Filters, Logger Handlers and Manager, Configuration, Introduction to Debugging and Debugging Workflow.