CMSC 132
Sections 010X/020X/030X

12/17/16   Final exam and course grades are now visible on the grades server. The median score on the final exam was 153/200 (76.5%).

12/17/16   One of the students who took the final exam in the HJP building accidentally left his laptop there. If you have seen it, or know anything about where it could be, please contact me as soon as possible.

12/14/16   As you know, the final exam is tomorrow (Thursday). See the schedule (further down) for your room assignment. The weather tomorrow will be brutally cold (temperature around 20 degrees F, and with the wind it will feel like 7 degrees F.) Please dress warmly, including a warm hat and gloves!

12/12/16   The slides used for the lecture on Algorithm Strategies are here.

12/09/16   The Office of Multi-Ethnic Student Education is offering tutoring and review sessions during exam week for many introductory courses, including CMSC 132. These sessions are open to all students. The schedule is here.

12/08/16   I've posted a set of review questions for the final (along with the usual "study questions" in the resources section of the web page.)

12/08/16   The slides used during the lecture on "networks" are here.

12/07/16   Project #9 clarification: When the hash table becomes full, you should: Create an array that is twice as big, re-hash all of the data from the old array into the new array, then assign the new array to your instance variable. This is not considered a violation of the rule that says you can't copy the data to a separate structure.

12/06/16   The final exam for this course will be on Thursday 12/15 from 4:00PM to 6:00PM. The room depends on your section number (see the table below). YOU MUST BRING A PHOTO I.D. TO THE EXAM ROOM. STUDENTS WHO ARRIVE AT THE WRONG ROOM WILL BE DIRECTED TO THE CORRECT ROOM, RESULTING IN LESS TIME FOR THEM TO COMPLETE THE FINAL.
Sections Room Assignment
0101, 0102, 0103, 0104 ARM 0126
0201, 0202 CHM 1402
0203, 0204 JMZ 0220
0301, 0302, 0303 HJP 0226

11/29/16   As you know, the third midsemester exam is tomorrow (Wednesday 11/30) during the lecture session. The discussion sessions for tomorrow have been cancelled. If you have questions about the material as you are preparing for the exam, please visit the TAs in the office hours room.

11/22/16   Project #9 has been posted. This is the last project, so start early and do a good job!

11/18/16   Many of you will be taking CMSC216 next semester... If you're doing very well in 132, you should consider taking the honors version (CMSC216H). More information about this course can be found here.

11/16/16   Students in sections 0301 and 0302 only: Your TA was not able to come to class today, so obviously you were not given the quiz. You will be given a quiz on Monday 11/21 instead, so be sure to attend class that day.

11/11/16   Regarding Project #8: I made a mistake and forgot to distribute the PublicTests at first. If you already checked out the project and don't see them, check it out again. If the PublicTests are showing errors, you may need to do the following to add JUnit4 to the project build path:
  • Right-click the project folder
  • choose build-path, add libraries, JUnit
  • click next
  • select JUnit 4
  • click finish
That should add JUnit 4 to the project.

11/11/16   Project #8 has been posted.

