Apa itu kerangka kerja perangkat lunak? [Tutup]

193

Dapatkah seseorang tolong jelaskan kepada saya apa itu kerangka kerja perangkat lunak? Mengapa kita membutuhkan kerangka kerja? Apa yang dilakukan kerangka kerja untuk membuat pemrograman lebih mudah?

Gelisah
sumber

Jawaban:

422

Saya sangat terlambat untuk menjawabnya. Tetapi, saya ingin membagikan satu contoh, yang hanya saya pikirkan hari ini. Jika saya mengatakan kepada Anda untuk memotong selembar kertas dengan dimensi 5m x 5m, maka pasti Anda akan melakukannya. Tapi misalkan saya meminta Anda untuk memotong 1000 lembar kertas dari dimensi yang sama. Dalam hal ini, Anda tidak akan melakukan pengukuran 1000 kali; jelas, Anda akan membuat bingkai 5m kali 5m, dan kemudian dengan bantuan itu Anda akan dapat memotong 1000 lembar kertas dalam waktu yang lebih singkat. Jadi, apa yang Anda lakukan adalah membuat kerangka kerja yang akan melakukan jenis tugas tertentu. Alih-alih melakukan jenis tugas yang sama berulang-ulang untuk jenis aplikasi yang sama, Anda membuat kerangka kerja yang memiliki semua fasilitas tersebut bersama dalam satu paket yang bagus, sehingga memberikan abstraksi untuk aplikasi Anda dan yang lebih penting banyak aplikasi.

Neha Choudhary
sumber
27
Saya ingin tahu alasan untuk memilihnya. Ini akan membantu saya meningkatkannya.
Neha Choudhary
4
keren sangat mudah dimengerti ........... terima kasih banyak
Premkumar
25
@NehaChoudhary, Bukan saya, tapi dia -1 karena apa yang Anda bicarakan adalah perpustakaan, bukan kerangka kerja karena tidak ada IoC.
Pacerier
11
Saya sudah membaca posting Anda, tetapi apa yang Anda posting terdengar seperti apa yang bisa dilakukan perpustakaan. Bagaimana menjelaskan perbedaan antara kerangka kerja dan perpustakaan?
Aaron Liu
2
Saya tidak mengerti. Dari apa yang Anda jelaskan akan lebih seperti perpustakaan, kan?
router
92

Secara teknis, Anda tidak perlu kerangka kerja. Jika Anda membuat situs yang benar-benar sangat sederhana (pikirkan web kembali pada tahun 1992), Anda bisa melakukan semuanya dengan HTML kode-keras dan beberapa CSS.

Dan jika Anda ingin membuat aplikasi web modern, Anda sebenarnya tidak perlu menggunakan kerangka kerja untuk itu.

Anda dapat memilih untuk menulis semua logika yang Anda butuhkan sendiri, setiap saat. Anda dapat menulis lapisan data-persistensi / penyimpanan Anda sendiri, atau - jika Anda terlalu sibuk - cukup tulis SQL kustom untuk setiap akses basis data tunggal. Anda dapat menulis lapisan autentikasi dan penanganan sesi Anda sendiri. Dan logika rending template Anda sendiri. Dan logika penanganan pengecualian Anda sendiri. Dan fungsi keamanan Anda sendiri. Dan kerangka kerja unit test Anda sendiri untuk memastikan semuanya bekerja dengan baik. Dan milikmu sendiri ... [berlangsung cukup lama]

Kemudian lagi, jika Anda melakukan menggunakan kerangka , Anda akan dapat manfaat dari baik, biasanya peer-review dan sangat baik diuji karya puluhan jika tidak ratusan pengembang lain, yang mungkin lebih baik dari Anda. Anda akan dapat membangun apa yang Anda inginkan dengan cepat, tanpa harus menghabiskan waktu untuk membangun atau terlalu mengkhawatirkan item infrastruktur yang tercantum di atas.

