Apa perbedaan antara kerangka kerja dan perpustakaan? [Tutup]


865

Apa perbedaan antara kerangka kerja dan perpustakaan ?

Saya selalu menganggap perpustakaan sebagai satu set objek dan fungsi yang berfokus pada penyelesaian masalah tertentu atau area spesifik pengembangan aplikasi (yaitu akses basis data); dan kerangka kerja di sisi lain sebagai kumpulan perpustakaan yang berpusat pada metodologi tertentu (yaitu MVC) dan yang mencakup semua bidang pengembangan aplikasi.


18
@ vba4all: Bagaimana ini bisa menjadi duplikat ketika diminta pertama kali?
Noob Saibot

5
Hanya karena itu dibuat pertama kali bukan berarti itu bukan duplikat;) ini hanya tentang mengidentifikasi pertanyaan duplikat / sangat mirip, dan memastikan sumber daya / jawaban dibagikan (dan pertanyaan paling aktif / paling baik dijawab terbuka)
GrayedFox

2
Kemungkinan duplikat dari Kerangka vs Toolkit vs Perpustakaan
emlai

3
@tuple_cat sebenarnya tautan Anda tampaknya merupakan duplikat: ditanyakan setelah ini
chharvey

1
Kami membutuhkan beberapa fungsionalitas, kami sebut Perpustakaan. Kami membutuhkan beberapa fungsionalitas kami akan membantu kerangka kerja dan Kerangka panggilan kode kami (Misalnya UIKit).
Kamleshwar

Jawaban:


350

Sebenarnya istilah-istilah ini dapat berarti banyak hal yang berbeda tergantung konteks yang digunakan.

Sebagai contoh, pada Mac OS X frameworks hanya library, yang dikemas dalam sebuah bundel. Dalam bundel Anda akan menemukan perpustakaan dinamis yang sebenarnya (libWh whatever.dylib). Perbedaan antara perpustakaan telanjang dan kerangka kerja di Mac adalah bahwa kerangka kerja dapat berisi beberapa versi berbeda dari perpustakaan. Ini dapat berisi sumber daya tambahan (gambar, string terlokalisasi, file data XML, objek UI, dll.) Dan kecuali kerangka kerja dirilis ke publik, biasanya berisi file .h yang diperlukan Anda perlu menggunakan perpustakaan.

