Perbedaan antara Kelas, Objek, dan Contoh

Jawaban:

86

Java (dan bahasa pemrograman lainnya) dimodelkan dalam hal jenis dan nilai . Pada tingkat teoritis, nilai adalah representasi untuk beberapa kuantum informasi, dan tipe adalah sekumpulan nilai. Ketika kita mengatakan nilai X adalah turunan dari tipe Y, kita hanya mengatakan bahwa X adalah anggota dari himpunan nilai yang merupakan tipe Y.

Jadi itulah arti sebenarnya dari istilah "contoh": itu menggambarkan hubungan, bukan sesuatu.

Sistem tipe bahasa pemrograman Java mendukung dua tipe tipe, tipe primitif dan tipe referensi . Jenis referensi selanjutnya dibagi menjadi kelas dan jenis array . Objek Java adalah turunan dari tipe referensi.

Objek adalah turunan kelas atau larik. ( JLS 4.3.1 )

Itulah tipe pandangan teoritis.

Dalam praktiknya, sebagian besar pengembang Java memperlakukan kata "instance" dan "object" sebagai sinonim. (Dan itu termasuk saya, lalu saya mencoba menjelaskan sesuatu dengan cepat.) Dan sebagian besar pengembang menggunakan kata "nilai" daripada "contoh" untuk merujuk ke contoh dari tipe primitif.

Stephen C
sumber
3
Saya sangat menghargai jawaban Anda, Pak, dan saya hampir mendapatkannya, hanya satu pertanyaan lagi. Kita berkata- "Setiap kali kompilator mencapai konstruktor argumen 0, ia membuat turunan kelas.". Dalam konteks ini apa yang sebenarnya membuat sebuah instance atau objek? Sebuah objek yang saya tebak dan kami menggunakan kata "instance" sebagai sinonim. Tapi itu akan baik, jika Anda lebih baik mengkonfirmasinya.
Pranjut
3
@ Ryan: Pada dasarnya ya: ini membuat Objek yang merupakan turunan dari Kelas yang dimaksud. (Tetapi perhatikan bahwa kalimat yang dikutip mengatakan "instance of a Class" daripada hanya "instance" ... jadi penulis tidak benar-benar menggunakan "instance" sebagai sinonim di sini.)
Stephen C
1
@ RuneFS - "pemodelan" yang saya bicarakan bukanlah tentang representasi. Ini teoretis. Ya, dalam beberapa bahasa ada objek yang menunjukkan tipe, atau bahkan yang memungkinkan Anda untuk menghitung semua contoh tipe. Tetapi properti tersebut menambah "pemodelan" generik daripada membuatnya tidak valid.
Stephen C
1
@ RuneFS - Tidak ... Saya sedang berbicara tentang "teori tipe". Ini adalah cabang matematika. Itu tidak tergantung pada teknologi yang digunakan untuk menjalankan program. Teori tipe yang paling dekat dengan komputasi adalah kalkulus lambda. (Jika Anda tertarik, coba dan dapatkan salinan "Jenis dan Bahasa Pemrograman" oleh Benjamin C. Pierce.)
Stephen C
1
Anda membuat kesalahan yang sama seperti user2390183. Anda memperlakukan variabel sebagai "nama". Mereka tidak. Variabel adalah "pemegang referensi" yang berisi referensi ke objek. Objek tidak memiliki nama intrinsik. Referensi adalah hal yang paling dekat dengan "nama" untuk suatu objek, kecuali bahwa mereka tidak memiliki representasi konstan. (GC dapat memindahkan objek yang mengubah pola bit yang digunakan untuk mewakili referensi.)
Stephen C
96

Sebuah kelas adalah cetak biru yang Anda gunakan untuk membuat objek . Objek adalah turunan dari kelas - itu adalah 'hal' konkret yang Anda buat menggunakan kelas tertentu. Jadi, 'object' dan 'instance' adalah hal yang sama, tetapi kata 'instance' menunjukkan hubungan suatu objek dengan kelasnya.

