OOP uzmanları için soru. - sayfa 4

 
Igor Makanu :

erişim değiştiricileri, derleme aşamasında hataları tespit etmenizi sağlar

genel olarak, tüm bunlar sınıflarla çalışmayı zorlaştırmaz, kullanmayın, her şeyi herkese açık olarak yazın: , o zaman anlamak daha kolay olacaktır

Not: OOP, sonra kapsülleme, sonra kalıtım hakkında birçok güzel ifade ... hepsi iyi, ancak OOP'nin diğer programlama stillerine göre en önemli avantajı, tüm verilerin (sınıf alanları) depolanması ve bu verilerle çalışma işlevleridir. (sınıf yöntemleri) tek bir yerde (sınıf) - kitaba göre bu kapsüllemedir. Ayrıca , OOP kullanımı görevlere bağlıdır, eğer görev sınıfları ölçeklendirmenize izin veriyorsa, o zaman bir hiyerarşi gerekli olacaktır ve temel sınıflar ve onların mirasçıları olacaktır - bunu kullanıp kullanmamak size bağlıdır

Bir dizi ayrıca bir nesnenin tüm özelliklerini "kapsülleyebilir". Aynı yerde, somut özellikler-işaretçiler aracılığıyla nesneler arasındaki iletişimi kaydetmek mümkündür. Her özellik indekslendiğinden ve değeri belirli bir hücrede saklandığından bir düzen vardır. Nesnelerin kendileri çekirdekte kapsüllenir. En kolay erişim, nesne numarasına ve özellik numarasına göredir. Aynı denetimin nesneleri arasındaki geçişler - işaretçi özellikleri aracılığıyla.
 
Реter Konow :
Bir dizi ayrıca bir nesnenin tüm özelliklerini "kapsülleyebilir". Aynı yerde, somut özellikler-işaretçiler aracılığıyla nesneler arasındaki iletişimi kaydetmek mümkündür. Her özellik indekslendiğinden ve değeri belirli bir hücrede saklandığından bir düzen vardır. Nesnelerin kendileri çekirdekte kapsüllenir. En kolay erişim, nesne numarasına ve özellik numarasına göredir. Aynı denetimin nesneleri arasındaki geçişler - işaretçi özellikleri aracılığıyla.

ilk etapta uygun değil!

Ayrıca, kodun okunabilirliği hakkında yukarıda zaten yazdınız (yukarıda olduğu gibi, hızdan bahsettiniz - yürütme hızı programlama stiline değil başka bir şeye bağlıdır)

burada, genel olarak, başka yerlerde olduğu gibi - denemezseniz, bilemezsiniz, OOP tarzında yazmaya başlayın, belirli eylemler ve belirli sorular görünecektir, bu konuda bir örnek zaten var

AI hakkında konuşuyorsak, o zaman burada verileri onlarla çalışmaktan ayırmanız gerekir, OOP ile bunu yapmak daha kolay olacaktır.

Not: OOP o kadar iyi, örneğin: farklı veri türleri var, MQL'de uzman ayarları olsun ve bu ayarların bloklar halinde tekrarları var, bir ayar bloğu alıyoruz ve sınıf alanlarını tanımlıyoruz. bu ayarları sınıfa aktarın, en kolay yol parametrelerle bir kurucu oluşturmak ve ardından bu uzman ayarlarla çalışan yöntemler yazıyoruz. Bunu bitirdikten sonra, hepimiz ya bir dizi sınıf örneği ya da genel olarak sadece birkaç sınıf örneği ("sınıf türünün değişkenleri") oluştururuz ve hepsi bu - görev birkaç dizi oluşturmadan bir sınıf yazarak çözülür, her diziyi tanımlamanın yollarını oluşturmak, dizilerde veri değişiklikleri yapmak için sadece olmayan bir fonksiyon grubu oluşturmak ve en önemlisi bu çağrı sırasında işlenmemesi gereken verileri bozmamak için ....

ZYZY: IMHO, OOP sadece uygun, miras yoksa OOP kullanmanın faydasız olduğuna dair kesin bir efsane var ... yorumları biliyorum, bensiz ağızda köpük ile bir tartışma olacak

 
Igor Makanu :

ilk etapta uygun değil!

Ayrıca, kodun okunabilirliği hakkında yukarıda zaten yazdınız (yukarıda olduğu gibi, hızdan bahsettiniz - yürütme hızı programlama stiline değil başka bir şeye bağlıdır)

