Hubungan antara orientasi objek dan algoritma

9

Ketika saya membaca beberapa buku teks algoritma, mereka penuh dengan prosedur cerdas untuk beberapa masalah (pengurutan, jalur terpendek) atau beberapa metode umum (algoritma rekursif, membagi dan menaklukkan, pemrograman dinamis ...). Saya menemukan beberapa jejak pemrograman berorientasi objek di sana; (Mengapa mereka lebih berorientasi pada prosedur?).

Kemudian saya berpikir:

  • Apa hubungan antara algoritma dan OOP? Apakah mereka dua topik independen?
  • Apakah ada beberapa masalah yang hanya dapat dipresentasikan dan diselesaikan oleh OOP?
  • Bagaimana OOP dapat membantu algoritma? Atau ke arah mana ia bisa mempengaruhinya?
Ahmad
sumber
4
Bukan duplikat, tetapi terkait programmer.stackexchange.com/questions/239045/...
Doc Brown
@DocBrown Terima kasih, itu sangat membantu, namun di sini kami dapat mempertimbangkan beberapa konsep di sekitar OO seperti warisan, polimorfisme ...
Ahmad
1
"Mengapa buku teks algoritma lebih berorientasi pada prosedur?" Java juga berorientasi pada prosedur. Java adalah bahasa prosedural berorientasi objek.
Pieter B
1
@gnat Saya mengubah pertanyaan saya, tidak tahu apakah penjelasan itu perlu atau bagus atau tidak. Namun saya mengakui pertanyaan yang diajukan oleh Doc Brown memiliki lebih banyak jawaban yang terkait dengan keprihatinan saya.
Ahmad

Jawaban:

10

Pertama, mari kita mendefinisikan apa yang kita maksud dengan OOP. Maksud saya terutama adalah:

  • Enkapsulasi dan menyembunyikan detail di kelas.
  • Polimorfisme perilaku melalui metode pewarisan dan virtual.

Sekarang, untuk menjawab pertanyaan Anda:

Apa hubungan antara algoritma dan OOP? Apakah mereka dua topik independen?

Iya.

Apakah ada beberapa masalah yang hanya dapat dipresentasikan dan diselesaikan oleh OOP?

Tidak. OOP utama menawarkan kemudahan dan kemampuan untuk alasan tentang kode untuk programmer. Itu tidak meningkatkan kekuatan ekspresif Anda.

Bagaimana OOP dapat membantu algoritma? Atau ke arah mana ia bisa mempengaruhinya?

Seperti yang saya katakan di atas. Kedua poin yang saya jelaskan OOP berlaku di sini. Mampu menyembunyikan detail algoritma dan struktur datanya dapat membantu alasan tentang semuanya. Banyak algoritme yang berisi detail yang tidak Anda inginkan agar pengguna dari algoritma itu dipusingkan. Menyembunyikan detail-detail itu sangat membantu.

Kemampuan untuk memiliki perilaku polimorfik juga bagus. Listdidefinisikan sebagai mampu menambah / menghapus / menghapus item di mana saja dalam koleksi. Tetapi ini dapat diimplementasikan sebagai array yang dapat diubah ukurannya, dobel-bertautan atau dobel-bertautan, dll. Memiliki API tunggal untuk banyak implementasi dapat membantu penggunaan kembali.

Mengapa buku teks algoritma lebih berorientasi pada prosedur?

Seperti yang saya katakan, OOP tidak perlu untuk mengimplementasikan suatu algoritma. Juga, banyak algoritma sudah tua dan dibuat ketika OOP masih belum tersebar luas. Jadi itu mungkin juga menjadi hal yang bersejarah.

Euforia
sumber
1
Meskipun usia teks, Anda mungkin tidak ingin berlumpur air algoritma dengan OOP, hanya karena modern.
Gusdor
15

Algoritma dan OOP adalah dua istilah yang berbeda, yang hanya memiliki kesamaan, yaitu istilah-istilah CS . Sederhananya - Sebuah algoritma seperti resep memasak : untuk melakukan x Anda memerlukan bahan - bahan berikut dan melakukan langkah 1,2,3,4,5,6 ... maka Anda sudah menyiapkan makanan.

Yang mengatakan, tampaknya alami cocok untuk algortihms akan dijelaskan dalam prosedural cara. Prosedural tidak lain berarti: pertama lakukan x dan kemudian lakukan y .