Ini mudah dimengerti jika Anda melihat contoh. Misalnya, Anda memiliki kelas House. Rumah Anda sendiri adalah sebuah objek dan merupakan contoh kelas House. Rumah saudara perempuan Anda adalah objek lain (contoh kelas lainnya House).

// Class House describes what a house is
class House {
    // ...
}

// You can use class House to create objects (instances of class House)
House myHouse = new House();
House sistersHouse = new House();

Kelas Housemendeskripsikan konsep rumah, dan ada rumah beton khusus yang merupakan objek dan contoh kelas House.

Catatan: Ini persis sama di Java seperti di semua bahasa pemrograman berorientasi objek.

Jesper
sumber
class House { // blue print for House Objects } class Car { // blue print for Instances of Class Car } House myHouse = House new(); Car myCar = Car new();
Suraj Jain
myHouse dan myCar adalah objek myHouse adalah turunan dari House (menghubungkan Object-myHouse dengan Class-House-nya) myCar adalah turunan dari Mobil. Apakah ini benar, silakan lihat jawaban di atas oleh pengguna2390183 apakah benar atau tidak?
Suraj Jain
29

Kelas pada dasarnya adalah definisi, dan berisi kode objek. Objek adalah turunan dari kelas

Misalnya jika Anda berkata

String word = new String();

kelas tersebut adalah kelas String, yang mendeskripsikan objek (instance) kata.

Ketika sebuah kelas dideklarasikan, tidak ada memori yang dialokasikan sehingga kelas tersebut hanyalah sebuah template.

Ketika objek kelas dideklarasikan, memori dialokasikan.

mustafabar
sumber
Apakah maksud Anda bahwa objek dan contoh adalah sama?
Pranjut
Terima kasih david untuk tautannya. Dari topik yang saya dapatkan ini Setiap dunia nyata hal-hal yang berwujud dan berperilaku dapat disebut sebagai "objek". Dan untuk mengklasifikasikan objek ini kami menggunakan kelas (kelas A adalah cetak biru dari mana objek individu dibuat). Dan dikatakan bahwa, objek kelas adalah instance. Sekarang tolong beri tahu saya apa perbedaan antara objek dan instance? Apakah ini berarti objek itu tidak benar-benar ada dalam konteks pemrograman dan instance mewakili objek di dalamnya?
Pranjut
@ Mustafa: Maaf bertentangan dengan Anda, tetapi menurut JLS, array juga merupakan objek di Jawa. Dan Anda akan menemukan bahwa JLS sama sekali tidak mendefinisikan istilah 'instance'. Lihat jawabanku.
Stephen C
@ Ryan: Lihat jawaban saya untuk perbedaan antara "instance" dan "object". Jawaban dan komentar @ Mustafa (IMO) menyesatkan.
Stephen C
@mustafabar - "Ketika sebuah kelas dideklarasikan, tidak ada memori yang dialokasikan sehingga kelas hanya sebuah template." - Dan ini juga tidak benar. Memori dialokasikan untuk (setidaknya) mewakili staticvariabel kelas. (Dan untuk hal-hal lain juga yang terkait dengan jenis identitas kelas.)
Stephen C
13

Saya suka penjelasan Jesper dalam istilah awam

Dengan mengimprovisasi contoh dari jawaban Jesper,

class House {
// blue print for House Objects
}

class Car {
// blue print for Instances of Class Car 
}

House myHouse = new House();
Car myCar = new Car();

myHouse dan myCar adalah objek

myHouse adalah turunan dari Rumah (menghubungkan Object-myHouse dengan Rumah Kelasnya) myCar adalah turunan dari Mobil

pendeknya

"MyHouse adalah contoh dari Kelas Rumah" yang sama dengan mengatakan "Myhouse merupakan Obyek dari tipe rumah"

pengguna2390183
sumber
6

Kelas adalah Tipe Data, Anda menggunakan tipe ini untuk membuat objek.

