Skip to content

Hierarchy

Girish hierarchy smell

Semua smell di dalam grup ini berkaitan dengan kesalahan dalam merancang hierarki.

Filosofi

Human Taxonomy

Semua makhluk hidup (baik hewan, tumbuhan, manusia, bakteri, jamur, dan makhluk hidup lainnya) dikelompokkan berdasarkan klasifikasi spesies mulai dari kingdom, filum, class, ordo, family, genus, hingga spesies. Pengelompokkan makhluk hidup (taxonomy) tentunya mempermudah identifikasi makhluk hidup di muka bumi ini, termasuk manusia. Fakta menarik bahwa manusia merupakan spesies makhluk hidup bernamakan Homo Sapiens, dimana secara hierarki dapat ditujukan pada gambar diatas, merupakan hewan (bertulang belakang) Mamalia ordo Primata yang berevolusi dari saudara-saudara se-ordonya.

Semua ini tentunya merupakan kemajuan dalam dunia biologi berkat Carl Linnaeus karena ialah yang merancang pengelompokan makhluk hidup secara taksonomis olehnya.

Prinsip Hierarchy

Girish hierarchy principles

Terdapat 5 prinsip dalam merancang hierarki:

  • Apply meaningful classification: Terdapat 2 langkah penting dalam mengklasifikasikan suatu hierarki yaitu:
    1. Identifikasi kesamaan dan variasi dari berbagai jenis, temukan kesamaan sebagai superclass dan variasi sebagai subclass.
    2. Golongkan kesamaan dalam superclass/root (tentunya dalam bentuk abstract class atau interface jika abstraksi superclass berupa template) dan variasi dalam subclass/child/leaves (melalui extends atau implements).
  • Apply meaningful generalization: Kelompokkan semua elemen-elemen (behaviour dan elemen) yang sama antar subclass sebagai bagian dari superclass. Generalization tentunya mempermudah pemakaian kembali code sehingga mengurangi jumlah duplikat dalam hierarki class.
  • Ensure substitutability: Pastikan setiap reference yang diturunkan dari superclass bisa disubstitusi di subclass tanpa mengubah behaviour secara hierarkis alias sesuai dengan prinsip Liskov’s Substitution (LSP). Kasus ini terjadi bila class turunannya melanggar prinsip LSP seperti pada OO-Abusers - Refused Bequest.
  • Avoid redundant paths: Hindari jalan pintas inheritance dikarenakan class turunan "cucu" sudah mengimplementasikan semuanya dari "kakek" hingga "anak" sehingga tidak berguna jika class "cicit" ambil jalan pintas dari kakeknya padahal class tersebut merupakan turunan dari cucu-nya sendiri. (ya apalagi kalo Tamika sampai nekat ambil jalan pintas dari Kakek Sugiono padahal bapaknya Tamika sendiri adalah anaknya Kakek Sugiono)
  • Ensure proper ordering: Pastikan subclass/anaknya bergantung dengan superclass/parentnya, bukan sebaliknya. Jika hal ini terjadi sebaliknya, maka bisa mempersulit dalam reusability parent class secara hierarkis.

Berdasarkan pada pengamatan hierarchy smell, terdapat pelanggaran prinsip hierarki antara lain:

Hierarchy smellPelanggaran prinsip hierarchyPenyebabMartin Fowler smells
Missing HierarchyApply meaningful classificationPemakaian conditional checking untuk menentukan behaviour object yang seharusnya dapat diganti dengan polymorphism-
Unnecessary HierarchyApply meaningful classificationDeveloper membuatkan subclass hanya karena masalah perbedaan attribute bukan pada perbedaan behaviour-
Unfactored HierarchyApply meaningful generalizationTerdapat duplikat antara sesama saudara subclass atau antar subclass dengan superclassDuplicate Code (class-to-class)
Wide HierarchyApply meaningful generalizationSuperclass mempunyai banyak anakan langsung tanpa intermediate class-
Speculative HierarchyApply meaningful generalizationAdanya class yang dibuatkan oleh developer karena alasan spekulatif untuk memenuhi kasus tertentuSpeculative Generalities
Deep HierarchyApply meaningful generalizationPembuatan hierarki terlalu besar dan terlalu dalam subclass levelnya.-
Rebellious HierarchyEnsure substitutabilitySubclass menolak behaviour dari superclassRefused Bequest
Broken HierarchyEnsure substitutabilityHubungan relationship antar superclass dan subclass terputus meski ada inheritance?
Multipath HierarchyAvoid redundant pathsSubclass (cucu) mengambil jalan pintas inheritance ke base class?
Cyclic HierarchyEnsure proper orderingSuperclass bergantung pada subclassFeature Envy

Repository ini hanyalah rangkuman dari buku Suryanarayana et al. dengan sedikit tambahan informasi lain. Diharapkan mahasiswa juga membaca sumber aslinya pada bab 6 halaman 123 - 192.

Created by Saugi