Nesnelerin nitelikleri, durumları ve davranışları olduğunu söyleyebilir miyiz?


16

Oracle'ın OOP kavramlarına girişini okuyordum ve şu açıklamaya rastladım:

Gerçek dünyadaki nesneler iki özelliği paylaşır: Hepsinin durumu ve davranışı vardır. Köpeklerin durumu (adı, rengi, cinsi, aç) ve davranışı (havlama, getirme, kuyruk sallama) vardır. Yazılım nesneleri kavramsal olarak gerçek dünyadaki nesnelere benzer: onlar da devlet ve ilgili davranışlardan oluşur.

Bu pasajla ilgili benim sorunum, durumu açıklarken karışımların özniteliklerini de orada oluşturmasıdır. Örneğin, bir köpeğin adı ve rengi onun nitelikleridir, ancak aç veya susuz olması durumlarıdır.

Bence nesnelerin özelliklerini üç parçaya ayırmak daha doğru: nitelikler, durumlar ve davranışlar .

Elbette, bunu bir programlama diline çevirirken, üç katlı bölümün iki katlı hale geldiğini görebiliyorum, çünkü hem öznitelikler hem de durumlar alanlara / değişkenlere depolanırken, davranışlar yöntemlere / fonksiyonlara depolanacak.

Ancak kavramsal olarak konuşursak, 3 şeyin ayrı olması daha mantıklı.

İşte başka bir örnek: bir lambayı düşünün. Hem lamba boyutunun hem de açık olup olmadığını durum olarak söylemek, bence bir gerginlik. Lamba boyutu bir durum değil, bir özelliktir, açık veya kapalı durum ise bir durumdur.

Yoksa bir şey mi kaçırdım?


4
Evet, davranışı simüle etme tekniği olarak özellikleri eksik.
yannis

Yanıtlar:


13

Eğer bir örneğin değişmeyen karakteristikleri için nitelikleri tanımlarsanız, nesnelerin niteliklerden, durumlardan ve davranıştan oluştuğunu haklısınız. Nitekim, bu ayrımı yapmak önemlidir, çünkü yalnızca öznitelikleri içeren (sizin anlamınıza göre) ve devlet olmayan nesneler vardır ; değişmez denir ve programlamada çok faydalıdır.

Bu üç parçalı tanım aslında programlama dillerinde temsil edilir; örneğin, örneğin finalJava'nın anahtar kelimesini veya readonlyC # içindeki anahtar sözcüğü kullanarak örneğin kullanım ömrü boyunca değişmeyebilecek örnek verilerini gösterir.

Ancak, değişmeyen örnek verilerinin genellikle öznitelikler olarak adlandırılmadığını eklemeliyim. Hangi dili kullandığımıza bağlı olarak onlardan 'nihai' veya 'salt okunur' veya 'sabit veri' olarak söz etme eğilimindeyiz. Onlar için uygun terim 'değişmezler' olurdu, ancak o zaman bu kelime bu anlamda sık kullanılmaz; daha çok başka şeyler için kullanılır.


Bunu bir örneğin değişmeyen ve değişen özellikleri olarak düşünmek mantıklıdır. Ve o kadar uzakta olmadığım için mutluyum. Teşekkürler!
Daniel Scocco

Bir imalat veya montaj işlemi sırasında lambanın boyutu bir durum mu olacak?
JeffO

Hayır, bir özellik olacak. (OP kelimesi anlamında.)
Mike Nakis

4
Devlet ve nitelikler arasında temel bir fark yoktur, bu nedenle devleti muhtemelen değişebilir veya değişmez olarak tanımlamak daha kolaydır. (Değişmez) öznitelik ve (değişebilir) duruma sahip olmak yanlış olmasa da (ve birçok anlamda eşdeğerdir), bu ayrım tanımı gereğinden daha karmaşık hale getirir. IMO "devlet" terimi muhtemelen kavramı tanımlamak için en iyi terim olmasa da, "devlet" bir şekilde değişmesi gerektiğini ima ederken, "devlet" - Oracle'ın makalesinde açıklandığı gibi - buna sahip değildir.
Yalan Ryan