Anda bisa menyelesaikan lebih banyak dalam waktu yang lebih singkat, dan tahu bahwa kode kerangka kerja yang Anda gunakan atau perpanjang sangat mungkin dilakukan lebih baik daripada Anda melakukannya sendiri.

Dan biaya ini? Investasikan waktu untuk mempelajari kerangka kerja. Tetapi - karena hampir setiap pengembang web di luar sana akan membuktikan - pasti sepadan dengan waktu yang dihabiskan untuk belajar untuk mendapatkan manfaat besar (benar-benar, sangat besar) dari menggunakan kerangka apa pun yang Anda pilih.

Steve Jalim
sumber
17
Mengapa tidak menggunakan energi itu untuk berkontribusi pada kerangka kerja open-source, alih-alih mengecek barang-barang Anda sendiri? 'Sendiri, kita bisa memindahkan batu; bersama-sama kita dapat memindahkan gunung 'dan semua itu
Steve Jalim
7
@ Jeffffrey "Lalu bagaimana Anda akan belajar? Bagaimana Anda akan tumbuh sebagai seorang programmer?" Belajar sesuai keinginan Anda, tetapi jika Anda berniat bekerja untuk klien nyata, Anda harus memberikan solusi terbaik dalam waktu sesingkat mungkin. Kode "mungkin buggy" ANDA tidak dapat diterima untuk itu.
Cmorales
6
@Cmorales, jika Anda ingin mempelajari bahasa pemrograman atau masalah khusus domain apa pun, Anda pasti tidak akan memiliki klien "nyata" (dan Anda mungkin memiliki banyak waktu di tangan) dan itulah sebabnya saya menyarankan pemula tidak memulai dari kerangka kerja.
Sepatu
3
@ Jeffffrey Anda tidak mengatakan apa-apa tentang pemula dalam komentar Anda, itu umum. Saya setuju bahwa Anda harus belajar sendiri terlebih dahulu, tetapi komentar Anda tidak menentukan itu dan dalam kehidupan nyata (pekerjaan) Anda tidak mampu menggunakan kode kereta hanya untuk belajar. Saya tahu beberapa orang yang tidak menggunakan kerangka kerja karena mereka pikir mereka tahu lebih baik ... dan menghabiskan dua kali waktu untuk setiap proyek.
Cmorales
1
@Cmorales Saya juga kenal beberapa orang yang menggunakan kerangka kerja tetapi juga membutuhkan waktu dua kali untuk setiap proyek. Kecepatan pemrograman tidak selalu terkait dengan alat yang digunakan.
Cypher
53

Ringkasan di Wikipedia (Kerangka Perangkat Lunak) (google hit btw pertama) menjelaskannya dengan cukup baik:

Kerangka kerja perangkat lunak, dalam pemrograman komputer, adalah abstraksi di mana kode umum yang menyediakan fungsionalitas generik dapat ditimpa secara selektif atau dikhususkan oleh kode pengguna yang menyediakan fungsionalitas tertentu. Kerangka kerja adalah kasus khusus dari pustaka perangkat lunak di mana mereka adalah abstraksi yang dapat digunakan kembali dari kode yang dibungkus dengan antarmuka pemrograman aplikasi (API) yang terdefinisi dengan baik, namun mereka mengandung beberapa fitur pembeda utama yang memisahkannya dari pustaka normal.

Kerangka kerja perangkat lunak memiliki fitur yang membedakan ini dari perpustakaan atau aplikasi pengguna normal:

  1. inversi of control - Dalam suatu kerangka kerja, tidak seperti di perpustakaan atau aplikasi pengguna normal, aliran keseluruhan kontrol program tidak ditentukan oleh penelepon, tetapi oleh kerangka kerja. [1]
  2. perilaku default - Kerangka kerja memiliki perilaku default. Perilaku default ini harus benar-benar beberapa perilaku yang berguna dan bukan serangkaian no-ops.
  3. extensibility - Kerangka kerja dapat diperpanjang oleh pengguna biasanya dengan selektif override atau khusus oleh kode pengguna yang menyediakan fungsionalitas tertentu.
  4. kode kerangka kerja yang tidak dapat dimodifikasi - Kode kerangka kerja, secara umum, tidak diperbolehkan untuk dimodifikasi. Pengguna dapat memperluas kerangka kerja, tetapi tidak mengubah kodenya.

