Category Archives: OOP

Object-Oriented Programming

My first book, published 25 years ago

I wrote my first book when I was 20 years old. It was the first book in Portuguese about Object-Oriented Programming (OOP). At the time I was a student at the Federal University of Rio de Janeiro, also known as … Continue reading

Posted in OOP, Programming | Tagged , | 1 Comment

The Cat as a Metaphor in Object-Oriented Software Development

Grady Booch is a software development guru who wrote one of the most important books about Object-Oriented Programming: “Object-Oriented Analysis and Design with Applications“. In his book, Booch has wonderful illustrations using a cat as a metaphor for some of … Continue reading

Posted in OOD, OOP, Programming | Tagged , , | 6 Comments

Antifragile Software Design: Abstraction and the Barbell Strategy

In his book “Antifragile: Things That Gain From Disorder”, Nassim Taleb introduces the concept of Antifragility, which is the opposite of Fragility. The main question is how things react to volatility (such as randomness, errors, uncertainty, stressors and time). According … Continue reading

Posted in Antifragility, OOD, OOP, Software Architecture, TDD | Tagged , , , , | 29 Comments

On Information Hiding and Encapsulation

This month I participated in IBM Haifa’s Programming Languages and Software Engineering (PLSE) Seminar. There I had the opportunity to have lunch with David Parnas, one of the world pioneers in the field of Software Engineering. Parnas is the father … Continue reading

Posted in OOD, OOP, Software Architecture | Tagged , , | 9 Comments

An Event-Driven Approach for the Separation of Concerns

Last week I presented a paper at the International Conference on Evaluation of Novel Approaches to Software Engineering (ENASE 2012), at Wroclaw, Poland. Title: “An Event-Driven Approach for the Separation of Concerns” Abstract: “This paper presents an event-driven approach for … Continue reading

Posted in AOP, OOD, OOP, Research | Tagged , , , | 4 Comments

Separation of Concerns

The most important principle in Software Engineering is the Separation of Concerns (SoC): The idea that a software system must be decomposed into parts that overlap in functionality as little as possible. It is so central that it appears in … Continue reading

Posted in AOP, Design Patterns, OOD, OOP, Software Reuse | Tagged , , , , | 52 Comments

Who is an Expert? – On Rules and Exceptions

It is relatively easy to find very young people who are brilliant programmers, who seem to know every detail about a particular language, platform or technology. Some of them will be able to implement a nice Android app in a … Continue reading

Posted in Efficacy, OOD, OOP | Tagged , , | 4 Comments

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

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