Yıllar geçtikçe insanların değişmezliğe karşı tutumunun değiştiğini düşünüyorum; önemini anlayanlar için, değişken ve değişmez bir devlet arasında, farklı bir isim gerektirecek kadar temel bir fark vardır. Çok ilginç bir okuma önerebilir miyim? Eric Lippert - Kodda Harika Maceralar - C # 'de Değişmezlik: Birinci Çeşit: Değişmezlik Çeşitleri
Mike

4

Bence nesnelerin sadece iki özelliği olduğunu söylemek daha doğru. Oracle örneği:

Köpeklerin durumu (adı, rengi, cinsi, aç) ve davranışı (havlama, getirme, kuyruk sallama) vardır. Yazılım nesneleri kavramsal olarak gerçek dünyadaki nesnelere benzer: onlar da devlet ve ilgili davranışlardan oluşur.

İsim, renk, cins ve aç değerlerinin (durum) nesnede özniteliklerde depolanması bir uygulama detayıdır. Gerçekten niteliklere ihtiyacınız yok.

Nitelikleri üçüncü bir karakteristik olarak ekleyecekseniz, nesnelerin (durum gibi) davranışları da değişebileceğinden, yöntemleri dördüncü olarak da eklemeniz gerekir. Durum ve davranış, nesnelerin iki soyut özelliğidir. Nitelikler ve yöntemler, bu kavramların somut uygulamalarıdır.


Bir tilkinin kürk rengi kışın değiştiği için bir duruma dönüşüyor mu?
JeffO

@JeffO Kürk rengi, eski, ıslak, boyalı olduğunda da değişebilir ... herhangi bir sebep. Bu sadece bir nesnenin ömrü boyunca değişebileceği için değil, aynı türdeki farklı nesnelerin bu özellik için farklı değerlere sahip olabileceği için bir durum değildir.
Kertenkele Bill

1

Durum nitelikler ve karşılık gelen değerler kümesidir, bu yüzden benim bakış açımdan haklı değilsiniz (ve basit tanımlamaya gereksiz ek karmaşıklık yaratıyorsunuz).


0

Her şeyi sayısız şekilde sınıflandırabiliriz ve her sınıflandırmada "doğru cevap" olmaz. Sadece sınıflandırma daha derin bir anlayışa veya iletişimi geliştirmeye yol açıyorsa, şeyleri sınıflandırmanın bir yararı vardır. Ekibiniz terimler niteliklerini, durumlarını ve işlevlerini kullanmayı tercih ederse ve bunlar için iyi çalışma tanımlarına sahipse bu, iç iletişimin geliştirilmesine yardımcı olacaktır, ancak bu grubun dışında iletişim kurarken esnek olmanız gerekir.

"Aç" ve "susuz" kavramları temel niteliklerden (örn. Kan şekeri, hidrasyon seviyesi) türetilebilir, bu nedenle devleti, Doğru veya Yanlış olarak temel veya temel değerlere dönüştürebileceğimiz temel özelliklerden türetilen bir meta özellik olarak düşünebiliriz. ilgili temel özelliklerin durumu. Hafif Örneğin, özelliklerini sahip olarak ışığın düşünebildiğim applied_voltageve resistanceve işlevleri voltage_switch()ve shine(). Bu voltage_swich()durumda, bazı girdilerin (örn. Manuel anahtar, ışık, zamanlayıcı, vb.) shine()Bir işlevidir ve applied_voltageve resistance. light_stateNesneyi zihinsel olarak inşa etmeye yardımcı olmak için Ya Doğru ya da Yanlış olarak adlandırılan bir meta niteliği beyan edebiliriz , ama sonunda bu fikirlerin hepsi sadece işimizi düzenlemek için kullandığımız zihinsel yapılar.


-2

