CMSC 132 C.S. logo
Sections 020X, 040X
Web Accessibility

05/15/19   Today (Wednesday) will be the last day for office hours. Also, the window for regrade requests has passed. Please focus your attention on preparing for the final exam.

05/12/19   The slides on Algorithm Strategies are here.

05/10/19   Final Exam information:
The final exam is on Friday 05/17 from 4:00PM to 6:00PM. Please arrive at 3:50PM. All students must bring a photo ID to the exam. The exam location depends on your section number. If you arrive at the wrong location you will be directed to go to the correct one.

Sections Room
020X ARC 0204
040X SKN 0200

05/08/19   The slides on I/O Streams are here.

05/06/19   The slides on networking are here.

05/02/19   Fawzi's office hour today (Thursday 5/2) is canceled.

04/29/19   Project #9 has been posted.

04/24/19   TA office hours on Friday 4/26 will be held in room 1112 A.V. Williams instead of the new location in the Iribe Center. This is only for that one day -- next week office hours will resume in the Iribe Center just outside room 1107.

04/20/19   Slides on the "fast" sorting algorithms are here.

04/13/19   Project #8 has been posted.

04/11/19   The slide showing pseudocode for Dijkstra's Algorithm is here.

04/08/19   The slides on Graphs are here.

04/08/19   The slides on Heaps are here.

04/03/19   Project #7 has been posted.

03/26/19   The slides that I presented in class about Trees are here.

03/26/19   The slides that I presented in class about Sets and Maps are here.

03/25/19   Project #6 has been posted.

03/11/19   The TA office hours schedule has changed: There is no longer a TA available on Tuesday from 9:00 to 11:00, and there is no longer a TA available on Friday from 11-12. For the latest schedule, please click the "Contact Us" tab, and scroll to the bottom.

03/05/19   Project #5 has been posted.

03/03/19   I am posting some "study questions" that were developed a few years ago. I hope they are of some use for you this semester. They are here.

02/26/19   Project #4 has been posted.

02/24/19   Slides that were presented in lecture about GUI development are here.

02/20/19   Regarding project #3: There is a method in the GameModel class called getBoard that is oddly missing from the Javadoc. Please implement this method -- it's obviously a "getter". Be sure that your return value doesn't introduce a privacy leak. [I don't have the original sourcecode files, so it would be a lot of work to re-do the Javadoc.]

02/20/19   Project #3 has been posted.

02/12/19   Project #2 has been posted.

02/12/19   The slides about inheritance are here. You'll need to authenticate with the same credentials you use to access projects.

02/09/19   Due to the infamous "CVS Fiasco of Spring 2019", the due date for Project #1 has been extended by 1 day. The due date is now officially Wednesday 2/13 at 11:00PM. (The usual 24 hour late period still applies.)