Masalah umum adalah: »Bagaimana cara mengurutkan satu set x ?«. Solusi yang mudah dipahami adalah bubble-sort:

  1. Iterate atas set dari elemen terakhir selama Anda belum mencapai elemen pertama dan saat iterasi
  2. Mulai iterasi ke-2 dari awal hingga elemen saat ini dari iterasi pertama dan
  3. Bandingkan elemen saat ini (2) dengan penggantinya
  4. Jika lebih besar, tukar posisi

Itu adalah deskripsi algoritmik / verbal dari bubblesort-algoritma.

Di sinilah implementasi prosedural / pseudocode

bubbleSort(Array A)
  for (n=A.size; n>1; n=n-1){
    for (i=0; i<n-1; i=i+1){
      if (A[i] > A[i+1]){
        A.swap(i, i+1)
    } 
  } 
}

Itu mudah.

Bagaimana cara rilis ke OOP ? Anda bisa menggunakan algoritma ini untuk menangani koleksi (objek itu sendiri) dari objek :

Contoh dalam Javascript (meskipun tidak ada OO-Lingo bersih , tetapi dengan hampir tidak ada boilerplate dan mudah dimengerti)

objects =[{"name":"Peter"}, {"name":"Paul"}, {"name":"Mary"}]

compareObjects=function(x,y){ return x.name>y.name };

sorted = objects.sort(compareObjects)

console.log(sorted)

Kami memiliki a) koleksi objects, b) metode umum untuk koleksi ini sortyang berisi / abstrak menghilangkan algoritma sorting dan c) benda kami Petrus , Paulus dan Mary . Spesifikasi untuk pengurutan ditemukan di sini .

Apa hubungan antara algoritma dan OOP? Apakah mereka dua topik independen?

Dari apa yang dikatakan, harus jelas, jawabannya harus: ya, mereka independen.

Bagaimana OOP dapat membantu algoritma? Atau ke arah mana ia bisa mempengaruhinya?

OOP hanyalah satu gaya pemrograman. Itu tidak bisa membantu dalam bentuk apa pun. Kalau tidak, suatu algoritma dapat diimplementasikan dalam bahasa OO untuk melakukan sesuatu pada objek (seperti yang ditunjukkan)

Apakah ada beberapa masalah yang hanya dapat dipresentasikan dan diselesaikan oleh OOP?

Saya tidak bisa memikirkan satu (tapi itu tidak berarti, itu tidak mungkin). Tetapi jika Anda melihatnya sebaliknya: OOP berguna, jika Anda ingin memodelkan beberapa masalah dan menyelesaikannya dengan algoritma yang sesuai. Katakanlah Anda memiliki catatan friendsAnda bisa model mereka sebagai objectsdengan propertiesdan jika Anda ingin listdari friends diurutkan dengan cara apapun, Anda bisa menggunakan contoh-kode yang diberikan di atas untuk melakukan hal itu.

Mengapa buku teks algoritma lebih berorientasi pada prosedur?

Seperti dikatakan: itu lebih alami , karena prosedural adalah karakter dari algoritma.

Thomas Junk
sumber
7
Jawaban ini mengandaikan bahwa algoritma secara alami prosedural. Tentu saja beberapa di antaranya, tetapi ada yang namanya algoritma fungsional. Alasan mengapa buku algoritma prosedural mungkin lebih berkaitan dengan fakta bahwa mereka berfokus pada kinerja, sehingga terserah kepada pembaca untuk khawatir tentang menegakkan abstraksi, dan karena bahasa imperatif lebih populer daripada bahasa fungsional.
Doval
Saya pikir, itu tidak benar. Ketika berbicara tentang bahasa pemrograman fungsional , Anda berbicara tentang implementasi , bukan tentang algoritma itu sendiri. Ambil contoh quicksort Haskell wiki.haskell.org/Introduction#Quicksort_in_Haskell Kita berdua akan setuju, bahwa ini adalah implementasi fungsional untuk quicksort-algortihm. Tetapi jika Anda menjelaskan , apa yang dilakukan, Anda harus mundur dalam mode deskripsi prodecural . Dan dari deskripsi ini, Anda dapat mengimplementasikan implementasi prosedural.
Thomas Junk
1
@ThomasJunk Anda tidak harus kembali ke mode deskripsi prosedural, karena implementasi fungsional mengatakan hal - hal apa , bukan urutan langkah-langkah. Bagaimana Anda akan memberikan deskripsi berurutan untuk perhitungan yang murni dan malas? Anda tidak tahu sebelumnya berapa banyak ekspresi akan dievaluasi, atau dalam urutan apa sub-ekspresi akan dihitung.
Doval
2
Sayangnya saya tidak memiliki gelar CS, jadi saya tidak memiliki keahlian yang luas untuk membuktikan hal berikut: tapi saya pikir, setiap algoritma dapat dijelaskan dengan satu atau lain cara. Jadi tidak ada algoritma fungsional murni asli. Bukankah itu, apa artinya kelengkapan tur keliling sebagai konsekuensi?
Thomas Junk
2
@Doval dengan baik karena Turing sendiri membuktikan bahwa kalkulus lambda dan mesin Turing adalah setara, maka sudah jelas semua yang dapat Anda nyatakan dengan cara fungsional, Anda dapat melakukannya secara imperatif. Juga sepele untuk mengubah komputasi malas menjadi bentuk imperatif - kompiler Haskell melakukannya sepanjang waktu ... Pada akhirnya itu hanya masalah preferensi. Kadang-kadang fungsional lebih cocok, dan kadang-kadang penting, dan kadang-kadang logis adalah yang terbaik ...
AK_
5

