There is a more recent offering of this course. This is an archive of the
course which was offered in Winter 2018-2019.
CS1021
Outcomes
Weekly Outcomes
At the end of each week, students should be able to do the following:
## Week 1
### Java Fundamentals
* Be aware of the memory requirements and value ranges for primitive types
* Use mathematic operations to manipulate characters
* Interpret code in which automatic type conversions are present
* Use type casting to explicitly convert data types
* Explain the risks associated with explicit type casting
* Use increment and decrement operators
* Explain how pre- and post- increment/decrement operators differ in functionality
* Use short-circuit evaluation to avoid divide-by-zero and null-pointer exceptions
### Inheritance
* Use inheritance in creating classes
* If no default constructor is present in the superclass, explain why a constructor of a subclass should make an explicit call to a constructor of the superclass
* Define aggregation
* Define composition
* Use aggregation and composition within user defined classes
* Explain what is meant by "overriding a method"
* Make use of `super` reference to call a parent method from within a method that overrides it
## Week 2
### UML
* Read and understand UML class diagrams
* Implement source code that meets the design specified in a UML class diagram
## Week 3
### Inheritance and Polymorphism
* Explain the role of the `Object` class
* Explain how automatic type promotion works with object references
* Override the `equals()` and `toString()` methods for user defined classes
* Explain the relationship between a reference type and the type of the object to which the reference points
* Explain the concept of polymorphism/dynamic binding
* Read code that uses inheritance and polymorphism and determine its output on execution
* Identify legal and illegal assignments of references to objects based on the reference type and object type.
* Explain what it means for a class to implement an interface
* Use the `protected` modifier in defining an inheritance hierarchy
* Describe when to use an abstract class
* Explain the concept of the Java interface
* Create an abstract method; describe the purpose of abstract methods
* Describe the differences between an abstract class and an interface
* Explain why Java prohibits multiple inheritance
## Week 4
### GUI Components
* List at least three types of objects that can be contained in a [`Parent`](http://javadoc.taylorial.com/javafx.graphics/scene/Parent.html) object
* Design and implement a graphical user interface (GUI) programs using the [`Label`](http://javadoc.taylorial.com/javafx.controls/scene/control/Label.html) and [`Button`](http://javadoc.taylorial.com/javafx.controls/scene/control/Button.html) classes from the JavaFX package
### Event-Driven Programming
* Derive from the [`Application`](http://javadoc.taylorial.com/javafx.graphics/application/Application.html) class and create a simple GUI application
* Create a [`FlowPane`](http://javadoc.taylorial.com/javafx.graphics/scene/layout/FlowPane.html) and add multiple components to the pane
* Explain what it means to "register an event handler"
* Use a method reference to register an event handler to a [`Button`](http://javadoc.taylorial.com/javafx.controls/scene/control/Button.html) or [`TextField`](http://javadoc.taylorial.com/javafx.controls/scene/control/TextField.html)
* Explain the role of the [`ActionEvent`](http://javadoc.taylorial.com/javafx.base/event/ActionEvent.html) passed to the method reference
* Determine the source of the event that called an event handler
* Describe the event-delegation model and explain the role of the event source object and the event listener
* List two classes whose instances are the source of events (e.g., [`Button`](http://javadoc.taylorial.com/javafx.controls/scene/control/Button.html))
* List two classes whose instances are event objects (e.g., [`ActionEvent`](http://javadoc.taylorial.com/javafx.base/event/ActionEvent.html))
* Implement the [`EventHandler`](http://javadoc.taylorial.com/javafx.base/event/EventHandler.html) interface as an inner class
* Implement an [`EventHandler`](http://javadoc.taylorial.com/javafx.base/event/EventHandler.html) as a lambda expression
## Week 5
### GUI Components
* Differentiate between layout panes such as: [`GridPane`](http://javadoc.taylorial.com/javafx.graphics/scene/layout/GridPane.html), [`FlowPane`](http://javadoc.taylorial.com/javafx.graphics/scene/layout/FlowPane.html), [`HBox`](http://javadoc.taylorial.com/javafx.graphics/scene/layout/HBox.html), and [`VBox`](http://javadoc.taylorial.com/javafx.graphics/scene/layout/VBox.html)
* Use the layout panes listed above to arrange components on a scene
### FX Markup Language
* Describe the differences between creating JavaFX applications using imperative programming and using FXML with declarative style programming
* Use scene builder to create an FXML file describing a GUI layout
* Implement controller classes and make appropriate modifications to FXML files to provide functionality to UI controls such as [`Button`](http://javadoc.taylorial.com/javafx.controls/scene/control/Button.html) and [`TextField`](http://javadoc.taylorial.com/javafx.controls/scene/control/TextField.html) classes
* Use [`Alert`](http://javadoc.taylorial.com/javafx.controls/scene/control/Alert.html) and [`TextInputDialog`](http://javadoc.taylorial.com/javafx.controls/scene/control/TextInputDialog.html) classes to interact with the user.
### Exception Handling
* Explain how exception handling increases the robustness of software
* Define exception; explain the concepts of `catch` and `throw` as they relate to exceptions
* Explain why [`Error`](http://javadoc.taylorial.com/java.base/lang/Error.html) exceptions should not be caught in application code
* For a given program and input condition, determine the control flow of a `try`-`catch` block
* Implement a method that catches an exception thrown by a class in the Java Standard Library
* Implement a method that uses a `try`-`catch` block and a repetition statement (i.e., loop) to validate user input
* Distinguish between checked and unchecked exceptions
* Explain the concept of exception propagation; explain the outcome if an exception is thrown and not caught by the program
* Explain the consequences of not handling a checked exception within a method where the checked exception occurs
## Week 6
### Exception Handling
* Use multiple `catch` blocks to customize the way different types of exceptions are handled
* Inspect a call stack trace displayed by an unhandled exception to determine what caused the exception to be thrown
* Use the `throws` clause to postpone when a checked exception is handled
* For a given program and input condition, determine the control flow of a `try`-`catch` block with and without the `finally` clause
## Week 7
### File Input and Output (I/O)
* Create a Java [`Path`](http://javadoc.taylorial.com/java.base/nio/file/Path.html) object and associate it with a file on disk
* Determine if a file exists on disk
* Determine if a Java [`Path`](http://javadoc.taylorial.com/java.base/nio/file/Path.html) object is associated with a file or a directory
* Convert between [`Path`](http://javadoc.taylorial.com/java.base/nio/file/Path.html) and [`File`](http://javadoc.taylorial.com/java.base/io/File.html) objects
* Use the [`Files`](http://javadoc.taylorial.com/java.base/nio/file/Files.html) class to obtain input and output streams
* Associate a low-level input (i.e., [`FileInputStream`](http://javadoc.taylorial.com/java.base/io/FileInputStream.html)) or output (i.e., [`FileOutputStream`](http://javadoc.taylorial.com/java.base/io/FileOutputStream.html)) stream with a [`File`](http://javadoc.taylorial.com/java.base/io/File.html) object
* Describe how low-level file I/O works (i.e., reading or writing of byte data, importance of the sequence of data)
* Describe how high-level ([`DataOutputStream`](http://javadoc.taylorial.com/java.base/io/DataOutputStream.html) and [`DataInputStream`](http://javadoc.taylorial.com/java.base/io/DataInputStream.html)) file I/O works (i.e., methods for reading and writing of primitive data types, association with low-level stream, the importance of the sequence of data)
* Explain why it is important to close a stream when file operations are complete
* Use the try-with-resources construct to ensure resources are closed appropriately
* Explain what the [`PrintWriter`](http://javadoc.taylorial.com/java.base/io/PrintWriter.html) class is used for
* Read text data from a file using [`Scanner`](http://javadoc.taylorial.com/java.base/util/Scanner.html) objects
* Use the [`Files`](http://javadoc.taylorial.com/java.base/nio/file/Files.html) class to read/write text files
* Explain the difference between binary and text files
* Be familiar with how object I/O ([`ObjectOutputStream`](http://javadoc.taylorial.com/java.base/io/ObjectOutputStream.html) and [`ObjectInputStream`](http://javadoc.taylorial.com/java.base/io/ObjectInputStream.html)) works
* Describe some of the important exceptions that the java file IO classes generate.
## Week 8
### GUI Design
* Use [`FileChooser`](http://javadoc.taylorial.com/javafx.graphics/stage/FileChooser.html) to select and open files
* Give examples of visual cue techniques (proximity, highlights, grayed out, similarity, closure, visibility, constraints, mapping, flow)
* Define affordance and give an example of how it can be used in UI design
* Apply Fitts' Law to chose between alternative UI options
## Week 9
### Functional Programming
* Explain how functional programming differs from object oriented programming
* Describe when it is appropriate to replace code with a lambda expression
* Demonstrate correct use of lambda expressions
* Describe the purpose of the [`Stream`](http://javadoc.taylorial.com/java.base/util/stream/Stream.html) interface
* Make use of the `Iterable.forEach()` method
* Be familiar with the following methods from the [`Stream`](http://javadoc.taylorial.com/java.base/util/stream/Stream.html) interface: `count()`, `distinct()`, `filter`, `limit()`, and `sorted()`
* Obtain a `Stream` from a file
### Documentation and Distribution
* Generate HTML documentation using the Javadoc tool
* Generate executable JAR files
## Week 10
### Secure Software Development
* Describe how encapsulation can improve software security
* Describe how avoiding duplicate code can improve software security
* Demonstrate how validating input can improve software security
* Demonstrate how creating copies of mutable output values can improve software security
* Explain how `public static final` fields that are not constants can create security vulnerabilities
* Make use of `final` to guard against data corruption