  • Contoh adalah Logis tetapi objek adalah Fisik berarti menempati beberapa memori.

  • Kita dapat membuat sebuah instance untuk kelas abstrak dan juga untuk antarmuka, tetapi kita tidak dapat membuat
    objek untuk itu.

  • Objek adalah turunan dari kelas dan contoh berarti perwakilan dari kelas yaitu objek.

  • Instance mengacu pada Referensi suatu objek.

  • Objek sebenarnya menunjuk ke alamat memori dari instance itu.

  • Anda tidak dapat melewatkan contoh di atas lapisan tetapi Anda dapat meneruskan objek di atas lapisan

  • Anda tidak dapat menyimpan sebuah instance tetapi Anda dapat menyimpan sebuah objek

  • Satu objek dapat memiliki lebih dari satu contoh.

  • Instance akan memiliki definisi kelas dan definisi objek di mana seperti dalam objek hanya akan memiliki definisi objek.

Sintaks Objek:

 Classname var=new Classname();

Tetapi untuk pembuatan contoh itu hanya mengembalikan pointer yang merujuk ke suatu objek, sintaksnya adalah:

 Classname varname;
SwatiKothari
sumber
3

Di java, objek muncul di memori heap. Ini membutuhkan referensi untuk diarahkan dan digunakan dalam aplikasi kita. Referensi memiliki lokasi memori dari objek yang dapat kita gunakan untuk menggunakan objek dalam aplikasi kita. Referensi singkatnya tidak lain adalah nama variabel yang menyimpan alamat dari objek yang dibuat di lokasi memori.

An instanceadalah istilah umum untuk object. FYI, Objectadalah sebuah kelas.

Sebagai contoh,

Class A{

}

A ref = new A();

Untuk potongan kode di atas, ref adalah referensi untuk objek kelas A yang dihasilkan di heap.

Arun
sumber
3

Sejujurnya, saya merasa lebih nyaman dengan definisi blog Alfred :

Objek : objek dunia nyata memiliki 2 karakteristik utama, keadaan dan perilaku. Manusia memiliki status (nama, umur) dan perilaku (berlari, tidur). Mobil memiliki keadaan (kecepatan saat ini, gigi saat ini) dan perilaku (menggunakan rem, mengganti gigi). Objek perangkat lunak secara konseptual mirip dengan objek dunia nyata: mereka juga terdiri dari keadaan dan perilaku terkait. Sebuah objek menyimpan statusnya dalam bidang dan memperlihatkan perilakunya melalui metode.

Kelas : adalah "template" / "cetak biru" yang digunakan untuk membuat objek. Pada dasarnya kelas terdiri dari field, static field, method, static method dan constructor. Field digunakan untuk menampung status kelas (misal: nama objek siswa). Metode digunakan untuk merepresentasikan perilaku kelas (misal: bagaimana sebuah benda siswa akan berdiri). Pembuat digunakan untuk membuat Mesin Virtual baru dari Kelas.

Instance : Instance adalah salinan unik dari Class yang mewakili Object. Ketika sebuah instance baru dari sebuah kelas dibuat, JVM akan mengalokasikan ruang memori untuk instance kelas tersebut.

Diberikan contoh berikut:

public class Person {
    private int id;
    private String name;
    private int age;

    public Person (int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + id;
        return result;
    }

    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Person other = (Person) obj;
        if (id != other.id)
            return false;
        return true;
    }

    public static void main(String[] args) {
        //case 1
        Person p1 = new Person(1, "Carlos", 20);
        Person p2 = new Person(1, "Carlos", 20);

        //case 2
        Person p3 = new Person(2, "John", 15);
        Person p4 = new Person(3, "Mary", 17);
    }
}

Untuk kasus 1, ada dua instance dari class Person, tetapi kedua instance tersebut mewakili objek yang sama.

