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
- IntelliJ
- Print & use shorcuts from this handy IntelliJ Reference card
- How to set up the default template
- How to put line numbers: Menu: File-> Settings. Tree: Editor->Appearance. Checkbox: Show line numbers. (Thanks to Pat & Nate for showing me how to do this.)
Week 1
Primitive datatypes, Variables, Identifiers
- (1_3) List the primitive types supported in Java:
int
,long
,float
,double
,char
, andboolean
(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 expressionsSimplify redundant boolean expressions such asx || true
andx || !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
anddefault
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)- identify exit condition: what must be true when exit loop
- write opposite form of step 1 as the condition of the while loop
- write pseudocode for loop body
- Add setup: initialization/read data
- 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
, andfor
- (4_1) Design and write code that makes use of the following looping constructs:
while
,do-while
, andfor
- (4_1) Describe how the following constructs differ:
while
,do-while
, andfor
- (4_1) Rewrite a given
while
loop into an equivalentfor
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 asisDigit
andtoLowercase
- (5_1) Use methods from the
String
class such asisEmpty
,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
, andlastIndexOf
- 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