Dengan demikian Anda memiliki semua yang ada dalam satu paket yang Anda perlukan untuk menggunakan pustaka dalam aplikasi Anda (pustaka C / C ++ / Objective-C tanpa. banyak file untuk dipindahkan (bundel Mac hanya direktori pada tingkat Unix, tetapi UI memperlakukannya seperti file tunggal, cukup banyak seperti Anda memiliki file JAR di Jawa dan ketika Anda mengkliknya, Anda biasanya tidak melihat apa yang ada di dalamnya, kecuali jika Anda secara eksplisit memilih untuk menampilkan konten).

Wikipedia menyebut kerangka kerja "kata kunci". Ini mendefinisikan kerangka kerja perangkat lunak sebagai

Kerangka kerja perangkat lunak adalah desain yang dapat digunakan kembali untuk sistem perangkat lunak (atau subsistem). Kerangka kerja perangkat lunak dapat mencakup program pendukung, pustaka kode, bahasa scripting, atau perangkat lunak lain untuk membantu mengembangkan dan merekatkan bersama berbagai komponen proyek perangkat lunak. Berbagai bagian kerangka kerja dapat diekspos melalui API ..

Jadi saya akan mengatakan perpustakaan hanya itu, "perpustakaan". Ini adalah kumpulan objek / fungsi / metode (tergantung pada bahasa Anda) dan "tautan" aplikasi Anda terhadapnya dan dengan demikian dapat menggunakan objek / fungsi / metode tersebut. Ini pada dasarnya adalah file yang berisi kode yang dapat digunakan kembali yang biasanya dapat dibagikan di antara banyak aplikasi (Anda tidak perlu menulis kode yang sama berulang-ulang).

Kerangka kerja dapat menjadi semua yang Anda gunakan dalam pengembangan aplikasi. Ini bisa berupa perpustakaan, kumpulan banyak perpustakaan, kumpulan skrip, atau perangkat lunak apa pun yang Anda perlukan untuk membuat aplikasi. Kerangka hanyalah istilah yang sangat kabur.

Berikut ini artikel tentang beberapa pria mengenai topik " Perpustakaan vs. Kerangka Kerja ". Saya pribadi berpendapat artikel ini sangat bisa diperdebatkan. Tidak salah apa yang dia katakan di sana, bagaimanapun, dia hanya memilih salah satu dari banyak definisi kerangka kerja dan membandingkannya dengan definisi klasik perpustakaan. Misalnya dia bilang kamu perlu kerangka kerja untuk sub-kelas. Betulkah? Saya dapat memiliki objek yang didefinisikan di perpustakaan, saya dapat menautkannya, dan mengelompokkannya dalam kode saya. Saya tidak melihat bagaimana saya membutuhkan "kerangka kerja" untuk itu. Dalam beberapa hal dia lebih suka menjelaskan bagaimana istilah kerangka digunakan saat ini. Itu hanya kata hyped, seperti yang saya katakan sebelumnya. Beberapa perusahaan hanya merilis perpustakaan normal (dalam arti perpustakaan klasik) dan menyebutnya "kerangka kerja" karena kedengarannya lebih mewah.


2
Menarik bahwa pada tahun 2008 artikel Wikipedia menggambarkan "kerangka kerja" sebagai "kata kunci".
Zebrafish

2
IMO, sebuah kerangka kerja adalah lingkungan proyek "kosong".
Kulvar

514

Sebuah perpustakaan Melakukan tertentu, operasi didefinisikan dengan baik.

Sebuah kerangka adalah kerangka di mana aplikasi mendefinisikan "daging" dari operasi dengan mengisi kerangka. Kerangka masih memiliki kode untuk menghubungkan bagian-bagian tetapi pekerjaan paling penting dilakukan oleh aplikasi.

Contoh perpustakaan: Protokol jaringan, kompresi, manipulasi gambar, utilitas string, evaluasi ekspresi reguler, matematika. Operasi mandiri.

Contoh kerangka kerja: Sistem aplikasi web, Plug-in manager, sistem GUI. Kerangka kerja mendefinisikan konsep tetapi aplikasi mendefinisikan fungsi dasar yang peduli pengguna akhir.


10
+1 untuk contoh nyata. Btw, apakah Anda keberatan menjelaskan apa yang Anda maksud dengan "sistem aplikasi web"?
Pacerier

3
@Pacerier mungkin sesuatu yang memungkinkan Anda membuat aplikasi web lengkap, seperti Rails for Ruby atau Sails for Node.js.
gustavohenke

Jawaban bagus. Bisakah Anda memberikan beberapa contoh lain yang terkait dengan kerangka kerja dan perpustakaan iOS?
NSPratik

atau Django, kerangka kerja web untuk perfeksionis dengan tenggat waktu.
serangan udara

2
Saya akan berpikir untuk mengisi kerangka dengan 'otot' daripada 'daging'. Saya pikir ini analogi yang lebih akurat karena 'otot' membuat kerangka bergerak.
altgov3en

290

Saya pikir perbedaan utama adalah bahwa kerangka kerja mengikuti " prinsip Hollywood ", yaitu "jangan panggil kami, kami akan memanggil Anda."

Menurut Martin Fowler :

Sebuah perpustakaan pada dasarnya satu set fungsi yang dapat Anda hubungi, hari ini biasanya disusun dalam kelas. Setiap panggilan berfungsi dan mengembalikan kontrol ke klien.

Sebuah kerangka mewujudkan beberapa desain abstrak, dengan lebih perilaku dibangun dalam. Untuk menggunakannya Anda harus memasukkan perilaku Anda ke berbagai tempat dalam rangka baik oleh subclassing atau dengan mencolokkan kelas Anda sendiri. Kode kerangka kerja kemudian memanggil kode Anda pada titik-titik ini.


2
@Panos Terima kasih atas penjelasannya, tetapi bisakah Anda menguraikan. Sebagai contoh, saya menggunakan kerangka FacebookSDK, dan saya memanggil metode kelas dari kerangka ini. Kerangka kerja FacebookSDK tidak memanggil apa pun dalam kode saya, yang merupakan kebalikan dari definisi Anda yaitu "jangan panggil kami, kami akan menghubungi Anda."
Charles Robertson

4
@CharlesRobertson AFAIK FacebookSDK adalah perpustakaan klien. Itu tidak dapat diklasifikasikan sebagai kerangka kerja dan alasannya jelas (seperti yang telah Anda perhatikan): FacebookSDK tidak memanggil apa pun dalam kode klien. Selain itu, Facebook mendefinisikan SDK sebagai berikut: "Satu set fungsi sisi klien untuk menambahkan Plugins Sosial, Login Facebook dan panggilan API API." Tidak ada indikasi untuk kerangka kerja ...
Panos

1
@ Piano Terima kasih. Saya kira ikon koper yang mewakili FacebookSDK sedikit menyesatkan. Dan nama 'FacebookSDK.framework'. Facebook harus mengganti nama menjadi sesuatu seperti 'FacebookSDK.dylib'? Tetapi terima kasih telah menjelaskan ini. Adalah baik untuk mengetahui apa definisi yang benar ...
Charles Robertson

Itu definisi yang menarik. Saya baru-baru ini mulai menggunakan d3.js, dan mengamati bahwa umumnya dianggap sebagai kerangka kerja. Tapi apa pun kode d3 yang saya tulis adalah dalam kode javascript biasa, jadi saya tidak dapat memperluas definisi ini ke d3.
Dileep Kumar Patchigolla

1
@Dileep Homepage d3.js menyatakan dalam kalimat pertama: "D3.js adalah pustaka JavaScript untuk memanipulasi dokumen berdasarkan data". Saya pikir itu salah untuk dianggap sebagai kerangka kerja.
Panos

243

Anda memanggil Perpustakaan.

Kerangka memanggil Anda.


図 書館 助 け
足 場 が 痛 痛 い
の の の


12
Bisakah Anda menolak ini sebagai haiku?
Derek Tomes

18
@DerekTomes BTW: saya menambahkan formulir haiku .
Ian Boyd

56
Jawaban Anda sedang dibahas dalam META . Maukah Anda menerjemahkan haiku? Saya pikir beberapa dari kita bertanya-tanya apakah itu benar-benar berarti Bantu perpustakaan, perancah sakit, banyak air mata sebagai penerjemah Google cukup sayang :)
Bugs

