Second required programming course in the CS Major (after CIS1068). Program style, organization and design with continued emphasis on the object-oriented design paradigm. Understanding and use of data abstraction through Java classes and class libraries. Understanding of generic programming. Introduction to GUIs and event-oriented programming. Understanding and use of the following Abstract Data Types: strings, stacks, queues, priority queues, lists, linked lists, trees, heaps, and hash tables. Introduction to expression evaluation and other applications. Introduction to recursion. Comparative analysis of searching and sorting algorithms and data structures. Sorting algorithms include insertion sort, mergesort, heapsort,and quicksort. Searching algorithms include binary search, hashing, and Huffman coding. At the end of the course students are expected to be able to develop good quality (~1000 lines) programs that solve interesting and relevant problems using the data structures we have studied. They should demonstrate understanding of careful development, testing, informal justifications of correctness, and some performance estimation.

Prerequisite: Grade of C or better in CIS1068 Additional information about this course can be found on WWW at URL http://www.cis.temple.edu/~ingargio/cis68/.

Instructor: Dr. Giorgio Ingargiola

Teaching Assistant: Vladan Radosavljevic

Miscellaneous: Our first class (Section 1) is on Tuesday August 31and the last class is on Tuesday, December 7. The last day to drop the course (and get tuition refund) is Tuesday , September 14. The last day to withdraw from the course (no refund) is Monday, November 1. Students who have previously withdrawn from this course, or who have already withdrawn from 5 courses since September 2003 may not withdraw. Each student should have a general Temple email address. Important student information is accessible from http://owlnet.temple.edu/ Any student who has a need for accomodation based on the impact of a disability should contact me privately to discuss the specific situation as soon as possible. Students with documented disabilities should contact Disability Resources and Services at 215-204-1280 in 100 Ritter Hall to coordinate reasonable accomodations. Freedom to teach and freedom to learn are inseparable facets of academic freedom. The University has adopted a policy on Student and Faculty Academic Rights and Responsibilities (Policy # 03.70.02) which can be accessed through the following link: http://policies.temple.edu/getdoc.asp?policy_no=03.70.02 Students should be familiar with the University’s Statement on Academic Honesty [http://www.temple.edu/bulletin/Responsibilities_rights/responsibilities/responsibilities.shtm#honesty]and the Student Code of Conduct [http://policies.temple.edu/getdoc.asp?policy_no=03.70.12]or should contact the Student Orientation Office, 215-204-8531

Textbook: DATA STRUCTURES: ABSTRACTION and DESIGN using Java, 2nd Edition By Koffman/Wolfgang, Wiley, 2010

GRADING

EXAMS: The exams are closed book. Their content is cumulative, i.e. they address the material covered up to the day of the exam. If a student misses a midterm for an emergency [as agreed with instructor], there will be no makeup exam: the final will become proportionally more important. If you miss a midterm without previous agreement and without definite proof as to the medical or legal reasons, you will get a zero for that exam. Weekly 10-minute tests that are missed will not be made up. The final exam is mandatory on the scheduled day.

HOMEWORKS: Each homework must be completed on time and sent by e-mail to the Teaching Assistant (TA). For each homework, you must submit a design document along with the program and a test of the program (once we have shown you how to do this!). The design document will show the steps you took to design the algorithm and will follow the software development method used in the text. The homeworks will be graded, commented upon, and returned by e-mail by the TA usually before the next homework is due. Homeworks late up to 24 hours will be penalized 2 points (out of 10 possible). Homeworks that are late by more than 24 hours will not be accepted by the TA; the instructor may accept them in case of emergencies. You are expected to work and complete all the homeworks on your own. Plagiarism will be severely punished. See the University Policy on Plagiarism and Academic Cheating.

LABORATORIES: Laboratories are lead by the Teaching Assistant. Attendance to the laboratory is Mandatory. In the laboratory you will be helped to learn how to use an interactive development environment. You will be presented examples related to the material discussed in class and you will examine common errors and how to avoid them. Part of the laboratory time will be dedicated to work on your programming assignments.

COURSE LEARNING OBJECTIVES:

A. Review

  1. Basic concepts of Java
  2. Abstraction, classes, inheritance and the class hierarchy, polymorphism
  3. Interfaces, abstract classes
  4. Exception classes

B. GUIs and Object Oriented Programming

  1. Overview of events and event oriented programming
  2. Events, listeners, call backs
  3. Overview of the AWT and Swing hierarchy, components and containers
  4. Swing components

C. Recursion

  1. Recursive thinking
  2. Examples of recursion
  3. Recursive data structures
  4. Problem solving with recursion
  5. Backtracking

D. Careful Software Development

  1. The Waterfall model
  2. The Unified Model
  3. Agile Models
  4. UML Class hierarchy
  5. Testing and the JUnit framework
  6. Reasoning about programs

E.Generic Programming

  1. Generic types, bounded type parameters, subtyping, wildcards
  2. Type erasure

F. Lists

  1. Array lists, linked lists, doubly linked lists, iterators

G. Collection Framework

  1. Objectives of the Collection Framework
  2. Collection, Iterable, and Iterator interfaces
  3. Collection implementations

H. Stack and Queues

  1. The Stack abstract data type
  2. Stack applications
  3. Stack implementations
  4. The Queue abstract data type
  5. Queue applications
  6. Queue implementations

I. Trees

  1. Tree terminology and applications
  2. Tree traversals
  3. Binary Search Trees
  4. Heaps and Priority Queues
  5. Huffman Trees

J. Sets, Maps, Hashing, and Hash Tables

  1. Sets and the Set Interface
  2. Maps and the Map interface
  3. Hashing
  4. Hash Tables

K. Sorting

  1. Elementary sorting methods: Selection, Insertion, Bubble
  2. Efficient sorting methods: Heapsort, Quicksort, MergeSort

L. Graphs

  1. Graph Definitions
  2. Graph ADT and its Implementations
  3. Graph Traversals