Untuk kasus 2, ada dua instance dari class Person, tetapi setiap instance mewakili objek yang berbeda.

Jadi kelas, objek dan contoh adalah hal yang berbeda. Objek dan contoh bukanlah sinonim seperti yang disarankan dalam jawaban yang dipilih sebagai jawaban yang benar.

Carlos Casallas
sumber
2

Jika Anda memiliki program yang memodelkan mobil Anda memiliki kelas untuk mewakili mobil, maka dalam Kode Anda dapat mengatakan:

Car someCar = new Car();

someCar sekarang merupakan instance dari kelas Car. Jika program digunakan di bengkel dan someCar mewakili mobil Anda di sistem mereka, maka mobil Anda adalah objeknya.

Jadi Mobil adalah kelas yang dapat mewakili setiap mobil dunia nyata someCar adalah turunan dari kelas Mobil dan someCare mewakili satu objek kehidupan nyata (mobil Anda)

Namun instance dan objek sangat sering digunakan secara bergantian ketika membahas pengkodean

Rune FS
sumber
1
Tegasnya someCaradalah referensi ke instance Mobil. Instance itu sendiri tidak memiliki nama.
Joachim Sauer
2

Semua jenis data yang disimpan dan diproses komputer Anda dalam representasi paling dasar berupa deretan bit. Cara bit tersebut diinterpretasikan dilakukan melalui tipe data. Tipe data bisa primitif atau kompleks. Tipe data primitif adalah - misalnya - int atau double. Mereka memiliki panjang tertentu dan cara penafsiran yang spesifik. Dalam kasus integer, biasanya bit pertama digunakan untuk tanda, yang lain digunakan untuk nilainya.

Tipe data kompleks dapat merupakan kombinasi dari tipe data primitif dan kompleks lainnya dan disebut "Kelas" di Java.

Anda dapat menentukan tipe data kompleks PeopleName yang terdiri dari dua String yang disebut nama depan dan belakang. Setiap String di Java adalah tipe data kompleks lainnya. String sebagai gantinya (mungkin) diimplementasikan menggunakan tipe data primitif char yang Java tahu berapa banyak bit yang mereka ambil untuk disimpan dan bagaimana menafsirkannya.

Saat Anda membuat instance dari tipe data, Anda mendapatkan objek dan komputer Anda menyimpan beberapa memori untuk itu dan mengingat lokasinya dan nama instance itu. Sebuah instance PeopleName dalam memori akan mengambil ruang dari dua variabel String ditambah sedikit lebih banyak untuk pembukuan. Integer membutuhkan 32 bit di Java.

Tipe data kompleks dapat memiliki metode yang ditugaskan padanya. Metode dapat melakukan tindakan pada argumennya atau pada contoh tipe data tempat Anda memanggil metode ini. Jika Anda memiliki dua instance PeopleName yang disebut p1 dan p2 dan Anda memanggil metode p1.getFirstName (), metode ini biasanya mengembalikan nama depan orang pertama tetapi bukan orang kedua.

Kage
sumber
2

Konsep di balik kelas dan objek adalah untuk merangkum logika ke dalam unit pemrograman tunggal. Kelas adalah cetak biru dari objek yang dibuat.

Berikut contoh kelas yang mewakili Mobil:

public class Car {

    int currentSpeed;
    String name;

    public void accelerate() {  
    }

    public void park() {
    }

    public void printCurrentSpeed() {
    }
}

Anda dapat membuat contoh dari objek Car seperti ini:

Car audi = new Car();
Car toyota = new Car();

Saya telah mengambil contoh dari tutorial ini

filip_j
sumber
2

Kelas : Struktur

Objek : Manifestasi Fisik

Contoh : setiap objek dibuat dari kelas

Referensi : Alamat Objek

Abishek M
sumber
1