Anda punya masalah.

Model domain bisnis menjelaskan masalah Anda, dan konsep dari domain masalah yang akan Anda hadapi.

Algoritma menjelaskan cara Anda akan memecahkan masalah Anda, secara konseptual; akan seperti apa implementasi Anda; dan bagaimana Anda menangani masalah Anda setelah menerjemahkannya ke dalam istilah "Ilmu Komputer".

Pemrograman paradigma apakah OOP, Fungsional, Logis, Prosedural, atau bahkan Non-Terstruktur, menjelaskan bagaimana Anda akan menyusun solusi Anda, bentuk mana yang akan diambil, konsep "Rekayasa Perangkat Lunak" mana yang akan Anda gunakan, dan yang mana " Teori Bahasa Pemrograman "konsep yang akan Anda gunakan.

Sederhananya, algoritma menjelaskan secara umum solusi Anda untuk masalah ("Inilah yang akan saya lakukan"). Sementara pemrograman paradigma berkaitan dengan implementasi Anda yang sebenarnya ("Ini adalah bagaimana saya akan melakukannya").

AK_
sumber
Perhatikan bahwa dengan cara yang mungkin tidak sempurna, bahasa deklaratif bertujuan mengurangi atau menghilangkan langkah "bagaimana". Tujuan mereka adalah agar Anda hanya mengatakan "ini yang saya inginkan" (misalnya, dengan menulis persamaan tingkat tinggi). Pikirkan permintaan SQL yang khas: sangat sedikit dari itu adalah "algoritmik"; Anda cukup memberi tahu basis data apa yang Anda inginkan, dan tergantung bagaimana menangani permintaan Anda (tentu saja dalam batasan tertentu).
Andres F.
4

Algoritma = ceritakan kisah " Bagaimana " (yaitu bagaimana memanipulasi data input menggunakan struktur data pada waktunya untuk menghasilkan hasil yang diinginkan)

OOP = a " Metodologi " yang difasilitasi oleh OO-bahasa untuk menulis program (= algoritma + struct data) yang memberi Anda keamanan dan abstraksi memori

OOP hanyalah paradigma penerapan algoritma.

Analogi yang bagus : film

Anda dapat merekam adegan dengan menggunakan stuntman atau tidak. Skenario (algoritma) tidak berubah. Orang seharusnya tidak melihat perbedaan dalam hasil akhir.

EDIT: Anda dapat mencoba MOOC berkualitas baik: https://www.coursera.org/course/algs4partI yang menyisipkan topik yang dibahas (terutama pendekatan OOP) dan memberikan inti dari apa yang Anda tanyakan di sini.

Marcin Wachulski
sumber
Saya sangat menikmati analogi film Anda. Saya akan meminjam yang di masa depan.
Marc LaFleur
2

Alexander Stepanov adalah pencipta asli C ++ Standard Template Library, (STL), yang merupakan pustaka algoritma dasar untuk C ++. C ++ adalah bahasa multi-paradigma yang mencakup fitur "Berorientasi Objek", tetapi Alexander Stepanov mengatakan ini tentang Orientasi Objek:

http://www.stlport.org/resources/StepanovUSA.html

