Perbedaan antara Pola dan Prinsip

20

Apa perbedaan antara Pola dan Prinsip Desain Berorientasi Obyek? Apakah mereka berbeda? Sejauh yang saya mengerti keduanya mencoba mencapai beberapa tujuan bersama (mis. Fleksibilitas). Jadi bisakah saya mengatakan bahwa sebuah pola adalah prinsip dan sebaliknya?

Prinsip Perancangan = SOLID (yaitu Prinsip Ketergantungan Pembalikan)

Pola Desain = Gof (yaitu Pola Pabrik Abstrak)

Chandi Gorom
sumber

Jawaban:

24

Tidak, mereka tidak sama.

Pola adalah solusi umum untuk masalah pemrograman berorientasi objek . (Saya tidak mengetahui adanya buku yang serupa untuk pemrograman fungsional atau deklaratif.) Idenya dikristalisasi dalam buku "Pola Desain" yang terkenal oleh Gang of Four pada 1995.

Seperti yang ditunjukkan Andre, pola adalah hal yang umum dalam setiap paradigma. Saya akan mengulangi pernyataan saya sebelumnya: Saya tidak mengetahui adanya buku-buku serupa untuk pemrograman fungsional atau deklaratif, tetapi Andre telah mengatasi ketidaktahuan saya dengan tautan yang dia berikan di bawah ini. (Terima kasih, Andre.)

Prinsip kurang tentang bahasa atau paradigma tertentu, lebih umum. "Don't Repeat Yourself" - Prinsip KERING - berlaku untuk semua pemrograman.

Duffymo
sumber
4
Pola ada dalam setiap paradigma. Jeremy Gibbons sedang menulis buku berjudul Patterns in Functional Programming (dan menulis blog tentang itu di sini ). Pola adalah apa yang namanya - desain berulang, yang memecahkan masalah yang sama. Mereka ada di mana-mana, 'meskipun Anda mungkin tidak selalu mengenalinya.
André Paramés
@ AndréParamés Jalan cepat membuat saya percaya bahwa Jeremy Gibbons berbicara tentang idiom bahasa , bukan pola desain.
Izkata
@Izkata Pola Desain Non-OOP?
Roc Martí
19

Konsep-konsep ini tidak sama:

* Prinsip Desain: * Prinsip-prinsip desain perangkat lunak mewakili seperangkat pedoman yang membantu kita untuk menghindari desain yang buruk. seperti: Buka Tutup Prinsip

* Pola Desain: * Pola Desain adalah solusi umum yang dapat digunakan kembali untuk masalah yang biasa terjadi dalam konteks tertentu dalam desain perangkat lunak. Seperti: Singleton

Jennifer S
sumber
7

Pola adalah prinsip, implementasi apa untuk pola.

Prinsipnya adalah "tipuan", yang dapat dicapai dengan pola "pabrik", yang diterapkan sebagai kelas dengan metode pabrik pada akhirnya.

K ..
sumber
3

Nah, Prinsip adalah aturan sementara pola adalah contoh nyata mereka.

Ahmad
sumber
1
dapatkah Anda memberikan beberapa contoh?
Tolong beri tahu kami prinsip yang menuntut Pabrik atau Rantai Tanggung Jawab atau Kelas Terbang.
duffymo
2
@duffymo Well Factory misalnya mengikuti Prinsip Ketergantungan Inversi (bukan injeksi); baik klien dan instance tergantung pada abstraksi - antarmuka. Chain of Responsibility didasarkan pada prinsip-prinsip longgar dan pemisahan kontrol. Flyweight Saya percaya hanya memiliki peningkatan kinerja.
m3th0dman
3

Pola lebih banyak hal tingkat tinggi, daripada prinsip. Pola menyelesaikan masalah tertentu. Prinsip dapat diterapkan di mana saja terlepas dari konteksnya. Sebenarnya pola berdasarkan prinsip (SRP, KERING, dll)