Anda mungkin "membutuhkannya" karena dapat memberikan Anda jalan pintas yang bagus ketika mengembangkan aplikasi, karena aplikasi ini berisi banyak fungsi yang sudah ditulis dan diuji. Alasannya sangat mirip dengan alasan kami menggunakan pustaka perangkat lunak.

aioobe
sumber
13
bagian putih jawaban Anda jauh lebih baik daripada bagian abu-abu, sesuai dengan jenis pertanyaan ...
OlimilOops
Saya cukup yakin orang yang mengajukan pertanyaan menemukan entri Wikipedia juga ... Dia mungkin mencari jawaban yang lebih komprehensif.
Stophface
31

Sudah banyak jawaban bagus, tetapi biarkan saya melihat apakah saya bisa memberi Anda sudut pandang lain.

Menyederhanakan banyak hal, Anda dapat melihat kerangka kerja sebagai aplikasi yang lengkap kecuali untuk fungsionalitas sebenarnya. Anda pasang fungsi dan PRESTO! Anda punya aplikasi.

Pertimbangkan, katakanlah, kerangka kerja GUI. Kerangka kerja berisi semua yang Anda butuhkan untuk membuat aplikasi. Memang Anda sering dapat membuat aplikasi minimal dengan sedikit garis sumber yang sama sekali tidak melakukan apa-apa - tetapi itu memberi Anda manajemen jendela, manajemen sub-jendela, menu, bilah tombol, dll. Itulah sisi kerangka kerja hal-hal. Dengan menambahkan fungsionalitas aplikasi Anda dan "memasukkannya" ke tempat-tempat yang tepat dalam kerangka kerja Anda mengubah aplikasi kosong ini yang tidak lebih dari manajemen jendela, dll. Menjadi aplikasi yang nyata dan lengkap.

Ada jenis kerangka kerja yang serupa untuk aplikasi web, untuk aplikasi sisi server, dll. Dalam setiap kasus kerangka kerja menyediakan sebagian besar kode berulang yang membosankan (mudah-mudahan) sambil Anda memberikan fungsionalitas domain masalah yang sebenarnya. (Ini adalah yang ideal. Pada kenyataannya, tentu saja, keberhasilan kerangka kerja sangat bervariasi.)

Saya menekankan lagi bahwa ini adalah pandangan yang disederhanakan tentang apa kerangka itu. Saya tidak menggunakan istilah menakutkan seperti "Inversion of Control" dan sejenisnya meskipun sebagian besar kerangka kerja memiliki konsep menakutkan seperti built-in. Karena Anda seorang pemula, saya pikir saya akan mengampuni Anda jargon dan pergi dengan perumpamaan mudah.

HANYA PENDAPAT SAYA yang benar
sumber
14

Saya tidak yakin ada definisi "kerangka" yang jelas. Kadang-kadang satu set besar perpustakaan disebut kerangka kerja, tapi saya pikir penggunaan kata yang khas lebih dekat dengan definisi yang dibawa aioobe.

Artikel yang sangat bagus ini merangkum perbedaan antara hanya satu set perpustakaan dan kerangka kerja:

Kerangka kerja dapat didefinisikan sebagai satu set perpustakaan yang mengatakan "Jangan panggil kami, kami akan menghubungi Anda."

