Exam
Study Guide
You
will be responsible for all assigned reading and all lecture
content. That is a lot. Focus on central, key
concepts! Everything below has one or more lecture
slides associated with it. If you can't remember what
something is about, find the associated lecture slides.
There will be extra credit offered on the exam. You may
find studying in groups helpful.
The
topics I may test you on will include the following general
topics:
S.O.L.I.D. Principles
Inheritance
(single, multiple, interface, implementation)
Polymorphism
(issues in binding)
Duck Typing
Encapsulation
Composition
Abstraction
Class
vs. Object (Key concepts of classes and objects)
Difference
between an operation (semantic) and a method (implementation)
Class
constituents (Name, Attributes, Operations)
Abstract
Classes and Abstract Data Types
Inheritance vs. Composition (When would you use one over the other?)
OO Langauge concepts:
Differences (general) between strongly-typed and
loosely-typed languages
Dispatch (single, multiple)
Central
Modeling Topics:
Reuse
(Inheritance, Composition)
Aggregation/Composition
differences
Know
Brooks's distinction between
Essential and Accidental
Complexity, Silver Bullet essay
What
is modular programming? It's benefits? How is that a
loaded term?
What
is a model and why do we model?
Difference
between Interface and Implementation
Design
Patterns:
Know
every pattern we've covered and presented in class up to and
including Class 8. Focus on their
UML representation and their
key concepts and the problem they attempt to solve
(motivation).
Know
what a Design Pattern is.
Be
able to recognize the patterns we've covered from their UML
representation.
Know
the structure of a design pattern
Concepts around Domain-Driven
Design (Bounded Contexts, Ubiquitous Language, Domain Models,
Building Blocks (e.g. Entites, Value Objects, Services,
Modules, Factories, Aggregates, etc.), etc.)
UML:
(Know
ALL forms covered in class. KNOW
THE
SLIDES!). This includes:
Association
Aggregation
Generalization
Dependency
Association
Class
Multiplicity/Cardinality
Composition
Realization
Qualification
Dynamic
Modeling (Sequence Diagrams, Collaboration Diagrams)
Example Exam Questions:
1.
In UML, discuss the differences between a
generic
association and composition. In
addition
to explaining the difference, show an
example of the UML notation used for both.
2.
What is an Abstract Data Type?
Give some examples.
3.
Creating analysis classes (doing Analysis
Modeling) is a waste of time. They
rarely make it into design intact, and
create a real pain when you have to keep the analysis model in
sync with the
design model. Best not to mess
with
them, and dive right in to design from the Use Cases. Do you agree or disagree? Provide persuasive arguments in your
defense.
5.
I'm designing a GUI application, and I'd like
the user to be
able to click on an icon, and while holding down the control
key, drag a copy
of (clone) that icon to some other location.
Thus, I want to instantiate a new object based on one
that's already on
the screen at runtime. Problem
is, I
don't know in advance which icon(s) will be on the screen, and
I don't want to
have to burden the Framework with knowledge of all the
possible icon
types. What pattern would you
suggest I
use as a model?
1.
Observer
2.
Builder
3.
Visitor
4.
Prototype
5.
Flyweight
6.
In their article "How Architecture Wins
Technology Wars",
published in the Harvard Business Review, Morris and
7.
Consider the following
UML
diagram [picture of UML diagram presented]. What pattern
is
described?
8. Here is a description of a small application. Produce a use case diagram for this application, along with a class diagram for the application, along with one sequence diagram detailing the activities of a single scenario of your choice.
9.
Discuss polymorphism. Why is it important in the concept
of OO
design and programming. Give a specific example.
10.
What is Duck Typing?
11.
Describe each and every design flaw in the following UML
diagram [UML diagram presented].
12.
What is the "I" in S.O.L.I.D. Explain it to me. I
don't get it.