## 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 and sequence diagrams * Implement source code that meets the design specified in a UML class and sequence 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`]( object * Design and implement a graphical user interface (GUI) programs using the [`Label`]( and [`Button`]( classes from the JavaFX package ### <a name="eventDriven">Event-Driven Programming</a> * Explain the roles of event sources and event listeners in event-driven programming * List the two types of objects required for event driven programming in Java * Explain the role of "event source" objects and give examples of two classes whose instances are "event source" objects * Explain the role of "event listener" objects and give examples of two classes whose instances are "event listener" objects * Derive from the [`Application`]( class and create a simple GUI application * Implement the [`EventHandler`]( interface as an inner class * Implement an [`EventHandler`]( as a lambda expression * Explain the purpose of the argument passed to the [`handle()`]( method * Determine the event source that caused the [`handle()`]( method to be called ## <a name="week5">Week 5</a> ### <a name="gui2">GUI Components</a> * Differentiate between layout panes such as: [`GridPane`](, [`FlowPane`](, [`HBox`](, and [`VBox`]( * 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`]( and [`TextField`]( classes * __Use [`Alert`]( and [`TextInputDialog`]( 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`]( 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 [`File`]( object and associate it with a file on disk * Determine if a [`File`]( object exists * Determine if a [`File`]( object is a file or a directory * Associate a low-level input (i.e., [`FileInputStream`]( or output (i.e., [`FileOutputStream`]( stream with a [`File`]( 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`]( and [`DataInputStream`]( 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 * Explain what the [`PrintWriter`]( class is used for * Read text data from a file using [`Scanner`]( objects * Explain the difference between binary and text files * Be familiar with how object I/O ([`ObjectOutputStream`]( and [`ObjectInputStream`]( 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`]( to select an 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="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 ## <a name="week10">Week 10</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`]( interface * Make use of the [`Iterable.forEach()`]( method * Be familiar with the following methods from the [`Stream`]( interface: `count()`, `distinct()`, `filter`, `limit()`, and `sorted()` ### <a name="javadoc">Documentation and Distribution</a> * Generate HTML documentation using the Javadoc tool * Generate executable JAR files

Thursday, 15-Feb-2018 11:45:41 CST