Computer Science 280:

Principles of Software Development

Gregory M. Kapfhammer


flickr photo shared by Sebastiaan ter Burg under a Creative Commons ( BY ) license

Color Scheme

Key Concept

Corresponding Diagram

In-Class Discussion

In-Class Activity

Details in SETP or MMM

Design Principles

Modularity

Interfaces

Information Hiding

Incremental Development

Abstraction

Generality

Crucial for building good software!

Modularity

Separation of Concerns

Coupling

No Coupling

Tight Coupling

Loose Coupling

Which type of coupling is better?

Which type of coupling supports change?

Refer to Figure 6.1 for diagrams with examples

There are different types of coupling (e.g., data)

Interfaces

Defines what services a unit will provide

Provides "signatures" for the methods of a unit

Often formulated as a design contract

Given as invariants and pre- and post-conditions

Units often contain accessors and mutators

Any questions about the use of interfaces?

Information Hiding

Hide the design decisions for a software unit

Make software systems easier to understand and maintain

What are the aspects of software that we hide?

Data representation, algorithm, task sequence

Any questions about the use of interfaces?

Incremental Development

Consider how modules "use" other modules

Try to minimize the number of not-needed dependencies

Implement modules of the system incrementally

Why is this possible if dependencies are few?

Abstraction omits details for improved focus

Generality of software promotes effective reuse

Object-oriented design

Encapsulation

Inheritance

Polymorphism

Unified Modelling Language in Figure 6.16

UML Diagrams

Package Diagram

Class Diagram

Sequence Diagram

Communication Diagram

State Diagram

There are other types of diagrams as well!

What are the strengths and weaknesses of diagrams?

Object-oriented Design Patterns

Singleton Design Pattern

Visitor Design Pattern

Trade-offs associated with design patterns?

Design Considerations

Data Management

Exception Handling

User Interfaces

Toolkits and Frameworks

What are the trade-offs in using frameworks?

Object-Oriented Measurement

Cyclomatic Complexity

Non-commented source statements

Afferent and Efferent Coupling

Results from the recent laboratory assignment?

Can you use these to guide software development?

Can you create these from existing software?