Comp 401: Foundations of Programming
Assignments
and Associated Resources by Topics
Recitations
and Associated Material
Exam
Schedule (Subject to change)
Getting
Help and Class Discussion
Starting
Up Background Material
Comp
401 and Object Editor Papers
This course is
intended for people who have learned to program. Its goal is to teach how to
program well. The common programming strategy of beginners is to write the
first solution they can think of without carefully identifying and weighing
different alternatives. For all but the simplest problems, this approach of
writing quick and dirty programs will take you to the debugging stage very
quickly, but will make debugging slow. For large, complex programs, you need
to identify multiple alternative solutions to the problem, choose an
alternative that most directly solves the problem, and think carefully what
your solution does, and how it works. The claim is that, although quick and
dirty programming may produce a program faster, the concepts we teach will
help you produce a correct program faster. Moreover, they will lead to
programs that are easy to change and reuse. We assume you have
learned the following basic programming concepts: primitive types (integers,
real numbers, Booleans), variables, constants, assignments, comments,
expressions, arrays, loops, arrays, and procedures/functions/methods. These
concepts are taught in most, if not all, introductory programming courses
regardless of whether they teach conventional or object-oriented programming.
This course will teach you the next-level programming concepts. These include
objects, classes, interfaces, packages, inheritance, delegation, design
patterns, exceptions, assertions, pointers, and formal correctness. These
concepts will not help you solve new problems; rather, they will help you
solve problems in new ways. The skills that will enable you to use these
concepts will form a large part of the challenge you face in this course.
After this course, you will have a much deeper understanding of the
programming and learn some of the ideas that can make programming a science.
We will be using Java as a vehicle for learning these concepts. |
Course Syllabus in UNC Format
|
Background
Course Examples |
Fall 2007 Comp 110 (Using Object Editor) Offering
by Sasa Junuzovic
|
Fall 2011 Comp 110 (with ObjectEditor and
Eclipse Helper) Offering by Jason Carter |
Unit |
PPT Slides and Exported PDF and Videos |
Chapters
|
Relevant
Videos |
Assignments (Please
scroll to see the first assignment) |
Source Code of Examples (Java Package) |
Course Information |
|
|
|
||
Scanning |
|
|
|||
Class Dual Role |
|
A2.
Number And Word Scanner Bean |
lectures.class_dual_roles.statics Package |
||
Constructors and Pointers |
|
|
lectures.constructors_pointers Package Git
(Constructors and Pointers) |
||
Programming
Interfaces |
|
A3.
Token Beans and Interfaces |
|||
User Interfaces |
|
|
|
||
Composite Objects |
|
|
|||
Composite: Tree, DAGS & Graphs of Objects
and Windows |
|
|
lectures.composite.tree_dag_graph_objects_windows Package Git
(Trees, DAGS, Graphs, Windows) |
||
Elements of Programming Style |
|
|
|
|
|
Inheritance and Collections |
|
A6.
Completing the Bridge Scene |
|||
Inheritance and variables |
|
|
|||
IS-A |
|
|
|||
Collection Kinds |
|
|
|||
MVC |
|
|
lectures.mvc.monolithic Package (No praxis) lectures.mvc.interactor Package (no praxis) lectures.mvc Package (no praxis) |
||
Component Notifications |
|
|
lectures.mvc.properties.atomic Package (observer
praxis) |
||
MVC and Toolkits |
|
|
lectures.mvc.toolkit Package (mvc
toolkit praxis) |
||
MVC and Graphics |
|
|
lectures.mvc.graphics Package (mvc
graphics praxis) |
||
Assertions |
|
A10.
Assertions, Commands, Threads |
|||
Animation: Threads and Command
Objects |
|
lectures.animation.threads_commands Package |
|||
Inheritance:
Abstract Classes |
|
|
|||
Parsing
and Grammars |
|
|
|||
Animation and Threads: Synchronized
Methods |
|
||||
Animation and Threads: Wait and
Notify |
|||||
Generics, Adapters, Basic Delegation |
|
|
|||
Exceptions |
|
|
|||
Conclusion |
|
|
|
|
|
Prasun Dewan
(Lectures) |
Office: FB 150 See Course
Syllabus in UNC Format on how to contact the instructor. Office Hours: Tuesday
12:15 to 13:30, Thu 15:30 to 16:30 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Room AR 121 |
Time: TR 11am-12:15pm (Bring your laptop to class) |
401
609 401
610 |
SN 014, Friday 1:25pm-2:15pm SN 014, Friday 2:30pm-3:20pm NOTE: Bring your laptops every Friday. You will
use them for programming exercises. |
Recitation
material: Recitations |
Midterm |
Tuesday Oct 16th,
2018 (during class hours, in class) |
|
Final |
12pm, Thu Dec. 13 (in class) |
|
1. In general I like to ask some obvious and subtle questions that have been directly answered in class; and some questions requiring creativity. 2. This means you should both study well and get a good night s sleep. 3. Look at the old exams to get an idea of what form these questions can take. 4. No solutions will be posted for these exams. Posting solutions encourages students to not try and solve problems. The corollary of this is that you should not distribute your solutions to old exam problems. You can discuss in English individual aspects of the exams, and you can use Eclipse and checkstyle – with the latest assignment checks- for validating that your solutions follow general style rules. 5. The solved examples in the course material are what you should look at if you want to learn from solutions. I strongly encourage you to do these solved problems, consulting the solutions only when necessary. 6. This is a big class, so it will be difficult to have everyone start and stop at the same time. So please come early - I plan to be there 15 minutes early and will start distributing the exam then. As you may have another engagement before that, I will also probably take 15 minutes to collect the exams and you can be one of those who return exams at the end. 7. Usually my exams are not a test of your speed. Though most people wait until the end to return them, and that is a good idea in general, some students take less than 30 minutes and get almost perfect scores. 8. There will be no assignment due the week of the exam. 9. You can of course listen to all of the audio recordings or redo praxes, but that will probably take more time than you have. To reduce this time you can do several things. 10. You can read the word documents in the Chapters column. These are dated but most of the students in my previous classes have found them very useful. 11. You can of course listen to the recordings of only the slides you do not understand. 12. Without going to the slide show mode, you can click on the recording associated with a slide and use the controls to skip over material you understand. 13. You can execute Slide Show-->Setup Slide Show and ask for the slide show to be created in a resizable window and do other work when the playback addresses something you already now. 14. You can look at the quiz questions and answers, which distill what you have learned from the course material. 15. You can look at your diaries for additional information, though these questions and answers are not exhaustive. 16. The exams will require you to follow style rules. The whole course is a bunch of style rules and principles. (What you learned in the previous class was enough to write any program. ) The setoff specified assignment constraints is the obvious first place to look for easy to follow rules. |
We will be using Piazza for class
discussion and getting help. The system is highly catered to getting you help
fast and efficiently from classmates, the TA, and myself. Rather than
emailing questions to the teaching staff, I encourage you to post your
questions on Piazza. If you do not get a response within a day or two on
Piazza, please send mail to help401-001@cs.unc.edu. But try Piazza first. Do
not send mail to an individual instructor, as that can overwhelm him - such
mail will be ignored. Before posing a question, please
check if this question has been asked before. This will reduce post clutter
and reduce our burden. Repeat questions will be ignored by the instructors. Piazza allows anyone to respond. So if
you see a question that you think you can respond to, please do so, as that
will reduce our burden and help you "teach" your fellow students. This will be a form of class
participation that will be noted when I allocate my fudge points! Hope it works well If you have any problems or feedback
for the developers, email team@piazza.com. Find our class page at: https://piazza.com/unc/fall2018/comp401002 |
Zipped Directory (dated) |
Git Repository (current) |
ObjectEditor Version 3 (used in comp110) |
|
ObjectEditor Version 21 |
|
ObjectEditor Version 22 (latest, use this unless it fails
on you) |
|
ObjectEditor with Graphs (huge!) |
|
Checkstyle |
|
Runtimechecks (Includes
oeall22.jar) |
|
Runtimechecks without oeall22.jar (for TAs) |
|
Consent Form |
|
Images |
Unit |
PPT Slides and Exported PDF and Videos |
Chapters
|
Algorithm
Videos |
||
Guide to Learning Resources: PowerPoint to
Praxes and Autocheckers |
|
|
|
|
|
JDK Download |
|
|
|
|
|
Eclipse Install & Use |
|
|
|
||
Difficulty Plugin |
|
|
|
|
|
Checkstyle with UNC
Checks : Install and Use |
|
|
|
|
|
Runtime local checks: Install and Use |
|
|
|
|
|
ObjectEditor Install |
|
|
|
||
Grading Server |
|
|
|
|
|
Importing Git Project (JavaTeaching) |
|
|
|
|
|
Eclipse Project Searches (e.g. JavaTeaching ) |
|
|
|
|
|
Diary Posts |
|
|
|
|
|
Specifying Main Args
in Eclipse |
|
|
|
||
Debugging in Eclipse |
|
|
|
||
Relevant Java Syntax |
|
|
|||
Screen Sharing Tool |
|
|
|
|
|
ObjectEditor Use |
|
|
|
|
|
Local Checks from Git (For TAs mainly) |
|
|
|
|
|
Complete Grader from Git (TAs mainly) |
|
|
|
|
Unit |
Recorded
PPTX Slides |
Chapters
(Not always current with PPT) |
Algorithm
Videos |
Source Code of Examples (Java Package) |
|
Windows Command Line in general |
|
|
|
|
|
Command Line Program Development (Windows) |
|
|
|
|
|
Command Line Program Development (Unix, Linux,
Mac) |
|
|
|
|
|
Install Egit |
|
|
|
|
|
Theater Model of the Computer |
|
|
|
||
Object-first
Introduction to Programming |
|
||||
Packages
|
|
|
|||
Functions |
|
|
|||
State
and Properties |
|
||||
Interfaces
|
|||||
Least Privilege |
|
||||
Math Types (401 Prerequisite) |
|
|
|||
Documentation: Comments |
|
|
|||
Documentation: Annotations Meta Circularity |
|
|
|||
Composite: Annotations |
|
||||
Patterns, Interfaces and ObjectEditor
|
|
|
|
||
Static State |
|
|
|||
Main and Console Input |
|
||||
Types: Char, String, |
|
|
|||
Types: Enums |
|
|
|||
Conditionals |
|
|
|||
Loops |
|
|
|||
Conditionals: Advanced |
|
|
|||
Loops: Advanced |
|
|
|||
Animation: Loops |
|
||||
Files |
|
||||
Arrays |
|
|
|||
Arrays:
Collection Implementation |
|
|
|||
Iterators
and Scanning |
|
||||
Arrays: Collection Kinds (10/3) |
|
|
|||
Inheritance:
Virtual, Abstract Factory Methods |
|
lectures.inheritance.virtual_abstract_factory_methods
Package |
|||
Factories |
|
||||
Inheritance:
Multiple |
|
|
|||
Documentation: Assertions |
|
lectures.mvc.monolithic Package |
|||
Reflection |
|
||||
Recursion (11/19) |
|||||
Composite: Visitors |
|
||||
Undoable Command Objects |
|
||||
Generics: Advanced |
|
||||
Equals Method and Overloading vs.
Polymorphism |
|
||||
Clone Method and Deep vs. Shallow
Copying (Fall 11 Lecture) |
|
|
|||
Conversion
vs. Casting (Fall 11 Lecture) |
|
|
|||
Inheritance
vs. Delegation or Indiscriminate Use of Inheritance Considered Harmful |
|
|
lectures.inheritance_vs_delegation lectures.inheritance_vs_delegation.abstract_method lectures.inheritance_vs_delegation.mvc |
||
Assertions: Advanced |
|
|
|||
Virtual, Abstract and Factory Methods |
|
|
|||
Animation and Threads: User-Interface
Thread |
|
||||
Factories |
|
|
|
|
|
(Will need to
download papers when logged in to UNC network to get access to ACM Digital
Library)
Talk |
||
|
||
The design patterns taught in Comp 401 |
Prasun
Dewan, Teaching Inter-Object Design Patterns to Freshmen. Proceedings of ACM
SIGCSE. 2005 |
|
The use of ObjectEditor
in Comp 110 and 401 |
||
How ObjectEditor is
different from other generators of user-interfaces |
||
How ObjectEditor can be
customized |
|
|
ObjectEditor and Mobile Device User Interfaces |
|