Saya baru pemrograman berorientasi objek dan saya tidak mengerti apa tujuan utama.
Ya, saya membaca bahwa itu adalah "titik masuk" dari program ini tetapi yang tidak saya mengerti adalah apa yang seharusnya ada di utama? Dan apa tanggung jawabnya?
Mungkin terjadi bahwa sesuatu yang ditulis dalam main dapat diringkas dalam objek lain, tetapi berapa banyak Anda harus menggunakan pendekatan ini?
Ini adalah utama saya yang pertama saya tulis di Jawa, sangat sederhana tetapi mungkin membuat Anda lebih memahami keraguan saya. Saya memiliki hewan kelas abstrak yang diperpanjang oleh "Kucing" dan "Anjing". Saya menggunakan main untuk membuat beberapa objek dan juga sebagai "antarmuka" dengan pengguna, memang seperti yang Anda lihat saya menggunakan beberapa instruksi bersyarat untuk "bertanya pada pengguna" apa yang ingin ia lakukan.
Pertanyaan saya muncul dari kenyataan bahwa antarmuka dapat dienkapsulasi dalam objek lain dan tidak memberikan tanggung jawab itu kepada utama.
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("What type of animal do you want to create? \n dog cat");
String type = input.nextLine();
if ( Objects.equals(type, "dog")){
System.out.println("Enter the animal's age: ");
int age = input.nextInt(); // Scans the next token of the input as an int.
System.out.println("Enter the animal's name: ");
String name = input.next();
Dog first = new Dog(name, age);
}
else if ( Objects.equals(type, "cat")) {
System.out.println("Enter the animal's age: ");
int age = input.nextInt(); // Scans the next token of the input as an int.
System.out.println("Enter the animal's name: ");
String name = input.next();
Cat first = new Cat(name, age);
}
else{
System.out.println("Error: the specified type does not exist.");
}
System.out.println("The number of animals is:" + numberOfAnimals);
}
main
Fungsi bukan konsep dari OOP.Jawaban:
Pertama, contoh Anda bukan program berorientasi objek. Ini adalah program prosedural yang terjadi untuk menyimpan data dalam objek, karena itulah alat yang disediakan bahasa Anda (Java?) Untuk data terstruktur.
Program berorientasi objek yang benar terdiri dari objek yang berinteraksi satu sama lain - ini tentang perilaku daripada data (saya menyadari itu adalah pernyataan yang kontroversial, jadi inilah tautan di mana Anda dapat melihat banyak definisi orientasi objek dari orang-orang dengan kredensial lebih banyak dari saya; perhatikan bahwa perilaku muncul di sebagian besar dari mereka)
Dalam program berorientasi objek yang benar, sesuai dengan definisi yang saya gunakan, Anda memiliki objek independen yang saling berinteraksi. Peran
main
fungsi adalah untuk membuat objek awal dan menyatukannya.Sebagai contoh sederhana, pertimbangkan aplikasi web yang dibangun di atas basis data. Aplikasi ini dapat dipecah menjadi objek dalam banyak cara, tetapi inilah salah satunya:
Networking
objek yang menerima koneksi, mem-parsing permintaan HTTP, dan mengirim keController
objek yang sesuai , yang berinteraksi denganDatabase
objek dan menghasilkan respons (jika Anda ingin untuk mengaitkan satu atau lebihView
objek dengan masing-masing pengontrol, jangan ragu untuk melakukannya). Anda juga bisa menambahkanThreadpool
objek untuk memberikan aliran eksekusi yang terpisah.Peran
main
dalam aplikasi ini mungkin untuk:Database
objekController
objek, dan kaitkan denganDatabase
objekNetwork
objek, dan kaitkan semuaController
objek dengannya.Network
menjalankan objek (yang mungkin juga melibatkan membuatThreadpool
dan menghubungkannya keNetwork
).Langkah-langkah pengaturan ini dapat secara eksplisit ditentukan dalam
main
, atau mereka dapat ditangani oleh beberapa objek lain. Misalnya, dalam aplikasi Spring yang khas, semua yang dilakukanmain
fungsi adalah membuat konteks aplikasi (objek tunggal). Ini memicu pembuatan dan pengkabelan semua objek yang disebutkan dalam konfigurasi untuk konteks aplikasi itu.sumber
main
metode bahkan tidak ada.Map
). Tetapi Java hanya menyediakan satu cara untuk melakukan ini (versus C ++, yang membedakan antara struct dan kelas). Jadi, tentukan kelas tanpa perilaku, karena itu membuat program Anda lebih mudah dimengerti, tetapi ketahuilah bahwa melakukan hal itu tidak membuat program Anda "berorientasi objek".Yah, itu tergantung. Bawa ke dua ekstrem:
main
. Itu akan mengkompilasi dan berjalan dengan baik. Tetapi bagi manusia, kode tersebut tidak akan dapat dicerna.main
dan panggildoWhatNeedsToBeDone
dan akhirnya lanjutkan dalam rutin ini dengan cara yang sama. Sekarang Anda memiliki yang sangat rapimain
tetapi tentu saja, Anda tidak mendapatkan apa yang perlu dilakukan.Jadi, kebenaran ada di antara keduanya. Coba buat
main
yang sesuai dengan satu halaman, sehingga seseorang bisa mendapatkan instruksi utama apa yang perlu dilakukan. Mendapatkan perbatasan yang tepat hanyalah masalah pengalaman.Di atas adalah aturan umum dan berlaku untuk OO serta pemrograman fungsional.
sumber
Metode utama statis ada sebagai transisi dari dunia yang tidak berorientasi objek ke dunia berorientasi objek. Ini telah dilakukan dengan cara ini sejak setidaknya C ++ di tahun 80-an.
Metode statis pada dasarnya adalah metode yang tidak berorientasi objek: mereka mungkin metode prosedural; mereka mungkin metode fungsional. Gagasan metode statis pada dasarnya merupakan pelarian dari OOP ke paradigma pemrograman lain.
Java, C #, dan C ++ semua menggunakan main statis sebagai transisi dari main tradisional C-style ke bahasa pemrograman masing-masing, dari mana Anda sekarang dapat memilih untuk menggunakan objek (atau tidak) sesuka hati.
Bahasa-bahasa ini bisa membutuhkan objek instance primordial alih-alih main statis, tetapi memilih pendekatan utama statis. Menggunakan alternatif pendekatan instance,
main
kelas akan menjadi subclass darithread
kelas, dan runtime bahasa akan menyulap instance objek awal darimain
kelas dan kemudian memanggilrun
metode instance -nya , seperti cara thread tambahan diluncurkan / dibuat.Tetapi secara historis telah dilakukan sebaliknya: sebagian, bahasa-bahasa ini hanya mengikuti, dan sebagian, karena threading bukanlah prioritas pada masa itu sehingga mereka menggunakan pendekatan statis yang lebih sederhana.
Juga, pendekatan utama statis adalah "lebih sederhana" di mana Anda tidak harus menggunakan subclassing, sehingga program tutorial sepele seperti
hello world
lebih sederhana dalam beberapa hal (namun mereka menggunakan hal yang relatif tidak dapat dijelaskanstatic
, yang sulit dijelaskan kepada seseorang ketika Anda sedang mencoba mengajar OOP terlebih dahulu.)sumber
Metode Main () digunakan untuk menjalankan program
Tanggung jawab - Setelah Anda mulai menjalankan program Anda, Metode Main () memanggil metode lain untuk mulai menjalankan program Anda.
Ini adalah jawaban sederhana yang membantu saya memahami apa tanggung jawab metode Main ().
sumber