EG Mari kita lihat pola Strategi. Ini mendefinisikan keluarga algoritma, merangkum masing-masing, dan membuatnya dipertukarkan. Jadi, Anda memiliki konsep algoritma tingkat tinggi di sini. Dengan pola Negara, Anda memiliki konsep negara tingkat tinggi. Dengan prinsip Anda tidak memiliki konsep tingkat tinggi. Prinsip adalah blok bangunan, yang digunakan oleh patters untuk mencapai tujuan. Saat Anda menerapkan pola Strategi, Anda menggunakan SOLID:

  • SRP - Anda mendefinisikan kode, yang bertanggung jawab untuk algoritma dan mengekstraknya dari kode lain.
  • OCP - Anda mendefinisikan abstraksi, yang mewakili semua algoritma yang berbeda dan menggunakannya
  • LSP - Anda tidak menggunakan kelas algoritme konkret dalam kode klien, hanya abstraksi
lazyberezovsky
sumber
5
Sebenarnya pola lebih rendah dari prinsip. Artinya, suatu pola lebih dekat dengan implementasi aktual daripada prinsip dalam konteks ini. Dengan kata lain, prinsip lebih abstrak daripada pola dengan prinsip yang berarti pedoman desain umum dan pola yang mewakili solusi yang cocok untuk kelas masalah tertentu.
@Jarkko lihat contoh saya. Ketika saya berbicara tentang level, saya bermaksud bahwa pola didasarkan pada prinsip, bukan sebaliknya. Bata tidak lebih merupakan benda tingkat tinggi, daripada bangunan.
4
Saya bisa melihat apa yang Anda maksudkan dengan itu dan memahami pemikiran Anda tentang masalah ini. Namun, itu bertentangan dengan makna umum dari konsep "tingkat tinggi" dan "tingkat rendah" dalam konteks perangkat lunak. (Untuk beberapa alasan saya tidak bisa @ -tag Anda.)
1
"Pola lebih banyak hal tingkat tinggi, daripada prinsip". Saya mohon berbeda ==> Sebuah pola mendekati realisasi (yaitu level rendah), sementara prinsipnya adalah aturan level tinggi.
Raúl
2

Pola di mana awalnya didokumentasikan untuk Arsitektur. Dalam arsitektur, berlaku untuk hal-hal mulai dari penempatan pintu di ruangan hingga tata letak desa.

Geng Empat menerapkan ide untuk Pemrograman Berorientasi Objek. Mungkin ada lebih dari satu pola yang dapat digunakan untuk menyelesaikan masalah, tetapi masing-masing pola akan memiliki implementasi yang spesifik. Pola ada dalam pendekatan pemrograman lain, tetapi saya tidak mengetahui adanya buku yang berlaku. Seperti yang telah disebutkan oleh orang lain, Pola mencakup implementasi spesifik. Menggunakan pola ketika itu tidak berlaku sering dianggap sebagai anti-pola.

Prinsip tidak mencakup implementasi, meskipun mungkin ada pendekatan implementasi standar. Prinsip-prinsip lebih banyak membahas masalah-masalah umum daripada masalah-masalah spesifik. Untuk Inversion of Control, saya menyadari setidaknya tiga pendekatan implementasi. Untuk KERING (Jangan Ulangi Diri Sendiri) Saya tidak tahu tentang pendekatan implementasi spesifik menghanguskan, meskipun saya menggunakan beberapa.

Mempertimbangkan

  • Anda telah diminta untuk menggunakan Pola seperti Pola Pabrik Abstrak sebagai satu-satunya pendekatan untuk mengembangkan program. Apakah ini pantas? Tidak, maka itu lebih mungkin sebuah Pola.
  • Anda telah diminta untuk menerapkan KERING ke semua komponen? Apakah ini pantas? Ya, maka itu lebih cenderung menjadi Prinsip.
BillThor
sumber
1

Prinsip Desain OO—

Prinsip OO adalah seperangkat pedoman yang memastikan konsep OOP. Berdasarkan konsep OOP, ini mendefinisikan cara untuk merancang cara yang lebih baik, desain yang lebih baik. Prinsip dasar desain OO adalah SOLID.

Pola Desain memberikan solusi umum untuk masalah desain. Harap dicatat "pola desain" dapat diterapkan ke kata berorientasi objek siang juga. Jadi pola desain OO (OODP) adalah yang menyediakan solusi umum untuk prinsip OO desain berorientasi objek. Pola desain ditemukan, bukan diciptakan. Ada beberapa cara untuk mendefinisikan OODP dan yang paling terkenal adalah BSC [Behavioral Structural Creational].

Berikut ini adalah tautan untuk penjelasan terperinci. http://techythought.wordpress.com/2013/01/21/design-principle-vs-ds-design-pattern-describing-oop-elements/

Tanzy
sumber