SE1011
Outcomes

The numbers in parentheses at the beginning of an outcome indicate the first time a concept was discussed in class. For example (1_2) indicates a topic first discussed in Week 1, Day 2. Some topics will be reviewed in later classes in more detail — the review days are not indicated here.

Optional Goodies

Week 1

Primitive datatypes, Variables, Identifiers

  • (1_3) List the primitive types supported in Java: int, long, float, double, char, and boolean (tutorial)
  • (1_3) Define numeric literal and provide an example of one
  • (1_3) Define character literal and provide an example of one
  • (1_3) Select the most appropriate primitive type to store a given piece of data
  • (1_1) Use the assignment statement
  • (1_1) Describe what happens in memory when a primitive variable is declared
  • (1_1) Describe what happens in memory when an object identifier (reference) is declared
  • (1_1) Describe the differences between primitives and objects (reference variables)
  • (2_1) Describe what happens when references are compared using ==, .equals()
  • (2_2) Define string literal and provide an example of one
  • (1_1) Graphically illustrate the difference between primitives and reference types with memory diagrams
  • (1_1) Demonstrate how an instance of a class is created (new operator)
  • (3_2) Use valid and meaningful identifiers that are consistent with Java naming conventions

Java Programming Basics

  • (1_1) Recognize code documentation in source code
  • (1_1) Demonstrate at least two forms of syntax for adding comments to source code
  • Use Ctl-left and Ctl-right to navigate code in IntelliJ (optional)
  • Comment and un-comment by hand and using the Ctrl-/ keyboard shortcut (optional)
  • (3_1) Replace hard coded constants with named constants

Standard Java Classes

  • (2_1) Demonstrate the use of String.substring
  • (2_1) Demonstrate the use of String.length
  • (2_1) Demonstrate the use of String.charAt
  • (2_1) Use Oracle's Java documentation to ascertain if a method is part of a given class

Arithmetic expressions

  • (2_1) Demonstrate proper use of the following arithmetic operators: +, -, *, /, %
  • (1_2) Identify and avoid unintended integer division errors
  • (2_1) Distinguish between binary and unary operations
  • (1_3) Define operator precedence
  • (1_3) Interpret arithmetic expresions following operator precedence rules (Second Edition of Text, Fig. 3.7, p. 84)
  • (1_3) Define and apply typecasting
  • (2_2) Interpret code that makes use of compound assignment operations: *=, /=, +=, -=, and %=

Week 2

Input/output

  • (3_2) Use wrapper classes to perform type conversion, e.g., int num = Integer.parseInt("14");
  • (2_3) Explain the source of data associated with the system input buffer: System.in
  • (2_3) Perform standard/console input using the Scanner class
  • (2_3) Explain the destination for data sent to the system output buffer: System.out
  • (2_3) Perform standard/console output using the System.out.println method
  • (3_1) Demonstrate the use of JOptionPane.showMessageDialog
  • (3_1) Demonstrate the use of JOptionPane.showInputDialog

Writing Computer Software

  • (2_3) Describe the steps involved in creating and running a Java program
  • (2_3) Describe the contents of source (.java) and class (.class) files
  • (2_3) Explain what happens (at a high level) when a Java program is compiled
  • (2_3) Explain what happens (at a high level) when a Java program is run
  • (2_3) Describe the difference between compilation and execution errors
  • (2_3) Explain why a Java Virtual Machine (JVM) is required in order to run a Java program
  • (2_3) Describe how bytecode makes Java programs portable
  • (2_2) List the basic steps involved in software development

Algorithms and Design

  • (2_2) Define the term algorithm
  • (2_2) Explain the motivation for doing design before coding
  • (2_2) Make use of variables and operations to perform calculations
  • (2_2) Construct and interpret flowcharts representing sequential and conditional structures
  • (2_2) Construct and interpret pseudocode representing sequential and conditional structures
  • (3_2) Use flowcharts and pseudocode to describe algorithmic solutions to simple problems
  • (3_3) Trace pseudocode and flowcharts to debug it without running it
  • (2_2) Describe why ← is used instead of "=" in pseudocode, and why it points left instead of right.
  • Describe the key differences between low-level and high-level pseudocode, and be able to write low-level pseudocode for simple problems
  • (3_2) Properly indent conditional statements