STL tidak berorientasi objek. Saya pikir bahwa orientasi objek hampir sama bohongnya dengan Kecerdasan Buatan. Saya belum melihat potongan kode yang menarik yang datang dari orang-orang OO ini.

Saya menemukan OOP secara teknis tidak sehat. Ia mencoba untuk menguraikan dunia dalam hal antarmuka yang bervariasi pada satu tipe. Untuk menangani masalah nyata, Anda perlu aljabar multisorted - keluarga antarmuka yang menjangkau berbagai jenis. Saya menemukan OOP secara filosofis tidak sehat. Ia mengklaim bahwa segala sesuatu adalah objek. Bahkan jika itu benar itu tidak terlalu menarik - mengatakan bahwa segala sesuatu adalah objek sama sekali tidak mengatakan apa-apa. Saya menemukan OOP secara metodologis salah. Dimulai dengan kelas. Seolah-olah ahli matematika akan mulai dengan aksioma. Anda tidak memulai dengan aksioma - Anda mulai dengan bukti. Hanya ketika Anda telah menemukan banyak bukti terkait, Anda dapat membuat aksioma. Anda diakhiri dengan aksioma. Hal yang sama berlaku dalam pemrograman: Anda harus mulai dengan algoritma yang menarik. Hanya ketika Anda memahami mereka dengan baik,

Saya menghabiskan waktu bertahun-tahun untuk menemukan kegunaan untuk pewarisan dan virtual, sebelum saya mengerti mengapa mekanisme itu pada dasarnya cacat dan tidak boleh digunakan.

Stepanov menyatakan perpustakaan algoritmanya bukan dengan Objects, tetapi dengan Generic Iterators .

James Brock
sumber
Yah dia salah ... terutama karena STL sangat berorientasi objek ... Berorientasi objek dalam istilah yang lebih modern ...
AK_
1
@AK_ - Saya tidak berpikir dia salah sama sekali. STL bahkan tidak kira-kira OO dalam arti istilah apa pun. Anda dapat menerjemahkan STL langsung ke bahasa non-OO yang memiliki polimorfisme parametrik (mis. Haskell atau SML) tanpa perlu mengubahnya dengan cara yang substansial.
Jules
2

Algoritma menggambarkan apa yang harus dilakukan komputer. Struktur menggambarkan bagaimana algoritme ditata [dalam kode sumber]. OOP adalah gaya pemrograman yang memanfaatkan struktur "berorientasi objek" tertentu.

Buku-buku algoritma sering menghindari OOP karena mereka berfokus pada algoritma, bukan struktur. Fragmen kode yang sangat bergantung pada struktur cenderung menjadi contoh yang buruk untuk dimasukkan ke dalam buku algoritma. Demikian juga, buku-buku OOP sering menghindari algoritma karena mereka mengacaukan cerita. Titik penjualan OOP adalah fluiditasnya, dan mengelompokkannya ke suatu algoritma membuatnya tampak lebih kaku. Ini lebih tentang fokus buku daripada apa pun.

Dalam kode kehidupan nyata, Anda akan menggunakan keduanya berdampingan. Anda tidak dapat menyelesaikan masalah komputer tanpa algoritme, menurut definisi, dan Anda akan kesulitan menulis algoritma yang bagus tanpa struktur (OOP atau lainnya).

