cft

Code Smell 161 - Abstract/Final/Undefined Classes

If your language has the right tool, your classes should be either abstract or final.


user

Maximiliano Contieri

2 years ago | 1 min read

Your classes are abstract, final, or undefined

TL;DR: If your language has the right tool, your classes should be either abstract or final.

Problems

Solutions

  1. Declare all your leaf classes as final and the rest of them abstract.

Context

Managing hierarchies and composition is the main task of a good software designer.

Keeping hierarchies healthy is crucial to favor cohesion and avoid coupling.

Sample Code

Wrong

public class Vehicle{ // class is not a leaf. Therefore it should be abstract //an abstract method that only declares, but does not define the start //functionality because each vehicle uses a different starting mechanism abstract void start();}public class Car extends Vehicle{ // class is leaf. Therefore it should be final}public class Motorcycle extends Vehicle{ // class is leaf. Therefore it should be final}

Right

abstract public class Vehicle{ // class is not a leaf. Therefore it is be abstract //an abstract method that only declares, but does not define the start //functionality because each vehicle uses a different starting mechanism abstract void start();}final public class Car extends Vehicle{ // class is leaf. Therefore it is final}final public class Motorcycle extends Vehicle{ // class is leaf. Therefore it is final}

Detection

[X] Automatic

Since this is enforced by static analysis, we can't do it with most available tools.

Tags

  • Subclassification

Conclusion

We should look back at our classes and start qualifying them either as abstract or final.

There are no valid cases for two concrete classes, one subclassifying the other.

Relations

Code Smell 11 - Subclassification for Code Reuse

Code Smell 136 - Classes With just One Subclass

Code Smell 37 - Protected Attributes

Code Smell 58 - Yo-yo Problem

More Info

Coupling - The one and only software design problem

Deep Subclasses

Disclaimer

Code Smells are just my opinion.

Credits

Photo by William Bossen on Unsplash

When the final design seems too simple for the amount of work you've put in, then you know you're done.

Brady Clark

Software Engineering Great Quotes

This article is part of the CodeSmell Series.

How to Find the Stinky parts of your Code

Upvote


user
Created by

Maximiliano Contieri

🎓Learn something new every day.📆 💻CS software engineer 👷coding👨🏽‍🏫teaching ✍🏾writing 🎨Software Design 🏢SOLID 🌉TDD 👴Legacy 💩Code Smells


people
Post

Upvote

Downvote

Comment

Bookmark

Share


Related Articles