CSE114: Introduction to Object-Oriented Programming Syllabus

Term: Fall 2020
Instructor: Alex Kuhn (alex.kuhn@sunykorea.ac.kr, Office B423, +82-32-626-1230)
Lectures: Mon & Wed 2–3:20pm in C107 and online via Zoom
Labs: Tue & Thu 2–3:20pm
Office Hours: Tue & Thu 3:30-4:30 pm and Wed 3:30-5:30 pm in B423 or via Zoom
Course Homepage: http://www3.cs.stonybrook.edu/~alexkuhn/cse114-fall2020/

Required Texts:

·      Downey, Allen B., Mayfield, Chris, “Think Java: How to Think Like a Computer Scientist”, 2nd Edition, Green Tea Press, 2020.

·      Liang, Daniel, “Introduction to Java Programming”, Brief Version 10th Edition, Prentice-Hall, 2014, (ISBN-10: 0-13-359220-0; ISBN-13: 978-0-13-359220-7) – The “Comprehensive Version” of this book is also okay.

 

Note that given the hybrid course schedule, we will meet in person on the first week and every other week. The other weeks the lectures will be held online via Zoom. The lab session on Tuesday and Thursday will always be in-person.

Course Catalog Description

An introduction to procedural and object-oriented programming methodology. Topics include program structure, conditional and iterative programming, procedures, arrays and records, object classes, encapsulation, information hiding, inheritance, polymorphism, file I/O, and exceptions. Includes required laboratory. This course has been designated as a High Demand/Controlled Access (HD/CA) course. Students registering for HD/CA courses for the first time will have priority to do so.

Course Organization

The focus of the course will be on teaching you how to begin with a problem statement and then systematically design a computer program that solves the problem. The idea is to give you the proper knowledge, intuition, and habits on which you can base a lifetime of learning in computer science.

 

You will be using a subset of the programming language Java, the core subset, using a programming environment called IntelliJ IDEA. (Do not use IntelliJ IDEA until we are ready to use it though. I will let you know when that is.) IntelliJ IDEA is designed for programming professionals and is widely used in both academia and industry. It is most likely that you will be using a small subset of its features in this course, but you are welcome to explore as much as you wish as you program in Java this semester and beyond.

Course Learning Outcomes

Upon completion of the courses, students are expected to possess:

·      An ability to program in an object oriented language, using concepts such as object classes, encapsulation, inheritance, and polymorphism.

·      An ability to use fundamental data structures such as arrays.

·      An ability to program with sound code structure and use systematic software debugging and testing techniques.

Prerequisites

·      Level 4 or higher on the math placement exam

·      Advisory Prerequisite: CSE101 or ISE108 Important note: if you have no prior programming experience (i.e. have not taken a course equivalent to CSE101), we STRONGLY recommend you switch to CSE101 as that course will be more manageable than CSE114 and will prepare you to succeed in this class in an upcoming semester.

Major Topics Covered in Course

·      Introduction to Objects in Java, using predefined objects (e.g. String)

·      Review of program control statements: conditionals and loops with an introduction to formal methods (preconditions, post conditions, loop invariant)

·      Writing more complex classes.

·      Arrays and the ArrayList class.

·      Inheritance and polymorphism in Java, simple examples, the Java class hierarchy.

·      Exceptions and File I/O.

·      Recursive programming, basic examples (factorial, Fibonacci numbers, Towers of Hanoi, etc...)

·      Documenting sources of code

Grades and Evaluation

Your grade in the course will be based on the following formula:

 

Class Participation – 5%

Assignments – 45% – Programming assignments will be given each week including some problems from the text book that will give the student an opportunity to apply the knowledge acquired from reading and lectures.

Exams – 30% – 3 exams spaced at about 1 month intervals (10% each). The exams are based on readings, lecture slides, and demos presented in class and test ability to write short programs and understand Java syntax and semantics.

Final Exam – 20% – A cumulative final exam will provide questions that will cover the key concepts taught during the entire semester.

 

Makeup examinations will only be given for verified, officially sanctioned university activities. All makeup examinations may be oral.

Final Grade Calculation

Important note: You must attain a grade of at least 60% on exams and 60% on assignments to achieve a grade higher than C-.

 

Letter grades are given on the following scale:

 

Letter

Minimum Percentage

A

90

A-

85

B+

80

B

75

B-

70

C+

65

C

60

C-

57

D+

54

D

50

F

<50

Attendance

The range of topics covered in this course is extensive, and due to the limited lecture

and lab time, these topics are covered in an intensive manner. Therefore, attendance

at both lectures and labs are mandatory in order to keep up and perform well.

      Attendance will be taken in the beginning of each lecture and lab session.

      If a student has over 20% unexcused absences, the final course grade will be an F.

Course Schedule

The following is a tentative course schedule. The readings are from “Think Java” (2nd edition), unless otherwise noted.

 

Week/Day

Lecture Topics

Readings

Exams

W1: 8/24, 8/26