Bagaimana kerangka kerja membantu Anda? Karena alih-alih menulis sesuatu dari awal, Anda pada dasarnya hanya memperpanjang suatu aplikasi yang berfungsi. Anda mendapatkan banyak produktivitas dengan cara ini - terkadang aplikasi yang dihasilkan bisa jauh lebih rumit daripada yang bisa Anda lakukan sendiri dalam kerangka waktu yang sama - tetapi Anda biasanya berdagang dengan banyak fleksibilitas.

ek
sumber
8

Penjelasan sederhana adalah: Kerangka kerja adalah perancah yang dapat Anda gunakan untuk membangun aplikasi.

Kerangka kerja umumnya menyediakan beberapa fungsionalitas dasar yang dapat Anda gunakan dan luaskan untuk membuat aplikasi yang lebih kompleks, ada kerangka kerja untuk semua hal. Kerangka kerja Microsoft MVC adalah contoh yang bagus untuk ini. Ini menyediakan semua yang Anda butuhkan untuk keluar dari situs web bangunan menggunakan pola MVC, menangani permintaan web, rute dan sejenisnya. Yang harus Anda lakukan adalah mengimplementasikan "Controllers" dan memberikan "Views" yang merupakan dua konstruksi yang didefinisikan oleh kerangka kerja MVC. Kerangka kerja MVC kemudian menangani pemanggilan pengontrol Anda dan menampilkan tampilan Anda.

Mungkin bukan kata-kata terbaik tapi saya harap ini membantu

Sekhat
sumber
1
Sebenarnya, ini lebih seperti membangun aplikasi ke dalam perancah daripada di sekitarnya.
Jörg W Mittag
4

di tingkat terendah, kerangka kerja adalah lingkungan, di mana Anda diberi seperangkat alat untuk bekerja dengannya

alat ini datang dalam bentuk perpustakaan, file konfigurasi, dll.

apa yang disebut "lingkungan" ini memberi Anda pengaturan dasar (pelaporan kesalahan, file log, pengaturan bahasa, dll) ... yang dapat dimodifikasi, diperluas, dan dikembangkan.

Orang sebenarnya tidak membutuhkan kerangka kerja, itu hanya masalah ingin menghemat waktu, dan yang lain hanya masalah preferensi pribadi.

Orang akan membenarkan bahwa dengan kerangka kerja, Anda tidak perlu kode dari awal. Tapi itu hanya orang-orang membingungkan perpustakaan dengan kerangka kerja.

Saya tidak bias di sini, saya sebenarnya menggunakan kerangka kerja sekarang.

yretuta
sumber
4

Secara umum, A frame Work adalah struktur nyata atau Konseptual yang dimaksudkan untuk berfungsi sebagai dukungan atau Panduan untuk membangun sesuatu yang memperluas struktur menjadi sesuatu yang bermanfaat ...

uma
sumber
2

Kerangka kerja menyediakan fungsionalitas / solusi untuk area masalah tertentu.
Definisi dari wiki :

Kerangka kerja perangkat lunak, dalam pemrograman komputer, adalah abstraksi di mana kode umum yang menyediakan fungsionalitas generik dapat ditimpa secara selektif atau dikhususkan oleh kode pengguna yang menyediakan fungsionalitas tertentu. Kerangka kerja adalah kasus khusus dari pustaka perangkat lunak di mana mereka adalah abstraksi yang dapat digunakan kembali dari kode yang dibungkus dengan antarmuka pemrograman aplikasi (API) yang terdefinisi dengan baik, namun mereka mengandung beberapa fitur pembeda utama yang memisahkannya dari pustaka normal.

Soe Moe
sumber
Ada kata dalam kalimat pertama "abstraksi". bagaimana apanya ? di mana kita menggunakan abstraksi?
Kumaresan Perumal
2

Kerangka kerja membantu kita tentang menggunakan "sudah dibuat", metafora bisa seperti,

berpikir bahwa materi bumi adalah bahasa pemrograman,