27
Senang melihat bahwa mod membatalkan dua komentar pertama. Sekarang masuk akal mengapa teks Jepang ditambahkan (diminta sebagai lelucon) dan itu hanya upaya untuk menerjemahkan, dan bukan puisi Jepang yang sangat populer.
Zanon

9
Di Soviet Rusia, kerangka kerja memanggil Anda.
Robert Moore

242

Perpustakaan:

Ini hanya kumpulan dari rutinitas (pemrograman fungsional) atau definisi kelas (object oriented programming). Alasan di baliknya hanyalah penggunaan kembali kode , yaitu mendapatkan kode yang sudah ditulis oleh pengembang lain. Kelas-kelas atau rutinitas biasanya mendefinisikan operasi spesifik di area spesifik domain . Sebagai contoh, ada beberapa perpustakaan matematika yang dapat membiarkan pengembang hanya memanggil fungsi tanpa mengulangi implementasi bagaimana suatu algoritma bekerja.

Kerangka:

Dalam kerangka, semua aliran kontrol sudah ada di sana, dan ada banyak bintik putih yang telah ditentukan yang harus kita isi dengan kode kita . Kerangka kerja biasanya lebih kompleks. Ini mendefinisikan kerangka di mana aplikasi mendefinisikan fitur-fiturnya sendiri untuk mengisi kerangka. Dengan cara ini, kode Anda akan dipanggil oleh framework saat tepat. Manfaatnya adalah bahwa pengembang tidak perlu khawatir tentang apakah suatu desain bagus atau tidak, tetapi hanya tentang mengimplementasikan fungsi-fungsi spesifik domain.

Pustaka, Kerangka Kerja dan representasi gambar Kode Anda:

Perpustakaan, Kerangka Kerja dan hubungan gambar Kode Anda

Perbedaan Kunci:

Perbedaan utama antara perpustakaan dan kerangka kerja adalah "Inversion of Control" . Saat Anda memanggil metode dari perpustakaan, Anda memegang kendali. Tetapi dengan kerangka kerja, kontrolnya terbalik: kerangka kerja memanggil Anda . Sumber.

Hubungan:

