Review for Midterm 2
Midterm 2 includes the following topics:
-
SQL and JDBC
-
Software Engineering Principles
-
Software Development Process
-
Concurrent Version Systems
-
Design Patterns and Object-Oriented Design
SQL and JDBC
There are 5 basic SQL commands:
-
CREATE TABLE
-
INSERT
-
DELETE
-
UPDATE
-
SELECT
You should know the basic structure of these commands and how to execute
them in JDBC:
-
What kind of things appear in different parts of the statement
-
What kind of message do you send to a java.sql.Statement
object to execute the statement
References
Principles of Software Engineering
You should know the 5 basic principles:
-
Separation of Concerns
-
Anticipation of Change
-
Generality
-
Incremental Development
-
Consistency
Separation of Concerns has several subprinciples that you should know:
-
Modularity
-
Abstraction
-
What/When Separation
-
Value Separation
-
Skill Separation
In addition, you should know two important concepts associated with
separation of concerns:
References
Software Development Process
You should know basic phases of software development:
-
Requirements
-
Domain Analysis
-
Design
-
Implementation
-
Integration
-
Deployment
You should know the ongoing activities of software development:
-
Risk analysis
-
Planning
-
Verification and validation
-
Documentation
It is also important to understand some concepts introduced by some of
the process models
-
Prototypes
-
they are used in different ways in the Prototype model and Phased
Release model
-
Architecture
-
It is essential for large development projects.
-
It decomposes the software into large-scale components with
carefully designed interfaces to allow for relatively independent
development of the components by subteams.
-
It is only considered in the Concurrent Development process model.
References
Concurrent Version Systems
You should know the following about concurrent version systems
-
Their purpose
-
Commonly used commands:
References
Design Patterns and Object-Oriented Design
You should understand the classification of design patterns according to
-
purpose:
-
behavioral
-
structural
-
creational
-
use of class inheritance vs. association
You also should know some principles behind design patterns
-
Favor association over class inheritance when you need dynamic
behavior.
Class inheritance is better when you want to fix some aspect of
behavior as in the Template Method or Factory Method design patterns.
-
Good encapsulation sometimes requires "violating encapsulation" as in
the Iterator design pattern.
If you couldn't implement a java.util.Iterator as a nested
class of an aggregate then the aggregate would need public methods
that expose its implementation
-
Laziness is sometimes a good thing.
For example, the Singleton design pattern uses lazy creation for the
singleton object.
References