Kelas

  • Ia memiliki keberadaan logis, yaitu tidak ada ruang memori yang dialokasikan saat dibuat.

  • Ini adalah sekumpulan objek.

  • Kelas dapat dianggap sebagai cetak biru untuk membuat objek.

    • Itu dibuat dengan menggunakan kata kunci kelas

    • Sebuah kelas mendefinisikan metode dan anggota data yang akan dimiliki oleh Objek.


Obyek

  • Ia memiliki keberadaan fisik, yaitu ruang memori dialokasikan ketika dibuat.

  • Ini adalah turunan dari kelas.

  • Objek adalah entitas unik yang berisi anggota data dan fungsi anggota bersama-sama dalam bahasa OOP.

    • Itu dibuat menggunakan kata kunci baru

    • Objek menentukan implementasi metode dan nilai yang akan dimiliki oleh anggota data di kelas.


sumber
1
Ruang dapat dialokasikan saat kelas "dibuat". Ruang tersebut diperlukan untuk variabel statis apa pun yang ditentukan oleh kelas. (Dan "logis" versus "fisik" merentangkannya, karena representasi objek hanyalah bantuan pola bit di beberapa perangkat memori.)
Stephen C
@ StephenC apa yang bisa menjadi perbedaan lainnya?
Lihat Jawaban saya. Pertanyaan ini tidak bisa dijawab dengan baik hanya dengan membicarakan perbedaan.
Stephen C
0

Kelas adalah cetak biru yang dibutuhkan untuk membuat sebuah objek (= instance).

Perbedaan antara objek dan instance adalah, objek adalah benda dan instance adalah relasi.

Dengan kata lain, instance mendeskripsikan hubungan suatu objek dengan kelas tempat objek tersebut dibuat.

Yoji Yamamoto
sumber
-1

Definisi "Objek adalah turunan dari kelas", secara konseptual salah, tetapi benar sesuai implementasi. Sebenarnya fitur berorientasi objek diambil dari kehidupan nyata, untuk memfokuskan pikiran programmer dari lebih banyak ke lebih sedikit. Dalam kehidupan nyata kelas dirancang untuk mengelola objek. Misalnya kita manusia memiliki kasta, agama, kebangsaan dan banyak lagi. Para pemeran, agama, kebangsaan ini adalah kelas-kelas dan tidak ada kehidupan tanpa manusia. Namun dalam implementasinya tidak ada objek tanpa kelas. Objek- Objek adalah entitas diskrit yang memiliki beberapa atribut yang terdefinisi dengan baik. Di sini diskrit berarti sesuatu yang membuatnya unik dari yang lain. Atribut yang terdefinisi dengan baik masuk akal dalam beberapa konteks. Klasifikasi- Klasifikasi objek yang memiliki perilaku atau objek yang sama.

Gaurav Kathuria
sumber
-1

Meskipun jawaban di atas benar, cara berpikir lain tentang Kelas dan Objek adalah dengan menggunakan contoh dunia nyata: Kelas bernama Hewan mungkin berisi objek seperti Kucing, Anjing atau Ikan. Objek dengan judul Alkitab akan menjadi kelas Buku, dll. Kelas umum, objek spesifik. Contoh pemikiran ini membantu saya ketika saya belajar Java.

kurdtpage
sumber
Ya ... tetapi analogi juga bisa membingungkan. Jika Animalitu sebuah kelas dan Catmerupakan sebuah contoh, apa kucing pus kesayangan saya "Fluffy"?
Stephen C
-2

Kelas adalah templat atau tipe. Objek adalah turunan dari kelas.

Sebagai contoh:

public class Tweet {

}

Tweet newTweet = new Tweet();

Tweet adalah kelas dan newTweet adalah objek kelas.

Gagan
sumber
Ini hanyalah kata-kata. Anda tidak benar-benar menjelaskan apa arti kata-kata itu. (Dan pada kenyataannya, kelas Java TIDAK berperilaku seperti template, baik dalam kehidupan nyata atau dengan cara yang dilakukan dalam bahasa seperti Javascript, Python, Ruby, dll.)
Stephen C