11/11/16   The slides used during the lectures on Graphs (including graph traversals and Dijkstra's algorithm) are here.

10/30/16   As with the first midsemester exam, I have posted a few samples of old exams to help you study for the second midsemester exam (on Friday). Like before, these are only somewhat useful, since much the content on those exams is different from what you will see on your exam. (The course has been re-organized substantially.) For more information, please click this link.

10/29/16   Project #7 has been posted. This project will require a significant amount of your time; if you wait until the last minute to begin, you are unlikely to finish it on time.

10/26/16   The slides from class about trees and heaps are here.

10/22/16   Regarding Project #6: You are free to make use of ANY classes you wish from the Java Collections framework to store the data in your DenseBag. (You do not have to do anything difficult like implementing a hash table from scratch. We will have another project later in the semester where you will implement a hash table!)

10/20/16   Regarding Project #6: Note that you are required to implement the remove method for your Iterator. We are seeing lots of submissions without this feature, and those submissions are passing all of the visible tests, but failing some secret tests!

10/18/16   Project #6 has been posted.

10/14/16   Three additional quiz dates have been added to the schedule (10/19, 11/16, and 12/7). Please make sure to put these on your calendar!

10/13/16   The slides from yesterday's lecture on Sets in Java are here.

10/07/16   Project #5 has been posted.

10/05/16   Regarding today's lab exercise (Triple): You do NOT have to implement the remove method for the Iterator. Also... I forgot to specify the toString method, but it should be clear from the public test how that method should be implemented.

10/04/16   The slides that were presented during the lectures on GUIs are posted here. Don't forget that many GUI examples have also been distributed to your CVS accounts.

09/28/16   Project #4 has been posted.

09/23/16   I posted a few samples of old exams. These are only somewhat useful, since much the content on those exams is different from what you will see on your exam. (The course has been re-organized substantially.) For more information, please click this link.

09/22/16   The first midterm exam will be on Wednesday 9/28 during the lecture. Please be sure to arrive on time and bring pencils with working erasers.

09/15/16   Project #3 has been posted.

09/14/16   The lectures slides on inheritance are posted here.

09/14/16   The deadline for Project #2 has been extended to Saturday 9/17 at 11:00PM. Note that we will be posting project #3 as scheduled, so the two will overlap for a short time. The deadline for project #3 has not changed.

09/11/16   Peter Sutor's 10:00AM office hour on Monday 9/12 will be cancelled due to unavoidable circumstances. He will resume this office hour the following week, as usual.

09/08/16   From time to time we will be posting some questions to help you study the course material. Look under the "Resources" section for the link. These questions will not be collected or graded.

09/08/16   Project #2 has been posted.

09/01/16   Project #1 has been posted, but... the Projects page is password protected. Come to class tomorrow (Friday) to find out how to login to see project descriptions!

08/29/16   I have posted a "sample project" on each student's CVS repository. It is called "132Fall2016Project0". This project is there for you to practice "checking out" and submitting class projects. YOU ARE NOT REQUIRED TO DO THIS PROJECT, AND IT IS NOT WORTH ANY POINTS.

08/26/16   All students must attend the class sessions for which they are registered! This applies to both the lecture and discussion. The course is overbooked and so we will be enforcing this policy strictly. (Quizzes or in-class assignments handed in during the wrong class session will not be graded.)

08/26/16   The first day of classes this semester will be Monday 08/29. The discussion sessions that day are being canceled, but we will have the lecture as usual; please be sure to attend.

08/26/16   Welcome to CMSC 132 for Fall 2016. Note that this website is for sections 010X/020X/030X only. If you are in one of the 040X sections then you have a completely separate website here. Important announcements will appear here as the course moves along. Be sure to look every day.


Object-Oriented Programming II is a second programming course for Computer Science majors with a focus on object-oriented programming. The goal of the course is to develop skills such as program design and testing as well as the implementation of programs using a graphical IDE. All programming will be done in Java.

Course Coordinator: Fawzi Emad

Recommended Text:
There is no required book for this course. There are many excellent introductory books on programming in Java. Look for one that includes material on "data structures". One that I can recommend is Data Structures and Abstractions with Java You can find this book for a reasonable price online at vendors such as Amazon. (You can even "rent" the book, or get an electronic downloadable version.)

Major Topics

This list is subject to change and is not in order of presentation.

  • Software life cycle
  • Requirements and Specification
  • Designing objects and classes
  • Testing and code coverage
  • Programming paradigms
  • Design patterns
  • Asymptotic complexity
  • Lists, stacks, queues
  • Trees, heaps
  • Sets, maps, graphs
  • Recursion
  • Inheritance
  • Java collections framework
  • Threads, synchronization
  • Exceptions

  • Deadlines - All projects are due at 11 pm on the specified day in the project description. You have until 11 pm of the next day to submit your project with a 12% penalty. Notice that after the late period, you will not receive any points for your project. For example, if a project is due on Wednesday at 11 pm, you have until Thursday at 11 pm to submit a late project with a 12% penalty. Any submission after Thursday 11 pm will receive 0 pts.
  • Submit Server - You need to use the submit server for project submissions. We will not accept projects submitted otherwise (e.g., e-mail, etc.). Make sure that your project works in the submit server, otherwise you will not get any credit.
  • Which Project Gets Graded - Your grade for an project will be based on the submission with the highest score after the late penalty (if any) has been applied.
  • Good Faith Attempt - You must satisfy a minimum set of requirements for each project (Good Faith Attempt) otherwise you will not pass the course (automatic grade of F). Each project defines its own good faith attempt criteria and a deadline to provide an implementation that satisfies it. If you start a project on time and look for assistance (if required) you should have no problems satisfying the Good Faith Attempt. The Good Faith Attempt guarantees you have the skills necessary for upper-level courses. Notice that you will not receive extra points for completing the good faith attempt. The grade you obtain for a project will be based on your ontime/late submission.
  • Closed Projects - All programming assignments in this course are to be written individually (unless explicitly indicated otherwise). Cooperation between students is a violation of the Code of Academic Integrity. Remember the purpose of projects is for you to learn the class material and do well in projects.


All assignments can be done on the machines of your choice. You are welcome to do the work on a home computer if you have one. There should not be any machine-specific dependencies in your code. If we are not able to run your program because there is a difference between your and our computer environments, you must work with us to get your program to work in our environment.  You are expected to use the Eclipse IDE for all programming assignments.


Final grades will be computed according the following weights. (These weights are tentative and subject to future adjustment.)

25% Projects
15% Quizzes/Lab/Lecture Work
30% Midterms
30% Final Exam

TA Room/Office Hours

Office hours get extremely busy the day before a project deadline. Therefore do not wait to start your projects. Regarding office hours and the TA Room:

  • Once you have been helped by a TA, please leave the TA room. We have a large number of students in all of our classes, and the TA room is really crowded. Thank you for help on this matter.
  • If there is a line of students waiting, a TA should spent at most 5 minutes with a student. Please remind TAs about this rule.

Online Posting of Project Implementations Not Allowed
  • Do not post your assignments' implementation online (e.g., GitHub, PasteBin) where they can be seen by others. Making your code accessible to others can lead to academic integrity violations.
  • Even if the course is over, do not make your code available to others.
  • Notice we constantly monitor online sources.


You need to keep backups of your projects as you develop them. No extensions will be granted because you accidentally erased your project. Feel free to use the submit server as a backup tool by submitting often. You can also use tools like git, etc. Do not post code in any online system that is accessible to others (e.g., GitHub).

Academic Honesty

Note that academic dishonesty includes not only cheating, fabrication, and plagiarism, but also includes helping other students commit acts of academic dishonesty by allowing them to obtain copies of your work. You are allowed to use the Web for reference purposes, but you may not copy code from any website or any other source. In short, all submitted work must be your own.

Cases of academic dishonesty will be pursued to the fullest extent possible as stipulated by the Office of Student Conduct. Without exception every case of suspec\ ted academic dishonesty will be referred to the Office. If the student is found to be responsible of academic dishonesty, the typical sanction results in a special grade "XF", indicating that the course was failed due to academic dishonesty. More serious instances can result in expulsion from the university. If you have any doubt as to whether an act of yours might constitute academic dishonesty, please contact your TA or the course coordinator.

The University of Maryland, College Park has a nationally recognized Code of Academic Integrity, administered by the Student Honor Council.B This code sets standards for academic integrity at Maryland for all undergraduate and graduate students. As a student you are responsible for upholding these standards for this course. It is very important for you to be aware of the consequences of cheating, fabrication, facilitation, and plagiarism. For more information on the Code of Academic Integrity or the Student Honor Council, please visit

Examples of Academic Integrity Violations

The following are examples of academic integrity violations:

  • Hardcoding of results in a project assignment. Hardcoding refers to attempting to make a program appear as if it works correctly (e.g., printing expected results for a test).
  • Using any code available on the internet/web or any other source. For example, using code from Sourceforge.
  • Hiring any online service to complete an assignment for you.
  • You may not post the implementation of your assignments, materials related to the class (e.g., project description), or any other material associated with this course. Even if the class is over and you have graduated, you may NOT post any material.
  • Discussing projects with your classmates.
  • Sharing your code or your student tests with any student.
  • Providing ideas/suggestions on how to solve/implement a programming assignment.
  • Looking or debugging another student's code.
  • Using online forums to ask for help regarding our assignments.

Excused Absence and Academic Accommodations
  1. Any student who needs to be excused for an absence from a single class session , due to a medically necessitated absence shall:
    • Make a reasonable attempt to inform the instructor of his/her illness prior to the class. If you are going to miss an in-class assignment then we expect to hear from you (either email or telephone message) before the class session begins.
    • Upon returning to the class, present their instructor with a self-signed note attesting to the date of their illness. The note must contain an acknowledgment by the student that the information provided is true and correct. Providing false information to University officials is prohibited under Part 9(h) of the Code of Student Conduct (V-1.00(B) University of Maryland Code of Student Conduct) and may result in disciplinary action.
    • This self-documentation may not be used for the Major Scheduled Grading Events as defined below and it may only be used for one class meeting during the semester.

  2. Any student who needs to be excused for more than one absence, or for a "Major Scheduled Grading Event", must provide written documentation of the illness from the Health Center or from an outside health care provider. This documentation must verify dates of treatment and indicate the timeframe that the student was unable to meet academic responsibilities. The documentation should be given to the instructor, not the TA. We will not accept a "self-signed" note for "major scheduled grading events", as defined below. The note must be signed by a health care professional.

    The Major Scheduled Grading Events for this course include:
    • Midterm #1
    • Midterm #2
    • Midterm #3
    • Final Exam
    • Programming projects

It is also the student's responsibility to inform the instructor of any intended absences from exams for religious observances in advance. Notice should be provided as soon as possible but no later than one week prior to the exam.

Disability Support Services
Any student eligible for and requesting reasonable academic accommodations due to a disability is requested to provide, to the instructor in office hours, a letter of accommodation from the Office of Disability Support Services (DSS) within the first two weeks of the semester.

Course Evaluations

The Department of Computer Science takes the student course evaluations very seriously. Evaluations will usually be open during the last few weeks of the course. Students can go to to complete their evaluations. 

All course materials are copyright UMCP, Department of Computer Science © 2016. All rights reserved. Students are permitted to use course materials for their own personal use only. Course materials may not be distributed publicly or provided to others (excepting other students in the course), in any way or format.
Lecture Schedule (Approximate):

This schedule is tentative and subject to change.

Week Topics   Work  
Week #1
(Aug 29)
Course Intro, Abstraction/Encapsulation, Java Interfaces Eclipse installation
Project #1 Out (Thu)
Week #2
(Sep 5)
Enumeration, Comparable, Inheritance Quiz (Wed)
Project #1 Due (Thu)
Project #2 Out (Thu)
Week #3
(Sep 12)
More inheritance, Abstract Classes, Comparator Interface, Testing, Correctness, Exceptions Quiz (Wed)
Project #2 Due (Sat)
Project #3 Out (Thu)
Week #4
(Sep 19)
OO Design Intro, Inner Classes, Levels of copying, Cloning, Constructor/Desctructor, Initialization blocks Quiz (Wed)
Project #3 Due (Sunday 9/25)
Week #5
(Sep 26)
Event-Driven Programming, GUI, Algorithmic Complexity I Midterm #1 (Wed)
Project #4 Out (Wed)
Week #6
(Oct 3)
Generic Programming, Collections, Linear Data Structures (Linked lists, Stacks, Queues) Project #4 Due (Fri)
Project #5 Out (Fri)
Week #7
(Oct 10)
Hashing and Sets/Maps Early Warning Grades(Oct 13)
Week #8
(Oct 17)
Algorithmic Complexity II, Recursion, Trees Project #5 Due (Mon)
Project #6 Out (Tues)
Quiz (Wed)
Week #9
(Oct 24)
More trees, Heaps/Priority Queues, Polymorphic Lists/Trees Quiz (Wed)
Project #6 due (Friday)
Project #7 Out (Saturday 10/29)
Week #10
(Oct 31)
Introduction to Graphs, Graph traversals
Midterm #2 (Fri)
Week #11
(Nov 7)
Graph implementations, Djikstra's algorithm, ? Project #7 Due (Friday 11/11)
Project #8 Out (Saturday 11/12)
Week #12
(Nov 14)
Threads, Synchronization, Synchronization II Quiz (Wed)
Week #13
(Nov 21)
Effective Java, Software Life Cycle, Software Process Models, Problem Specification & Des\ ign, Testing Project #8 Due (Tue)
Project #9 Out (Wed) Thanksgiving
Week #14
(Nov 28)
File IO, Network basics
Midterm #3 (Wed)
Week #15
(Dec 5)
Sorting, Algorithm Strategies, Design Patterns Project #9 Due (Sunday 12/11)
Quiz (Wed)

Week #16
(Dec 12)
Final Exam Review Last Day of Classes (Mon Dec 12)
Final Exam
(Thu Dec 15, 4pm - 6pm)

Fawzi Emad
Office: 1151A, A.V. Williams
Office Hours: MW 2:00 - 2:50, F 9:00 - 9:50

Teaching Assistants
 EmailResponsibilitiesOffice Hours
Tak Lee Discussion Leader, sections 0101/0102 See table below.
David Sekora Discussion Leader, sections 0103/0104 See table below.
Welles Robinson Discussion Leader, sections 0201/0202 See table below.
Anton Mitrokhin Discussion Leader, sections 0203/0204 See table below.
Peter Sutor Discussion Leader, sections 0301/0302 See table below.
Cameron Moy Discussion Leader, section 0303 See table below.
Miles Zhang Grader, sections 0101/0102 See table below.
Mikey Saugstad Grader, sections 0103/0104 See table below.
Shuo Li Grader, sections 0201/0202 See table below.
Zehua Zeng Grader, sections 0203/0204 See table below.
Jonggi Hong Grader, section 0301 See table below.
Wilson Lin Grader, section 0302 See table below.
Michael Strauch Grader, section 0303 See table below.

TA Office Hours Schedule

Students in sections 010X/020X/030X may visit any TA on this list.

If you are in sections 040X then you must see a TA who has been assigned to your sections -- see your class webpage or talk with your instructor.

All TA office hours take place in room 1112 A.V. Williams. Please note that a TA may need to leave 5 minutes before the end of the hour in order to go to his/her class. Please be understanding of their schedules.

9:00 Shuo Shuo   Shuo Shuo
10:00 Peter Mikey Welles Miles and Mikey Tak
11:00 Peter Miles Welles and Wilson Miles Michael and Tak
12:00 Anton and David Zehua Anton and Wilson Zehua Michael
1:00 Anton Zehua and David Anton and Jonggi Zehua and David David
2:00 Anton Mikey and Cameron Welles and Jonggi Cameron Tak
3:00 Welles Mikey Welles David (3:15 to 4:15) Tak
4:00 Peter Peter Peter Miles Tak
Study Materials

We are gathering a collection of questions that will help you to study. Click this link to view them. (You will need to authenticate using the same login ID and password you use to access the project descriptions.)

Online Course Tools
  • Grades Server. This is where you go to see grades on assignments and to get your class account informtion.
  • Submission Server. This is where you go to view your project submissions and to get limited feedback about how your project is performing on our automated tests.
  • Eclipse Tutorial. Eclipse is an Integrated Development Environment (IDE) that helps us to write software efficiently. You will use Eclipse to implement the class projects this semester. See the section at the bottom of this page for specific information about setting up Eclipse.

About Java

The following web pages provide detailed references to information about Java.

  • Oracle's Java Homepage. This is the place to come when you really need the latest technical specs and downloads.
  • Oracle's Java Tutorial. This page has a number of links to books and web pages about Java, which you may find of interest.
  • Java 8.0 API Specs. This page contains (javadoc) documentation for the Java libraries. It is an excellent reference and you should bookmark it on your browser.

Setting up Eclipse

In order to complete the projects for this course you must install Eclipse following the instructions in the Eclipse Tutorial. Note that if you install Eclipse from some other source then you will not be able to submit your projects easily!

After you get Eclipse installed, you will need to connect Eclipse to your class account. To the right is a screenshot of the information you will need to enter into the CVS connection dialog box during this process.

You can cut and paste the following lines into the dialog box:

  • Host:

  • Repository Path:
    (Replace "*****" with your login ID.)

Be sure to change the connection type to "extssh", as shown.

CVS dialog

Information about projects (project descriptions, due dates, etc.) can be found by clicking the link below. This part of the webpage is password protected. The correct login ID and password to use will be given out during class.

Project information is here.