Keduanya mendefinisikan API, yang digunakan oleh para programmer untuk digunakan. Untuk menyatukannya, kita dapat menganggap perpustakaan sebagai fungsi tertentu dari aplikasi, kerangka kerja sebagai kerangka aplikasi, dan API adalah konektor untuk menyatukannya. Proses pengembangan yang khas biasanya dimulai dengan kerangka kerja, dan mengisi fungsi yang didefinisikan dalam pustaka melalui API.


14
Pembalikan Kontrol. Penjelasan mendalam yang hebat!
Patricia

3
Seperti gambar, jumlahkan dengan baik, dan perlihatkan juga mengapa kadang-kadang orang menjadi bingung, karena kerangka kerja juga sering menyatukan perpustakaan.
Didier A.

1
@didibus Jika Anda berpikir jawaban memberikan penjelasan yang baik, Anda dapat meningkatkan jawaban sehingga pemirsa pos dapat dengan mudah menemukan jawaban yang bermanfaat.
Durai Amuthan.H

Jadi FFmpeg (bukan program, tetapi terutama LibAVUtil dari proyek) adalah kerangka kerja, dan libavcodec, dll. Apakah perpustakaan?
MarcusJ

1
@MarcusJ - LibAVUtil dan libavcodec adalah perpustakaan
Durai Amuthan.H

110

Seperti yang selalu saya jelaskan:

Perpustakaan adalah alat.

Kerangka kerja adalah cara hidup.

Perpustakaan Anda dapat menggunakan bagian kecil apa pun yang membantu Anda. Kerangka kerja yang harus Anda komit untuk seluruh proyek Anda.


9
Jawaban ini jauh lebih masuk akal setelah memahami sepenuhnya kedua istilah.
lain

45

Dari perspektif pengembang Web:

  1. Perpustakaan dapat dengan mudah diganti oleh perpustakaan lain. Tetapi kerangka tidak bisa.

    Jika Anda tidak suka pustaka pemilih tanggal jquery, Anda bisa menggantinya dengan pemilih tanggal lain seperti pemilih tanggal bootstrap atau pickadate.

    Jika Anda tidak menyukai AngularJS di mana Anda membangun produk Anda, Anda tidak bisa hanya mengganti dengan kerangka kerja lainnya. Anda harus menulis ulang seluruh basis kode Anda.

  2. Sebagian besar perpustakaan membutuhkan kurva belajar yang sangat sedikit dibandingkan dengan Kerangka. Misalnya: underscore.js adalah pustaka, Ember.js adalah framework.


Jawaban Terbaik. Sederhana, langsung dan jelas.
Felipe Santiago

41

Saya suka jawaban Kohen, tetapi definisi yang lebih teknis adalah: Kode Anda memanggil perpustakaan. Kerangka kerja memanggil kode Anda . Misalnya kerangka kerja GUI memanggil kode Anda melalui event-handler. Kerangka kerja web memanggil kode Anda melalui beberapa model permintaan-respons.

Ini juga disebut inversi kontrol - tiba-tiba kerangka kerja memutuskan kapan dan bagaimana mengeksekusi kode Anda daripada sebaliknya seperti dengan perpustakaan. Ini berarti bahwa suatu kerangka kerja juga memiliki dampak yang jauh lebih besar pada bagaimana Anda harus menyusun kode Anda.


30

Saya lupa di mana saya melihat definisi ini, tetapi saya pikir itu cukup bagus.

Perpustakaan adalah modul yang Anda panggil dari kode Anda, dan framework adalah modul yang memanggil kode Anda.


6
Tetapi libc termasuk qsort (), yang memanggil kode Anda. Saya tidak berpikir itu membuat libc menjadi kerangka kerja.
Mark Baker

Apa yang dimaksud dengan modul?
NattyC

18

Kerangka kerja dapat dibuat dari berbagai perpustakaan. Mari kita ambil contoh.

Katakanlah Anda ingin memasak kari ikan. Maka Anda membutuhkan bahan-bahan seperti minyak , rempah - rempah dan utilitas lainnya . Anda juga membutuhkan ikan yang menjadi basis Anda untuk menyiapkan hidangan Anda (Ini adalah data aplikasi Anda). semua bahan bersama disebut kerangka kerja . Sekarang Anda akan menggunakannya satu per satu atau dalam kombinasi untuk membuat kari ikan Anda yang merupakan produk akhir Anda . Bandingkan dengan kerangka web yang terbuat dari underscore.js , bootstrap.css , bootstrap.js , fontawesome , AngularJS dll. Sebagai contoh Twitter Bootstrap v.35,.

