Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Inheritance or Composition

Inheritance or Composition

These slides are the material that I use as support on my talk about Inheritance and Composition on Android.

Txus Ballesteros

July 18, 2016
Tweet

More Decks by Txus Ballesteros

Other Decks in Programming

Transcript


  1. Welcome!

    View Slide


  2. Txus Ballesteros
    Android Engineer
    @txusballesteros
    +txusballesteros
    github.com/txusballesteros

    View Slide


  3. Green Programming™

    View Slide


  4. Programming focused on
    nature aspects.

    View Slide



  5. View Slide


  6. Hi, I’m Ramón.

    View Slide



  7. View Slide



  8. View Slide


  9. Sorry for the Fake!!!

    View Slide


  10. Inheritance or Composition?

    View Slide


  11. Composition or Composition

    View Slide



  12. View Slide



  13. View Slide


  14. Client
    Behaviour
    Behaviour
    Behaviour
    Behaviour
    Client Client
    Client
    Inheritance Strategy

    View Slide


  15. Client
    Behaviour Behaviour
    Behaviour Behaviour
    Client
    Composition Strategy

    View Slide


  16. Inheritance

    View Slide


  17. Inheritance common mistakes
    • Early adoption.
    • Architecture based 100% on inheritance.

    View Slide


  18. Inheritance Bad Smells
    • Having infinite levels of inheritance.
    • Extents of a non abstract classes.
    • Base classes with more than 100 200 lines.

    View Slide


  19. Some responsibility mistakes…

    View Slide


  20. Activity.java
    Android Donut: 3.629 lines of code
    https://github.com/android/platform_frameworks_base/blob/donut-release/core/java/android/app/Activity.java
    Android KitKat: 5.468 lines of code
    https://github.com/android/platform_frameworks_base/blob/kitkat-release/core/java/android/app/Activity.java
    Android Marshmallow: 6.649 lines of code
    https://github.com/android/platform_frameworks_base/blob/marshmallow-release/core/java/android/app/Activity.java

    View Slide


  21. Fragment.java
    Android ICS MR1: 1.564 lines of code
    https://github.com/android/platform_frameworks_base/blob/ics-mr1-release/core/java/android/app/Fragment.java
    Android KitKat: 1.920 lines of code
    https://github.com/android/platform_frameworks_base/blob/kitkat-release/core/java/android/app/Fragment.java
    Android Marshmallow: 2.559 lines of code
    https://github.com/android/platform_frameworks_base/blob/marshmallow-release/core/java/android/app/Fragment.java

    View Slide


  22. TextView.java
    Android Donut: 7.317 lines of code
    https://github.com/android/platform_frameworks_base/blob/donut-release/core/java/android/widget/TextView.java
    Android KitKat: 9.231 lines of code
    https://github.com/android/platform_frameworks_base/blob/kitkat-release/core/java/android/widget/TextView.java
    Android Marshmallow: 10.194 lines of code
    https://github.com/android/platform_frameworks_base/blob/marshmallow-release/core/java/android/widget/TextView.java

    View Slide


  23. How I can take the decision?

    View Slide


  24. S O L I D
    RP Single Responsibility
    CP Open Close
    SP Liskov Substitution
    SP Interfaces Segregation
    IP Dependency Inversion

    View Slide


  25. S O L
    RP Single Responsibility
    CP Open Close
    SP Liskov Substitution

    View Slide


  26. Composition

    View Slide


  27. Where can you use composition?

    View Slide


  28. Everywhere…
    “You're using composition and you don't know it”

    View Slide


  29. Let’s Start…

    View Slide


  30. Views & ViewGroups

    View Slide


  31. List & RecyclerViews

    View Slide


  32. List
    Adapter
    List
    using adapters…

    View Slide


  33. List
    Renderer
    List
    composing with renderers…
    Renderer
    Renderer
    Renderer

    View Slide


  34. Fragments

    View Slide


  35. Activity
    Fragment
    Fragments
    most common usage…

    View Slide


  36. Activity
    Fragment
    Fragment
    Fragments
    activities composition…

    View Slide


  37. Activity
    Fragment
    Fragment
    Fragment
    Fragment
    Fragments
    activities composition…

    View Slide


  38. Activity
    Fragment
    Fragments
    activities composition…

    View Slide


  39. Activity
    Fragment
    Fragments
    activities composition…
    Activity
    Activity

    View Slide


  40. Activities

    View Slide


  41. Toolbar
    Activity
    composing Activities…
    +

    View Slide


  42. Activity
    composing Activities…
    Activity
    AbsActivity
    Activity

    View Slide


  43. Activity
    composing Activities…
    Loading
    Activity
    Activity
    Toolbar
    FAB

    View Slide


  44. Tools

    View Slide


  45. Java 8 & Defaults

    View Slide


  46. Mara
    https://github.com/txusballesteros/mara

    View Slide


  47. We’re Hiring
    [email protected]

    View Slide


  48. Thanks for Coming

    View Slide