dan misalnya "kamera" adalah programnya, dan Anda memutuskan untuk membuat buku catatan. Anda tidak perlu membuat ulang kamera setiap kali, Anda cukup menggunakan kerangka bumi (misalnya ke toko teknologi) mengambil kamera dan mengintegrasikannya ke notebook Anda.

stckvrflw
sumber
2

Kerangka kerja memiliki beberapa fungsi yang mungkin Anda butuhkan. Anda mungkin perlu semacam array yang memiliki mekanisme sortir bawaan. Atau mungkin Anda memerlukan jendela di mana Anda ingin menempatkan beberapa kontrol, semua yang dapat Anda temukan dalam suatu kerangka kerja. itu semacam BEKERJA yang mencakup FRAME di sekitar pekerjaan Anda sendiri.

EDIT: OK saya akan menggali apa yang kalian coba katakan kepada saya;) Anda mungkin belum memperhatikan informasi di antara baris "BEKERJA yang membentang FRAME sekitar ..." sebelum ini semakin jatuh lebih dalam dan lebih dalam. Saya mencoba memberikan dasar untuk itu dengan harapan Anda senang:
penjelasan yang bagus untuk pertanyaan "Perbedaan antara Perpustakaan dan Kerangka Kerja" Saya temukan di sini
http://ifacethoughts.net/2007/06/04/difference-between- a-library-and-a-framework /

OlimilOops
sumber
sama sekali tidak mengerti suara turun ... Saya benar-benar terkejut tentang hal itu. pertanyaannya adalah jenis pertanyaan dasar pemula dan jawaban saya sesuai dengan yang cukup baik ...
OlimilOops
4
Untuk lebih jelasnya: Saya tidak memilih. Namun apa yang Anda bicarakan adalah pada tingkat yang jauh lebih rendah daripada apa yang dikhawatirkan kerangka kerja. Algoritma Pengumpulan dan Penyortiran lebih dari pustaka standar daripada Kerangka kerja misalnya.
bakkal
1
terima kasih atas jawabannya tapi ... itu bukan jawaban untuk pertanyaan saya. menurut pertanyaan dari OP, dinstinguishing antara "perpustakaan standar" dan "kerangka kerja" adalah tempat yang salah di sini. misal dalam .net-framework Anda dapat menemukan koleksi namespace di bagian framework yang belum pernah saya dengar ada yang mengatakan collecsion namespace bukan bagian dari .netframework. jadi jawaban Anda untuk pertanyaan saya salah
OlimilOops
1
Ini adalah definisi perpustakaan . Itu merindukan sifat pembeda dari suatu kerangka kerja yang bertentangan dengan perpustakaan: Inversion of Control .
Jörg W Mittag
2

Di luar definisi, yang kadang-kadang hanya bisa dimengerti jika Anda sudah mengerti, sebuah contoh membantu saya.

Saya pikir saya mendapat sedikit pemahaman ketika bersantai mengurutkan daftar di. Net; contoh kerangka kerja yang menyediakan fungsionalitas yang dirancang oleh kode pengguna yang menyediakan fungsionalitas tertentu. Ambil List.Sort (IComparer). Algoritma pengurutan, yang berada dalam kerangka .Net dalam metode Sortir, perlu melakukan serangkaian perbandingan; Apakah objek A datang sebelum atau sesudah objek B? Tetapi Sort sendiri tidak memiliki petunjuk bagaimana melakukan perbandingan; hanya tipe yang disortir yang tahu itu. Anda tidak dapat menulis algoritma pengurutan perbandingan yang dapat digunakan kembali oleh banyak pengguna dan mengantisipasi semua jenis yang Anda akan diminta untuk mengurutkan. Anda harus menyerahkan sedikit pekerjaan kepada pengguna itu sendiri. Jadi di sini, urutkan, alias kerangka kerja, memanggil kembali ke metode dalam kode pengguna, jenis yang disortir sehingga dapat melakukan perbandingan. (Atau delegasi dapat digunakan;

Apakah saya benar?

BillB
sumber