DEV Community

Yonatan Karp-Rudin
Yonatan Karp-Rudin

Posted on • Originally published at yonatankarp.com on

Kotlin Code Smell 27 - Protected Attributes

Problem

Solution

  1. Favor composition
  2. Avoid subclassifying attributes.
  3. Extract behavior to separate objects.

Sample Code

Wrong

abstract class ElectronicDevice(protected val battery: Battery)

abstract class IDevice(
    battery: Battery,
    protected val operatingSystem: OperatingSystem
) : ElectronicDevice(battery)

class IPad(
    battery: Battery,
    ios: OperatingSystem
) : IDevice(battery, ios)

class IPhone(
    battery: Battery,
    ios: OperatingSystem,
    val phoneModule: PhoneModule
) : IDevice(battery, ios)

Enter fullscreen mode Exit fullscreen mode

Right

interface ElectronicDevice {
    //...
}

interface PhoneCommunication {
    //...
}

class IPad(
    private val battery: Battery,
    private val operatingSystem: OperatingSystem
) : ElectronicDevice {
    // Implement iPad-specific functionality here
}

class IPhone(
    private val battery: Battery,
    private val operatingSystem: OperatingSystem,
    private val phoneModule: PhoneModule
) : ElectronicDevice, PhoneCommunication {
    // Implement iPhone-specific functionality here
}

Enter fullscreen mode Exit fullscreen mode

Conclusion

Protected attributes are yet another tool we should use carefully. Every decision is a smell, and we should be very cautious with attributes and inheritance.


I hope you enjoyed this journey and learned something new. If you want to stay updated with my latest thoughts and ideas, feel free to register for my newsletter. You can also find me on LinkedIn or Twitter. Let's stay connected and keep the conversation going!


Credits

Image of Datadog

The Future of AI, LLMs, and Observability on Google Cloud

Datadog sat down with Google’s Director of AI to discuss the current and future states of AI, ML, and LLMs on Google Cloud. Discover 7 key insights for technical leaders, covering everything from upskilling teams to observability best practices

Learn More

Top comments (0)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more