There is a more recent offering of this course. This is an archive of the
course which was offered in Fall 2019.
CS1011
Outcomes
Weekly Outcomes
At the end of each week, students should be able to do the following:
## Week 1
---
## Self-Learning Module
### 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
---
## Self-Learning Module
### 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
---
## Self-Learning Module
### 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)_
* _pi - ratio of the circumference of a circle to its diameter_
* _xy_
* _logarithmic functions_
* _maximum/minimum of two numbers_
* _Square root_
* _Generate random numbers_
---
### More Standard Java Classes
* 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...
## 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
---
## Self-Learning Module
### 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
* 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
---
## Self-Learning Module
* _Describe the role of the garbage collector_
* _Compare the equality of two different objects_
* _Swap the data in two different objects_
---
## Week 8
### Design Techniques
* Use helper methods to avoid redundant code
* Adhere to the [CS1011 coding standard](CodingStandard)
* Document each method using the Javadoc convention
---
## Self-Learning Module
### Design Techniques
* _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_
---
## 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`](http://download.oracle.com/javase/8/docs/api/java/util/ArrayList.html) to store objects type `E`
* Use methods from the [`ArrayList`](http://download.oracle.com/javase/8/docs/api/java/util/ArrayList.html) class such as `isEmpty`, `get`, `set`, `add`, `remove`, `size`, `indexOf`, and `lastIndexOf`
* Describe the advantages of an [`ArrayList`](http://download.oracle.com/javase/8/docs/api/java/util/ArrayList.html) over an Array
---
## Self-Learning Module
* _Design and write code that makes use of the enhanced **for** loop, a.k.a, the for-each loop_
---