Week 3

Selection statements

  • (3_3) Define the functionality of the following relational operators: <, <=, !=, ==, >=, >
  • (3_2) Use relational operators to control program flow
  • (3_3) Define the functionality of the following boolean operators: &&, ||, and !
  • (3_2) Use boolean and relational operators to construct meaningful boolean expressions
  • Apply De-Morgan's Theorem to simplify negated boolean expressions
  • Simplify redundant boolean expressions such as x || true and x || !x
  • (3_2) Use boolean expressions to control program flow
  • (3_2) Describe the behavior of an if statement
  • (3_2) Describe the program flow through a series of nested if statements
  • (3_2) Use nested if statements to control program flow
  • (3_3) Use a switch statement to control program flow
  • IntelliJ: Use tab, Shift-tab and Ctr-shift-tab to indent code (optional)
  • IntelliJ: Use ctrl-a, ctrl-alt-i to automatically correct indentation in code (after this quarter, use sparingly!) (optional)
  • (3_3) Rewrite a switch statement with one or more (potentially nested) if statements
  • (3_3) Explain the purpose of the case, break and default reserved words
  • Use boolean variables to save the results of comparisons and other true-false values when it helps clarify code.
  • (3_3) Define identifier scope and describe the implication to identifiers declared within an if block
  • (3_3) Correct errors associated with scope & if-blocks
  • Explain why there is no semi-colon after the if header

Iteration statements

  • (3_3) Construct and interpret flowcharts representing looping structures
  • (3_3) Convert messy flow diagrams to clean loop structures
  • (3_3) Construct and interpret pseudocode representing looping structures
  • Dr. Hasker's 5 steps for writing a while loop. (Optional)
    1. identify exit condition: what must be true when exit loop
    2. write opposite form of step 1 as the condition of the while loop
    3. write pseudocode for loop body
    4. Add setup: initialization/read data
    5. Add cleanup: restore data, close files
  • Describe the differences between counting, user-input, and sentinal-value loops.
  • Solve problems requiring counting, user-input, and sentinal-value loops.
  • (4_1) Interpret code that makes use of the following looping constructs: while, do-while, and for
  • (4_1) Design and write code that makes use of the following looping constructs: while, do-while, and for
  • (4_1) Describe how the following constructs differ: while, do-while, and for
  • (4_1) Rewrite a given while loop into an equivalent for loop, and vice versa
  • (4_Lab) Select the most appropriate type of loop for a given problem
  • (4_1) Correctly indent nested if, while, for, and switch statements
  • Use System.out for debugging loops (Optional)

Week 4

More Standard Java Classes

  • (5_1) Define an Application Programming Interface (API)
  • (4_1) Use Oracle's Java documentation to ascertain the capabilities of a given standard java class
  • (4_1) Use the Javadoc page for the Math class to perform calculations involving the following mathematic operations:
    • (5_1) Absolute value
    • (4_3) Trigonometric functions (in degrees and radians)
    • (early on) pi - ratio of the circumference of a circle to its diameter
    • (5_1) xy
    • (on your own) logarithmic functions
    • (5_1) maximum/minimum of two numbers
    • (4_1) Square root
  • (3_2) Use parsing methods in wrapper classes to convert text representations of numbers into numeric format
  • (5_1) Use named constants from wrapper classes (e.g., Integer.MIN_VALUE) rather than arbitrary numbers
  • (5_1) Use the toString method in wrapper classes to convert from numeric format into text representations
  • (5_1) Be familiar with methods from the Character class such as isDigit and toLowercase
  • (5_1) Use methods from the String class such as isEmpty, substring, indexOf, etc...
  • (Lab 7) Generate random numbers
  • (5_2) Use DecimalFormat to format numbers

Week 5

