Kotlin Code Smell 36 - Object Coupling
Object Boundaries Respected: Navigating Coupling Challenges

I've started to work as a software engineer at 2014, however, I started to write code at high-school.
My first language was Assembly, but still, I fall in love with the possibilities to make the computer to do as you wish, shortly after that I started to write in C.
Later on I studied a practical engineering in electricity, and during this time discovered that I preferred much more writing code than design electrical components.
As a result of this understanding I decided to switch and study bachelor degree in computer science in Reichman university, where the focus was of the Java language.
Today I'm working at SumUp using Kotlin, SpringBoot & Micronaut, Cassandra and Kafka
TL;DR: Respect object boundaries: avoid coupling to data and prioritize interfaces and behavior.
- When you view your objects merely as data holders, you risk violating their encapsulation.
Problem
Information Hiding Violation
Encapsulation Violation
Coupling
Solution
- Always couple to interfaces and behavior, not data.
Sample Code
Wrong
data class Point(var x: Double, var y: Double)
class DistanceCalculator {
fun distanceBetween(origin: Point, destination: Point): Double {
return sqrt(
(destination.x - origin.x).pow(2) +
(destination.y - origin.y).pow(2)
)
}
}
Right
data class Point(
private val radius: Double,
private val theta: Double
) {
val x: Double get() = radius * cos(theta)
val y: Double get() = radius * sin(theta)
}
class DistanceCalculator {
fun distanceBetween(origin: Point, destination: Point): Double {
return sqrt(
(destination.x - origin.x).pow(2) +
(destination.y - origin.y).pow(2)
)
}
}
Conclusion
If your classes are polluted with setters, getters and public methods you will certainly have ways to couple to their accidental implementation.