02/09/19   Since we are no longer using CVS, I will be posting the lecture examples and the examples from the discussion sessions (labs) on the class webpage. I've already posted the old ones. To access them, go to the "Schedule" tab. You'll need to authenticate using the same login ID and password that you were told to use for the projects. (If you don't know what it is, just ask me or any TA.) To import these "projects" into Eclipse, follow these instructions. (Read the section titled "Importing (Projects)".

02/08/19   Important: The CVS repositories are dead! (Long story.) I'll be distributing projects and examples to you using zip files. If you need the project #1 files, you'll need to download the zip file found in the "Assignments" tab. (It's password protected -- come to class to find out what the password is.) Once you've downloaded the zipfile for a project, you'll need to import it into Eclipse. It's very easy. Instructions are here. Read the section titled Importing (Projects).

02/05/19   The Maryland Center for Women in Computing (MCWIC) will be offering free tutoring for all students in this course. Both 1 on 1 and "guided study sessions" are available. Tutoring will be in room 3136 A.V. Williams, starting on February 11th. Guided Study Sessions for this course will be held on Mondays at 6:00PM and Wednesdays at 11:00AM. To sign up for 1 on 1 tutoring go to http://go.umd.edu/TutorRequest

02/05/19   I heard from the TAs that some students were writing poor implementations of yesterday's lab exercise (StringCatalog), so I posted a decent implementation to everyone's CVS repositories. I called it "132Spring19Lab03Solution". Check it out!

02/04/19   Project #1 has been posted to your CVS repository. Click the "Assignments" tab to find a link to the project description.

01/26/19   All students must attend the class sessions for which they are registered! This applies to both the lecture and discussion. The course is quite full 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.

01/23/19   This is the class webpage for CMSC132, sections 020X and 040X only. Please check here often (at least once a day) for important class announcements.

Overview

This is a second programming course for Computer Science majors with a focus on object-oriented programming. The goal of the course is to continue development of skills in program design, implementation, testing, and debugging, using a graphical IDE. Additionally, this course will introduce abstract data types and data structures, the Java Collection Framework, inheritance, and concurrent programming. 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 various online vendors. (You can even "rent" the book, or get an electronic downloadable version.)


Major Topics
  • Review (Topics that many, but not all, students have seen)
    • Introduction to the Eclipse IDE
    • Using the Eclipse debugger
    • Java interfaces
    • Polymorphism
    • Exception handling
    • Recursion
  • Testing (including JUnit review)
  • Asymptotic complexity
  • Data types and data structures
    • Linear
    • Trees
    • Graphs
    • Sets
    • Hash tables
  • Tree and graph algorithms
  • Java collections framework
    • Java generics and parameterized types
    • Iterators
    • Lists
    • Sets
    • Maps
  • Inheritance
  • Introduction to concurrent programming
  • Introduction to networks
  • Java I/O streams
  • Algorithm strategies

Assignments

There will be eight substantial programming projects as well as numerous shorter in-class assignments to be completed during the lab sessions.  Some are considered "closed" assignments which you must complete by yourself and others are considered "open" assignments where some degree of collaboration is permitted. (More information about the open/closed policy will be provided in class and can be found here: Policy Regarding Open/Closed Projects.) There will also be two midterms, a final exam, and occasional quizzes.


Machines

All programming assignments can be implemented on the machine 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.


Grading

All programming assignments must be submitted before 11pm on the day they are due. They are to be submitted electronically according to instructions given with the assignments. Late assignments will be strictly penalized. Exceptional circumstances will be considered only if discussed with the instructor before the assignment is due. Late assignments will be penalized as follows:

  • 20 points are subtracted from your total if submitted within 24 hours of the deadline.
  • No late assignments will be accepted more than 24 hours past the deadline.

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

Percentage Component
25% Projects (8)       [The weights of the individual projects will vary. Longer/harder projects will be worth more points.]
15% Lab assignments (quizzes & exercises to be completed during your discussion sessions)
15% Midterm #1
15% Midterm #2
30% Final Exam

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 after the course is over, do not make your code available to others.
  • Notice we constantly monitor online sources.

Backups

You need to keep backups of your projects as you develop them. No extensions will be granted due to hardware failures or 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 suspected 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 http://www.shc.umd.edu

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.
  • Sharing your code or your "test code" with any student.
  • Providing ideas/suggestions on how to solve/implement a programming assignment.
  • Looking at 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
    • 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.

Accessibility and Disability Service
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 Accessibility and Disability Support (ADS) 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  www.courseevalum.umd.edu to complete their evaluations. 


Copyright
All course materials are copyright UMCP, Department of Computer Science © 2019. 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.

Exam Dates:

  • Midterm #1    Monday 03/11 in Discussion sessions
  • Midterm #2    Monday 04/29 in Discussion sessions
  • Final Exam    Friday 05/17, 4:00PM - 6:00PM; Location to be announced.

Lecture Schedule (Approximate):
Topics Covered Lecture Examples Lab Examples
Week 01
01/28
Course intro, Eclipse intro, review Java interfaces, polymorphism, data and procedural abstraction, encapsulation, Java collections overview, Collections interface, basic generic notation (ArrayList), for-each loops, Iterator interface, Iterable, enumerated types, autoboxing/unboxing Lecture01
Lecture02
Week 02
02/04
Inheritance, super, constructors of subclasses, casting, overriding, early vs. late binding, protected visibility, Object class, abstract classes, instanceof, "final", equals method, Comparable Lecture04 Lecture05 Lab03
Lab04
Week 03
02/11
Comparators, testing, code coverage, programming errors, exception handling, checked vs. unchecked exceptions, throws, inner classes, nested classes, deep vs. shallow copy Lecture08
Lecture09
Lab05
Lab06
Week 04
02/18
clone, Cloneable, initialization blocks, static initialization blocks, anonymous inner classes, Intro to event driven programming and GUIs Lecture10
Lecture12
Week 05
02/25
Asymptotic complexity, big-O notation, best/average/expected/worst cases, analyzing code fragments, classes with parameterized types, ? extends, overview of linear data structures and data types Lecture14 Lecture15 Lab10
Week 06
03/04
Implementing linked lists, stacks and queues, review for midterm Lecture16 Lab12
Week 07
03/11
Doubly-linked list, Java ArrayList, Java LinkedList, Set (ADT), hash tables, linear probing, hashing with buckets, Java hashCode, HashSet, LinkedHashSet, TreeSet Lecture 20
Week 08
03/18
Spring Break
Week 09
03/25
Maps, HashMap, LinkedHashMap, TreeMap, recursion, singleton design pattern Lecture 21
Lecture 22
Lab15
Lab16
Week 10
04/01
trees, binary search trees, BST traversals, tree sort, heaps, heapsort Lecture 24
Lecture 25
Lab18
Week 11
04/08
Priority queue, graphs, graph implementations, depth-first search, depth-first search, Djikstra's algorithm Lecture 27
Week 12
04/15
Sorting (bubble sort, selection sort, mergesort, quicksort, counting sort, radix sort) Lab22
Week 13
04/22
Concurrent programming, threads, Runnable, Thread class, join, begin data races; review for midterm Lecture 34
Week 14
04/29
More data races, synchronization, deadlock, Java I/O streams Lecture 35
Lecture 36
Week15
05/06
Intro to networking, threaded web server example, overview of algorithm strategies Lecture 38 Lab28
Week16
05/13
Review

Instructor

Fawzi Emad
Email:
Office: IRB 2212
Office Hours: Tu/Th 2:10 to 3:10, Fri 11:00-12:00


Teaching Assistants
 Email Responsibilities Office Hours
Ugur Koc 0201 & 0202 discussion leader (See table below)
Carolin Arnold 0203 & 0204 discussion leader (See table below)
Erika Schlunk 0401 discussion leader (See table below)
Adam Ackerman 0402 discussion leader (See table below)
Anastasiya Stolyarova 0403 discussion leader (See table below)
Brendan DeMilt 0404 discussion leader (See table below)
Paaras Bhandari Grader (See table below)
Sigurthor Bjorgvinsson Grader (See table below)
Nick Franzese Grader (See table below)
Brennan Hula Grader (See table below)
Masataro Koizumi Grader (See table below)
Frankie Olmsted Grader (See table below)
Ananth Penghat Grader (See table below)
Rohith Prabakar Grader (See table below)
Peter Thompson Grader (See table below)

TA Office Hours Schedule

Office hours will begin on Wednesday 1/30. All TA office hours take place just outside room IRB 1107. 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.

  MON TUE WED THU FRI
9:00 - 10:00 Rohith   Erika Ugur Nick
10:00 - 11:00 Rohith   Erika Ugur Rohith
11:00 - 12:00 Ana Nick Ana Nick  
12:00 - 1:00 Ana & Ananth Nick Ana & Ananth Ugur Masa
1:00 - 2:00 Peter Thor Peter Ugur Ananth
2:00 - 3:00 Brendan & Peter Thor Brendan & Peter Thor Brennan
3:00 - 4:00 Paaras Paaras Paaras Adam Erika
4:00 - 5:00 Carolin & Paaras Brennan & Paaras Carolin & Paaras Adam  
5:00 - 6:00 Masa Thor Carolin Carolin  

Online Course Tools

  • Grades Server. This is where you go to see grades on assignments and to get your class account information.
  • 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: If you already have Eclipse on your computer from taking CMSC131 at UMCP, you don't need to re-install it. But if you have installed Eclipse from some other source, it is important that you follow our installation instructions so that you will be able to submit 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:
    grace.umd.edu

  • Repository Path:
    /afs/glue/class/spring2019/cmsc/132/0201/student/*****
    (Replace "*****" with your login ID.)

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

CVS dialog

Projects

To submit a project, go to the "Java" perspective in Eclipse. Right click on the project folder (e.g., p1) and select "Submit Project" from the pull-down menu. If you do not see the "Submit Project" option then your copy of Eclipse does not contain the class plug-ins. In this case, please see the Eclipse installations instructions on the Resources page, or drop by TA office hours for help.

You may submit many times (we grade only the last submission). You can check the status of your submissions by visiting the Submit Server Home Page and entering your University Directory ID and password.

Important: Your grade for each project will be based on the greater value of two scores: (1) The score on the very last submission prior to the deadline; (2) The score minus 20% on the very last submission prior to the late deadline (up to 24 hours late).


Click the name of a project below to see the project specification.

Project Name Due Date Zip file
Blackjack Game Wednesday 02/13, 11:00PM 132Spring19Project1.zip
Minimum Snippet Wednesday 02/20, 11:00PM 132Spring19Project2.zip
Clear Cell Game Wednesday 02/27, 11:00PM 132Spring19Project3.zip
Interest Calculator GUI Wednesday 03/06, 11:00PM 132Spring19Project4.zip
Linked Lists Project Friday 03/15, 11:00PM 132Spring19Project5.zip
Dense Bag Wednesday 04/03, 11:00PM 132Spring19Project6.zip
Binary Search Tree Sunday 04/14, 11:00PM 132Spring19Project7.zip
Graphs and Mazes Wednesday 04/24, 11:00PM 132Spring19Project8.zip
Hash Table Friday 05/10, 11:00PM 132Spring19Project9.zip