Course overview, elementary programming

Chapter 1

 

8/25, 8/27 [Labs]

Installing Java, using Java API website

 

 

W2: 8/31, 9/2

Program structure, methods, variables, types

Chapters 2, 3, 4

 

9/1, 9/3 [Labs]

 

 

 

W3: 9/7, 9/9

Abstraction, conditionals

Chapter 5

 

9/8, 9/10 [Labs]

 

 

 

W4: 9/14, 9/16

Iteration (‘while’ and ‘for’ loops),

arrays

Chapter 6.1-6.4, 7

 

 9/15, 9/17 [Labs]

Exam review 9/15

 

Exam [9/17]

W5: 9/21, 9/23

Advanced Arrays, 2D Arrays

Chapter 9.1, 9.2, 9.4

 

9/22, 9/24 [Labs]

 

 

 

W6: 9/28

Defining classes and creating objects

Chapter 9, 10, 11, 12

 

 9/29, 9/30-10/2

No class – Correction Day + Chuseok

 

 

W7: 10/5, 10/7

Assertions, reasoning and logic

Chapter 9, 10, 11, 12

 

10/6, 10/8 [Labs]

 

 

 

W8: 10/12, 10/14

Multiple classes, static vs dynamic objects, sorting, searching

Chapter 9, 10, 11, 12

 

10/13, 10/15 [Labs]

Exam review 10/13

 

Exam [10/15]

W9: 10/19, 10.21

Objects, object composition, memory representation of objects, printed representation of objects, equality testing, object passing

Chapter 9, 10, 11, 12

 

10/20, 10/22 [Labs]

IntelliJ, IntelliJ debugger

 

 

W10: 10/26, 10/28

Static/dynamic members, visibility control, ‘this’

 

 

10/27, 10/29 [Labs]

 

 

 

W11: 11/2, 11/4

Comparing objects, object sorting, compound statements, exception handling, file I/O

Liang: Chapter 12, 13.6

 

11/3, 11/5 [Labs]

 

 

 

W12:  11/9, 11/11

Interfaces, inheritance

Chapter 14

 

11/10, 11/12 [Labs]

Exam review 11/10

 

Exam [11/12]

W13: 11/16, 11/18

Abstract classes

Liang: Chapter 13

 

11/17, 11/19 [Labs]

 

 

 

W14:  11/23, 11/25

Recursion, ArrayLists

Chapter 8

 

11/24, 11/26 [Labs]

 

 

 

W15: 11/30, 12/2

[11/30] No class – Correction Day

Final Exam review

 

 

12/1, 12/3 [Labs]

 

 

 

Programming Assignments

Development Environment

The programming that you do in this course will be in Java, initially using the vim editor and the command line. IntelliJ IDEA may be used later in the course. Java, vim, and IntelliJ IDEA are all available free for you to install on your computer. If you don't have a computer of your own to use, please let me know as soon as possible.

Assignment Late Policy

Assigned work is not accepted for credit once the deadline has passed. Students who take this course are often surprised by just how much time this course requires of them. You are advised to budget your time wisely and to start working on an assignment the day it is posted.

Academic Integrity: Cooperation vs. Cheating

Working with others on assignments is a good way to learn the material and we encourage it. However, there are limits to the degree of cooperation that we will permit.

 

When working on programming assignments, you must work only with others whose understanding of the material is approximately equal to yours. In this situation, working together to find a good approach for solving a programming problem is cooperation; listening while someone dictates a solution is cheating. You must limit collaboration to a high-level discussion of solution strategies, and stop short of actually writing down a group answer. Anything that you hand in, whether it is a written problem or a computer program, must be written in your own words. If you base your solution on any other written solution, you are cheating.

It is okay to help other students, within limits. If you are asked for help by another student, two things that are absolutely forbidden are to show that student your solution or to put your hands on that student's keyboard or paper. That isn't helping; that is facilitating cheating! Instead, answer questions; give tips; help with tools; explain Java; point out a bug; and/or give encouragement. In other words, interact with other students the way that the TAs do.

When taking an exam, you must work completely independently of everyone else. Any collaboration here, of course, is cheating.

We do not distinguish between cheaters who copy others' work and cheaters who allow their work to be copied.

If you cheat, you will be referred to the appropriate office at the University. If you have any questions about what constitutes cheating, please ask.

This is what the University says: Each student must pursue his or her academic goals honestly and be personally accountable for all submitted work. Representing another person's work as your own is always wrong. Faculty members are required to report any suspected instances of academic dishonesty to the Academic Judiciary Committee or the Department of Academic Affairs.

Re-grading
Should you discover what you think is an error in grading your work, you have exactly one week after the grades are made available to you to request a regrade - no exceptions. 

To promote consistency of grading, questions and concerns about grading of assignments should be addressed first to the TA and then, if that does not resolve the issue, to the instructor. 

You are welcome to contact the TA by email or come to their office hours. If you would like to speak with the TA in person and have a schedule conflict with their office hours, you are welcome to make an appointment to meet the TA at another time. 

