CS1021
Outcomes
## Week 1 ### <a name="fundamentals">Java Fundamentals</a> * 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 ### <a name="inheritance">Inheritance</a> * 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 ## <a name="week2">Week 2</a> ### <a name="uml">UML</a> * Read and understand UML class diagrams * Implement source code that meets the design specified in a UML class diagram ## <a name="week3">Week 3</a> ### <a name="polymorphism">Inheritance and Polymorphism</a> * 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 ## <a name="week4">Week 4</a> ### <a name="gui">GUI Components</a> * 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 ### <a name="eventDriven">Event-Driven Programming</a> * 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 ## <a name="week5">Week 5</a> ### <a name="gui2">GUI Components</a> * 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 ### <a name="fxml">FX Markup Language</a> * 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. ### <a name="exceptions">Exception Handling</a> * 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 ## <a name="week6">Week 6</a> ### <a name="exceptions2">Exception Handling</a> * 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 ## <a name="week7">Week 7</a> ### <a name="io">File Input and Output (I/O)</a> * 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. ## <a name="week8">Week 8</a> ### <a name="gui3">GUI Design</a> * 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 ## <a name="week9">Week 9</a> ### <a name="functional">Functional Programming</a> * 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 <a href="http://javadoc.taylorial.com/java.base/lang/Iterable.html#forEach(java.util.function.Consumer)">`Iterable.forEach()`</a> 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<String>` from a file ### <a name="javadoc">Documentation and Distribution</a> * Generate HTML documentation using the Javadoc tool * Generate executable JAR files ## <a name="week10">Week 10</a> ### <a name="security">Secure Software Development</a> * 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

Friday, 25-Jan-2019 09:25:32 EST