There is a more recent offering of this course. This is an archive of the
course which was offered in Fall 2017.
SE1011
Outcomes
Weekly Outcomes
At the end of each week, students should be able to do the following:
## 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 expresions 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
* Demonstrate the use of `JOptionPane.showMessageDialog()` to display text via a Graphical User Interface (GUI)
* Demonstrate the use of `JOptionPane.showInputDialog()` to get text via a GUI
### 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)
* pi - ratio of the circumference of a circle to its diameter
* xy
* 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 [SE1011 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`](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`
* 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`](http://download.oracle.com/javase/8/docs/api/java/util/ArrayList.html) over an Array