Sebagai contoh di mana mereka kabur, ambil Pemrograman Dinamis. Dalam buku algoritma, Anda akan menjelaskan cara mengambil dataset yang homogen dalam array dan menggunakan Pemrograman Dinamis untuk sampai pada solusi. Dalam buku OOP, Anda dapat menemukan struktur seperti Pengunjung, yang merupakan cara untuk melakukan algoritma sewenang-wenang di sekumpulan objek heterogen. Contoh buku DP dapat dianggap sebagai Pengunjung yang sangat sederhana yang beroperasi pada objek dalam urutan bottom-up secara umum. Pola Pengunjung bisa dianggap sebagai kerangka masalah DP, tetapi melewatkan daging dan kentang. Pada kenyataannya, Anda akan sering membutuhkan keduanya: Anda menggunakan pola Pengunjung untuk menangani heterogenitas di seluruh dataset Anda (DP buruk pada saat itu), dan Anda menggunakan DP dalam struktur Pengunjung untuk mengatur algoritme Anda untuk meminimalkan runtime (Pengunjung tidak

Kami juga melihat algoritma yang beroperasi di atas pola desain. Lebih sulit untuk menyebutkan contoh dalam ruang kecil, tetapi begitu Anda memiliki struktur, Anda mulai ingin memanipulasi struktur itu, dan Anda menggunakan algoritma untuk melakukannya.

Apakah ada beberapa masalah yang hanya dapat dipresentasikan dan diselesaikan oleh OOP?

Ini adalah pertanyaan yang lebih sulit dijawab daripada yang Anda pikirkan. Untuk urutan pertama, tidak ada alasan komputasi mengapa Anda membutuhkan OOP untuk menyelesaikan masalah apa pun. Bukti sederhana adalah bahwa setiap program OOP dikompilasi ke perakitan, yang jelas merupakan bahasa non-OOP.

Namun, dalam skema yang lebih besar, jawabannya mulai malu terhadap ya. Anda jarang dibatasi hanya dengan metodologi komputasi. Sebagian besar waktu ada hal-hal seperti kebutuhan bisnis dan keterampilan pengembang yang menjadi faktor dalam persamaan. Banyak aplikasi saat ini tidak dapat ditulis tanpa OOP, bukan karena OOP entah bagaimana mendasar untuk tugas itu, tetapi karena struktur yang disediakan oleh OOP sangat penting untuk menjaga proyek sesuai jalur dan sesuai anggaran.

Ini tidak mengatakan bahwa kita tidak akan pernah meninggalkan OOP di masa depan untuk beberapa struktur baru yang lucu. Itu hanya mengatakan itu adalah salah satu alat yang paling efektif di kotak alat kami untuk sebagian besar tugas pemrograman luar biasa di luar sana hari ini. Masalah di masa depan dapat menyebabkan kita melakukan pendekatan pembangunan menggunakan struktur yang berbeda. Pertama, saya berharap jaring saraf membutuhkan pendekatan pengembangan yang sangat berbeda, yang mungkin atau mungkin tidak berubah menjadi "Berorientasi Objek."

Saya tidak melihat OOP menghilang dalam waktu dekat karena cara algoritma berpikir. Sampai saat ini, pola yang biasa adalah bahwa seseorang merancang algoritma yang tidak memanfaatkan OOP. Komunitas OOP menyadari algoritma tidak benar-benar cocok dengan struktur OOP, dan benar-benar tidak perlu, sehingga mereka membungkus seluruh algoritma dalam struktur OOP dan mulai menggunakannya. Pertimbangkan boost::shared_ptr. Algoritma penghitungan referensi yang ada di dalamnya shared_ptrtidak terlalu ramah dengan OOP. Namun, pola tersebut tidak menjadi populer sampai shared_ptrmembuat pembungkus OOP di sekitarnya yang mengekspos kemampuan algoritma dalam format terstruktur OOP. Sekarang, ini sangat populer sehingga membuatnya menjadi spesifikasi terbaru untuk C ++, C ++ 11.

Mengapa ini begitu sukses? Algoritma sangat bagus dalam memecahkan masalah, tetapi mereka sering membutuhkan investasi penelitian awal yang substansial untuk memahami cara menggunakannya. Pengembangan Object Oriented sangat efektif dalam membungkus algoritma tersebut dan menyediakan antarmuka yang membutuhkan investasi awal lebih sedikit untuk belajar.

Cort Ammon
sumber
1

Selain jawaban yang bagus, saya akan menyebutkan kesamaan konseptual tambahan antara OOP dan Algoritma.

Baik OOP dan Algoritma sangat menekankan penggunaan prasyarat dan postkondisi untuk memastikan kebenaran kode.

Secara umum, ini adalah praktik standar dalam semua bidang ilmu komputer; namun, prinsip panduan ini menghasilkan jalur evolusi dalam OOP yang membuatnya saling menguntungkan untuk mengimplementasikan algoritma di lingkungan OOP.

Dalam OOP, sekelompok objek yang dapat memenuhi kontrak yang sama (prasyarat dan postkondisi) dapat dibuat untuk mengimplementasikan antarmuka. Pengguna antarmuka seperti itu tidak perlu tahu implementasi mana yang digunakan pada objek yang mendasarinya, kecuali dalam beberapa situasi yang jarang terjadi (di mana abstraksi bocor terjadi).

Algoritma adalah implementasi dari langkah-langkah yang digunakan untuk melakukan perhitungan, yang akan mengambil prakondisi dan menghasilkan postkondisi.

Oleh karena itu, seseorang dapat meminjam ide abstraksi dengan cara prasyarat dan postkondisi, dan menerapkannya pada algoritma. Anda akan menemukan bahwa kadang-kadang algoritma yang rumit dapat didekomposisi menjadi langkah yang lebih kecil, dan langkah yang lebih kecil ini dapat memungkinkan strategi implementasi yang berbeda selama prasyarat dan postkondisi yang sama terpenuhi.

Dengan mengimplementasikan algoritma dalam OOP, seseorang dapat membuat langkah-langkah yang lebih kecil ini dapat dipertukarkan.

Akhirnya, perlu diingat bahwa FP dan OOP tidak saling eksklusif. Apa pun yang dijelaskan di atas dapat juga berlaku untuk FP

rwong
sumber
Terima kasih untuk intinya! Seperti yang Anda katakan jika algoritme hanya beberapa langkah, maka OOP dapat membantu kami memberikan langkah yang lebih abstrak. Anda menunjuk tentang "menerapkan algoritma dalam OOP", saya memodifikasi pertanyaan saya untuk bertanya apakah selalu bermanfaat?
Ahmad
1
Anda membingungkan OOP dengan "Desain dengan Kontrak". Ini sangat berguna tanpa OOP, dan sebagian besar bahasa OOP (C #, Java) tidak memberikan dukungan nyata untuk itu (mereka mendukung antarmuka yang sederhana, bukan kondisi pra / pasca)
AK_
1
@AK_ Saya setuju bahwa Desain dengan Kontrak adalah nama yang tepat untuk kesamaan yang dijelaskan dalam jawaban saya. Apa yang saya klaim adalah bahwa OOP sebagai paradigma desain sangat merangkul Desain dengan Kontrak - baca saja buku teks OOP. Jawaban asli saya juga menyebutkan bahwa kesamaan ini tidak eksklusif untuk OOP.
rwong
-1
What is the relation between algorithms and OOP? Are they two independent topics?

Algoritma adalah tentang bagaimana menyelesaikan masalah (Cara menghasilkan output dari input yang diberikan), OOP adalah tentang bagaimana merumuskan atau mengekspresikan solusi kami (langkah-langkah algoritma).

Algoritme dapat dijelaskan dalam bahasa alami atau bahasa rakitan, tetapi konsep yang kami miliki dalam bahasa alami membantu kami menulis dan memahaminya dengan lebih baik. Misalnya algoritma untuk bubble-sort adalah:

bubbleSort(Array A)
  for (n=A.size; n>1; n=n-1){
    for (i=0; i<n-1; i=i+1){
      if (A[i] > A[i+1]){
        A.swap(i, i+1)
    } 
  } 
}

Untuk menyembunyikan detail swapdan mengaitkannya dengan Akami menggunakan sintaks dan fitur OOP, maka OO membuat algoritme lebih dekat dengan bahasa dan pemahaman alami kami.

Are there some problems which can only be presented and solved by OOP?

Tidak, jika Anda menganggap bahwa program apa pun (atau algoritme) di komputer akan diterjemahkan ke sekumpulan instruksi yang dijalankan pada CPU ( Mesin Turing ) dan jika kami menganggap instruksi ini sebagai algoritme utama yang menyelesaikan masalah di komputer , maka OOP tidak bisa melakukan sesuatu lebih jauh. Itu hanya membuatnya lebih dekat dengan pemahaman dan penalaran manusia. Ini adalah cara untuk mengemas prosedur dan struktur data kami.

How OOP can help algorithms? Or in which direction it can affect it?

Mungkin membantu untuk menyatakan atau merumuskan algoritma lebih mudah atau lebih mudah dipahami. Itu dapat menyembunyikan detail dan memberikan gambaran besar dari solusinya.

Secara teori, algoritma yang pertama dan mengimplementasikannya yang kedua . Namun pada kenyataannya, kami tidak dapat memastikan bahwa algoritma kami berfungsi seperti yang diharapkan sampai kami melacaknya atau menghasilkan output yang diharapkan. Komputer membantu kami melakukan itu, tetapi Anda tidak berharap untuk menulisnya dalam bahasa mesin (perakitan).

Dalam hal ini, OOP memfasilitasi implementasi, pengujian, dan penyempurnaan algoritma kami di komputer dan menulisnya untuk komputer dalam bahasa yang dekat dengan bahasa alami kami.

Ahmad
sumber