burada, genel olarak, başka yerlerde olduğu gibi - denemezseniz, bilemezsiniz, OOP tarzında yazmaya başlayın, belirli eylemler ve belirli sorular görünecektir, bu konuda bir örnek zaten var

AI hakkında konuşuyorsak, o zaman burada verileri onlarla çalışmaktan ayırmanız gerekir, OOP ile bunu yapmak daha kolay olacaktır.

Not: OOP o kadar iyi, örneğin: farklı veri türleri var, MQL'de uzman ayarları olsun ve bu ayarların bloklar halinde tekrarları var, bir ayar bloğu alıyoruz ve sınıf alanlarını tanımlıyoruz. bu ayarları sınıfa aktarın, en kolay yol parametrelerle bir kurucu oluşturmak ve ardından bu uzman ayarlarla çalışan yöntemler yazıyoruz. Bunu bitirdikten sonra, hepimiz ya bir dizi sınıf örneği ya da genel olarak sadece birkaç sınıf örneği ("sınıf türünün değişkenleri") oluştururuz ve hepsi bu - görev birkaç dizi oluşturmadan bir sınıf yazarak çözülür, her diziyi tanımlamanın yollarını oluşturmak, dizilerde veri değişiklikleri yapmak için sadece olmayan bir fonksiyon grubu oluşturmak ve en önemlisi bu çağrı sırasında işlenmemesi gereken verileri bozmamak için ....

ZYZY: IMHO, OOP sadece uygun, miras yoksa OOP kullanmanın faydasız olduğuna dair kesin bir efsane var ... yorumları biliyorum, bensiz ağızda köpük ile bir tartışma olacak

Uygun ya da değil, öznel bir soru. Verilerin tablo düzenine daha yakınım. Diğerleri - bir salkım üzüm veya ağaç şeklinde. Üçüncüsü - bunun gibi bir şey ... Ama, sözlerini ciddi olarak düşüneceğim ve OOP'de verilerle çalışmanın temel ilkelerini öğrenmeye çalışacağım.
 
Реter Konow :
Uygun ya da değil, öznel bir soru. Verilerin tablo düzenine daha yakınım. Diğerleri - bir salkım üzüm veya ağaç şeklinde. Üçüncüsü - bunun gibi bir şey ... Ama, sözlerini ciddi olarak düşüneceğim ve OOP'de verilerle çalışmanın temel ilkelerini öğrenmeye çalışacağım.
Bir keresinde size bir dizi işaretçiden işaretçi dizilerine iki boyutlu bir tablo olduğunu söylemiştim. Bir liste - satırlar, ilk sütunlarda yatan listeler. Kendi listeleri olabilir. Ve böylece gün batımına kadar. Aradığınız hiyerarşi budur. Ve sadece bir sınıf tarafından yapılır.
 
Реter Konow :

OOP'de bir "nesne", alanlarının (özellikleri) bildirildiği bir sınıfa referanstır. Bir nesne ile, her biri bir dizideki bir hücre olan, numaralandırılmış bir dizi özelliği kastediyorum. Fark bu.

Peter, sınıfın kendisini tanımlarken, sınıfın içinde özellikleri olarak başka sınıfların örnekleri olsa bile, belleğin tahsis edilmediğini açıkça anlamanız gerekir. Bu nedenle, bir sınıfa referans olamaz, sadece bir sınıf nesnesine referans olabilir. Bellek ayırma , bir sınıfın bir örneği (nesnesi) bildirildiğinde (oluşturulduğunda) gerçekleşir.

PS yani programın bir sınıfı varsa, ancak bunun örneği yoksa, derleyici bu sınıfı yok sayar (fark etmez).

ZYY Bir istisna vardır. Varsa, statik yöntemler ve parametreler için bir sınıf tanımlanırken bellek ayrılabilir.
 
Artyom Trishkin :
Bir keresinde size bir dizi işaretçiden işaretçi dizilerine iki boyutlu bir tablo olduğunu söylemiştim. Bir liste - satırlar, ilk sütunlarda yatan listeler. Kendi listeleri olabilir. Ve böylece gün batımına kadar. Aradığınız hiyerarşi budur. Ve sadece bir sınıf tarafından yapılır.

