Nesne ve örnek arasındaki fark


83

Bahse konu bu tür olmuştur biliyorum istendi önce kavramak (uzantısı tarafından, bazı / çoğu başlayanlar ve benzeri), ama yine de cevap benim için çok belirsiz olduğunu hissediyorum.

Kendime prosedürel ve temel OOP'den daha geniş programlama kavramlarını öğretmeye çalışıyorum. OOP'nin somut kavramlarını anlıyorum (verileri (üyeleri) ve işlevleri (yöntemleri) olan bir sınıf yaparsınız ve daha sonra bu sınıfı gerçekten şeyler yapmak için çalışma zamanında başlatırsınız, bu tür şeyler).

Sanırım bir sınıfın ne olduğu konusunda bir fikrim var ( derleme zamanında kendi benzerliğinde yaratılacak bir örnek için bir tür tasarım planı ). Ama durum buysa, nesne nedir? Ayrıca prototip tabanlı dillerde bunun işleri daha da karıştırabileceğini biliyorum, ama belki de bu yüzden zihnimde nesne ve örnek arasında net bir ayrım olması gerekiyor.

Bunun ötesinde "nesne" ve "örnek" kavramlarıyla mücadele ediyorum. Okuduğum birçok kaynak (SO'daki cevaplar dahil) büyük ölçüde aynı olduklarını ve farkın anlambilimde olduğunu söylüyor. Diğer insanlar ikisi arasında gerçek bir kavramsal fark olduğunu söylüyor.

SO'daki uzmanlar, yeni başlayanların OOP dünyasında ilerlemek için o "aha" anına sahip olmasına yardımcı olabilir mi?

Not: Bu ev ödevi değil, okula gitmiyorum - ancak, ev ödevi yardımı arayan insanlara yardımcı olacağını düşünüyorum.


1
"Tüm örnekler nesne mi?" Gibi bazı ek sorular eklemek isteyip istemediğinizi merak ediyorum. ve "tüm nesneler örnek mi?" Her ikisi de "evet" ise, aynı olduklarını teyit edebiliriz.
WesternGun

Bir sınıfı örneklediğinizde (yeniyi kullanarak), bu örneklenmiş şey bir nesne haline gelir. Bir nesne, kapsülleme, polimorfizm, nesne yönelimli programlamanın soyutlama ilkelerine ve sınıfta tanımlanan örnek üyelerini tüketmek için bir programın etkileşime girdiği gerçek şeye bağlı olabilen bir şeydir. Nesne, örnek üyeler (statik olmayan üyeler) içerir. Dolayısıyla, bir sınıfın örneği bir nesnedir. 'Örnek' kelimesi, doğduğu yerin kökenine atıfta
bulunurken kullanılır,

Yanıtlar:


131

Bir ev tasarımı için bir plan, bir sınıf tanımı gibidir. Bu plandan inşa edilen tüm evler o sınıfın nesneleridir. Belirli bir ev bir örnektir.


6
Ayrıca, memleketimden biraz yerel üne sahip bir cadde var çünkü arka arkaya 8 tane aynı şekilde inşa edilmiş tuğla ev var ("konut geliştirme" kavramı ortaya çıkmadan önce). Böylece bunu çok güzel bir şekilde görselleştirebilirim. "Sınıf" mimarın çizdiği şeydir. Bitmiş evler "nesneler" dir çünkü hepsi aynı şekilde inşa edilmiştir. Her ev bir "örnek" çünkü hepsi o zamandan beri farklı muamele görmüş (ve olmaya da devam edebiliyor) [şimdi taraf: o (].
TCCV

16
Ve Statik Yöntemler, tüm evlerin paylaştığı araçlar gibidir.
WOPR

2
Peki plandan inşa edilmiş bir ev bir örnek değil mi?
Sıcak Licks

1
Bu, sınıf tanımının işgal ettiği ilk anıların örnek olduğu anlamına gelir. oluşturulan tüm nesnelere nesne denir.
Hafiz Shehbaz Ali

6
Nesne ve örnek tamamen aynı değil mi?
Praveen Kumar

42

Gerçek şu ki, nesne yönelimli programlama, genellikle gelişimin felsefi yönü ile bilgisayarın gerçek mekanik işleyişi arasında bir kopukluk yaratarak kafa karışıklığı yaratır. Sizin için ikisini karşılaştırmaya çalışacağım:

OOP'nin temel kavramı şudur: Sınıf >> Nesne >> Örnek.

Sınıf = mavi baskı. Nesne, 'mavi baskıya' (ev gibi) dayanan gerçek bir şeydir. Örnek, nesnenin sanal bir kopyasıdır (ancak gerçek bir kopyası değildir).

Bir "örneğin" daha teknik açıklaması, bunun bir "bellek referansı" veya bir referans değişken olmasıdır. Bu, bir "örneğin" bellekte yalnızcaiçindeki bir nesnenin hafıza adresine sahiptir. Adreslediği nesne, örneğin 'bir örneği' olduğu söylenen nesnenin aynısıdır. Bir nesnenin çok sayıda örneğine sahipseniz, hafızanızdaki farklı yerlerde, hepsinin içinde aynı tam bellek adresine sahip olan ve hepsi aynı tam nesnenin adresleri olan birçok değişkeniniz vardır. Kodunuzda yapabileceğiniz gibi görünse de, bir örneği asla 'değiştiremezsiniz'. Bir örneği 'değiştirdiğinizde' gerçekten yaptığınız şey, orijinal nesneyi doğrudan değiştirmektir. Elektronik olarak, işlemci, orijinal nesnenin verilerini değiştirmeden önce bellekte fazladan bir yerden (referans değişkeni / örnek) geçer.

İşlem şu şekildedir: işlemci >> örneğin bellek konumu >> orijinal nesnenin bellek konumu.

Hangi örneği kullandığınızın önemli olmadığını unutmayın - sonuç her zaman aynı olacaktır. TÜM örnekler, bellek konumlarında - nesnenin bellek adresinde - aynı kesin bilgileri tutmaya devam edecek ve yalnızca nesne değişecektir.

Sınıf ve nesne arasındaki ilişki, felsefi olarak anlaşılması en kolay olmasına rağmen biraz daha kafa karıştırıcıdır (mavi baskı >> ev). Nesne, bellekte bir yerde tutulan gerçek verilerse, 'sınıf' nedir? Mekanik olarak nesnenin sınıfın tam bir kopyası olduğu ortaya çıktı. Yani sınıf, bellekte başka bir yerde, nesnenin sahip olduğu bilgilerin aynısını tutan başka bir değişkendir. İlişkiler arasındaki farka dikkat edin:

Nesne, sınıfın bir kopyasıdır . Örnek, nesnenin bellek adresini tutan bir değişkendir.

Ayrıca aynı sınıftan birden çok nesneye ve ardından bu nesnelerin her birinin birden çok örneğine sahip olabilirsiniz. Bu durumlarda, her nesnenin örnek kümesi değer olarak eşdeğerdir, ancak nesneler arasındaki örnekler değildir. Örneğin:

A Sınıfından A Sınıfı, Object1, Object2 ve Object3 olsun.

// Nesne1, nesne2 ve nesne3 ile aynı tam değere sahiptir, ancak bellekte farklı yerlerdedir.

Object1'den >> obj1_Instance1, obj1_Instace2, obj1_Instance3

// tüm bu örnekler aynı zamanda değer olarak ve bellekteki farklı yerlerde eşdeğerdir. Değerleri = Object1.MemoryAddress.

vb.

Türleri tanıtmaya başladığınızda işler daha da karışır. Aşağıda, c # 'dan türlerin kullanıldığı bir örnek verilmiştir:

// Kişi sınıfının var olduğunu varsayalım Kişi john = new Kişi ();

Aslında, bu kodu iki bölüme ayırırsanız analiz etmesi daha kolaydır:

Person john;
john = new Person();

Teknik konuşmada, ilk satır 'bir tür değişkeni bildirirKişi. Ama bu ne anlama geliyor? Genel açıklama, artık yalnızca bir Person nesnesini tutabilen boş bir değişkenim olduğudur. Ama bir dakika bekleyin - bu boş bir değişken! Bu değişkenlerin hafıza konumunda hiçbir şey yok. "Tiplerin" mekanik olarak anlamsız olduğu ortaya çıktı. Türler başlangıçta verileri yönetmenin bir yolu olarak icat edildi, başka bir şey değil. İnt, str, chr gibi ilkel türleri bildirseniz bile (başlatmadan), bilgisayarda hiçbir şey olmaz. Programlamanın bu garip sözdizimsel yönü, insanların sınıfların nesnelerin planı olduğu fikrinin bir parçasıdır. OOP'ler, temsilci türleri, olay işleyicileri vb. İle türlerle daha da kafa karıştırıcı hale geldi. Onlara çok fazla odaklanmamaya çalışırım ve hepsinin yanlış bir isim olduğunu hatırlayın.

İkinci satır da biraz kafa karıştırıcı çünkü aynı anda iki şey yapıyor:

Sağ taraftaki "yeni Kişi ()" ilk olarak değerlendirilir. Person sınıfının yeni bir kopyasını oluşturur - yani yeni bir nesne oluşturur.

Sol taraf "john =" daha sonra değerlendirilir. John'u aynı satırın sağ tarafında oluşturulan nesnenin bellek adresini veren bir referans değişkenine dönüştürür.

İyi bir geliştirici olmak istiyorsanız, hiçbir bilgisayar ortamının felsefi ideallere dayalı olarak çalışmadığını anlamak önemlidir. Bilgisayarlar o kadar mantıklı bile değil - gerçekten sadece temel boole devreleri (çoğunlukla NAND ve OR) kullanılarak birbirine yapıştırılmış büyük bir kablo koleksiyonu.


32

Kelimesi Sınıf gelen Sınıflandırma ( A Kategori şey konduğu Şimdi hepimiz duyduk,) Sınıf bir Blueprint gibi, ama ne bu tam ortalama? Bu, Sınıfın belirli bir Kategorinin Açıklamasına sahip olduğu anlamına gelir ( Sınıf, Nesne ve Örnek arasındaki farkı Java kullanarak örnekle göstermek istiyorum ve okuyuculardan onu okurken bir Hikaye gibi görselleştirmelerini rica ediyorum. java'ya aşina değiller önemli değil ) Öyleyse , HumanBeing adlı bir Kategori oluşturarak başlayalım , böylece Java programı bunu aşağıdaki gibi ifade edecek

class HumanBeing{ 
   /*We will slowly build this category*/ 
}

Şimdi bir HumanBeing'in genel olarak İsim , Yaş , Boy , Kilo olarak sahip olduğu nitelikler şimdilik benliğimizi bu dört nitelikle sınırlayalım, onu Kategorimize ekleyelim.

class HumanBeing{
    private String Name;
    private int Age;
    private float Height;
    private float Weight; 

   /*We still need to add methods*/

}

Şimdi her kategorinin bir davranışı vardır, örneğin Köpek kategorisi havlama, getirme, yuvarlanma vb ... gibi bir davranışa sahiptir. Benzer şekilde, İnsanBeing kategorimiz de belirli davranışlara sahip olabilir, örneğin HumanBeing'e adınız / yaşınız / kilonuzun ne olduğunu sorduğumuzda yükseklik? Bize adını / yaşını / kilosunu / boyunu vermeli, bu yüzden java'da bunu aşağıdaki gibi yapıyoruz

class HumanBeing{
    private String Name;
    private int Age;
    private float Height;
    private float Weight;  

    public HumanBeing(String Name,int Age,float Height,float Weight){
       this.Name = Name;
       this.Age  = Age;
       this.Height = Height;
       this.Weight = Weight;
    }

    public String getName(){
      return this.Name;
    }

    public int getAge(){
      return this.age;
    }

    public float getHeight(){
      return this.Height;
    }

    public float getWeight(){
      return this.Weight;
    }
}

Şimdi HumanBeing kategorimize davranış ekledik , böylece adını, yaşını, boyunu, kilosunu sorabiliriz, ancak bu ayrıntıları kimden soracaksınız, çünkü class HumanBeingsadece bir kategori, bu bir plandır, örneğin bir Mimar bir plan yapar. Yapmak istediği binanın bir kâğıdı, şimdi plana göre canlı olarak devam edemeyiz ( binanın tanımı ) ancak inşa edildikten sonra binada yaşayabiliriz. Bu yüzden burada bizim kategorimizden bir insan yapmalıyız ki bu yukarıda anlattık, peki bunu Java'da nasıl yapıyoruz

class Birth{
  public static void main(String [] args){
    HumanBeing firstHuman = new HumanBeing("Adam",25,6.2,90);    
  }
}

Şimdi yukarıdaki örnekte yaş boy kilo adıyla ilk insanımızı yarattık, öyleyse yukarıdaki kodda tam olarak ne oluyor? . Biz edilir başlatmasını bizim kategori humanbeing bizim sınıf oluşturulduğunda yani bir Object

Not: Nesne ve Örnek Eşanlamlı Değil Bazı durumlarda Nesne ve Örnek Eşanlamlı gibi görünür ancak bunlar değildir, her iki durumu da vereceğim

Durum 1: Nesne ve Örnek Eşanlamlılar gibi görünüyor Kategorimizin bir Nesnesi yığın hafızasında yaratıldığını ve ona bir adres tahsis edildiğini ve bu adrese bir referans tuttuğunu
söylediğimizde biraz detaylandırmama izin verin , şimdi bu Object İnsan Varlığının Bir Nesnesi ve ayrıca Bir İnsan Varlığı Örneği . Burada Nesneler ve Örne Eşanlamlı gibi görünüyor, kendimi tekrar edeceğim , eşanlamlı değillerHumanBeing firstHuman = new HumanBeing("Adam",25,6.2,90); firstHuman

Hikayemize Devam Edelim, İlk İnsanımızı yarattık, şimdi onun adını, yaşını, boyunu, kilosunu sorabiliriz, Java'da böyle yapıyoruz

class Birth{
  public static void main(String [] args){
    HumanBeing firstHuman = new HumanBeing("Adam",25,6.2,90);
    System.out.println(firstHuman.getName());
    System.out.println(firstHuman.getAge());
    ...
    ...  
  }
}

bu yüzden ilk insana sahibiz ve ilk insanlığımıza bir nitelik kazandırarak tüyleri hareket ettirelim, hadi onu Doktor yapalım, bu yüzden Doktor adında bir kategoriye ihtiyacımız var ve Doktorumuza biraz davranış vermeliyiz, bu yüzden java'da aşağıdaki gibi yapıyoruz

class Doctor extends HumanBeing{
   public Doctor(String Name,int Age,float Height,float Weight){
      super(Name,Age,Height,Weight);
   }
   public void doOperation(){
    /* Do some Operation*/ 
   }

   public void doConsultation(){
    /* Do so Consultation*/
   }
}  

Burada , kodda bir miktar yeniden kullanılabilirlik getiren Kalıtım kavramını kullandık , Her Doktor her zaman önce bir İnsan Olacaktır, bu nedenle Bir Doktor, yeniden yazmak yerine İnsanBeing'den Miras alınacak Adı, Yaşı, Ağırlığı, Boyu olacaktır. Henüz yaratmadığımız bir doktorun açıklamasını yazdığımıza dikkat edin, bu yüzden doktorumuzda oluşturalım.class Birth

class Birth{
  public static void main(String [] args){
    Doctor firstDoctor = new Doctor("Strange",40,6,80);
    .......
    .......
    /*Assume some method calls , use of behaviour*/
    .......
    .......    
  }
}

Durum 2: Nesne ve Örnek Eşanlamlı Değildir
Yukarıdaki kodda, Doktor kategorimizi Örneklendirdiğimizi ve onu hayata geçirdiğimizi görselleştirebiliriz, yani sadece Doktor kategorisinin bir Nesnesini oluşturuyoruz , Bildiğimiz gibi Nesnenin Yığın Belleğinde oluşturulduğunu biliyoruz. ve firstDoctoryığın üzerinde bu Nesneye bir referans tutar;

Bu özel Nesne firstDoctoraşağıdaki gibidir (lütfen firstDoctornesneye bir referans içerdiğini unutmayın, nesnenin kendisi değildir)

  1. firstDoctorolduğu bir nesneclass Doctor Ve A örneğineclass Doctor
  2. firstDoctorolduğu Değil bir nesneclass HumanBeing Ama bir örneğiniclass HumanBeing

Dolayısıyla, belirli bir Nesne, belirli bir sınıfın bir örneği olabilir, ancak belirli bir sınıfın nesnesi olması gerekmez

Sonuç:

Bir Nesnenin, belirli bir Kategorinin tüm özelliklerini karşılıyorsa, belirli bir Kategorinin Örneği olduğu söylenir

Gerçek dünya örneği şu şekilde olacak, ilk önce İnsan olarak doğuyoruz, bu yüzden bizi İnsanın Nesnesi olarak hayal edin, şimdi büyüdüğümüzde sorumluluklar alıyoruz ve yeni beceriler öğreniyoruz ve yaşamda farklı roller oynuyoruz. , anne şimdi biz aslında neyiz biz İnsan Nesnesi olduğumuzu söyleyebiliriz Ama Kardeş, kız, vb.

Umarım bu yardımcı olur

Teşekkür ederim


5
... ve neden bu cevaba yalnızca 3 olumlu oyumuz var?
Pratik Ambani

13

görüntü açıklamasını buraya girin

Nesneler hafızadaki şeylerdir, örnekler ise onlara referans olan şeylerdir. Yukarıdaki resimde:

  • std (örnek) -> Öğrenci Nesnesi (sağda)
  • std1 (örnek) -> Öğrenci Nesnesi (sol)
  • std2 (örnek) -> Öğrenci Nesnesi (sol)
  • std3 (örnek) -> nesne yok (boş)

4
Bu harika. Düşük seviyeye ulaşması gerçekten hoşuma gidiyor. Bunu benzetmeden daha çok sevip sevmediğim üzerine gidip geliyorum. Sanırım ikisini birlikte bilmek gerçekten ihtiyacım olan şey. oy verin, ancak cevabı size verebilir miyim emin değilim çünkü zaten Joe'ya verildi. Yine de teşekkürler. Bu çok temizliyor.
TCCV

Peki, örnek bir nesneye işaretçi mi? (örnek == bellek adresli değişken?)
Stano

6
Truong, cevabın yanlış ve kafa karıştırıcı. Aslında bir örnek, bir temel sınıf nesnesinden türetilen bir nesnedir. Örnek == nesne. Bu terminoloji, örneğin bu veya bu cevapta iyi açıklanmıştır .
Stano

@jww: Resim, şu anda 404 olan math.hws.edu/javanotes/c5/objectsInHeap.png için bir bağlantıdır . Muhtemelen yayınlandığı sırada görünürdü.
Matt Burland

6

Bir nesne, bir sınıfın örneğidir (sınıf tabanlı diller için).

Sanırım bu bulabileceğim en basit açıklama.


1
Açıklamanızın okuma şeklimle ilgili olduğunu kabul ediyorum, ancak ikisi arasında bir ayrım yapan çevrimiçi birçok giriş var. Bu tür bir soru akılda bir dil olmadan cevaplanamaz mı bilmiyorum (vay bir meta-soru, bu soru bir dil ile somutlaştırılmadan kullanılamayacak bir sınıf, lol).
TCCV

6

Bir sınıf bir nesneyi tanımlar. Birçok dilde daha da ileri gidebilir ve bir arabirimin nesneler arasındaki ortak öznitelikleri ve yöntemleri tanımladığını söyleyebilirsiniz.

Nesne, gerçek dünyada bir şeyi temsil edebilen bir şeydir. Nesnenin gerçek dünyada gerçekten bir şeyi temsil etmesini istediğinizde, bu nesnenin somutlaştırılması gerekir. Örnekleme, bu belirli nesnenin özelliklerini (niteliklerini) genellikle bir kurucu aracılığıyla tanımlamanız gerektiği anlamına gelir.

Bu özellikleri tanımladıktan sonra, artık bir nesnenin bir örneğine sahipsiniz.

Umarım bu işleri çözer.


Sanırım bu temelde Joe'nun söylediğini söylüyor. Yanlışsam düzelt.
TCCV

3
Yukarıda Joe, plandan inşa edilen tüm evlerin nesne olduğunu söylüyor. Doğru. Ve belirli bir evin bir örnek olduğunu söylüyor. Doğru. Ancak, tüm evler birer örnektir ve belirli bir ev de bir nesnedir. Hiç olmadığı yerde bir fark yaratıyordu. Kodda, onu oluşturduğumuz anda bir nesne ile bir örnek arasında ayrım yapmak gerekir. Aslında inşa edildiğinde somutlaştırıldığını söylüyoruz. Yaygın bir soru şu olabilir: Nesneyi somutlaştırmayı hatırladınız mı? yani. Bir nesneyi bildirdikten sonra kurucuyu çağırmayı unuttuysanız.
Derek Litz

1
ah, bu iyi bir ayrım. Başka bir deyişle, örnek oluşturulmuş bir nesnedir (yani, kurucu çağırdı).
TCCV

3

"Bir sınıf, örnekleri adı verilen bir dizi nesneyi tanımlar." - Xerox Öğrenim Araştırma Grubu, "The Smalltalk-80 Sistemi", Byte Magazine Cilt 06 Sayı 08, s39, 1981.


2

Nesne nedir?

Bir nesne, bir sınıfın bir örneğidir. Nesne, çevrenizdeki gerçek dünya örneklerini bularak en iyi şekilde anlaşılabilir. Masaüstünüz, dizüstü bilgisayarınız, arabanız, bir nesnenin gerçek dünya örnekleridir.

Gerçek dünya nesnesi iki özelliği paylaşır, hepsinin durumu ve davranışı vardır. İnsanlar da bir nesneye iyi bir örnektir, Biz insanların durumu / nitelikleri vardır - isim, boy, ağırlık ve davranış - yürüyün, koşun, konuşun, uyuyun, kod: P.

Sınıf nedir?

Sınıf, bir nesnenin ayrıntılarını açıklayan bir plan veya şablondur. Bu ayrıntılar viz

isim öznitelikleri / durum işlemleri / yöntemleri

class Car 
{
    int speed = 0;
    int gear = 1;

    void changeGear(int newGear)
    {
        gear = newGear;
    }

    void speedUp(int increment) 
    {
        speed = speed + increment;
    }

    void applyBrakes(int decrement) 
    {
        speed = speed - decrement;
    }
}

, Alanları Yukarıdaki örneği ele alalım speedve gearnesnenin durumunu temsil edecek, ve yöntemler changeGear, speedUpve applyBrakesdış dünya ile Araba nesnesinin davranışını tanımlar.

Referanslar:


1

Genelde iki şey olduğunu belirtmenin önemli olduğunu düşünüyorum. Plan ve kopyalar. İnsanlar bu farklı şeyleri isimlendirme eğilimindedir; sınıflar, nesneler, örnekler insanların onlar için kullandıkları isimlerden sadece birkaçıdır. Önemli olan, isimleri ne olursa olsun, planın ve kopyalarının olmasıdır. Bu ikisi için zaten anlayışınız varsa, kafanızı karıştıran diğer şeylerden kaçının.


0

Elmaları elmalarla karşılaştıralım. Hepimiz bir elmanın ne olduğunu biliyoruz. Ne gibi görünüyor. Nasıl bir tadı var. Bu bir sınıftır. Bir şeyin tanımıdır. Bir şey hakkında bildiğimiz şey budur.

Şimdi git bir elma bul. Bu bir örnektir. Görebiliyoruz. Tadına bakabiliriz. Onunla bir şeyler yapabiliriz. Sahip olduğumuz şey bu.

Sınıf = Bir şey hakkında bildiklerimiz. Bir tanım.

Object / Instance = Sahip olduğumuz ve onunla bir şeyler yapabileceğimiz tanıma uyan bir şey.


0

Bazı durumlarda, "nesne" terimi bir örneği tanımlamak için kullanılabilir, ancak diğer durumlarda bir örneğe yapılan referansı açıklamak için kullanılır . "Eşgörünüm" terimi yalnızca gerçek durumu ifade eder.

Örneğin, bir Liste nesnelerin bir koleksiyonu olarak tanımlanabilir, ancak gerçekte içerdiği şey nesne örneklerine yapılan referanslardır.


Öyleyse bu durumda, referans yalnızca örneğe bağlantı içeren bir yer tutucusudur? Bir bağlantı, hafıza adresi gibi bir şey olabilir mi?
TCCV

0

Bir sınıfın tanımına "Soyut Veri Türü" nün eşit olduğu fikrini her zaman sevmişimdir . Yani, bir sınıfı tanımladığınızda yeni bir tür "bir şey", onun veri türü temsilini, ilkeller ve diğer "bazı şeyler" açısından ve davranışları işlevler ve / veya yöntemler açısından tanımlıyorsunuz demektir. (Genellik ve biçimcilik için özür dilerim)

Bir sınıfı tanımladığınızda, özellikleri ve davranışıyla belirli varlıkları tanımlamak için yeni bir olasılık açarsınız, ondan belirli bir nesneyi başlattığınızda ve / veya yarattığınızda, aslında bu olasılığı somutlaştırırsınız .

Bazen nesne ve örnekler terimleri birbirinin yerine kullanılabilir. Bazı OOP uzmanları her şeyin bir nesne olduğunu iddia edecek, şikayet etmeyeceğim, ancak gerçek OOP dünyasında biz geliştiriciler iki kavram kullanıyoruz:

  1. Sınıf: Soyut Veri Diğer ADT'yi türetebileceğiniz ve nesneler oluşturabileceğiniz örnek.
  2. Nesneler: Örnekler olarak da adlandırılır, belirli bir Soyut Veri Türü ile temsil edilen veri yapıları ve işlevlerinin belirli örneklerini temsil eder.

0

Nesne Yönelimli Programlama bir sistem metaforudur programınızın işlemesi gereken bilgileri programınızı geliştirmenizi kolaylaştıracak şekilde düzenlemenize yardımcı . OOP kullanarak programlamayı seçtiğinizde, OOP-Googles'ınızı alırsınız ve mesajlar göndererek kendi aralarında işbirliği yapan birçok nesne kadar gerçek dünyanın sorununu göreceğinize karar verirsiniz. Bir Adamın Araba sürdüğünü görmek yerine, bir Adamın arabaya arabanın ne yapmasını istediğini belirten bir mesaj gönderdiğini görürsünüz. Araba büyük bir nesnedir ve bu mesaja sürücünün mesajda yapmasını söylediği şeye düzgün bir şekilde cevap verebilmek için motoruna veya tekerleğine bir mesaj göndererek cevap verecektir.

Sistem metaforunuzu oluşturduktan ve tüm gerçekliği mesaj gönderen nesneler olarak gördükten sonra, gördüğünüz her şeyi sorun etki alanınızla ilgili olan PC'ye koymaya karar verirsiniz. Orada, farklı kartları kullanan birçok Guy olduğunu fark ediyorsunuz ve her birinin davranışını ayrı ayrı programlamak anlamsız çünkü hepsi aynı şekilde davranıyor ... Yani iki şey söyleyebilirsiniz:

  • Bu adamların hepsi aynı şekilde davranıyor, bu yüzden dünyadaki tüm Sürücülerin kime davrandığını belirleyen Sürücü adlı bir sınıf oluşturacağım çünkü hepsi aynı şekilde davranıyor. (Ve sınıf tabanlı OOP kullanıyorsunuz)
  • Ya da Hey diyebilirsiniz! İkinci Sürücü, biraz daha hızlı gitmeyi sevmesi dışında, ilk Sürücü ile aynı şekilde davranır. Ve üçüncü Sürücü, araç kullanırken zikzak çizmeyi sevmesi dışında, ilk Sürücü ile aynı şekilde davranır. (Ve prototip tabanlı OOP kullanıyorsunuz).

Sonra bilgisayara tüm Sürücülerin nasıl davrandığına (veya ilk sürücünün nasıl davrandığına ve ikinci ve üçüncü sürücünün bundan nasıl farklı olduğuna) ilişkin bilgileri girmeye başlarsınız ve bir süre sonra programınızı alırsınız ve kodu kullanarak Gerçek dünyada gördüğünüz sürücülere karşılık vermek için o bilgisayarın içinde kullandığınız model olan üç sürücü oluşturun. PC'nin içinde oluşturduğunuz bu 3 sürücü, prototipin örnekleridir (aslında ilki prototiptir, ilki, nesneleri nasıl modellediğinize bağlı olarak prototipin kendisi olabilir) veya oluşturduğunuz sınıftır. Örnek ve nesne arasındaki fark, nesnenin gerçek dünyada kullandığınız metafor olmasıdır. Adam ve arabayı kendi aralarında işbirliği yapan nesneler olarak görmeyi seçersiniz (onları örnek olarak gördüğünüzü söylemek yanlış olur). Ve sonra onu kodunuzu oluşturmak için ilham kaynağı olarak kullanırsınız. Örnek, yalnızca prototipi veya sınıfı oluşturduktan sonra programınızda bulunur. "Nesneler", gerçek dünyayı programla birleştirmek için kullandığınız eşlemeden dolayı bilgisayarın dışında bulunur. Guy'ı, PC'de oluşturduğunuz Sürücü örneğiyle birleştirir. Dolayısıyla, nesne ve örnek son derece ilişkilidir, ancak tam olarak aynı değildir (örnek, programdaki bir nesnenin "ayağı" ve diğer "bacak" gerçek dünyadaki).


0

Sanırım en iyi cevap çoktan verildi.

Sınıflar planlardır ve nesneler binalar veya bu planın örnekleri benim için hile yaptı.

Bazen, nesnelerin şablonu kullanan belgeler iken, sınıfların şablonlar (MS Word'de olduğu gibi) olduğunu düşünmek isterim.


0

Bu konudaki daha önce verilen örneklerden birinin uzatılması ...

Bir senaryo düşünün - Bir mahalleye konut amaçlı 5 konut yapılması gerekliliği vardır. 5 evin tamamı ortak bir inşaat mimarisine sahiptir. İnşaat mimarisi bir sınıftır . Ev bir nesnedir . İçinde insanların kaldığı her ev bir örnektir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.