Overview

The goal of this course is to provide a broad but solid overview of object-oriented programming (OOP) with different languages and under different environments. OOP is a discipline of modeling, designing, implementing, and maintaining software systems that are composed using objects with identities that encapsulate properties and operations, message passing, classes, inheritance, polymorphism, and dynamic binding. Since OOP has become a de-facto programming baseline, it affects all aspects of building software. Thus building modern large-scale software systems that consists of tens of thousands of objects each requires deep understanding of OOP. In this course we review different areas of OOP with the concentration on practical aspects of languages and environments. Lectures will be based on the material from different books, accepted programming language standards (C++, C#, Java, Scala, Python, Rust) and on research papers written by accomplished software engineers and computer scientists.

By the end of this class, you will know how to:

  • describe the theory of objects and the underlying principles of OOP
  • recognize how different languages use OOP concepts, pure and mixed with other paradigms
  • design OO applications using various tools and methods, and understand how the same concept maps to different languages
  • analyze and improve the performance and memory usage of OOP applications

Prerequisites

The main prerequisite for this class is CS 342, Software Design. I will assume basic understanding of the software development process (compilation, linking, debugging, etc.), and a working knowledge of Java. Programming assignments will be almost entirely in Java.

Special Circumstances

This is always true, but especially worth saying as we continue to live in a pandemic: I’m glad you’re taking this course, but your wellbeing is more important to me than your coursework. I’ve tried to plan the course so that it’ll be fun, interesting, and not too much of a burden, but if there’s more I can do, please let me know. Likewise, if circumstances prevent you from completing an assignment or make it difficult for you to keep up with the course, let me know and we can figure something out. I’ve enabled anonymous posts on Piazza, so you can give feedback fully anonymously if you want to.

Communication

The class discussion board on Piazza is the best place to post questions about the course material, assignments, course policies, exams, and anything else. Remember, if you have a question, someone else probably does too! You can ask and answer anonymously, and you can also use it to send messages to the instructors (we check it more often than email). There will be a small amount of extra credit available for being a good citizen on the discussion board – asking questions, answering questions, and generally being helpful. (Remember that I can’t give you extra credit for fully anonymous posts!)

Evaluation

Grades are curved based on an aggregate course score, with separate curves for graduate and undergraduate students. This means that the course score cut-offs for an A, B, C, etc. are not defined ahead of time: these will be set after the end of the course.

The course grade weighting is:

Task % of total grade
In-class exercises 20
Assignments 50
Midterm 15
Final 15

Attendance and Participation

Class will meet two times per week. Each class will include a short exercise to reinforce the material. This is an on-campus course, but classes will also be recorded on Blackboard Collaborate. If you are not able to attend a class live, you can watch the recording and submit the exercise when you are able, no later than 1 week after the class. A small amount of extra credit will be available for active participation in class or on Piazza. Office hours will be held both in-person and online.

University policy continues to require masks in classrooms regardless of vaccination status. If you anticipate this being a problem, please let me know.

Assignments

Assignments for the course will be programming assignments, mostly in Java. We recommend IntelliJ IDEA as your IDE. Assignments will be released and submitted through GitHub. You will need to fill out a form with your GitHub account name (and create a GitHub account if you don’t already have one); the URL of the form will be posted on Piazza. To submit a programming assignment, you simply push your changes to the repository that will be created for you. The date of submission is the date of the last commit in your repository. We will cover in class how to import, edit, and submit your assignments.

If you do not get a full score on an assignment, you can resubmit it within a week of the original due date. Your score for the assignment will be the average of your original score and the score for your resubmission. If you want to resubmit, it’s a good idea to come to office hours to discuss what you missed in your original submission and how to improve it.

Academic Integrity

You are encouraged to consult with your classmates on the assignments, but you should write your own code, and copying code/proofs from your classmates without citation is considered plagiarism. Given the question “how did you do X?”, a great response would be “I used function Y, with W as the second argument. I tried Z first, but it doesn’t work.” An inappropriate response would be “here is my code, look for yourself.” If you ask for help from sources outside the course, you must clearly state that you’re asking for help on homework for a class.

In keeping with academic and professional ethics, you must cite your sources in all submitted materials. List classmates you discussed your homework with and webpages from which you got inspiration or copied code. All students are expected to understand and be able to explain their submitted materials, and may be asked to do so at the instructor’s discretion. Plagiarism and cheating, as in copying the work of others, paying others to do your work, etc., is prohibited, is grounds for failing the course, and will be reported.

Accessibility

UIC is committed to full inclusion and participation of people with disabilities in all aspects of university life. Students who face or anticipate disability-related barriers while at UIC should connect with the Disability Resource Center (DRC) at drc.uic.edu, drc@uic.edu, or at (312) 413-2183 to create a plan for reasonable accommodations. In order to receive accommodations, students must disclose disability to the DRC, complete an interactive registration process with the DRC, and provide their course instructor with a Letter of Accommodation (LOA). Course instructors in receipt of an LOA will work with the student and the DRC to implement approved accommodations.

Mental and Emotional Health

Your mental health and emotional wellness are at least as important as academic success. The UIC Counseling Center offers an array of services to provide additional support throughout your time at UIC, including workshops, peer support groups, counseling, self-help tools, and initial consultations to speak to a mental health counselor about your concerns. Please visit the Counseling Center website for more information (https://counseling.uic.edu/). Further, if you think emotional concerns may be impacting your academic success, please contact your faculty and academic advisers and we can try to make things more manageable.

Religious Holidays

The UIC Senate Policy on religious holidays is below. The short version is: I will try not to make anything due on religious holidays, but if I do, please let me know at least 5 days in advance and we’ll figure out an alternative.

“The faculty of the University of Illinois at Chicago shall make every effort to avoid scheduling examinations or requiring that student projects be turned in or completed on religious holidays. Students who wish to observe their religious holidays shall notify the faculty member by the tenth day of the semester of the date when they will be absent unless the religious holiday is observed on or before the tenth day of the semester. In such cases, the students shall notify the faculty member at least five days in advance of the date when they will be absent. The faculty member shall make every reasonable effort to honor the request, not penalize the student for missing the class, and if an examination or project is due during the absence, give the student an exam or assignment equivalent to the one completed by those students in attendance. If the student feels aggrieved, they may request remedy through the campus grievance procedure.”

Nondiscrimination

UIC is committed to the most fundamental principles of academic freedom, equality of opportunity, and human dignity involving students and employees. Freedom from discrimination is a foundation for all decision making at UIC. Students are encouraged to study the University’s Nondiscrimination Statement. Information on relevant policies and procedures is available on the University web pages of the Office of Access and Equality.