Category Archives: OOD

Object-Oriented Design

Divide-and-Conquer: Coping with Complexity

Sometimes a problem is simply too complex for us to solve. Our only chance seems to be breaking it into smaller parts that we know how to deal with. This strategy of reducing the complexity of a problem by dividing … Continue reading

Posted in OOD, OOP | Tagged , | 2 Comments

Inheritance and the Power of Abstraction

Programming is an exercise in abstraction. If a program is intended to solve some problem, we must first be able to model this problem in an abstract way, in order to express it in a programming language. Only after the … Continue reading

Posted in OOD, OOP | Tagged , | 3 Comments

Effective Software Reuse

For many years Software Reuse has been seen as a solution to both reduce the costs of software development and improve the quality of the systems being developed. However, in practice, most companies today have the feeling that they are … Continue reading

Posted in OOD, Software Reuse | Tagged , | 6 Comments

Identifying Anti-Patterns

In my previous post, I’ve discussed the importance of identifying domain-specific Design Patterns in an organization. Equally important is the need to identify Anti-Patterns. This is the definition of Anti-Patterns from Wikipedia: “An anti-pattern is a pattern that may be … Continue reading

Posted in Design Patterns, OOD | Tagged , | 3 Comments

Collecting Design Patterns

Today we expect every professional Software Engineer to have a good knowledge of Design Patterns. In particular, the names of the patterns in the Gang-of-Four (GoF) book became part of the common vocabulary of software developers. Any good programmer should … Continue reading

Posted in Design Patterns, OOD | Tagged , | 2 Comments

Effective Design Reviews

This is the definition of Design Review from Wikipedia: “A design review is a process whereby a design is tested against its requirements prior to implementation.” There are at least two problems with this definition: The first problem is that … Continue reading

Posted in OOD, Software Architecture | Tagged , | 4 Comments

The Liskov Substitution Principle and Test-Driven Development

The Substitution Principle, first defined by Barbara Liskov, says that: “Let q(x) be a property provable about objects x of type T. Then q(y) should be true for objects y of type S where S is a subtype of T.” … Continue reading

Posted in OOD, OOP, TDD | Tagged , , | 3 Comments

When a square is not a rectangle

In my previous post, I’ve used the example of squares and rectangles to illustrate the importance of definitions. It is clear that, from a geometric point-of-view, a square is indeed a kind of rectangle. However, as my friend Arnon has … Continue reading

Posted in OOD, OOP | Tagged , | 4 Comments

Is a square a rectangle? – On the importance of definitions

Before you continue reading this post, please answer the following question:  “Is a square a rectangle?” This is apparently a very simple question, to which we should be able to answer almost immediately, without even thinking about it. However, if … Continue reading

Posted in OOD, Requirements Specification | Tagged , | 2 Comments