Java Packages

  • (5_2) Explain the purpose of a Java package
  • (6_2) List at least two packages that are part of the Java standard library
  • (5_2) Define the term fully qualified name
  • (5_2) Explain the purpose of the import statement

Coding Standards

  • (5_1) Explain the purpose of a coding standard
  • (5_1) Be familiar with Oracle's coding conventions.

Object Oriented Design / Object Oriented Programming

  • (5_2) Define the following object oriented concepts:
    • (5_2) Object types (Classes)
    • (5_2) Class instances (Objects)
    • (5_2) Instance variables (Attributes/Fields)
    • (5_2) Instance behaviors/actions (Methods)
  • (5_2) Distinguish between classes and objects
  • (5_2) Describe how objects interact with one another by sending messages

Week 6

UML

  • (6_2) Correctly annotate and interpret fields (name and type) on a class diagram
  • (6_2) Correctly annotate and interpret methods (with arguments and return type) on a class diagram
  • (6_2) Generating class diagram from a verbal description of a class
  • (Lab 8) Interpret UML sequence diagrams
  • (6_2) Use visibility modifiers to denote the visibility of a field or method

Class creation basics

  • (5_2) Define object and describe how it differs from a primitive
  • (5_2) Define class and describe how it differs from a primitive type
  • (6_1) Explain the advantage of objects having methods associated with them
  • (6_1) Explain the differences between a class & a primitive type: e.g. use references, multiple variables lumped together, methods associated with them
  • (5_2) Define "instance" and describe what it means in memory
  • (5_3) Define and use classes with multiple methods and data members (fields)
  • (6_1) Define and use value-returning and void methods
  • (5_2) Properly use visibility modifiers in defining methods and fields
  • (6_1) Define and use class constants
  • (6_2) Understand and apply accessor and mutator methods
  • (5_2) Distinguish between instance variables and local variables
  • (5_2) Define and use instance methods and instance variables (attributes/fields)
  • (5_2) Define and use methods that have primitive data types as arguments
  • (6_1) Define encapsulation and give an example where it is important
  • (6_1) Understand the importance of information hiding and encapsulation
  • (6_1) Declare and use local variables
  • (5_2) Describe the role of the reserved word this
  • (6_3) Demonstrate use of this to disambiguate object fields from local variables
  • (6_1) Trace a program including calls to class methods in multiple classes
  • (8_1) Use the debugger to trace the execution of a multi-class program

Week 7

Defining your own classes

  • (7_1) Create and use class constructor methods
  • (7_3) Define and use methods that have reference data types as arguments
  • (8_1) Define and use overloaded methods
  • (6_2) Call methods of the same class
  • (6_2) Draw and explain memory diagrams that illustrate the instantiation of objects
  • (7_2) Describe the role of the garbage collector
  • (8_1) Compare the equality of two different objects
  • (8_1) Swap the data in two different objects
  • (7_1) Avoid redundant code by calling one constructor from a different constructor
  • (6_2) Understand the implications of acting on an object to which there are multiple references
  • Watch this video on references (pointers) from Stanford. (Optional. If you watch it, please tell me what you think of it. Should I keep this here, or delete it?)

Week 8

Design Techniques

  • (8_2) Use helper methods to avoid redundant code
  • Adhere to the MSOE Software Development Laboratory coding standard
  • (8_Lab) Adhere to the SE1011 coding standard
  • (8_2) Simplify complicated algorithms by encapsulating subordinate tasks
  • (9_1) Be familiar with various design approaches such as top-down, bottom-up, and case-based
  • Use mechanisms in IntelliJ to refactor software
  • (8_1) Document each method using the Javadoc convention

Week 9

Class Members

  • (9_2) Use class variables/attributes appropriately
  • (8_3) Use class (static) methods appropriately

Arrays

  • (9_Lab) Use an array to store primitive and object types
  • (9_Lab) Create an array of a given size
  • Remember that "length" is a property, not a method of an array
  • Loop through an array
  • Pass an array as an argument

Week 10

ArrayLists

  • Use an ArrayList<E> to store objects type E
  • Use methods from the ArrayList<E> 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> over an Array