Bir nesnenin durumu özniteliklerinde doğrudan veya dolaylı olarak kodlanır . Örneğin, Köpeğinizin susuz olmasını istiyorsanız,

private boolean thirsty;

Alternatif olarak, bunun gibi bir şeye sahip olmasına izin verebilirsiniz.

private Date lastDrinkAt;

ve şimdiki zamanı bir şey içtiği zamanla karşılaştırarak köpek örneğinizin susuz olup olmadığına karar verin.

Her iki durumda da, nesnelerinizin durumu özelliklerinin içinde yatar.

Sonra öznitelikleri olmayan sınıflar vardır, çoğunlukla yardımcı sınıflar. Ancak genellikle bu durumda bunların bir örneğini oluşturmak istemezsiniz.

Bilim adamları ifadeler hakkında akıl yürütme uğruna, genellikle minimallik ilkesine bağlı kalırlar. Sanırım Oracle bu yüzden devletten açıkça bahsetmedi. Özniteliklerin değerinden türetilebilir.


1
Oracle yaptığı açıkça söz durumunu; alıntıyı okuyun. Ve OP açıkça bir nesnenin değişmeyen özellikleri anlamında kelime özelliklerini kullanıyor , bu yüzden onları devletle karıştırmıyor.
Mike Nakis

Onlar hala değişiyor - ister değişiyor olsunlar, ister "nitelikler" veya "üye" olarak adlandırın. Programlama dünyasında, bir nesnenin niteliklerinin yanı sıra durumunu temsil edecek başka bir şey yoktur.
Raku

-3

Gerçek dünya bağlantıları yanlış yönlendirilmiş. İşte nasıl öğretmek (c ++ yaklaşım):

  1. Bilgisayarlar iki farklı depolama biçimini destekler: veri ve kod
  2. veri bit gibi görünüyor 010101010101
  3. kod asm talimatları gibi görünüyor
  4. veri bitlerinin iki farklı değeri vardır, 0 veya 1'dir
  5. veriler veri türlerine göre ayrılmıştır: int i = 1; 0000001 bazı bitlere sadece kısa gösterimdir
  6. kodu bir işlev gibi görünecektir: int f (int a) {dönüş a + a + a; } bazı asm talimatları için kısa gösterimdir
  7. birkaç değişkeniniz olduğunda bunları bir yapıya birleştirirsiniz: int a; float b; AB {int a; float b; };
  8. bazı kod parçalarını birleştirdiğinizde bir sınıf elde edersiniz: class ABf {int a; float b; float sum (float c) const {dönüş a + b + c; }};
  9. Sonra veriler için değeri bulmak için kullanılabilecek değişken isimlerimiz vardır: verilere erişmek için a + b + c.
  10. Ve sonra normal fonksiyon çağrılarımız var: int k = f (10); f işlevi içinde "saklanan" asm talimatlarına erişmek için.
  11. Sonra nesne örnekleri vardır: ABf var;
  12. Üye işlevi şunu çağırır: int k2 = var.sum (10.0);
  13. işlevler int f (int) türlerine sahiptir;
  14. üye işlevler int ABf :: sum (float) türlerine sahiptir;
  15. ABf * türünde bu işaretçi var
  16. a ve b ve c gibi değişkenler bağlama bağlıdır, eğer üye fonksiyonunun içindeyse, bu-> b veya sadece b anlamına gelebilir.
  17. İnt ABf :: sum (float c) üye işlevleri int sum için sadece kısa gösterimdir (ABf * this, float c);
  18. "durum" kelimesi sadece verilerle aynı anlama gelir
  19. "davranış" kelimesi kodla aynı anlama gelir
  20. "öznitelik" kelimesi sadece verilerle aynı anlama gelir.

Yani devlet ve nitelik arasında gerçekten farklı bir şey yok. Sadece rastgele bit koleksiyonu. Onları ayırmak sadece keyfi bir ayrımdır. Bunun takma adının ne olduğunu bilmeniz yeterlidir.

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.