CS1011
Outcomes
## Week 1 ### Writing Computer Software * Describe the steps involved in creating and running a Java program * Describe the contents of source (`.java`) and class (`.class`) files * Explain what happens (at a high level) when a Java program is compiled * Explain what happens (at a high level) when a Java program is run * Describe the difference between compilation and execution errors * Explain why a Java Virtual Machine (JVM) is required in order to run a Java program * Describe how bytecode makes Java programs portable * List the basic steps involved in software development ### Primitive datatypes, Variables, Identifiers * List the primitive types supported in Java: `int`, `long`, `float`, `double`, `char`, and `boolean` ([tutorial](http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html)) * Define **numeric literal** and provide an example of one * Define **character literal** and provide an example of one * Select the most appropriate primitive type to store a given piece of data * Use the assignment statement * Describe what happens in memory when a primitive variable is declared * Describe what happens in memory when an object identifier (reference) is declared * Describe the differences between primitives and objects (reference variables) * Define **string literal** and provide an example of one * Graphically illustrate the difference between primitives and reference types with memory diagrams * Demonstrate how an instance of a class is created (**new operator**) * Use valid and meaningful identifiers that are consistent with Java naming conventions ### Java Programming Basics * Recognize code documentation in source code * Demonstrate at least two forms of syntax for adding comments to source code * Replace hard coded constants with named constants ### Standard Java Classes * Demonstrate the use of `String.substring` * Demonstrate the use of `String.length` * Demonstrate the use of `String.charAt` * Use Oracle's [Java documentation](http://download.oracle.com/javase/8/docs/api/) to ascertain if a method is part of a given class ## Week 2 ### Arithmetic expressions * Demonstrate proper use of the following arithmetic operators: `+`, `-`, `*`, `/`, `%` * Identify and avoid unintended integer division errors * Distinguish between binary and unary operations * Define operator precedence * Interpret arithmetic expressions following operator precedence rules * Define and apply **typecasting** * Interpret code that makes use of compound assignment operations: `*=`, `/=`, `+=`, `-=`, and `%=` ### Input/Output * Use wrapper classes to perform type conversion, e.g., `int num = Integer.parseInt("14");` * Explain the source of data associated with the system input buffer: `System.in` * Perform standard/console input using the `Scanner` class * Explain the destination for data sent to the system output buffer: `System.out` * Perform standard/console output using the `System.out.println` method ### Algorithms and Design * Define the term algorithm * Explain the motivation for doing design before coding * Make use of variables and operations to perform calculations * Construct and interpret flowcharts representing sequential, conditional, and looping structures * Construct and interpret pseudocode representing sequential, conditional, and looping structures * Use flowcharts and pseudocode to describe algorithmic solutions to simple problems * Trace a program to debug it without running it ## Week 3 ### Selection statements * Define the functionality of the following relational operators: `<`, `<=`, `!=`, `==`, `>=`, `>` * Use relational operators to control program flow * Define the functionality of the following boolean operators: `&&`, `||`, and `!` * Use boolean and relational operators to construct meaningful boolean expressions * Use boolean expressions to control program flow * Describe the behavior of an `if` statement * Describe the program flow through a series of nested `if` statements * Use nested `if` statements to control program flow * Use a `switch` statement to control program flow * Rewrite a `switch` statement with one or more (potentially nested) `if` statements * Explain the purpose of the `case`, `break` and `default` reserved words * Define identifier **scope** and describe the implication to identifiers declared within an `if` block ### Iteration statements * Interpret code that makes use of the following looping constructs: `while`, `do-while`, and `for` * Design and write code that makes use of the following looping constructs: `while`, `do-while`, and `for` * Describe how the following constructs differ: `while`, `do-while`, and `for` * Rewrite a given `while` loop into an equivalent `for` loop, and vice versa * Select the most appropriate type of loop for a given problem ## Week 4 ### More Standard Java Classes * Define an Application Programming Interface (API) * Use Oracle's [Java documentation](http://download.oracle.com/javase/8/docs/api/) to ascertain the capabilities of a given standard java class * Use the Javadoc page for the `Math` class to perform calculations involving the following mathematic operations: * Absolute value * Trigonometric functions (in degrees and radians) * <i>pi</i> - ratio of the circumference of a circle to its diameter * x<sup>y</sup> * logarithmic functions * maximum/minimum of two numbers * Square root * Use parsing methods in wrapper classes to convert text representations of numbers into numeric format * Use the `toString` method in wrapper classes to convert from numeric format into text representations * Be familiar with methods from the `Character` class such as `isDigit` and `toLowerCase` * Use methods from the `String` class such as `isEmpty`, `substring`, `indexOf`, etc... * Generate random numbers ## Week 5 ### Java Packages * Explain the purpose of a Java package * List at least two packages that are part of the Java standard library * Define the term fully qualified name * Explain the purpose of the `import` statement ### Coding Standards * Explain the purpose of a coding standard * Apply the [MSOE Coding Standard](CodingStandard) ### Object Oriented Design / Object Oriented Programming * Define the following object oriented concepts: * Object types (Classes) * Class instances (Objects) * Instance variables (Attributes/Fields) * Instance behaviors/actions (Methods) * Distinguish between classes and objects * Describe how objects interact with one another by sending messages ## Week 6 ### UML * Correctly annotate and interpret fields (name and type) on a class diagram * Correctly annotate and interpret methods (with arguments and return type) on a class diagram * Generating class diagram from a verbal description of a class * Use visibility modifiers to denote the visibility of a field or method ### Class creation basics * Describe how an object differs from a primitive * Describe how a class differs from a primitive type * Define and use classes with multiple methods and data members (fields) * Define and use value-returning and void methods * Properly use visibility modifiers in defining methods and fields * Define and use class constants * Understand and apply accessor and mutator methods * Distinguish between instance variables and local variables * Define and use instance methods and instance variables (attributes/fields) * Define and use methods that have primitive data types as arguments * Understand the importance of information hiding and encapsulation * Declare and use local variables * Describe the role of the reserved word `this` * Demonstrate use of `this` to disambiguate object fields from local variables * Trace a program including calls to class methods in multiple classes * Use the debugger to trace the execution of a multi-class program ## Week 7 ### Defining your own classes * Create and use constructor methods * Define and use methods that have reference data types as arguments * Define and use overloaded methods * Call methods of the same class * Draw and explain memory diagrams that illustrate the instantiation of objects * Describe the role of the garbage collector * Compare the equality of two different objects * Swap the data in two different objects * Avoid redundant code by calling one constructor from a different constructor * Understand the implications of acting on an object to which there are multiple references ## Week 8 ### Design Techniques * Use helper methods to avoid redundant code * Adhere to the [CS1011 coding standard](CodingStandard) * Simplify complicated algorithms by encapsulating subordinate tasks * Be familiar with various design approaches such as top-down, bottom-up, and case-based * Use mechanisms in IntelliJ to refactor software * Document each method using the Javadoc convention ## Week 9 ### Class Members * Use class variables/attributes appropriately * Use class methods appropriately ### Arrays * Use an array to store primitive and object types * Create an array of a given size * Loop through an array * Pass an array as an argument ## Week 10 ### ArrayLists * Use an [`ArrayList<E>`](http://download.oracle.com/javase/8/docs/api/java/util/ArrayList.html) to store objects type `E` * Use methods from the [`ArrayList<E>`](http://download.oracle.com/javase/8/docs/api/java/util/ArrayList.html) class such as `isEmpty`, `get`, `set`, `add`, `remove`, `size`, `indexOf`, and `lastIndexOf` * Design and write code that makes use of the enhanced **for** loop, a.k.a, the for-each loop * Describe the advantages of an [`ArrayList<E>`](http://download.oracle.com/javase/8/docs/api/java/util/ArrayList.html) over an Array

Monday, 22-Oct-2018 07:24:29 CDT