C123 OBJECT ORIENTED PROGRAMMING (Term 2)

Dr. S. Uchitel
Dr. A. Russo

Prerequisites: Programming I

Aims of the course:

- To give students a good understanding of basic concepts of object-oriented program design; introduce them to the fundamental principles of abstraction, modularity and reusability; and illustrate object diagrams as a basic object-oriented design and modelling technique.
- To teach and enable students to develop object-oriented programming skills within the Java language; to enable students to develop object-oriented Java program solutions to small application problems.
- To help students gain a good understanding of, and ability to use, abstract data types; familiarise students with common abstract data types and associated operations.
- To teach various design and implementation solutions for abstract data types; illustrate the practical effects of the different implementation choices; and illustrate their practical use in developing Java programs for real application problems.

Learning Outcomes

Knowledge and Understanding

Upon successful completion of the module, a student will: Understand basic principles of object-oriented program design. Understand the basic and some advanced issues related to writing classes and methods - such as data, visibility, scope, method parameters, object references, and nested classes. Understand the basic ideas behind class hierarchies, polymorphism, and programming to interfaces. Get exposure to exceptions and basic I/O streams. Understand basic principles, main features and operations of abstract data types, in particular of lists, stacks, queues, trees, heaps, hash tables and graphs. Differentiate specifications of abstract data types from particular implementation techniques. Learn about fundamental algorithms associated with the above data types, including tree traversal, treesort, heapsort and graph traversal algorithms.

Intellectual and Practical skills

Upon successful completion of the module, a student will: Be able to solve a given application problem by going through the basic steps of program specifications, analysis, design, implementation and testing --- within the context of the object-oriented paradigm. Be able to competently read 'foreign' Java source code and object diagrams. Have developed solid Java programming skills and the ability to put in practice the acquired knowledge and understanding of the Java language and object-oriented design in relatively simple case studies. Be able to develop Java implementations of abstract data types using different approaches, and evaluate their differences. Be able to use abstract data types and related implementations in designing and implementing efficient solutions to straightforward application problems.

Outline syllabus

Object-oriented program design Key issues related to a contemporary software development process. Adaptation of the standard five-step approach to software development (problem specification, analysis, design, implementation and testing) to the object-oriented paradigm. Object diagrams as an object-oriented design and modelling technique.
Objects, primitive data and program statements Definition and use of objects. Use of predefined classes from the Java standard library. Primitive types, operators and expressions. Procedural statements and basic control structures in Java.
Classes Issues related to writing classes and methods, such as instance data, visibility, scope, method parameters and return types, constructors, object relationships, method overloading and decomposition. Various examples of related program design and implementations. Some advanced topics such as static modifiers, and interfaces for implementing polymorphism.
Interfaces and Abstract classes Definition and use of Interfaces and Abstract classes in Java. A brief introduction to inheritance and its role in software design.
Exceptions and I/O Streams Exposure (through example programs) to: exception messages, exception propagation, and checked and unchecked exceptions; I/O streams including the IOException class; Standard Java I/O; and the keyboard class.
Vectors and Iterators.
Introducing Abstract Data Types A brief introduction to data abstraction and definition of the concept of Abstract Data Types (ADT).
Lists Definition of lists and associated operations for manipulating individual elements or entire lists, such as addition and deletion of an element, search for an element, replacement of an element in a list, computing the length of a list, sorting a list and copying a list. Array and reference-based implementation techniques. Examples of list variations, including double linked lists, circular lists.
Stacks, queues and recursion. Definition of stacks and associated operations. Array and linked-list implementation of stacks. A brief introduction to iteration and recursion. Queue and related access operations. Array and linked-list implementation of queues. Priority queues and double-ended queues. Example applications of stacks and queues.
Trees Definition of binary trees and associated operations. Array and reference-based implementation of binary trees. Various examples of tree traversal algorithms. Binary search trees and related operations such as finding, inserting, removing an element. Illustration of the Treesort algorithm.
Heaps and hash tables Definition of heaps and basic operations. Priority queues with heaps. Illustration of the Heapsort algorithm. An introduction to hash tables, hash function, and illustration of some of the issues related with the choice of hash functions and the use of double hashing.
Graphs Introduction of undirected and directed graphs and implementation of graphs. Illustration of basic graph algorithms such as depth-first and breadth-first search.