619 Review Slides

advertisement
619 Final Review
Fall 2015
Professor Ammann
Agenda



Review Topics Covered
Highlight Key Technical Concepts
Identify Areas for Study on Final


Final May Test Several Concepts in a Given
Question
Goal:

Strong Showing on Final
619 Final Review
Procedural Abstractions
(Liskov 1-3)

Specifications





Preconditions (Requires Clause)
Postconditions (Effects Clause)
Modifies Clause
You Can Read and Write Such Specifications
Issues:




Minimality
Underdetermined Behavior
Deterministic Implementations
Generality
619 Final Review
Exceptions (Liskov 4, Bloch 9)

Rationale for Exceptions







Total vs. Partial Specifications
Replacing Preconditions with Defined
Behavior
Role of “FailureException”
Specifications Include Exception Returns
Checked vs. Unchecked Exceptions
Bloch’s List of Standard Exceptions
Masking vs. Reflection
619 Final Review
Data Abstraction (Liskov 5)

Fundamental Topic


Specifications for:





Expect Significant Exam Coverage
Overview (Typical “Object”)
Abstraction Function (toString())
Representation Invariant (repOk())
Methods
You Can Expect to Write/Modify Some or All of
These

Understanding, not Formality, is the Focus
619 Final Review
More Data Abstraction (Liskov
5)

IntSet and Poly Examples


Mutability
Reasoning about Data Abstractions

Role of Abstraction Function


Role of Representation Invariant



Value of Abstraction Function in Specific Examples
Value of Representation Invariant in Specific Examples
How to Argue a that Method Meets its Contract
Other Issues


Exposing the Rep
Adequacy
619 Final Review
Mutability

Key topic


Should be comfortable converting between
mutable and immutable types
Achieving mutability, using guidance from
both Liskov and Bloch



Transforming mutators to producers
Limiting subtyping
Limiting changes to instance variables
619 Final Review
Iteration Abstraction (Liskov
6)

Specifying Iterators




Preconditions and Postconditions
Constraints on Modifications While Generator is in
Use
Implementing Iterators in Java
Abstraction Functions for Iterators


Value of Abstraction Function in Specific Examples
Abstraction Function For Extensions


Allowing a prev() as well as a next() method
Allowing a remove() method
619 Final Review
Type Hierarchy (Liskov 7)

Fundamental Topic


Uses of Type Hierarchy


Extending Behavior vs. Multiple Implementations
Mechanisms


Substitution Principle
Extensions, Abstract Classes, Interfaces
Understanding Overriding vs. Overloading


Dynamic Dispatching
Apparent Type vs. Actual Type
619 Final Review
Type Hierarchy (Liskov 7)

Reasoning About Subtypes

Signature Rule


Methods Rule



Rules for Exceptions
Preconditions/Postconditions
More Rules for Exceptions
Properties Rule
619 Final Review
Polymorphic Abstraction
(Liskov 8)

Element Subtype vs. Related Subtype



Comparable vs Comparator
Addable vs. Adder
Be Prepared to Analyze, Complete, and/or
Analyze an Implementation
619 Final Review
Object Creation/Destruction
(Bloch 2, and other Items)

Rules for Object creation

Bloch Chapter 2


Constructor chaining and it’s analogues


Static factories, constructors with many parameters
Similar rules apply for cloning, serialization
Access to uninitialized state

See Bloch Item 17
619 Final Review
Methods Common to All
Objects (Bloch 3)

equals()


hashcode()



Consistency with equals()
toString()
clone()


Transitivity, Symmetry, Substitution for
Subtypes
Why is Liskov’s clone() (page 97) wrong?
Comparable
619 Final Review
Classes and Interfaces (Bloch
4)

Immutability



Composition vs. Inheritance




Why it is Preferable
How to Achieve
Why is Composition Preferable?
Understand Bloch’s InstrumentedSet example
Potential Problems for Inheritance
Mechanisms to Prohibit Inheritance
619 Final Review
Generics (Bloch 5)



Replacing raw types with generics
Eliminating unchecked warnings
Generic interactions with Lists vs. Arrays



Covariant Arrays vs. Invariant Generics
Generifying types and methods
Bounded wildcards

Relaxing the invariance of generics
619 Final Review
Enums, Annotations (Bloch 6)



Problems with C-Style Enums
Enums, EnumSet, EnumMap
Simple Annotations

@Test, @SuppressWarnings, @Override…
619 Final Review
Concurrency (Bloch 10)

Synchronized methods


for mutual exclusion
for reliable communication between threads
619 Final Review
Specification Checking


Specifications for Common Properties
Temporal Logic for Specification




Simple Specification Patterns
Kansas State University material


Computational Tree Logic (CTL)
Linear Temporal Logic (LTL)
Links on course schedule
Huth and Ryan is also a excellent source
619 Final Review
JUnit and JavaDoc



JUnit tests for a given JavaDoc description
JavaDoc and JUnit for exceptions
Contract model and Junit

JUnit theories





(typed) parameters in test methods
Data sources (JUnit)
preconditions: assumeTrue(…)
postconditions: assertTrue(…)
Can you count?
619 Final Review
Wrap Up

Final Exam



Closed Book/Closed Notes
But One (1) 8.5x11 sheet of paper, handwritten
Covered Material



Liskov: Chapters 1-8
Bloch: Chapters 2-6, 9-10
Plus special topics


Temporal Logic, JUnit, Basic Agile
Questions?
619 Final Review
Download