Getting Help and Information

Piazza

We will be using Piazza, which is a forum website that you can post questions and get answers from TAs, the professor, and classmates.

The Piazza discussion board should be used for all communication with the teaching staff for questions about the course assignments and material. Email should be sent to individual instructors or teaching assistants only to schedule appointments.

Piazza is a forum for additional learning and assistance. The following are not appropriate uses of Piazza:

·      cyber-bullying

·      posting memes

·      complaining about a grade

·      airing concerns/comments/criticisms about the course

·      posting more than a few lines of source code from an attempt at a homework problem

·      posting the solution to a homework problem or a link to a website containing the solution

·      in general, anything unrelated to the course material and student learning

Therefore, students are expected to use the Piazza forum for all non-personal, course-related communication. Questions about what a homework problem is asking, technical problems that need troubleshooting, or other questions that might be of interest to other students must be posted to Piazza and not emailed to the instructor or a TA.

If code is relevant to a student's Piazza question, the student may post only short code snippets. For more extensive help with reviewing or debugging code, students must attend office hours.

Time Commitment

Students are often surprised by the amount of human effort that has to go into designing, writing, and testing a program. Complaints from students about the amount of time required by introductory computer programming courses are universal. You should expect to spend three hours outside of class for every hour that you spend in class. In other words, you should expect to spend nine hours per week reading, studying, and developing programs. Some of you will spend more than that. Please keep this in mind when setting up your schedule for the semester!

How to Approach This Class

For most of you, this will be your first or second class in computer science. Here is some advice on how to approach this class.

·      Skim the relevant chapter(s) in the suggested reading before you come to lecture, and read more carefully after the lecture. The lecture will not assume that you have read the suggested chapter in advance, and the lecture should help you understand the context and key points of the chapter. Nevertheless, the lecture does not fully replace reading, because the lecture may omit fine points that are discussed in the reading assignment.

·      Concentrate in lecture. The concepts that are presented in lecture are what's important; you will be able to find the details in the book or in my lecture notes. Writing down everything that is said and then trying to figure it out later would not be a good way to learn. Instead, think about what is being said. I will ask many questions. Try to answer all of them even if you do only in your head. Raise your hand and ask a question when you don't understand something. Try to understand everything. Don't give up!
You are welcome to ask as many questions as you wish, but try not to answer too many of my questions. This is to give others a chance to answer them too.

·      Participate in the labs. You'll be sitting at a computer in a room with the instructor, a teaching assistant, and other students. Take advantage of the computer by trying things out. That way, you'll discover the things that you don't understand in a setting where there are plenty of others to help you out. Try to read the lab assignment before you come.

·      Respect the assignments. Some students expect that the assignments will be straightforward if they have done the reading and concentrated in lecture. Not so! The assignments are designed to challenge you by requiring that you apply the concepts you have learned to new situations. The assignments will be your most important learning experience in the course. They will rarely be straightforward. The initial assignments may seem straightforward but that is not a good indication of what the remaining assignments will be like.
Assignments become more complex as we incorporate more concepts and ideas into them throughout the semester. Here is a suggestion on how you might approach each assignment:

o   As soon as you receive an assignment, read it and understand what is being asked, even if you are not ready to commit any time to actually solving them. Ask questions if the specification is not clear. Once you have the problem in your head, it is most likely that you will find yourself thinking about it, perhaps at least subconsciously if not actively.

o   Ask questions when you get stuck. Please use Piazza for asking questions. I am also available during office hours and the TAs are also able to help during their office hours. There is no need to schedule an appointment if you need help – just show up during the office hours.

o   Start early so that you will have time to take a break when you get stuck. Waiting until a few days before the due date is a bad plan. When I give you a week, I give you that much time because it would take that much, factoring in whatever else you would be doing in a typical week. It gets harder to get help from us as it gets close to the due date – plus you won't have time to take a break by then.

o   Study the solutions. Your struggles on the assignment will be for nothing if you don't review your work. Getting the right answer isn't enough. There is almost always a better way to solve a problem in programming. See if the sample solutions that I give you are better than yours; if so or if not, convince yourself why and how?

Students with Disabilities

If you have a physical, psychological, medical or learning disability that may impact your course work, please contact the Department of Student Affairs, Campus Building A, Room 207, (032) 626-1190. They will determine with you what accommodations, if any, are necessary and appropriate. All information and documentation is confidential. 

Critical Incident Management

SUNY Korea expects students to respect the rights, privileges, and property of other people. Faculty are required to report to the Department of Academic Affairs any disruptive behavior that interrupts their ability to teach, compromises the safety of the learning environment, or inhibits students' ability to learn.

Classroom Mask Policy

Everyone participating in this class during in-person sessions must wear a mask or face covering at all times or have the appropriate documentation for medical exemption. Any student not in compliance with this policy will be asked to leave the classroom. If students need to drink or eat, they should step out of the classroom to do so.