Interface for object-oriented languages..

They are more than a just a class with abstract methods.

They play a key role in many design patterns and principles.

A https://abs.twimg.com/emoji/v2/... draggable="false" alt="🧵" title="Thread" aria-label="Emoji: Thread"> about 6 imp. aspects of interfaces.
#SoftDev #Java #100DaysOfCode #Linux
https://abs.twimg.com/emoji/v2/... draggable="false" alt="1⃣" title="Tastenkappe Ziffer 1" aria-label="Emoji: Tastenkappe Ziffer 1"> Interfaces establish knowledge boundaries.

When you call an interface method, you can often ignore what is under the hood.

Example: class & #39;C& #39; need not know the exact database that stores the data.

https://abs.twimg.com/emoji/v2/... draggable="false" alt="🔹" title="Kleine blaue Raute" aria-label="Emoji: Kleine blaue Raute">Interfaces reduce complexity because they allow us to separate concerns.
https://abs.twimg.com/emoji/v2/... draggable= Interfaces establish knowledge boundaries.When you call an interface method, you can often ignore what is under the hood.Example: class & #39;C& #39; need not know the exact database that stores the data.https://abs.twimg.com/emoji/v2/... draggable="false" alt="🔹" title="Kleine blaue Raute" aria-label="Emoji: Kleine blaue Raute">Interfaces reduce complexity because they allow us to separate concerns." title="https://abs.twimg.com/emoji/v2/... draggable="false" alt="1⃣" title="Tastenkappe Ziffer 1" aria-label="Emoji: Tastenkappe Ziffer 1"> Interfaces establish knowledge boundaries.When you call an interface method, you can often ignore what is under the hood.Example: class & #39;C& #39; need not know the exact database that stores the data.https://abs.twimg.com/emoji/v2/... draggable="false" alt="🔹" title="Kleine blaue Raute" aria-label="Emoji: Kleine blaue Raute">Interfaces reduce complexity because they allow us to separate concerns." class="img-responsive" style="max-width:100%;"/>
https://abs.twimg.com/emoji/v2/... draggable="false" alt="3⃣" title="Tastenkappe Ziffer 3" aria-label="Emoji: Tastenkappe Ziffer 3"> Interfaces define a communication protocol.

The buttons of your calculator are its interface.

When you push & #39;+& #39;, you send the & #39;sum& #39; message.

Same with objects.

When A calls a method on B, A sends a message to B.

https://abs.twimg.com/emoji/v2/... draggable="false" alt="⏺️" title="Kreis zum Aufnehmen" aria-label="Emoji: Kreis zum Aufnehmen">Interfaces define the messages objects understand.
https://abs.twimg.com/emoji/v2/... draggable="false" alt="4⃣" title="Tastenkappe Ziffer 4" aria-label="Emoji: Tastenkappe Ziffer 4"> Interfaces establish a contract.

They set:

https://abs.twimg.com/emoji/v2/... draggable="false" alt="🔹" title="Kleine blaue Raute" aria-label="Emoji: Kleine blaue Raute">Expectations

If you call "setSide" on a square, you expect all 4 sides to change.

https://abs.twimg.com/emoji/v2/... draggable="false" alt="🔹" title="Kleine blaue Raute" aria-label="Emoji: Kleine blaue Raute">Obligations

If you implement "setSide", you must change 4 sides or you& #39;ll break the contract.

https://abs.twimg.com/emoji/v2/... draggable="false" alt="⏺️" title="Kreis zum Aufnehmen" aria-label="Emoji: Kreis zum Aufnehmen">Have a look at: Liskov Substitution Principle
https://abs.twimg.com/emoji/v2/... draggable="false" alt="5⃣" title="Tastenkappe Ziffer 5" aria-label="Emoji: Tastenkappe Ziffer 5"> Interfaces make polymorphism possible.

You can write a function that uses "Shape" and it will work for "Square" and "Circle".

If you ever need "Triangle", you don& #39;t have to modify the function.

This is how you write abstract code.

https://abs.twimg.com/emoji/v2/... draggable="false" alt="⏺️" title="Kreis zum Aufnehmen" aria-label="Emoji: Kreis zum Aufnehmen"> Have a look at: Open-Closed Principle.
https://abs.twimg.com/emoji/v2/... draggable="false" alt="6⃣" title="Tastenkappe Ziffer 6" aria-label="Emoji: Tastenkappe Ziffer 6"> Interfaces allow you to manage dependencies.

Control flow can go from class & #39;C& #39; to class & #39;Database Access& #39; without the former depending on the latter.

Control flow dependencies need not mirror source code dependencies.

https://abs.twimg.com/emoji/v2/... draggable="false" alt="〰️" title="Gewellter Querstrich" aria-label="Emoji: Gewellter Querstrich">Have a look at: Dependency Inversion Principle.
Therefore - -

https://abs.twimg.com/emoji/v2/... draggable="false" alt="✨" title="Funken" aria-label="Emoji: Funken"> Interfaces are a key part of object-oriented languages https://abs.twimg.com/emoji/v2/... draggable="false" alt="✨" title="Funken" aria-label="Emoji: Funken">

They allow you to create well-designed systems that:

https://abs.twimg.com/emoji/v2/... draggable="false" alt="✅" title="Fettes weißes Häkchen" aria-label="Emoji: Fettes weißes Häkchen"> Keep complexity under control.
https://abs.twimg.com/emoji/v2/... draggable="false" alt="✅" title="Fettes weißes Häkchen" aria-label="Emoji: Fettes weißes Häkchen"> Separate concerns.
https://abs.twimg.com/emoji/v2/... draggable="false" alt="✅" title="Fettes weißes Häkchen" aria-label="Emoji: Fettes weißes Häkchen"> Are modular, loosely coupled, and testable.
https://abs.twimg.com/emoji/v2/... draggable="false" alt="✅" title="Fettes weißes Häkchen" aria-label="Emoji: Fettes weißes Häkchen"> Are easy to change.
Here is something..!

I& #39;ve written this thread with statically typed languages in mind.

In dynamically typed languages, interfaces are usually an implicit concept, so some of the ideas apply and others don& #39;t.
You can follow @ref_sys.
Tip: mention @twtextapp on a Twitter thread with the keyword “unroll” to get a link to it.

Latest Threads Unrolled: