Apa tanggung jawab utama dalam pemrograman berorientasi objek?


10

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);
}

2
The mainFungsi bukan konsep dari OOP.
Andres F.

Jawaban:


10

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 mainfungsi 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: Networkingobjek yang menerima koneksi, mem-parsing permintaan HTTP, dan mengirim ke Controllerobjek yang sesuai , yang berinteraksi dengan Databaseobjek dan menghasilkan respons (jika Anda ingin untuk mengaitkan satu atau lebih Viewobjek dengan masing-masing pengontrol, jangan ragu untuk melakukannya). Anda juga bisa menambahkan Threadpoolobjek untuk memberikan aliran eksekusi yang terpisah.

Peran maindalam aplikasi ini mungkin untuk:

  1. Buat Databaseobjek
  2. Buat semua Controllerobjek, dan kaitkan dengan Databaseobjek
  3. Buat Networkobjek, dan kaitkan semua Controllerobjek dengannya.
  4. Mulai Networkmenjalankan objek (yang mungkin juga melibatkan membuat Threadpooldan menghubungkannya ke Network).

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 dilakukan mainfungsi adalah membuat konteks aplikasi (objek tunggal). Ini memicu pembuatan dan pengkabelan semua objek yang disebutkan dalam konfigurasi untuk konteks aplikasi itu.


1
Lihat Newspeak untuk contoh bahasa yang menganggap OO sangat serius sehingga sesuatu seperti mainmetode bahkan tidak ada.
Jörg W Mittag

1
Jawaban yang bagus, tetapi jika saya adalah Anda, saya juga akan menyebutkan Injeksi Ketergantungan.
Arseni Mourzenko

Saya mengerti maksud Anda tentang kode saya yang tidak berorientasi objek. Saya tidak memperhatikan, tetapi pada kenyataannya, benda yang saya buat tidak memiliki perilaku. Untuk membuatnya "lebih banyak OO" sebuah ide dapat membuat beberapa objek lain yang "menggunakan" yang sudah saya miliki, akan tetapi, lebih baik tidak memiliki objek sama sekali tanpa metode?
Elia

@Elia - Tidak, tidak akan lebih baik. Ada nilai untuk memiliki data terstruktur yang diketik dan dinamai (dibandingkan hanya membuangnya dalam a 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".
kdgregory

1

Yah, itu tergantung. Bawa ke dua ekstrem:

  1. Tempatkan semua kode baris demi baris di blog Anda main. Itu akan mengkompilasi dan berjalan dengan baik. Tetapi bagi manusia, kode tersebut tidak akan dapat dicerna.
  2. Tempatkan satu fungsi saja maindan panggil doWhatNeedsToBeDonedan akhirnya lanjutkan dalam rutin ini dengan cara yang sama. Sekarang Anda memiliki yang sangat rapi maintetapi tentu saja, Anda tidak mendapatkan apa yang perlu dilakukan.

Jadi, kebenaran ada di antara keduanya. Coba buat mainyang 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.


1

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, mainkelas akan menjadi subclass dari threadkelas, dan runtime bahasa akan menyulap instance objek awal dari mainkelas dan kemudian memanggil runmetode 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 worldlebih sederhana dalam beberapa hal (namun mereka menggunakan hal yang relatif tidak dapat dijelaskan static, yang sulit dijelaskan kepada seseorang ketika Anda sedang mencoba mengajar OOP terlebih dahulu.)


-1

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 ().

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.