Sekarang, jika Anda mempertimbangkan hanya satu bahan, seperti katakanlah minyak . Anda tidak dapat menggunakan minyak yang Anda inginkan karena itu akan merusak ikan Anda (data). Anda hanya bisa menggunakan Minyak Zaitun . Bandingkan dengan underscore.js . Sekarang merek minyak apa yang ingin Anda gunakan terserah Anda. Beberapa hidangan dibuat dengan Minyak Zaitun Amerika (underscore.js) atau Minyak Zaitun India (lodash.js). Ini hanya akan mengubah selera aplikasi Anda. Karena mereka memiliki tujuan yang hampir sama, penggunaannya tergantung pada preferensi pengembang dan mudah diganti.

masukkan deskripsi gambar di sini


Kerangka Kerja : Kumpulan perpustakaan yang menyediakan properti dan perilaku unik untuk aplikasi Anda. (Semua bahan)

Perpustakaan : Satu set instruksi yang didefinisikan dengan baik yang menyediakan properti dan perilaku unik untuk data Anda. (Minyak pada Ikan)

Plugin : Bangun utilitas untuk perpustakaan (ui-router -> AngularJS) atau banyak perpustakaan dalam kombinasi (date-picker -> bootstrap.css + jQuery) yang tanpanya plugin Anda sekarang dapat berfungsi seperti yang diharapkan.


PS AngularJS adalah kerangka kerja MVC tetapi perpustakaan JavaScript. Karena saya percaya Perpustakaan memperluas perilaku default teknologi asli (JavaScript dalam kasus ini).


Penjelasan yang bagus :)
Mano

14

Ini adalah bagaimana saya memikirkannya (dan telah dirasionalisasi oleh orang lain):

Perpustakaan adalah sesuatu yang terkandung dalam kode Anda. Dan kerangka kerja adalah wadah untuk aplikasi Anda.



8

Perpustakaan mengimplementasikan fungsionalitas untuk tujuan dengan cakupan yang sempit sedangkan kerangka kerja cenderung menjadi kumpulan perpustakaan yang menyediakan dukungan untuk berbagai fitur yang lebih luas. Misalnya, pustaka System.Drawing.dll menangani fungsionalitas menggambar, tetapi hanya satu bagian dari keseluruhan kerangka .NET.


3
Poin bagusnya, sebuah framework bisa berisi pustaka . Jadi, bisa keduanya, kerangka kerja di pertama dan perpustakaan di contoh kedua. Karena ini adalah kasus untuk banyak kerangka kerja web seperti Apache Wicket , yang menentukan siklus pemrosesan tetapi juga menyediakan serangkaian besar kelas yang mengimplementasikan komponen ui beton.
OneWorld

Saya percaya. NET adalah perpustakaan yang sangat besar. Perpustakaan terlalu besar untuk disebut perpustakaan, tetapi masih perpustakaan. Kerangka kerja menegakkan desain tertentu, memutuskan aliran kontrol dll dengan sedikit ruang untuk bermain-main. NET seperti itu tidak melakukan itu. Saya percaya. NET adalah perpustakaan sementara ASP.NET MVC adalah suatu kerangka kerja. Tetapi MS membutuhkan kata-kata yang bagus untuk dipasarkan.
nawfal

6

Library - Setiap set kelas atau komponen yang dapat digunakan sesuai kebutuhan klien untuk menyelesaikan tugas tertentu.
Kerangka kerja - mandat pedoman tertentu bagi Anda untuk "plug-in" menjadi sesuatu yang lebih besar dari Anda. Anda hanya memberikan bagian-bagian khusus untuk aplikasi / persyaratan Anda dengan cara yang dipublikasikan, sehingga 'kerangka kerja dapat membuat hidup Anda mudah'


6

Perpustakaan adalah untuk kemudahan penggunaan dan efisiensi. Anda dapat mengatakan misalnya bahwa perpustakaan Zend membantu kita menyelesaikan tugas yang berbeda dengan kelas dan fungsi yang didefinisikan dengan baik. Sementara kerangka kerja adalah sesuatu yang biasanya memaksa cara tertentu menerapkan solusi, seperti MVC (Model -view-controller) (referensi) . Ini adalah sistem yang terdefinisi dengan baik untuk distribusi tugas seperti di MVC.Model berisi sisi basis data, Tampilan untuk Antarmuka UI, dan pengontrol untuk logika Bisnis.