Teoride, evet. Ancak, hiyerarşinin bağlantıları arasındaki geçişlerin (koşullu olarak - tümdengelim ve tümdengelim, yani özelden genele ve tam tersi) zincir boyunca gerçekleştirilmesi için her şeyin düzenlenmesi gerekir. Yani, işaretçilerin sırası, gereksiz "dönüşler" ve "sıçramalar" olmaksızın döngüde herhangi bir (doğru) yönde hareket edebilmek için özel bir şekilde yapılandırılmalıdır. Bu nedenle, işaretçilerin basit bir tablo düzeni muhtemelen çalışmayacaktır.

Katma:

Ama uygun olabilir. Henüz bilmiyorum.

 
Igor Makanu :

bu soruların pratik bir düzleme çevrilmesi gerekiyor, aksi takdirde neyin uygun olduğu ve neyin uygun olmadığı net olmayacak))))

İşte MQL'de yüzlerce kez kullanılan banal bir örnek - yeni bir çubuğun tanımı:

Tamam, bu çalışan bir kod, ama ya 2 zaman diliminde yeni bir çubuk tanımlamam gerekirse? ve terminaldeki tüm TF'leri kullanmak istersem?

OOP'de şöyle bir şey olurdu:

ve şimdi tek yapmam gereken CNewbar sınıfının birkaç örneğini bildirmek - nasıl? en azından bir dizide, en az birkaç değişkende, ancak verileri hemen OOP kullanarak yanlışlıkla yapılan değişikliklerden korudum

Bu sorunu zaten herkese açık olarak çözdüm. Sonuç olarak, tüm sembollerin ve tüm zaman çerçevelerinin bir tablosu oluşturulur ve bunun üzerinden bir döngü içinde yeni bir çubuğun olayları kaydedilir. Bu olayın herhangi bir fonksiyonunun ilk isteğinden sonra bayrağı tablodan silinir. OOP'den ne kadar daha zor - yargılamayı düşünmüyorum. Ama aslında, oldukça basit ve kullanışlı bir çözüm.

 
Nikolai Semko :
Peter, sınıfın kendisini tanımlarken, sınıfın içinde özellikleri olarak başka sınıfların örnekleri olsa bile, belleğin tahsis edilmediğini açıkça anlamanız gerekir. Bu nedenle, bir sınıfa referans olamaz, sadece bir sınıf nesnesine referans olabilir. Bellek ayırma , bir sınıfın bir örneği (nesnesi) bildirildiğinde (oluşturulduğunda) gerçekleşir.
PS yani programın bir sınıfı varsa, ancak bunun örneği yoksa, derleyici bu sınıfı yok sayar (fark etmez).
Bilmiyordum. İlginç. Sorun, OOP kullanımının döngülerdeki hiyerarşinin tüm verileriyle çalışmayı ne kadar kolaylaştıracağıdır. Döngüler, herhangi bir motorun ana mekanizmalarıdır. Döngüler ne kadar iyi çalışırsa, o kadar fazla veri toplanabilir ve daha fazla iş yapılabilir.
 
Bir sınıf nesnesi oluştururken, sınıfın tüm özellikleri (değişkenleri) için bellek ayırmaya ek olarak , yapıcılardan biri başlatılır (birden fazla olabilir). Yapıcılar parametresiz (varsayılan olarak), parametrik (bir sınıfın örneğini oluştururken bazı parametreler belirtildiğinde veya sınıfın başka bir örneği bir sınıf örneğinin parametresi olarak belirtildiğinde bir kopya oluşturucu) olabilir.
 
Реter Konow :
Teoride, evet. Ancak, hiyerarşinin bağlantıları arasındaki geçişlerin (koşullu olarak - tümevarım ve tümdengelim, yani özelden genele ve tam tersi) zincir boyunca gerçekleştirilmesi için her şeyin düzenlenmesi gerekir. Yani, işaretçilerin sırası, gereksiz "dönüşler" ve "sıçramalar" olmaksızın döngüde herhangi bir (doğru) yönde hareket edebilmek için özel bir şekilde yapılandırılmalıdır. Bu nedenle, işaretçilerin basit bir tablo düzeni muhtemelen çalışmayacaktır.
Tüm listeler zaten ikili arama ile donatılmıştır. Ve bu, sıralı numaralandırma değil, istenen özelliğe göre filtreleme anlamına gelir. Sonuç olarak, istenen elemanın indeksini alırız.