5

Penafsiran Anda kedengarannya bagus bagi saya ... Perpustakaan bisa berupa apa saja yang dikompilasi dan mandiri untuk digunakan kembali dalam kode lain, secara harfiah tidak ada batasan pada isinya.

Sebuah kerangka di sisi lain diharapkan memiliki berbagai fasilitas untuk digunakan di beberapa arena tertentu pengembangan aplikasi, seperti contoh Anda, MVC.


5

Saya pikir Anda telah menemukan perbedaannya dengan cukup baik: kerangka kerja menyediakan bingkai di mana kami melakukan pekerjaan kami ... Entah bagaimana, itu lebih "membatasi" daripada perpustakaan sederhana.
Kerangka kerja ini juga seharusnya menambah konsistensi pada satu set perpustakaan.


5

Saya pikir perpustakaan adalah seperangkat utilitas untuk mencapai tujuan (misalnya, soket, kriptografi, dll). Kerangka kerja adalah perpustakaan + PENGHITUNGAN RUNTIM. Sebagai contoh, ASP.NET adalah suatu kerangka kerja: ia menerima permintaan HTTP, membuat objek halaman, menjalankan peristiwa likel, dll. Kerangka melakukan semua ini, Anda menulis sedikit kode yang akan dijalankan pada waktu tertentu dari siklus hidup permintaan saat ini!

Pokoknya, pertanyaan yang sangat menarik!


5

Saya tidak ingat sumber jawaban ini (saya kira saya menemukannya di .ppt di internet), tetapi jawabannya cukup sederhana.

Perpustakaan dan Kerangka Kerja adalah seperangkat kelas, modul, dan / atau kode (tergantung dari bahasa pemrograman) yang dapat digunakan dalam aplikasi Anda dan membantu Anda untuk memecahkan "masalah" khusus.

Masalah itu bisa berupa info log atau debug dalam aplikasi, menggambar grafik, membuat format file tertentu (html, pdf, xls), menyambungkan ke basis data, membuat bagian dari aplikasi atau aplikasi lengkap atau kode yang diterapkan pada suatu Pola Desain .

Anda dapat memiliki Kerangka atau Perpustakaan untuk menyelesaikan semua masalah ini dan banyak lagi, biasanya kerangka membantu Anda untuk memecahkan masalah yang lebih kompleks atau lebih besar, tetapi itu merupakan konsekuensi dari perbedaan utama mereka, bukan definisi utama untuk keduanya.

Perbedaan utama antara Perpustakaan dan Kerangka adalah ketergantungan antara kode mereka sendiri, dengan kata lain untuk menggunakan Kerangka Anda perlu menggunakan hampir semua kelas, modul atau kode dalam FW, tetapi untuk menggunakan Perpustakaan Anda dapat menggunakan satu atau beberapa kelas, modul, atau kode di lib di aplikasi Anda sendiri

Ini berarti bahwa jika suatu Kerangka Kerja, misalnya memiliki 50 kelas untuk menggunakan kerangka kerja dalam aplikasi yang perlu Anda gunakan, katakanlah, 10-15 kelas atau lebih dalam kode Anda, karena itulah cara merancang Kerangka, beberapa kelas (objek dari kelas itu) adalah input / parameter untuk metode di kelas lain dalam kerangka kerja. Lihat .NET framework, Spring, atau framework MVC apa pun.

Tapi misalnya perpustakaan log, Anda bisa menggunakan kelas Log dalam kode Anda, dan membantu Anda untuk memecahkan "masalah logging", itu tidak berarti bahwa perpustakaan log tidak memiliki lebih banyak kelas dalam kodenya, seperti kelas untuk menangani file, menangani output layar, atau bahkan basis data, tetapi Anda tidak pernah menyentuh / menggunakan kelas-kelas dalam kode Anda, dan itulah alasan mengapa perpustakaan dan bukan kerangka kerja.

Dan juga ada lebih banyak kategori daripada Kerangka Kerja dan Perpustakaan, tapi itu di luar topik.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.